core: Fix duplication of close_notify_handler for gpgsm.
[gpgme.git] / tests / run-import.c
1 /* pgp-import.c  - Helper to run an import command
2  * Copyright (C) 2008, 2009 g10 Code GmbH
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * GPGME is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <https://gnu.org/licenses/>.
18  * SPDX-License-Identifier: LGPL-2.1-or-later
19  */
20
21 /* We need to include config.h so that we know whether we are building
22    with large file system (LFS) support. */
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include <stdlib.h>
28 #include <stdio.h>
29 #include <string.h>
30
31 #include <gpgme.h>
32
33 #define PGM "run-import"
34
35 #include "run-support.h"
36
37
38 static int verbose;
39
40
41 static int
42 show_usage (int ex)
43 {
44   fputs ("usage: " PGM " [options] FILENAMEs\n\n"
45          "Options:\n"
46          "  --verbose        run in verbose mode\n"
47          "  --url            import from given URLs\n"
48          "  -0               URLs are delimited by a nul\n"
49          , stderr);
50   exit (ex);
51 }
52
53 int
54 main (int argc, char **argv)
55 {
56   int last_argc = -1;
57   gpgme_error_t err;
58   gpgme_ctx_t ctx;
59   int url_mode = 0;
60   int nul_mode = 0;
61   gpgme_import_result_t impres;
62   gpgme_data_t data;
63
64   if (argc)
65     { argc--; argv++; }
66   while (argc && last_argc != argc )
67     {
68       last_argc = argc;
69       if (!strcmp (*argv, "--"))
70         {
71           argc--; argv++;
72           break;
73         }
74       else if (!strcmp (*argv, "--help"))
75         show_usage (0);
76       else if (!strcmp (*argv, "--verbose"))
77         {
78           verbose = 1;
79           argc--; argv++;
80         }
81       else if (!strcmp (*argv, "--url"))
82         {
83           url_mode = 1;
84           argc--; argv++;
85         }
86       else if (!strcmp (*argv, "-0"))
87         {
88           nul_mode = 1;
89           argc--; argv++;
90         }
91       else if (!strncmp (*argv, "--", 2))
92         show_usage (1);
93
94     }
95
96   if (!argc)
97     show_usage (1);
98
99   init_gpgme (GPGME_PROTOCOL_OpenPGP);
100
101   err = gpgme_new (&ctx);
102   fail_if_err (err);
103   gpgme_set_protocol (ctx, GPGME_PROTOCOL_OpenPGP);
104
105   for (; argc; argc--, argv++)
106     {
107       printf ("reading file `%s'\n", *argv);
108       err = gpgme_data_new_from_file (&data, *argv, 1);
109       fail_if_err (err);
110
111       if (url_mode)
112         gpgme_data_set_encoding (data, (nul_mode? GPGME_DATA_ENCODING_URL0
113                                         : GPGME_DATA_ENCODING_URL));
114
115       err = gpgme_op_import (ctx, data);
116       fail_if_err (err);
117       impres = gpgme_op_import_result (ctx);
118       if (!impres)
119         {
120           fprintf (stderr, PGM ": no import result returned\n");
121           exit (1);
122         }
123       print_import_result (impres);
124
125       gpgme_data_release (data);
126     }
127
128   if (verbose)
129     {
130       gpgme_data_t log;
131       char *buf;
132       size_t len;
133
134       gpgme_data_new (&log);
135       err = gpgme_op_getauditlog (ctx, log, GPGME_AUDITLOG_DIAG);
136       fail_if_err (err);
137       buf = gpgme_data_release_and_get_mem (log, &len);
138       printf ("\nDiagnostic output:\n%.*s\n", (int)len, buf);
139       free (buf);
140     }
141
142   gpgme_release (ctx);
143   return 0;
144 }