~ubuntu-branches/ubuntu/trusty/gnutls26/trusty

« back to all changes in this revision

Viewing changes to src/p11tool.c

  • Committer: Package Import Robot
  • Author(s): Andreas Metzler
  • Date: 2011-10-01 15:28:13 UTC
  • mfrom: (12.1.20 sid)
  • Revision ID: package-import@ubuntu.com-20111001152813-yygm1c4cxonfxhzy
* New upstream version.
  + Allow CA importing of 0 certificates to succeed. Closes: #640639
* Add libp11-kit-dev to libgnutls-dev dependencies. (see #643811)
* [20_guiledocstring.diff] guile: Fix docstring extraction with CPP 4.5+.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2010, 2011 Free Software Foundation, Inc.
 
3
 *
 
4
 * Author: Nikos Mavrogiannopoulos
 
5
 *
 
6
 * This file is part of GnuTLS.
 
7
 *
 
8
 * GnuTLS is free software: you can redistribute it and/or modify it
 
9
 * under the terms of the GNU General Public License as published by
 
10
 * the Free Software Foundation, either version 3 of the License, or
 
11
 * (at your option) any later version.
 
12
 *
 
13
 * GnuTLS is distributed in the hope that it will be useful, but
 
14
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
 * General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU General Public License
 
19
 * along with this program.  If not, see
 
20
 * <http://www.gnu.org/licenses/>.
 
21
 */
 
22
 
 
23
#include <config.h>
 
24
 
 
25
#include <gnutls/gnutls.h>
 
26
#include <gnutls/x509.h>
 
27
#include <gnutls/openpgp.h>
 
28
#include <gnutls/pkcs12.h>
 
29
#include <gnutls/pkcs11.h>
 
30
#include <gnutls/abstract.h>
 
31
 
 
32
#include <stdio.h>
 
33
#include <stdlib.h>
 
34
#include <string.h>
 
35
#include <ctype.h>
 
36
#include <time.h>
 
37
#include <unistd.h>
 
38
#include <errno.h>
 
39
#include <sys/types.h>
 
40
#include <sys/stat.h>
 
41
#include <fcntl.h>
 
42
#include <error.h>
 
43
 
 
44
/* Gnulib portability files. */
 
45
#include <read-file.h>
 
46
#include <progname.h>
 
47
#include <version-etc.h>
 
48
 
 
49
#include "p11tool-gaa.h"
 
50
#include "p11tool.h"
 
51
#include "certtool-common.h"
 
52
 
 
53
static void gaa_parser (int argc, char **argv);
 
54
 
 
55
static gaainfo info;
 
56
static FILE *outfile;
 
57
int batch = 0;
 
58
 
 
59
static void
 
60
tls_log_func (int level, const char *str)
 
61
{
 
62
  fprintf (stderr, "|<%d>| %s", level, str);
 
63
}
 
64
 
 
65
 
 
66
int
 
67
main (int argc, char **argv)
 
68
{
 
69
  set_program_name (argv[0]);
 
70
  gaa_parser (argc, argv);
 
71
 
 
72
  return 0;
 
73
}
 
74
 
 
75
static void
 
76
gaa_parser (int argc, char **argv)
 
77
{
 
78
  int ret;
 
79
  common_info_st cinfo;
 
80
 
 
81
  if (gaa (argc, argv, &info) != -1)
 
82
    {
 
83
      fprintf (stderr, "Try `%s --help' for more information.\n",
 
84
               program_name);
 
85
      exit (1);
 
86
    }
 
87
 
 
88
  gnutls_global_set_log_function (tls_log_func);
 
89
  gnutls_global_set_log_level (info.debug);
 
90
  if (info.debug > 1)
 
91
    printf ("Setting log level to %d\n", info.debug);
 
92
 
 
93
  if ((ret = gnutls_global_init ()) < 0)
 
94
    error (EXIT_FAILURE, 0, "global_init: %s", gnutls_strerror (ret));
 
95
 
 
96
  if (info.pkcs11_provider != NULL)
 
97
    {
 
98
      ret = gnutls_pkcs11_init (GNUTLS_PKCS11_FLAG_MANUAL, NULL);
 
99
      if (ret < 0)
 
100
        fprintf (stderr, "pkcs11_init: %s", gnutls_strerror (ret));
 
101
      else
 
102
        {
 
103
          ret = gnutls_pkcs11_add_provider (info.pkcs11_provider, NULL);
 
104
          if (ret < 0)
 
105
            error (EXIT_FAILURE, 0, "pkcs11_add_provider: %s",
 
106
                   gnutls_strerror (ret));
 
107
        }
 
108
    }
 
109
  else
 
110
    {
 
111
      ret = gnutls_pkcs11_init (GNUTLS_PKCS11_FLAG_AUTO, NULL);
 
112
      if (ret < 0)
 
113
        fprintf (stderr, "pkcs11_init: %s", gnutls_strerror (ret));
 
114
    }
 
115
 
 
116
  if (info.outfile)
 
117
    {
 
118
      outfile = safe_open_rw (info.outfile, 0);
 
119
      if (outfile == NULL)
 
120
        error (EXIT_FAILURE, errno, "%s", info.outfile);
 
121
    }
 
122
  else
 
123
    outfile = stdout;
 
124
 
 
125
  memset (&cinfo, 0, sizeof (cinfo));
 
126
  cinfo.secret_key = info.secret_key;
 
127
  cinfo.privkey = info.privkey;
 
128
  cinfo.pkcs8 = info.pkcs8;
 
129
  cinfo.incert_format = info.incert_format;
 
130
  cinfo.cert = info.cert;
 
131
 
 
132
  switch (info.action)
 
133
    {
 
134
    case ACTION_PKCS11_LIST:
 
135
      pkcs11_list (outfile, info.pkcs11_url, info.pkcs11_type,
 
136
                   info.pkcs11_login, info.pkcs11_detailed_url, &cinfo);
 
137
      break;
 
138
    case ACTION_PKCS11_TOKENS:
 
139
      pkcs11_token_list (outfile, info.pkcs11_detailed_url, &cinfo);
 
140
      break;
 
141
    case ACTION_PKCS11_MECHANISMS:
 
142
      pkcs11_mechanism_list (outfile, info.pkcs11_url, info.pkcs11_login,
 
143
                             &cinfo);
 
144
      break;
 
145
    case ACTION_PKCS11_EXPORT_URL:
 
146
      pkcs11_export (outfile, info.pkcs11_url, info.pkcs11_login, &cinfo);
 
147
      break;
 
148
    case ACTION_PKCS11_WRITE_URL:
 
149
      pkcs11_write (outfile, info.pkcs11_url, info.pkcs11_label,
 
150
                    info.pkcs11_trusted, info.pkcs11_login, &cinfo);
 
151
      break;
 
152
    case ACTION_PKCS11_TOKEN_INIT:
 
153
      pkcs11_init (outfile, info.pkcs11_url, info.pkcs11_label, &cinfo);
 
154
      break;
 
155
    case ACTION_PKCS11_DELETE_URL:
 
156
      pkcs11_delete (outfile, info.pkcs11_url, 0, info.pkcs11_login, &cinfo);
 
157
      break;
 
158
    default:
 
159
      gaa_help ();
 
160
      exit (0);
 
161
    }
 
162
  fclose (outfile);
 
163
 
 
164
#ifdef ENABLE_PKCS11
 
165
  gnutls_pkcs11_deinit ();
 
166
#endif
 
167
  gnutls_global_deinit ();
 
168
}