示例#1
0
/* Print records with record numbers FROM to TO to OUTFP.  */
int
_keybox_dump_cut_records (const char *filename, unsigned long from,
                          unsigned long to, FILE *outfp)
{
  FILE *fp;
  KEYBOXBLOB blob;
  int rc;
  unsigned long recno = 0;

  if (!(fp = open_file (&filename, stderr)))
    return gpg_error_from_syserror ();

  while ( !(rc = _keybox_read_blob (&blob, fp)) )
    {
      if (recno > to)
        break; /* Ready.  */
      if (recno >= from)
        {
          if ((rc = _keybox_write_blob (blob, outfp)))
            {
              fprintf (stderr, "error writing output: %s\n",
                       gpg_strerror (rc));
              goto leave;
            }
        }
      _keybox_release_blob (blob);
      recno++;
    }
  if (rc == -1)
    rc = 0;
  if (rc)
    fprintf (stderr, "error reading '%s': %s\n", filename, gpg_strerror (rc));
 leave:
  if (fp != stdin)
    fclose (fp);
  return rc;
}
示例#2
0
文件: kbxutil.c 项目: 0ndorio/gnupg
static void
import_openpgp (const char *filename, int dryrun)
{
    gpg_error_t err;
    char *buffer;
    size_t buflen, nparsed;
    unsigned char *p;
    struct _keybox_openpgp_info info;
    KEYBOXBLOB blob;

    buffer = read_file (filename, &buflen);
    if (!buffer)
        return;
    p = (unsigned char *)buffer;
    for (;;)
    {
        err = _keybox_parse_openpgp (p, buflen, &nparsed, &info);
        assert (nparsed <= buflen);
        if (err)
        {
            if (gpg_err_code (err) == GPG_ERR_NO_DATA)
                break;
            if (gpg_err_code (err) == GPG_ERR_UNSUPPORTED_ALGORITHM)
            {
                /* This is likely a v3 key packet with a non-RSA
                   algorithm.  These are keys from very early versions
                   of GnuPG (pre-OpenPGP).  */
            }
            else
            {
                fflush (stdout);
                log_info ("%s: failed to parse OpenPGP keyblock: %s\n",
                          filename, gpg_strerror (err));
            }
        }
        else
        {
            if (dryrun)
                dump_openpgp_key (&info, p);
            else
            {
                err = _keybox_create_openpgp_blob (&blob, &info, p, nparsed,
                                                   NULL, 0);
                if (err)
                {
                    fflush (stdout);
                    log_error ("%s: failed to create OpenPGP keyblock: %s\n",
                               filename, gpg_strerror (err));
                }
                else
                {
                    err = _keybox_write_blob (blob, stdout);
                    _keybox_release_blob (blob);
                    if (err)
                    {
                        fflush (stdout);
                        log_error ("%s: failed to write OpenPGP keyblock: %s\n",
                                   filename, gpg_strerror (err));
                    }
                }
            }

            _keybox_destroy_openpgp_info (&info);
        }
        p += nparsed;
        buflen -= nparsed;
    }
    xfree (buffer);
}