Renamed an error code.
[gnupg.git] / common / maperror.c
1 /* maperror.c - Error mapping
2  *      Copyright (C) 2001, 2002 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21 #include <config.h>
22 #include <errno.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <ctype.h>
27 #include <unistd.h>
28
29 #include <ksba.h>
30
31 #include "util.h"
32 #include "errors.h"
33 #include "../assuan/assuan.h"
34
35 /* Note: we might want to wrap this in a macro to get our hands on
36    the line and file where the error occured */
37 int
38 map_ksba_err (int err)
39 {
40   switch (err)
41     {
42     case -1:
43     case 0: 
44       break;
45
46     case KSBA_Out_Of_Core: err = GNUPG_Out_Of_Core; break;
47     case KSBA_Invalid_Value: err = GNUPG_Invalid_Value; break;
48     case KSBA_Not_Implemented: err = GNUPG_Not_Implemented; break;
49     case KSBA_Conflict: err = GNUPG_Conflict; break;
50     case KSBA_Read_Error: err = GNUPG_Read_Error; break;
51     case KSBA_Write_Error: err = GNUPG_Write_Error; break;
52     case KSBA_No_Data: err = GNUPG_No_Data; break;
53     case KSBA_Bug: err = GNUPG_Bug; break;
54     case KSBA_Unsupported_Algorithm: err = GNUPG_Unsupported_Algorithm; break;
55     case KSBA_Invalid_Index: err = GNUPG_Invalid_Index; break;
56     case KSBA_Invalid_Sexp: err = GNUPG_Invalid_Sexp; break;
57     case KSBA_Unknown_Sexp: err = GNUPG_Unknown_Sexp; break;
58       
59     default:
60       err = seterr (General_Error);
61       break;
62     }
63   return err;
64 }
65
66
67 int 
68 map_gcry_err (int err)
69 {
70   switch (err)
71     {
72     case GCRYERR_EOF:
73     case -1:
74       err = -1;
75       break;
76
77     case 0:
78       break;
79
80     case GCRYERR_WRONG_PK_ALGO:
81     case GCRYERR_INV_PK_ALGO:
82     case GCRYERR_INV_MD_ALGO:
83     case GCRYERR_INV_CIPHER_ALGO:
84       err = GNUPG_Unsupported_Algorithm;
85       break;
86     case GCRYERR_INV_KEYLEN:
87     case GCRYERR_WEAK_KEY:
88     case GCRYERR_BAD_PUBLIC_KEY: err = GNUPG_Bad_Public_Key; break;
89     case GCRYERR_BAD_SECRET_KEY: err = GNUPG_Bad_Secret_Key; break;
90     case GCRYERR_BAD_SIGNATURE:  err = GNUPG_Bad_Signature; break;
91
92     case GCRYERR_BAD_MPI:
93       err = GNUPG_Bad_Data;
94       break;
95       
96     case GCRYERR_INV_ARG:
97     case GCRYERR_INV_OP:
98     case GCRYERR_INTERNAL:
99     case GCRYERR_INV_CIPHER_MODE:
100       err = GNUPG_Invalid_Value;
101       break;
102
103     case GCRYERR_SELFTEST: 
104       err = GNUPG_Bug;
105       break;
106
107     case GCRYERR_SEXP_INV_LEN_SPEC    :
108     case GCRYERR_SEXP_STRING_TOO_LONG :
109     case GCRYERR_SEXP_UNMATCHED_PAREN :
110     case GCRYERR_SEXP_NOT_CANONICAL   :
111     case GCRYERR_SEXP_BAD_CHARACTER   :
112     case GCRYERR_SEXP_BAD_QUOTATION   :
113     case GCRYERR_SEXP_ZERO_PREFIX     :
114     case GCRYERR_SEXP_NESTED_DH       :
115     case GCRYERR_SEXP_UNMATCHED_DH    :
116     case GCRYERR_SEXP_UNEXPECTED_PUNC :
117     case GCRYERR_SEXP_BAD_HEX_CHAR    :
118     case GCRYERR_SEXP_ODD_HEX_NUMBERS :
119     case GCRYERR_SEXP_BAD_OCT_CHAR    :
120       err = GNUPG_Invalid_Sexp;
121       break;
122
123     case GCRYERR_NO_MEM: err = GNUPG_Out_Of_Core; break;
124
125     case GCRYERR_NOT_IMPL:  err = GNUPG_Not_Implemented; break;
126     case GCRYERR_CONFLICT:  err = GNUPG_Conflict; break;
127       
128     case GCRYERR_INV_OBJ:   /* an object is not valid */
129     case GCRYERR_TOO_SHORT: /* provided buffer too short */
130     case GCRYERR_TOO_LARGE: /* object is too large */
131     case GCRYERR_NO_OBJ:    /* Missing item in an object */
132     default:
133       err = seterr (General_Error);
134       break;
135     }
136   return err;
137 }
138
139 int 
140 map_kbx_err (int err)
141 {
142   switch (err)
143     {
144     case -1:
145     case 0:
146       break;
147       
148     default:
149       err = seterr (General_Error);
150       break;
151     }
152   return err;
153 }
154
155
156 int 
157 map_assuan_err (int err)
158 {
159   switch (err)
160     {
161     case -1:
162     case 0:
163       break;
164
165     case ASSUAN_Canceled:        err = GNUPG_Canceled; break;
166     case ASSUAN_Invalid_Index:   err = GNUPG_Invalid_Index; break;
167
168     case ASSUAN_Not_Implemented: err = GNUPG_Not_Implemented; break;
169     case ASSUAN_Server_Fault:    err = GNUPG_Assuan_Server_Fault; break;
170     case ASSUAN_No_Public_Key:   err = GNUPG_No_Public_Key; break;
171     case ASSUAN_No_Secret_Key:   err = GNUPG_No_Secret_Key; break;
172
173     case ASSUAN_Cert_Revoked:    err = GNUPG_Certificate_Revoked; break;
174     case ASSUAN_No_CRL_For_Cert: err = GNUPG_No_CRL_Known; break;       
175     case ASSUAN_CRL_Too_Old:     err = GNUPG_CRL_Too_Old; break;        
176
177     case ASSUAN_Not_Trusted:     err = GNUPG_Not_Trusted; break;
178
179     case ASSUAN_Card_Error:      err = GNUPG_Card_Error; break;
180     case ASSUAN_Invalid_Card:    err = GNUPG_Invalid_Card; break;
181     case ASSUAN_No_PKCS15_App:   err = GNUPG_No_PKCS15_App; break;
182     case ASSUAN_Card_Not_Present: err= GNUPG_Card_Not_Present; break;
183     case ASSUAN_Not_Confirmed:   err = GNUPG_Not_Confirmed; break;
184     case ASSUAN_Invalid_Id:      err = GNUPG_Invalid_Id; break;
185
186     default:
187       err = err < 100? GNUPG_Assuan_Server_Fault : GNUPG_Assuan_Error;
188       break;
189     }
190   return err;
191 }
192
193 /* Map GNUPG_xxx error codes to Assuan status codes */
194 int
195 map_to_assuan_status (int rc)
196 {
197   switch (rc)
198     {
199     case -1:
200       rc = ASSUAN_No_Data_Available;
201       break;
202     case 0: break;
203     case GNUPG_Bad_CA_Certificate: 
204     case GNUPG_Bad_Certificate:  
205     case GNUPG_Wrong_Key_Usage:
206     case GNUPG_Certificate_Revoked:
207     case GNUPG_No_CRL_Known:
208     case GNUPG_CRL_Too_Old:
209     case GNUPG_No_Policy_Match:
210     case GNUPG_Certificate_Expired:
211       rc = ASSUAN_Bad_Certificate; 
212       break;
213     case GNUPG_Bad_Certificate_Chain: rc = ASSUAN_Bad_Certificate_Chain; break;
214     case GNUPG_Missing_Certificate: rc = ASSUAN_Missing_Certificate; break;
215     case GNUPG_No_Data:           rc = ASSUAN_No_Data_Available; break;
216     case GNUPG_Bad_Signature:     rc = ASSUAN_Bad_Signature; break;
217     case GNUPG_Not_Implemented:   rc = ASSUAN_Not_Implemented; break;
218     case GNUPG_No_Agent:          rc = ASSUAN_No_Agent; break;
219     case GNUPG_Agent_Error:       rc = ASSUAN_Agent_Error; break;
220     case GNUPG_No_Public_Key:     rc = ASSUAN_No_Public_Key; break;
221     case GNUPG_No_Secret_Key:     rc = ASSUAN_No_Secret_Key; break;
222     case GNUPG_Invalid_Data:      rc = ASSUAN_Invalid_Data; break;
223     case GNUPG_Invalid_Name:      rc = ASSUAN_Invalid_Name; break;
224     case GNUPG_Not_Trusted:       rc = ASSUAN_Not_Trusted; break;
225     case GNUPG_Canceled:          rc = ASSUAN_Canceled; break;
226     case GNUPG_Invalid_Index:     rc = ASSUAN_Invalid_Index; break;
227
228     case GNUPG_Card_Error:      
229     case GNUPG_Card_Reset:      
230       rc = ASSUAN_Card_Error; 
231       break;
232     case GNUPG_Card_Removed:  
233     case GNUPG_Card_Not_Present:
234       rc = ASSUAN_Card_Not_Present;
235       break;
236     case GNUPG_Invalid_Card:      rc = ASSUAN_Invalid_Card; break;
237     case GNUPG_No_PKCS15_App:     rc = ASSUAN_No_PKCS15_App; break;
238     case GNUPG_Not_Confirmed:     rc = ASSUAN_Not_Confirmed; break;
239     case GNUPG_Invalid_Id:        rc = ASSUAN_Invalid_Id; break; 
240
241     case GNUPG_Bad_PIN:
242     case GNUPG_Bad_Passphrase:
243       rc = ASSUAN_No_Secret_Key;
244       break;
245
246     case GNUPG_Read_Error: 
247     case GNUPG_Write_Error:
248     case GNUPG_IO_Error: 
249       rc = ASSUAN_Server_IO_Error;
250       break;
251     case GNUPG_Out_Of_Core:    
252     case GNUPG_Resource_Limit: 
253       rc = ASSUAN_Server_Resource_Problem;
254       break;
255     case GNUPG_Bug: 
256     case GNUPG_Internal_Error:   
257       rc = ASSUAN_Server_Bug;
258       break;
259     default: 
260       rc = ASSUAN_Server_Fault;
261       break;
262     }
263   return rc;
264 }
265
266
267
268
269
270
271