diff options
| author | Werner Koch <[email protected]> | 2009-07-07 14:17:39 +0000 | 
|---|---|---|
| committer | Werner Koch <[email protected]> | 2009-07-07 14:17:39 +0000 | 
| commit | 43427b0c91511abf58fab928268fa61d1ad110b9 (patch) | |
| tree | b80e88d3766964ebe0f33a58a4244b4e9fa7d048 /tests/run-export.c | |
| parent | Typo fix. (diff) | |
| download | gpgme-43427b0c91511abf58fab928268fa61d1ad110b9.tar.gz gpgme-43427b0c91511abf58fab928268fa61d1ad110b9.zip | |
Move gpg test programs to the top test directory.
Diffstat (limited to 'tests/run-export.c')
| -rw-r--r-- | tests/run-export.c | 161 | 
1 files changed, 161 insertions, 0 deletions
| diff --git a/tests/run-export.c b/tests/run-export.c new file mode 100644 index 00000000..8dddb5bc --- /dev/null +++ b/tests/run-export.c @@ -0,0 +1,161 @@ +/* pgp-export.c  - Helper to run an export command +   Copyright (C) 2008, 2009 g10 Code GmbH + +   This file is part of GPGME. +  +   GPGME is free software; you can redistribute it and/or modify it +   under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of +   the License, or (at your option) any later version. +    +   GPGME is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. +    +   You should have received a copy of the GNU Lesser General Public +   License along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +/* We need to include config.h so that we know whether we are building +   with large file system (LFS) support. */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <gpgme.h> + +#define PGM "run-export" + +#include "run-support.h" + + +static int verbose; + + +static int +show_usage (int ex) +{ +  fputs ("usage: " PGM " [options] USERIDS\n\n" +         "Options:\n" +         "  --verbose        run in verbose mode\n" +         "  --extern         send keys to the keyserver (TAKE CARE!)\n" +         , stderr); +  exit (ex); +} + +int  +main (int argc, char **argv) +{ +  int last_argc = -1; +  gpgme_error_t err; +  gpgme_ctx_t ctx; +  gpgme_key_t key; +  gpgme_keylist_result_t result; +  gpgme_key_t keyarray[100]; +  int keyidx = 0; +  gpgme_data_t out; +  gpgme_export_mode_t mode = 0; + +  if (argc) +    { argc--; argv++; } + +  while (argc && last_argc != argc ) +    { +      last_argc = argc; +      if (!strcmp (*argv, "--")) +        { +          argc--; argv++; +          break; +        } +      else if (!strcmp (*argv, "--help")) +        show_usage (0); +      else if (!strcmp (*argv, "--verbose")) +        { +          verbose = 1; +          argc--; argv++; +        } +      else if (!strcmp (*argv, "--extern")) +        { +          mode |= GPGME_KEYLIST_MODE_EXTERN; +          argc--; argv++; +        } +      else if (!strncmp (*argv, "--", 2)) +        show_usage (1); +       +    }           +  +  if (!argc) +    show_usage (1); + +  init_gpgme (GPGME_PROTOCOL_OpenPGP); + +  err = gpgme_new (&ctx); +  fail_if_err (err); +  gpgme_set_protocol (ctx, GPGME_PROTOCOL_OpenPGP); + +  /* Lookup the keys.  */ +  err = gpgme_op_keylist_ext_start (ctx, (const char**)argv, 0, 0); +  fail_if_err (err); +     +  while (!(err = gpgme_op_keylist_next (ctx, &key))) +    { +      printf ("keyid: %s  (fpr: %s)\n", +              key->subkeys?nonnull (key->subkeys->keyid):"?", +              key->subkeys?nonnull (key->subkeys->fpr):"?"); + +      if (keyidx < DIM (keyarray)-1) +        keyarray[keyidx++] = key; +      else +        { +          fprintf (stderr, PGM": too many keys" +                   "- skipping this key\n"); +          gpgme_key_unref (key); +        } +    } +  if (gpg_err_code (err) != GPG_ERR_EOF) +    fail_if_err (err); +  err = gpgme_op_keylist_end (ctx); +  fail_if_err (err); +  keyarray[keyidx] = NULL; + +  result = gpgme_op_keylist_result (ctx); +  if (result->truncated) +    { +      fprintf (stderr, PGM ": key listing unexpectedly truncated\n"); +      exit (1); +    } + +  /* Now for the actual export.  */ +  if ((mode & GPGME_KEYLIST_MODE_EXTERN)) +    printf ("sending keys to keyserver\n"); + +  err = gpgme_data_new (&out); +  fail_if_err (err); + +  gpgme_set_armor (ctx, 1); +  err = gpgme_op_export_keys (ctx, keyarray, mode,  +                              (mode & GPGME_KEYLIST_MODE_EXTERN)? NULL:out); +  fail_if_err (err); + +  fflush (NULL); +  if (!(mode & GPGME_KEYLIST_MODE_EXTERN)) +    { +      fputs ("Begin Result:\n", stdout); +      print_data (out); +      fputs ("End Result.\n", stdout); +    } + +  /* Cleanup.  */ +  gpgme_data_release (out); + +  for (keyidx=0; keyarray[keyidx]; keyidx++) +    gpgme_key_unref (keyarray[keyidx]); + +  gpgme_release (ctx); +  return 0; +} | 
