Line data Source code
1 : /* t-import.c - Regression test.
2 : Copyright (C) 2000 Werner Koch (dd9jn)
3 : Copyright (C) 2001, 2003, 2004 g10 Code GmbH
4 :
5 : This file is part of GPGME.
6 :
7 : GPGME is free software; you can redistribute it and/or modify it
8 : under the terms of the GNU Lesser General Public License as
9 : published by the Free Software Foundation; either version 2.1 of
10 : the License, or (at your option) any later version.
11 :
12 : GPGME is distributed in the hope that it will be useful, but
13 : WITHOUT ANY WARRANTY; without even the implied warranty of
14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 : Lesser General Public License for more details.
16 :
17 : You should have received a copy of the GNU Lesser General Public
18 : License along with this program; if not, write to the Free Software
19 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 : 02111-1307, USA. */
21 :
22 : /* We need to include config.h so that we know whether we are building
23 : with large file system (LFS) support. */
24 : #ifdef HAVE_CONFIG_H
25 : #include <config.h>
26 : #endif
27 :
28 : #include <stdlib.h>
29 : #include <stdio.h>
30 : #include <string.h>
31 : #include <errno.h>
32 :
33 : #include <gpgme.h>
34 :
35 : #include "t-support.h"
36 :
37 :
38 : void
39 2 : check_result (gpgme_import_result_t result, char *fpr, int secret)
40 : {
41 2 : if (result->considered != 1 && (secret && result->considered != 3))
42 : {
43 0 : fprintf (stderr, "Unexpected number of considered keys %i\n",
44 : result->considered);
45 0 : exit (1);
46 : }
47 2 : if (result->no_user_id != 0)
48 : {
49 0 : fprintf (stderr, "Unexpected number of user ids %i\n",
50 : result->no_user_id);
51 0 : exit (1);
52 : }
53 2 : if ((secret && result->imported != 0)
54 2 : || (!secret && (result->imported != 0 && result->imported != 1)))
55 : {
56 0 : fprintf (stderr, "Unexpected number of imported keys %i\n",
57 : result->imported);
58 0 : exit (1);
59 : }
60 2 : if (result->imported_rsa != 0)
61 : {
62 0 : fprintf (stderr, "Unexpected number of imported RSA keys %i\n",
63 : result->imported_rsa);
64 0 : exit (1);
65 : }
66 2 : if ((secret && (result->unchanged != 0 && result->unchanged != 1))
67 2 : || (!secret && ((result->imported == 0 && result->unchanged != 1)
68 1 : || (result->imported == 1 && result->unchanged != 0))))
69 : {
70 0 : fprintf (stderr, "Unexpected number of unchanged keys %i\n",
71 : result->unchanged);
72 0 : exit (1);
73 : }
74 2 : if (result->new_user_ids != 0)
75 : {
76 0 : fprintf (stderr, "Unexpected number of new user IDs %i\n",
77 : result->new_user_ids);
78 0 : exit (1);
79 : }
80 2 : if (result->new_sub_keys != 0)
81 : {
82 0 : fprintf (stderr, "Unexpected number of new sub keys %i\n",
83 : result->new_sub_keys);
84 0 : exit (1);
85 : }
86 2 : if ((secret
87 1 : && ((result->secret_imported == 0 && result->new_signatures != 0)
88 1 : || (result->secret_imported == 1 && result->new_signatures > 1)))
89 2 : || (!secret && result->new_signatures != 0))
90 : {
91 0 : fprintf (stderr, "Unexpected number of new signatures %i\n",
92 : result->new_signatures);
93 0 : if (result->new_signatures == 2)
94 0 : fprintf (stderr, "### ignored due to gpg 1.3.4 problems\n");
95 : else
96 0 : exit (1);
97 : }
98 2 : if (result->new_revocations != 0)
99 : {
100 0 : fprintf (stderr, "Unexpected number of new revocations %i\n",
101 : result->new_revocations);
102 0 : exit (1);
103 : }
104 2 : if ((secret && result->secret_read != 1 && result->secret_read != 3)
105 2 : || (!secret && result->secret_read != 0))
106 : {
107 0 : fprintf (stderr, "Unexpected number of secret keys read %i\n",
108 : result->secret_read);
109 0 : exit (1);
110 : }
111 2 : if ((secret && result->secret_imported != 0 && result->secret_imported != 1
112 1 : && result->secret_imported != 2)
113 2 : || (!secret && result->secret_imported != 0))
114 : {
115 0 : fprintf (stderr, "Unexpected number of secret keys imported %i\n",
116 : result->secret_imported);
117 0 : exit (1);
118 : }
119 2 : if ((secret
120 1 : && ((result->secret_imported == 0 && result->secret_unchanged != 1
121 0 : && result->secret_unchanged != 2)
122 1 : || (result->secret_imported == 1 && result->secret_unchanged != 0)))
123 2 : || (!secret && result->secret_unchanged != 0))
124 : {
125 0 : fprintf (stderr, "Unexpected number of secret keys unchanged %i\n",
126 : result->secret_unchanged);
127 0 : exit (1);
128 : }
129 2 : if (result->not_imported != 0)
130 : {
131 0 : fprintf (stderr, "Unexpected number of secret keys not imported %i\n",
132 : result->not_imported);
133 0 : exit (1);
134 : }
135 2 : if (secret)
136 : {
137 1 : if (!result->imports
138 1 : || (result->imports->next && result->imports->next->next))
139 : {
140 0 : fprintf (stderr, "Unexpected number of status reports\n");
141 0 : exit (1);
142 : }
143 : }
144 : else
145 : {
146 1 : if (!result->imports || result->imports->next)
147 : {
148 0 : fprintf (stderr, "Unexpected number of status reports\n");
149 0 : exit (1);
150 : }
151 : }
152 2 : if (strcmp (fpr, result->imports->fpr))
153 : {
154 0 : fprintf (stderr, "Unexpected fingerprint %s\n",
155 0 : result->imports->fpr);
156 0 : exit (1);
157 : }
158 2 : if (result->imports->next && strcmp (fpr, result->imports->next->fpr))
159 : {
160 0 : fprintf (stderr, "Unexpected fingerprint on second status %s\n",
161 0 : result->imports->next->fpr);
162 0 : exit (1);
163 : }
164 2 : if (result->imports->result != 0)
165 : {
166 0 : fprintf (stderr, "Unexpected status result %s\n",
167 0 : gpgme_strerror (result->imports->result));
168 0 : exit (1);
169 : }
170 : #if 0
171 : if (secret)
172 : {
173 : if (result->secret_imported == 0)
174 : {
175 : if (result->imports->status != GPGME_IMPORT_SECRET)
176 : {
177 : fprintf (stderr, "Unexpected status %i\n",
178 : result->imports->status);
179 : exit (1);
180 : }
181 : }
182 : else
183 : {
184 : if (result->imports->status
185 : != (GPGME_IMPORT_SECRET | GPGME_IMPORT_NEW)
186 : || (result->imports->next
187 : && result->imports->next->status != GPGME_IMPORT_SIG))
188 : {
189 : fprintf (stderr, "Unexpected status %i\n",
190 : result->imports->status);
191 : exit (1);
192 : }
193 : }
194 : }
195 : else
196 : {
197 : if ((result->imported == 0 && result->imports->status != 0)
198 : || (result->imported == 1
199 : && result->imports->status != GPGME_IMPORT_NEW))
200 : {
201 : fprintf (stderr, "Unexpected status %i\n",
202 : result->imports->status);
203 : exit (1);
204 : }
205 : }
206 : #endif
207 2 : }
208 :
209 :
210 : int
211 1 : main (int argc, char *argv[])
212 : {
213 : gpgme_ctx_t ctx;
214 : gpgme_error_t err;
215 : gpgme_data_t in;
216 : gpgme_import_result_t result;
217 1 : const char *pubkey_1_asc = make_filename ("pubkey-1.asc");
218 1 : const char *seckey_1_asc = make_filename ("seckey-1.asc");
219 :
220 1 : init_gpgme (GPGME_PROTOCOL_OpenPGP);
221 :
222 1 : err = gpgme_new (&ctx);
223 1 : fail_if_err (err);
224 :
225 1 : err = gpgme_data_new_from_file (&in, pubkey_1_asc, 1);
226 1 : fail_if_err (err);
227 :
228 1 : err = gpgme_op_import (ctx, in);
229 1 : fail_if_err (err);
230 1 : result = gpgme_op_import_result (ctx);
231 1 : check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 0);
232 1 : gpgme_data_release (in);
233 :
234 1 : err = gpgme_data_new_from_file (&in, seckey_1_asc, 1);
235 1 : fail_if_err (err);
236 :
237 1 : err = gpgme_op_import (ctx, in);
238 1 : fail_if_err (err);
239 1 : result = gpgme_op_import_result (ctx);
240 1 : check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 1);
241 1 : gpgme_data_release (in);
242 :
243 1 : gpgme_release (ctx);
244 1 : return 0;
245 : }
|