From 43427b0c91511abf58fab928268fa61d1ad110b9 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 7 Jul 2009 14:17:39 +0000 Subject: Move gpg test programs to the top test directory. --- tests/ChangeLog | 13 +++ tests/Makefile.am | 5 +- tests/gpg/Makefile.am | 3 +- tests/gpg/pgp-export.c | 161 ---------------------------------- tests/gpg/pgp-import.c | 129 ---------------------------- tests/gpg/pgp-keylist.c | 223 ------------------------------------------------ tests/run-export.c | 161 ++++++++++++++++++++++++++++++++++ tests/run-import.c | 129 ++++++++++++++++++++++++++++ tests/run-keylist.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 531 insertions(+), 516 deletions(-) delete mode 100644 tests/gpg/pgp-export.c delete mode 100644 tests/gpg/pgp-import.c delete mode 100644 tests/gpg/pgp-keylist.c create mode 100644 tests/run-export.c create mode 100644 tests/run-import.c create mode 100644 tests/run-keylist.c diff --git a/tests/ChangeLog b/tests/ChangeLog index ab9a60aa..9e68d51d 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,16 @@ +2009-07-07 Werner Koch + + * gpg/pgp-keylist.c: Rename to ... + * run-keylist.c: ... this. + * gpg/pgp-import.c: Rename to ... + * run-import.c: ... this. + * gpg/pgp-export.c: Rename to ... + * run-export.c: ... this. + * run-support.h: New. Copied from gpg/t-support.h. + * gpg/Makefile.am (noinst_PROGRAMS): Remove them. + * Makefile.am (noinst_PROGRAMS): Add them. + (noinst_HEADERS): New. + 2009-06-22 Marcus Brinkmann * gpg/t-support.h (passphrase_cb): Implement write() according to diff --git a/tests/Makefile.am b/tests/Makefile.am index dc2b0370..81d7e548 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -30,7 +30,10 @@ INCLUDES = -I$(top_builddir)/src AM_CPPFLAGS = @GPG_ERROR_CFLAGS@ LDADD = ../src/libgpgme.la @GPG_ERROR_LIBS@ -noinst_PROGRAMS = $(TESTS) +noinst_HEADERS = run-support.h + +noinst_PROGRAMS = $(TESTS) run-keylist run-export run-import + if RUN_GPG_TESTS gpgtests = gpg diff --git a/tests/gpg/Makefile.am b/tests/gpg/Makefile.am index 441e80ca..5da0bbbf 100644 --- a/tests/gpg/Makefile.am +++ b/tests/gpg/Makefile.am @@ -50,8 +50,7 @@ LDADD = ../../src/libgpgme.la t_thread1_LDADD = ../../src/libgpgme-pthread.la # We don't run t-genkey in the test suite, because it takes too long -# The other programs are used for debugging. -noinst_PROGRAMS = $(TESTS) t-genkey pgp-keylist pgp-export pgp-import +noinst_PROGRAMS = $(TESTS) t-genkey mkdemodirs: mkdemodirs.in Makefile sed -e 's,[@]GPG[@],$(GPG),g' < $(srcdir)/mkdemodirs.in > mkdemodirs diff --git a/tests/gpg/pgp-export.c b/tests/gpg/pgp-export.c deleted file mode 100644 index a0b3e8a5..00000000 --- a/tests/gpg/pgp-export.c +++ /dev/null @@ -1,161 +0,0 @@ -/* 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 . -*/ - -/* 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 -#endif - -#include -#include -#include - -#include - -#define PGM "pgp-export" - -#include "t-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; -} diff --git a/tests/gpg/pgp-import.c b/tests/gpg/pgp-import.c deleted file mode 100644 index b9d68608..00000000 --- a/tests/gpg/pgp-import.c +++ /dev/null @@ -1,129 +0,0 @@ -/* pgp-import.c - Helper to run an import 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 . -*/ - -/* 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 -#endif - -#include -#include -#include - -#include - -#define PGM "pgp-import" - -#include "t-support.h" - - -static int verbose; - - -static int -show_usage (int ex) -{ - fputs ("usage: " PGM " [options] FILENAMEs\n\n" - "Options:\n" - " --verbose run in verbose mode\n" - " --url import from given URLs\n" - " -0 URLs are delimited by a nul\n" - , stderr); - exit (ex); -} - -int -main (int argc, char **argv) -{ - int last_argc = -1; - gpgme_error_t err; - gpgme_ctx_t ctx; - int url_mode = 0; - int nul_mode = 0; - gpgme_import_result_t impres; - gpgme_data_t data; - - 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, "--url")) - { - url_mode = 1; - argc--; argv++; - } - else if (!strcmp (*argv, "-0")) - { - nul_mode = 1; - 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); - - for (; argc; argc--, argv++) - { - printf ("reading file `%s'\n", *argv); - err = gpgme_data_new_from_file (&data, *argv, 1); - fail_if_err (err); - - if (url_mode) - gpgme_data_set_encoding (data, (nul_mode? GPGME_DATA_ENCODING_URL0 - : GPGME_DATA_ENCODING_URL)); - - err = gpgme_op_import (ctx, data); - fail_if_err (err); - impres = gpgme_op_import_result (ctx); - if (!impres) - { - fprintf (stderr, PGM ": no import result returned\n"); - exit (1); - } - print_import_result (impres); - - gpgme_data_release (data); - } - - gpgme_release (ctx); - return 0; -} diff --git a/tests/gpg/pgp-keylist.c b/tests/gpg/pgp-keylist.c deleted file mode 100644 index 4978b8dd..00000000 --- a/tests/gpg/pgp-keylist.c +++ /dev/null @@ -1,223 +0,0 @@ -/* pgp-keylist.c - Helper to show a key listing. - 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 . -*/ - -/* 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 -#endif - -#include -#include -#include - -#include - -#define PGM "pgp-keylist" - -#include "t-support.h" - - -static int verbose; - - -static int -show_usage (int ex) -{ - fputs ("usage: " PGM " [options] [USERID]\n\n" - "Options:\n" - " --verbose run in verbose mode\n" - " --local use GPGME_KEYLIST_MODE_LOCAL\n" - " --extern use GPGME_KEYLIST_MODE_EXTERN\n" - " --sigs use GPGME_KEYLIST_MODE_SIGS\n" - " --sig-notations use GPGME_KEYLIST_MODE_SIG_NOTATIONS\n" - " --ephemeral use GPGME_KEYLIST_MODE_EPHEMERAL\n" - " --validate use GPGME_KEYLIST_MODE_VALIDATE\n" - " --import import all keys\n" - , stderr); - exit (ex); -} - -int -main (int argc, char **argv) -{ - int last_argc = -1; - gpgme_error_t err; - gpgme_ctx_t ctx; - gpgme_keylist_mode_t mode = 0; - gpgme_key_t key; - gpgme_keylist_result_t result; - int import = 0; - gpgme_key_t keyarray[100]; - int keyidx = 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, "--local")) - { - mode |= GPGME_KEYLIST_MODE_LOCAL; - argc--; argv++; - } - else if (!strcmp (*argv, "--extern")) - { - mode |= GPGME_KEYLIST_MODE_EXTERN; - argc--; argv++; - } - else if (!strcmp (*argv, "--sigs")) - { - mode |= GPGME_KEYLIST_MODE_SIGS; - argc--; argv++; - } - else if (!strcmp (*argv, "--sig-notations")) - { - mode |= GPGME_KEYLIST_MODE_SIG_NOTATIONS; - argc--; argv++; - } - else if (!strcmp (*argv, "--ephemeral")) - { - mode |= GPGME_KEYLIST_MODE_EPHEMERAL; - argc--; argv++; - } - else if (!strcmp (*argv, "--validate")) - { - mode |= GPGME_KEYLIST_MODE_VALIDATE; - argc--; argv++; - } - else if (!strcmp (*argv, "--import")) - { - import = 1; - argc--; argv++; - } - else if (!strncmp (*argv, "--", 2)) - show_usage (1); - - } - - if (argc > 1) - show_usage (1); - - init_gpgme (GPGME_PROTOCOL_OpenPGP); - - err = gpgme_new (&ctx); - fail_if_err (err); - gpgme_set_protocol (ctx, GPGME_PROTOCOL_OpenPGP); - - gpgme_set_keylist_mode (ctx, mode); - - err = gpgme_op_keylist_start (ctx, argc? argv[0]:NULL, 0); - fail_if_err (err); - - while (!(err = gpgme_op_keylist_next (ctx, &key))) - { - gpgme_user_id_t uid; - int nuids; - - - printf ("keyid : %s\n", key->subkeys?nonnull (key->subkeys->keyid):"?"); - printf ("fpr : %s\n", key->subkeys?nonnull (key->subkeys->fpr):"?"); - printf ("caps : %s%s%s%s\n", - key->can_encrypt? "e":"", - key->can_sign? "s":"", - key->can_certify? "c":"", - key->can_authenticate? "a":""); - printf ("flags :%s%s%s%s%s%s\n", - key->secret? " secret":"", - key->revoked? " revoked":"", - key->expired? " expired":"", - key->disabled? " disabled":"", - key->invalid? " invalid":"", - key->is_qualified? " qualifid":""); - for (nuids=0, uid=key->uids; uid; uid = uid->next, nuids++) - { - printf ("userid %d: %s\n", nuids, nonnull(uid->uid)); - printf ("valid %d: %s\n", nuids, - uid->validity == GPGME_VALIDITY_UNKNOWN? "unknown": - uid->validity == GPGME_VALIDITY_UNDEFINED? "undefined": - uid->validity == GPGME_VALIDITY_NEVER? "never": - uid->validity == GPGME_VALIDITY_MARGINAL? "marginal": - uid->validity == GPGME_VALIDITY_FULL? "full": - uid->validity == GPGME_VALIDITY_ULTIMATE? "ultimate": "[?]"); - } - - putchar ('\n'); - - if (import) - { - if (keyidx < DIM (keyarray)-1) - keyarray[keyidx++] = key; - else - { - fprintf (stderr, PGM": too many keys in import mode" - "- skipping this key\n"); - gpgme_key_unref (key); - } - } - else - 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); - } - - if (import) - { - gpgme_import_result_t impres; - - err = gpgme_op_import_keys (ctx, keyarray); - fail_if_err (err); - impres = gpgme_op_import_result (ctx); - if (!impres) - { - fprintf (stderr, PGM ": no import result returned\n"); - exit (1); - } - print_import_result (impres); - } - - for (keyidx=0; keyarray[keyidx]; keyidx++) - gpgme_key_unref (keyarray[keyidx]); - - gpgme_release (ctx); - return 0; -} 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 . +*/ + +/* 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 +#endif + +#include +#include +#include + +#include + +#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; +} diff --git a/tests/run-import.c b/tests/run-import.c new file mode 100644 index 00000000..cd101b01 --- /dev/null +++ b/tests/run-import.c @@ -0,0 +1,129 @@ +/* pgp-import.c - Helper to run an import 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 . +*/ + +/* 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 +#endif + +#include +#include +#include + +#include + +#define PGM "run-import" + +#include "run-support.h" + + +static int verbose; + + +static int +show_usage (int ex) +{ + fputs ("usage: " PGM " [options] FILENAMEs\n\n" + "Options:\n" + " --verbose run in verbose mode\n" + " --url import from given URLs\n" + " -0 URLs are delimited by a nul\n" + , stderr); + exit (ex); +} + +int +main (int argc, char **argv) +{ + int last_argc = -1; + gpgme_error_t err; + gpgme_ctx_t ctx; + int url_mode = 0; + int nul_mode = 0; + gpgme_import_result_t impres; + gpgme_data_t data; + + 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, "--url")) + { + url_mode = 1; + argc--; argv++; + } + else if (!strcmp (*argv, "-0")) + { + nul_mode = 1; + 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); + + for (; argc; argc--, argv++) + { + printf ("reading file `%s'\n", *argv); + err = gpgme_data_new_from_file (&data, *argv, 1); + fail_if_err (err); + + if (url_mode) + gpgme_data_set_encoding (data, (nul_mode? GPGME_DATA_ENCODING_URL0 + : GPGME_DATA_ENCODING_URL)); + + err = gpgme_op_import (ctx, data); + fail_if_err (err); + impres = gpgme_op_import_result (ctx); + if (!impres) + { + fprintf (stderr, PGM ": no import result returned\n"); + exit (1); + } + print_import_result (impres); + + gpgme_data_release (data); + } + + gpgme_release (ctx); + return 0; +} diff --git a/tests/run-keylist.c b/tests/run-keylist.c new file mode 100644 index 00000000..07fc8941 --- /dev/null +++ b/tests/run-keylist.c @@ -0,0 +1,223 @@ +/* run-keylist.c - Helper to show a key listing. + 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 . +*/ + +/* 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 +#endif + +#include +#include +#include + +#include + +#define PGM "run-keylist" + +#include "run-support.h" + + +static int verbose; + + +static int +show_usage (int ex) +{ + fputs ("usage: " PGM " [options] [USERID]\n\n" + "Options:\n" + " --verbose run in verbose mode\n" + " --local use GPGME_KEYLIST_MODE_LOCAL\n" + " --extern use GPGME_KEYLIST_MODE_EXTERN\n" + " --sigs use GPGME_KEYLIST_MODE_SIGS\n" + " --sig-notations use GPGME_KEYLIST_MODE_SIG_NOTATIONS\n" + " --ephemeral use GPGME_KEYLIST_MODE_EPHEMERAL\n" + " --validate use GPGME_KEYLIST_MODE_VALIDATE\n" + " --import import all keys\n" + , stderr); + exit (ex); +} + +int +main (int argc, char **argv) +{ + int last_argc = -1; + gpgme_error_t err; + gpgme_ctx_t ctx; + gpgme_keylist_mode_t mode = 0; + gpgme_key_t key; + gpgme_keylist_result_t result; + int import = 0; + gpgme_key_t keyarray[100]; + int keyidx = 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, "--local")) + { + mode |= GPGME_KEYLIST_MODE_LOCAL; + argc--; argv++; + } + else if (!strcmp (*argv, "--extern")) + { + mode |= GPGME_KEYLIST_MODE_EXTERN; + argc--; argv++; + } + else if (!strcmp (*argv, "--sigs")) + { + mode |= GPGME_KEYLIST_MODE_SIGS; + argc--; argv++; + } + else if (!strcmp (*argv, "--sig-notations")) + { + mode |= GPGME_KEYLIST_MODE_SIG_NOTATIONS; + argc--; argv++; + } + else if (!strcmp (*argv, "--ephemeral")) + { + mode |= GPGME_KEYLIST_MODE_EPHEMERAL; + argc--; argv++; + } + else if (!strcmp (*argv, "--validate")) + { + mode |= GPGME_KEYLIST_MODE_VALIDATE; + argc--; argv++; + } + else if (!strcmp (*argv, "--import")) + { + import = 1; + argc--; argv++; + } + else if (!strncmp (*argv, "--", 2)) + show_usage (1); + + } + + if (argc > 1) + show_usage (1); + + init_gpgme (GPGME_PROTOCOL_OpenPGP); + + err = gpgme_new (&ctx); + fail_if_err (err); + gpgme_set_protocol (ctx, GPGME_PROTOCOL_OpenPGP); + + gpgme_set_keylist_mode (ctx, mode); + + err = gpgme_op_keylist_start (ctx, argc? argv[0]:NULL, 0); + fail_if_err (err); + + while (!(err = gpgme_op_keylist_next (ctx, &key))) + { + gpgme_user_id_t uid; + int nuids; + + + printf ("keyid : %s\n", key->subkeys?nonnull (key->subkeys->keyid):"?"); + printf ("fpr : %s\n", key->subkeys?nonnull (key->subkeys->fpr):"?"); + printf ("caps : %s%s%s%s\n", + key->can_encrypt? "e":"", + key->can_sign? "s":"", + key->can_certify? "c":"", + key->can_authenticate? "a":""); + printf ("flags :%s%s%s%s%s%s\n", + key->secret? " secret":"", + key->revoked? " revoked":"", + key->expired? " expired":"", + key->disabled? " disabled":"", + key->invalid? " invalid":"", + key->is_qualified? " qualifid":""); + for (nuids=0, uid=key->uids; uid; uid = uid->next, nuids++) + { + printf ("userid %d: %s\n", nuids, nonnull(uid->uid)); + printf ("valid %d: %s\n", nuids, + uid->validity == GPGME_VALIDITY_UNKNOWN? "unknown": + uid->validity == GPGME_VALIDITY_UNDEFINED? "undefined": + uid->validity == GPGME_VALIDITY_NEVER? "never": + uid->validity == GPGME_VALIDITY_MARGINAL? "marginal": + uid->validity == GPGME_VALIDITY_FULL? "full": + uid->validity == GPGME_VALIDITY_ULTIMATE? "ultimate": "[?]"); + } + + putchar ('\n'); + + if (import) + { + if (keyidx < DIM (keyarray)-1) + keyarray[keyidx++] = key; + else + { + fprintf (stderr, PGM": too many keys in import mode" + "- skipping this key\n"); + gpgme_key_unref (key); + } + } + else + 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); + } + + if (import) + { + gpgme_import_result_t impres; + + err = gpgme_op_import_keys (ctx, keyarray); + fail_if_err (err); + impres = gpgme_op_import_result (ctx); + if (!impres) + { + fprintf (stderr, PGM ": no import result returned\n"); + exit (1); + } + print_import_result (impres); + } + + for (keyidx=0; keyarray[keyidx]; keyidx++) + gpgme_key_unref (keyarray[keyidx]); + + gpgme_release (ctx); + return 0; +} -- cgit v1.2.3