Detect and bailo out on double plaintext messages.
[gpgme.git] / tests / gpg / t-import.c
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 \f
38 void
39 check_result (gpgme_import_result_t result, char *fpr, int secret)
40 {
41   if (result->considered != 1)
42     {
43       fprintf (stderr, "Unexpected number of considered keys %i\n",
44                result->considered);
45       exit (1);
46     }
47   if (result->no_user_id != 0)
48     {
49       fprintf (stderr, "Unexpected number of user ids %i\n",
50                result->no_user_id);
51       exit (1);
52     }
53   if ((secret && result->imported != 0)
54       || (!secret && (result->imported != 0 && result->imported != 1)))
55     {
56       fprintf (stderr, "Unexpected number of imported keys %i\n",
57                result->imported);
58       exit (1);
59     }
60   if (result->imported_rsa != 0)
61     {
62       fprintf (stderr, "Unexpected number of imported RSA keys %i\n",
63                result->imported_rsa);
64       exit (1);
65     }
66   if ((secret && result->unchanged != 0)
67       || (!secret && ((result->imported == 0 && result->unchanged != 1)
68                       || (result->imported == 1 && result->unchanged != 0))))
69     {
70       fprintf (stderr, "Unexpected number of unchanged keys %i\n",
71                result->unchanged);
72       exit (1);
73     }
74   if (result->new_user_ids != 0)
75     {
76       fprintf (stderr, "Unexpected number of new user IDs %i\n",
77                result->new_user_ids);
78       exit (1);
79     }
80   if (result->new_sub_keys != 0)
81     {
82       fprintf (stderr, "Unexpected number of new sub keys %i\n",
83                result->new_sub_keys);
84       exit (1);
85     }
86   if ((secret
87        && ((result->secret_imported == 0 && result->new_signatures != 0)
88            || (result->secret_imported == 1 && result->new_signatures > 1)))
89       || (!secret && result->new_signatures != 0))
90     {
91       fprintf (stderr, "Unexpected number of new signatures %i\n",
92                result->new_signatures);
93       if (result->new_signatures == 2)
94         fprintf (stderr, "### ignored due to gpg 1.3.4 problems\n");
95       else
96         exit (1);
97     }
98   if (result->new_revocations != 0)
99     {
100       fprintf (stderr, "Unexpected number of new revocations %i\n",
101                result->new_revocations);
102       exit (1);
103     }
104   if ((secret && result->secret_read != 1)
105       || (!secret && result->secret_read != 0))
106     {
107       fprintf (stderr, "Unexpected number of secret keys read %i\n",
108                result->secret_read);
109       exit (1);
110     }
111   if ((secret && result->secret_imported != 0 && result->secret_imported != 1)
112       || (!secret && result->secret_imported != 0))
113     {
114       fprintf (stderr, "Unexpected number of secret keys imported %i\n",
115                result->secret_imported);
116       exit (1);
117     }
118   if ((secret
119        && ((result->secret_imported == 0 && result->secret_unchanged != 1)
120            || (result->secret_imported == 1 && result->secret_unchanged != 0)))
121       || (!secret && result->secret_unchanged != 0))
122     {
123       fprintf (stderr, "Unexpected number of secret keys unchanged %i\n",
124                result->secret_unchanged);
125       exit (1);
126     }
127   if (result->not_imported != 0)
128     {
129       fprintf (stderr, "Unexpected number of secret keys not imported %i\n",
130                result->not_imported);
131       exit (1);
132     }
133   if (secret)
134     {
135       if (!result->imports
136           || (result->imports->next && result->imports->next->next))
137         {
138           fprintf (stderr, "Unexpected number of status reports\n");
139           exit (1);
140         }
141     }
142   else
143     {
144       if (!result->imports || result->imports->next)
145         {
146           fprintf (stderr, "Unexpected number of status reports\n");
147           exit (1);
148         }
149     }
150   if (strcmp (fpr, result->imports->fpr))
151     {
152       fprintf (stderr, "Unexpected fingerprint %s\n",
153                result->imports->fpr);
154       exit (1);
155     }
156   if (result->imports->next && strcmp (fpr, result->imports->next->fpr))
157     {
158       fprintf (stderr, "Unexpected fingerprint on second status %s\n",
159                result->imports->next->fpr);
160       exit (1);
161     }
162   if (result->imports->result != 0)
163     {
164       fprintf (stderr, "Unexpected status result %s\n",
165                gpgme_strerror (result->imports->result));
166       exit (1);
167     }
168   if (secret)
169     {
170       if (result->secret_imported == 0)
171         {
172           if (result->imports->status != GPGME_IMPORT_SECRET)
173             {
174               fprintf (stderr, "Unexpected status %i\n",
175                        result->imports->status);
176               exit (1);
177             }
178         }
179       else
180         {
181           if (result->imports->status
182               != (GPGME_IMPORT_SECRET | GPGME_IMPORT_NEW)
183               || (result->imports->next
184                   && result->imports->next->status != GPGME_IMPORT_SIG))
185             {
186               fprintf (stderr, "Unexpected status %i\n",
187                        result->imports->status);
188               exit (1);
189             }
190         }
191     }
192   else
193     {
194       if ((result->imported == 0 && result->imports->status != 0)
195           || (result->imported == 1
196               && result->imports->status != GPGME_IMPORT_NEW))
197         {
198           fprintf (stderr, "Unexpected status %i\n",
199                    result->imports->status);
200           exit (1);
201         }
202     }
203 }
204
205
206 int 
207 main (int argc, char *argv[])
208 {
209   gpgme_ctx_t ctx;
210   gpgme_error_t err;
211   gpgme_data_t in;
212   gpgme_import_result_t result;
213   const char *pubkey_1_asc = make_filename ("pubkey-1.asc");
214   const char *seckey_1_asc = make_filename ("seckey-1.asc");
215
216   init_gpgme (GPGME_PROTOCOL_OpenPGP);
217
218   err = gpgme_new (&ctx);
219   fail_if_err (err);
220
221   err = gpgme_data_new_from_file (&in, pubkey_1_asc, 1);
222   fail_if_err (err);
223
224   err = gpgme_op_import (ctx, in);
225   fail_if_err (err);
226   result = gpgme_op_import_result (ctx);
227   check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 0);
228   gpgme_data_release (in);
229
230   err = gpgme_data_new_from_file (&in, seckey_1_asc, 1);
231   fail_if_err (err);
232
233   err = gpgme_op_import (ctx, in);
234   fail_if_err (err);
235   result = gpgme_op_import_result (ctx);
236   check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 1);
237   gpgme_data_release (in);
238
239   gpgme_release (ctx);
240   return 0;
241 }