Decryption does now work
[gnupg.git] / sm / import.c
1 /* import.c - Import certificates
2  *      Copyright (C) 2001 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 <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <errno.h>
26 #include <unistd.h> 
27 #include <time.h>
28 #include <assert.h>
29
30 #include <gcrypt.h>
31 #include <ksba.h>
32
33 #include "gpgsm.h"
34 #include "keydb.h"
35 #include "i18n.h"
36
37
38 static void
39 store_cert (KsbaCert cert)
40 {
41   KEYDB_HANDLE kh;
42   int rc;
43
44   kh = keydb_new (0);
45   if (!kh)
46     {
47       log_error (_("failed to allocated keyDB handle\n"));
48       return;
49     }
50   rc = keydb_locate_writable (kh, 0);
51   if (rc)
52       log_error (_("error finding writable keyDB: %s\n"), gnupg_strerror (rc));
53
54   rc = keydb_insert_cert (kh, cert);
55   if (rc)
56     {
57       log_error (_("error storing certificate: %s\n"), gnupg_strerror (rc));
58     }
59   keydb_release (kh);               
60 }
61
62
63
64 \f
65 int
66 gpgsm_import (CTRL ctrl, int in_fd)
67 {
68   int rc;
69   Base64Context b64reader = NULL;
70   KsbaReader reader;
71   KsbaCert cert = NULL;
72   FILE *fp = NULL;
73
74   fp = fdopen ( dup (in_fd), "rb");
75   if (!fp)
76     {
77       log_error ("fdopen() failed: %s\n", strerror (errno));
78       rc = seterr (IO_Error);
79       goto leave;
80     }
81
82   rc = gpgsm_create_reader (&b64reader, ctrl, fp, &reader);
83   if (rc)
84     {
85       log_error ("can't create reader: %s\n", gnupg_strerror (rc));
86       goto leave;
87     }
88
89   cert = ksba_cert_new ();
90   if (!cert)
91     {
92       rc = seterr (Out_Of_Core);
93       goto leave;
94     }
95
96   rc = ksba_cert_read_der (cert, reader);
97   if (rc)
98     {
99       rc = map_ksba_err (rc);
100       goto leave;
101     }
102
103   if ( !gpgsm_validate_path (cert) )
104     store_cert (cert);
105
106  leave:
107   ksba_cert_release (cert);
108   gpgsm_destroy_reader (b64reader);
109   if (fp)
110     fclose (fp);
111   return rc;
112 }
113
114