summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-04-05 08:50:53 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2017-04-05 09:56:16 +0200
commit9e400c33104e9f2e394e8914e7d6138e623da19e (patch)
tree24c84b6784be40f38f8c4fee6310fea3985d1382
parentac291206e86f4d39e1820bbb746612c9018383b6 (diff)
downloadgnutls-9e400c33104e9f2e394e8914e7d6138e623da19e.tar.gz
tools: remove outfile when exited on error
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r--src/certtool-common.c128
-rw-r--r--src/certtool-common.h6
-rw-r--r--src/certtool.c446
-rw-r--r--src/danetool.c40
-rw-r--r--src/p11tool.c17
-rw-r--r--src/pkcs11.c146
-rw-r--r--src/systemkey.c19
-rw-r--r--src/tpmtool.c12
8 files changed, 439 insertions, 375 deletions
diff --git a/src/certtool-common.c b/src/certtool-common.c
index 4c5d40aa7b..7e79dc8ba1 100644
--- a/src/certtool-common.c
+++ b/src/certtool-common.c
@@ -82,7 +82,7 @@ void fix_lbuffer(unsigned long size)
if (lbuffer == NULL) {
fprintf(stderr, "memory error");
- exit(1);
+ app_exit(1);
}
}
@@ -118,7 +118,7 @@ gnutls_datum_t *load_secret_key(int mand, common_info_st * info)
if (info->secret_key == NULL) {
if (mand) {
fprintf(stderr, "missing --secret-key\n");
- exit(1);
+ app_exit(1);
} else
return NULL;
}
@@ -129,7 +129,7 @@ gnutls_datum_t *load_secret_key(int mand, common_info_st * info)
ret = gnutls_hex_decode(&hex_key, raw_key, &raw_key_size);
if (ret < 0) {
fprintf(stderr, "hex_decode: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
key.data = (void *) raw_key;
@@ -173,7 +173,7 @@ static gnutls_privkey_t _load_privkey(gnutls_datum_t * dat,
ret = gnutls_privkey_init(&key);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret =
@@ -191,13 +191,13 @@ static gnutls_privkey_t _load_privkey(gnutls_datum_t * dat,
fprintf(stderr,
"import error: could not find a valid PEM header; "
"check if your key is PKCS #12 encoded\n");
- exit(1);
+ app_exit(1);
}
if (ret < 0) {
fprintf(stderr, "error loading file at --load-privkey: %s: %s\n",
info->privkey, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return key;
@@ -211,14 +211,14 @@ static gnutls_privkey_t _load_url_privkey(const char *url)
ret = gnutls_privkey_init(&key);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_privkey_import_url(key, url, 0);
if (ret < 0) {
fprintf(stderr, "error importing key at %s: %s\n",
url, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return key;
@@ -234,14 +234,14 @@ static gnutls_pubkey_t _load_url_pubkey(const char *url)
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_url(pubkey, url, obj_flags);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s: %s\n", __func__,
__LINE__, gnutls_strerror(ret), url);
- exit(1);
+ app_exit(1);
}
return pubkey;
@@ -261,7 +261,7 @@ gnutls_privkey_t load_private_key(int mand, common_info_st * info)
if (info->privkey == NULL) {
fprintf(stderr, "missing --load-privkey\n");
- exit(1);
+ app_exit(1);
}
if (gnutls_url_is_supported(info->privkey) != 0)
@@ -273,7 +273,7 @@ gnutls_privkey_t load_private_key(int mand, common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-privkey: %s\n",
info->privkey);
- exit(1);
+ app_exit(1);
}
key = _load_privkey(&dat, info);
@@ -301,13 +301,13 @@ load_x509_private_key(int mand, common_info_st * info)
if (info->privkey == NULL) {
fprintf(stderr, "missing --load-privkey\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_privkey_init(&key);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
dat.data = (void *) read_binary_file(info->privkey, &size);
@@ -316,7 +316,7 @@ load_x509_private_key(int mand, common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-privkey: %s\n",
info->privkey);
- exit(1);
+ app_exit(1);
}
if (info->pkcs8) {
@@ -346,13 +346,13 @@ load_x509_private_key(int mand, common_info_st * info)
fprintf(stderr,
"import error: could not find a valid PEM header; "
"check if your key is PEM encoded\n");
- exit(1);
+ app_exit(1);
}
if (ret < 0) {
fprintf(stderr, "error importing private key: %s: %s\n",
info->privkey, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return key;
@@ -400,7 +400,7 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size,
if (info->cert == NULL) {
if (mand) {
fprintf(stderr, "missing --load-certificate\n");
- exit(1);
+ app_exit(1);
} else
return NULL;
}
@@ -408,7 +408,7 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size,
fd = fopen(info->cert, "r");
if (fd == NULL) {
fprintf(stderr, "Could not open %s\n", info->cert);
- exit(1);
+ app_exit(1);
}
fix_lbuffer(file_size(fd));
@@ -424,7 +424,7 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size,
ret = gnutls_x509_crt_list_import2(&crt, &crt_max, &dat, GNUTLS_X509_FMT_PEM, 0);
if (ret < 0) {
fprintf(stderr, "Error loading certificates: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
*crt_size = crt_max;
@@ -455,7 +455,7 @@ gnutls_x509_crl_t *load_crl_list(int mand, size_t * crl_size,
if (info->crl == NULL) {
if (mand) {
fprintf(stderr, "missing --load-crl\n");
- exit(1);
+ app_exit(1);
} else
return NULL;
}
@@ -463,7 +463,7 @@ gnutls_x509_crl_t *load_crl_list(int mand, size_t * crl_size,
fd = fopen(info->crl, "r");
if (fd == NULL) {
fprintf(stderr, "Could not open %s\n", info->crl);
- exit(1);
+ app_exit(1);
}
fix_lbuffer(file_size(fd));
@@ -482,7 +482,7 @@ gnutls_x509_crl_t *load_crl_list(int mand, size_t * crl_size,
}
if (ret < 0) {
fprintf(stderr, "Error loading CRLs: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
*crl_size = crl_max;
@@ -509,7 +509,7 @@ gnutls_x509_crq_t load_request(common_info_st * info)
ret = gnutls_x509_crq_init(&crq);
if (ret < 0) {
fprintf(stderr, "crq_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
dat.data = (void *) read_binary_file(info->request, &size);
@@ -518,21 +518,21 @@ gnutls_x509_crq_t load_request(common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-request: %s\n",
info->request);
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crq_import(crq, &dat, info->incert_format);
if (ret == GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR) {
fprintf(stderr,
"import error: could not find a valid PEM header\n");
- exit(1);
+ app_exit(1);
}
free(dat.data);
if (ret < 0) {
fprintf(stderr, "error importing certificate request: %s: %s\n",
info->request, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return crq;
}
@@ -547,7 +547,7 @@ gnutls_privkey_t load_ca_private_key(common_info_st * info)
if (info->ca_privkey == NULL) {
fprintf(stderr, "missing --load-ca-privkey\n");
- exit(1);
+ app_exit(1);
}
if (gnutls_url_is_supported(info->ca_privkey) != 0)
@@ -559,7 +559,7 @@ gnutls_privkey_t load_ca_private_key(common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-ca-privkey: %s\n",
info->ca_privkey);
- exit(1);
+ app_exit(1);
}
key = _load_privkey(&dat, info);
@@ -584,13 +584,13 @@ gnutls_x509_crt_t load_ca_cert(unsigned mand, common_info_st * info)
if (info->ca == NULL) {
fprintf(stderr, "missing --load-ca-certificate\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_init(&crt);
if (ret < 0) {
fprintf(stderr, "crt_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (gnutls_url_is_supported(info->ca) != 0) {
@@ -598,7 +598,7 @@ gnutls_x509_crt_t load_ca_cert(unsigned mand, common_info_st * info)
if (ret < 0) {
fprintf(stderr, "error importing CA certificate: %s: %s\n",
info->ca, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return crt;
}
@@ -609,7 +609,7 @@ gnutls_x509_crt_t load_ca_cert(unsigned mand, common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-ca-certificate: %s\n",
info->ca);
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_import(crt, &dat, info->incert_format);
@@ -617,7 +617,7 @@ gnutls_x509_crt_t load_ca_cert(unsigned mand, common_info_st * info)
if (ret < 0) {
fprintf(stderr, "error importing CA certificate: %s: %s\n",
info->ca, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return crt;
@@ -638,7 +638,7 @@ gnutls_pubkey_t load_pubkey(int mand, common_info_st * info)
if (info->pubkey == NULL) {
fprintf(stderr, "missing --load-pubkey\n");
- exit(1);
+ app_exit(1);
}
if (gnutls_url_is_supported(info->pubkey) != 0)
@@ -647,7 +647,7 @@ gnutls_pubkey_t load_pubkey(int mand, common_info_st * info)
ret = gnutls_pubkey_init(&key);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
dat.data = (void *) read_binary_file(info->pubkey, &size);
@@ -655,7 +655,7 @@ gnutls_pubkey_t load_pubkey(int mand, common_info_st * info)
if (!dat.data) {
fprintf(stderr, "error reading file at --load-pubkey: %s\n", info->pubkey);
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import(key, &dat, info->incert_format);
@@ -665,12 +665,12 @@ gnutls_pubkey_t load_pubkey(int mand, common_info_st * info)
fprintf(stderr,
"import error: could not find a valid PEM header; "
"check if your key has the PUBLIC KEY header\n");
- exit(1);
+ app_exit(1);
}
} else if (ret < 0) {
fprintf(stderr, "importing public key: %s: %s\n",
info->pubkey, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
free(dat.data);
@@ -688,7 +688,7 @@ gnutls_pubkey_t load_public_key_or_import(int mand,
if (ret < 0) {
fprintf(stderr, "gnutls_pubkey_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (!privkey || (ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0)) < 0) { /* could not get (e.g. on PKCS #11 */
@@ -696,7 +696,7 @@ gnutls_pubkey_t load_public_key_or_import(int mand,
pubkey = load_pubkey(0, info);
if (pubkey == NULL && mand) {
fprintf(stderr, "You must specify --load-privkey\n");
- exit(1);
+ app_exit(1);
}
}
@@ -760,7 +760,7 @@ gnutls_sec_param_t str_to_sec_param(const char *str)
} else {
fprintf(stderr, "Unknown security parameter string: %s\n",
str);
- exit(1);
+ app_exit(1);
}
}
@@ -869,7 +869,7 @@ const gnutls_ecc_curve_t *list, *p;
gnutls_ecc_curve_get_name(*p));
p++;
}
- exit(1);
+ app_exit(1);
}
void
@@ -937,7 +937,7 @@ void _pubkey_info(FILE * outfile,
if (ret < 0) {
fprintf(stderr, "pubkey_print error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "%s\n", data.data);
@@ -949,7 +949,7 @@ void _pubkey_info(FILE * outfile,
&size);
if (ret < 0) {
fprintf(stderr, "export error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\n%s\n", lbuffer);
@@ -1013,7 +1013,7 @@ void dh_info(FILE * infile, FILE * outfile, common_info_st * ci)
if (gnutls_dh_params_init(&dh_params) < 0) {
fprintf(stderr, "Error in dh parameter initialization\n");
- exit(1);
+ app_exit(1);
}
params.data = (void *) fread_file(infile, &size);
@@ -1028,7 +1028,7 @@ void dh_info(FILE * infile, FILE * outfile, common_info_st * ci)
if (ret2 < 0) {
fprintf(stderr, "Error parsing dh params: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -1036,7 +1036,7 @@ void dh_info(FILE * infile, FILE * outfile, common_info_st * ci)
if (ret < 0) {
fprintf(stderr, "Error exporting parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (ci->outcert_format == GNUTLS_X509_FMT_PEM)
@@ -1092,7 +1092,7 @@ int cipher_to_flags(const char *cipher)
}
fprintf(stderr, "unknown cipher %s\n", cipher);
- exit(1);
+ app_exit(1);
}
static void privkey_info_int(FILE *outfile, common_info_st * cinfo,
@@ -1251,7 +1251,7 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k
if (ret < 0) {
fprintf(stderr, "privkey_export: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (cinfo->no_compat == 0 && gnutls_x509_privkey_get_seed(key, NULL, NULL, 0) != GNUTLS_E_INVALID_REQUEST) {
@@ -1265,7 +1265,7 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k
if (ret < 0) {
fprintf(stderr, "privkey_export: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -1284,7 +1284,7 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k
if (ret < 0) {
fprintf(stderr, "privkey_export_pkcs8: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -1322,7 +1322,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
fprintf(stderr,
"Error initializing key: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (info->seed_size > 0) {
@@ -1330,7 +1330,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
if (info->seed_size < 32) {
fprintf(stderr, "For DH parameter generation a 32-byte seed value or larger is expected (have: %d); use -d 2 for more information.\n", (int)info->seed_size);
- exit(1);
+ app_exit(1);
}
data.type = GNUTLS_KEYGEN_SEED;
@@ -1346,7 +1346,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
fprintf(stderr,
"Error generating DSA parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (info->outcert_format == GNUTLS_X509_FMT_PEM) {
@@ -1361,7 +1361,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
fprintf(stderr,
"Error importing DSA parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_privkey_deinit(pkey);
@@ -1371,7 +1371,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
fprintf(stderr,
"Error generating parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -1381,12 +1381,12 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
if (ret < 0) {
fprintf(stderr, "Error exporting parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
} else {
if (info->provable != 0) {
fprintf(stderr, "The DH parameters obtained via this option are not provable\n");
- exit(1);
+ app_exit(1);
}
#if defined(ENABLE_DHE) || defined(ENABLE_ANON)
if (bits <= 2048) {
@@ -1415,7 +1415,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
if (ret < 0) {
fprintf(stderr, "Error exporting parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
#elif defined(ENABLE_SRP)
if (bits <= 1024) {
@@ -1444,12 +1444,12 @@ int generate_prime(FILE * outfile, int how, common_info_st * info)
if (ret < 0) {
fprintf(stderr, "Error exporting parameters: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
#else
fprintf(stderr,
"Parameters unavailable as SRP is disabled.\n");
- exit(1);
+ app_exit(1);
#endif
}
@@ -1497,14 +1497,14 @@ void decode_seed(gnutls_datum_t *seed, const char *hex, unsigned hex_size)
if (seed->data == NULL) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
seed_size = hex_size;
ret = gnutls_hex2bin(hex, hex_size, seed->data, &seed_size);
if (ret < 0) {
fprintf(stderr, "Could not hex decode data: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
seed->size = seed_size;
diff --git a/src/certtool-common.h b/src/certtool-common.h
index b773b27ce6..e48396029f 100644
--- a/src/certtool-common.h
+++ b/src/certtool-common.h
@@ -75,6 +75,12 @@ typedef struct common_info {
unsigned no_compat;
} common_info_st;
+/* this must be provided by the app */
+void app_exit(int val)
+#ifdef __GNUC__
+__attribute__ ((noreturn))
+#endif
+;
int cipher_to_flags(const char *cipher);
void
diff --git a/src/certtool.c b/src/certtool.c
index 8a99dc7fce..5526598f2b 100644
--- a/src/certtool.c
+++ b/src/certtool.c
@@ -86,6 +86,8 @@ static void pubkey_keyid(common_info_st * cinfo);
static void certificate_fpr(common_info_st * cinfo);
FILE *outfile;
+static const char *outfile_name = NULL; /* to delete on exit */
+
FILE *infile;
static gnutls_digest_algorithm_t default_dig;
static unsigned int incert_format, outcert_format;
@@ -97,6 +99,15 @@ gnutls_certificate_print_formats_t full_format = GNUTLS_CRT_PRINT_FULL;
int batch;
int ask_pass;
+/* ensure we cleanup */
+void app_exit(int val)
+{
+ if (val != 0) {
+ if (outfile_name)
+ remove(outfile_name);
+ }
+ exit(val);
+}
static void tls_log_func(int level, const char *str)
{
@@ -127,7 +138,7 @@ generate_private_key_int(common_info_st * cinfo)
ret = gnutls_x509_privkey_init(&key);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
bits = get_bits(key_type, cinfo->bits, cinfo->sec_param, 1);
@@ -155,7 +166,7 @@ generate_private_key_int(common_info_st * cinfo)
if (provable && (key_type != GNUTLS_PK_RSA && key_type != GNUTLS_PK_DSA)) {
fprintf(stderr,
"The --provable parameter cannot be used with ECDSA keys.\n");
- exit(1);
+ app_exit(1);
}
if (bits > 1024 && key_type == GNUTLS_PK_DSA)
@@ -194,14 +205,14 @@ generate_private_key_int(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "privkey_generate: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_privkey_verify_params(key);
if (ret < 0) {
fprintf(stderr, "privkey_verify_params: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return key;
@@ -234,7 +245,7 @@ static void verify_provable_privkey(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "Error verifying private key: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
printf("Key was verified\n");
@@ -264,7 +275,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
ret = gnutls_x509_crt_init(&crt);
if (ret < 0) {
fprintf(stderr, "crt_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
crq = load_request(cinfo);
@@ -289,7 +300,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_proxy_dn: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
get_dn_crt_set(crt);
@@ -323,7 +334,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_key: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_pubkey_deinit(pubkey);
} else {
@@ -331,7 +342,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_crq: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
crq_extensions_set(crt, crq);
@@ -350,7 +361,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "serial: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -363,7 +374,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_activation: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
do {
@@ -384,7 +395,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_expiration: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
if (!batch)
@@ -396,7 +407,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_crq: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -426,7 +437,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_proxy: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -443,7 +454,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "basic_constraints: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
client = get_tls_client_status();
@@ -454,7 +465,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -477,7 +488,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
} else if (!proxy) {
get_email_set(TYPE_CRT, crt);
@@ -513,7 +524,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
}
@@ -538,7 +549,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -550,7 +561,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -562,7 +573,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -592,7 +603,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "key_usage: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -607,7 +618,7 @@ generate_certificate(gnutls_privkey_t * ret_key,
if (result < 0) {
fprintf(stderr, "set_subject_key_id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -626,9 +637,9 @@ generate_certificate(gnutls_privkey_t * ret_key,
(crt, lbuffer, size);
if (result < 0) {
fprintf(stderr,
- "set_authority_key_id: %s\n",
+ "error setting authority key id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
}
@@ -642,9 +653,9 @@ generate_certificate(gnutls_privkey_t * ret_key,
vers = 3;
result = gnutls_x509_crt_set_version(crt, vers);
if (result < 0) {
- fprintf(stderr, "set_version: %s\n",
+ fprintf(stderr, "error setting certificate version: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
*ret_key = key;
@@ -667,7 +678,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
if (crls != NULL) {
if (crl_size > 1) {
fprintf(stderr, "load_crl: too many CRLs present\n");
- exit(1);
+ app_exit(1);
}
crl = crls[0];
gnutls_free(crls);
@@ -675,7 +686,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
result = gnutls_x509_crl_init(&crl);
if (result < 0) {
fprintf(stderr, "crl_init: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -688,7 +699,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "crl_set_crt: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crts[i]);
}
@@ -700,7 +711,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "this_update: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "Update times.\n");
@@ -711,14 +722,14 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "next_update: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_x509_crl_set_version(crl, 2);
if (result < 0) {
fprintf(stderr, "set_version: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
/* Authority Key ID.
@@ -735,7 +746,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "set_authority_key_id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -751,9 +762,9 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo)
result = gnutls_x509_crl_set_number(crl, serial, serial_size);
if (result < 0) {
- fprintf(stderr, "crl set_number: %s\n",
+ fprintf(stderr, "error setting CRL serial: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -774,7 +785,7 @@ static gnutls_digest_algorithm_t get_dig_for_pub(gnutls_pubkey_t pubkey)
fprintf(stderr,
"crt_get_preferred_hash_algorithm: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -798,7 +809,7 @@ static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt)
{
fprintf(stderr, "gnutls_pubkey_import_x509: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -833,7 +844,7 @@ void generate_self_signed(common_info_st * cinfo)
gnutls_x509_crt_privkey_sign(crt, crt, key, get_dig(crt), 0);
if (result < 0) {
fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -841,7 +852,7 @@ void generate_self_signed(common_info_st * cinfo)
gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size);
if (result < 0) {
fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -881,7 +892,7 @@ static void generate_signed_certificate(common_info_st * cinfo)
get_dig(ca_crt), 0);
if (result < 0) {
fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -889,7 +900,7 @@ static void generate_signed_certificate(common_info_st * cinfo)
gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size);
if (result < 0) {
fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -923,7 +934,7 @@ static void generate_proxy_certificate(common_info_st * cinfo)
0);
if (result < 0) {
fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -931,7 +942,7 @@ static void generate_proxy_certificate(common_info_st * cinfo)
gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size);
if (result < 0) {
fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -962,7 +973,7 @@ static void generate_signed_crl(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "crl_privkey_sign: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
print_crl_info(crl, stdlog);
@@ -994,7 +1005,7 @@ static void update_signed_certificate(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "set_activation: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
tim = get_expiration_date();
@@ -1003,7 +1014,7 @@ static void update_signed_certificate(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "set_expiration: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "\n\nSigning certificate...\n");
@@ -1013,7 +1024,7 @@ static void update_signed_certificate(common_info_st * cinfo)
get_dig(ca_crt), 0);
if (result < 0) {
fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -1021,7 +1032,7 @@ static void update_signed_certificate(common_info_st * cinfo)
gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size);
if (result < 0) {
fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -1054,10 +1065,12 @@ static void cmd_parser(int argc, char **argv)
outfile = safe_open_rw(OPT_ARG(OUTFILE), privkey_op);
if (outfile == NULL) {
fprintf(stderr, "Cannot open %s for writing\n", OPT_ARG(OUTFILE));
- exit(1);
+ app_exit(1);
}
- } else
+ outfile_name = OPT_ARG(OUTFILE);
+ } else {
outfile = stdout;
+ }
if (HAVE_OPT(INFILE)) {
struct stat st;
@@ -1068,7 +1081,7 @@ static void cmd_parser(int argc, char **argv)
infile = fopen(OPT_ARG(INFILE), "rb");
if (infile == NULL) {
fprintf(stderr, "Cannot open %s for reading\n", OPT_ARG(INFILE));
- exit(1);
+ app_exit(1);
}
} else
infile = stdin;
@@ -1122,7 +1135,7 @@ static void cmd_parser(int argc, char **argv)
default_dig = gnutls_digest_get_id(OPT_ARG(HASH));
if (default_dig == GNUTLS_DIG_UNKNOWN) {
fprintf(stderr, "invalid hash: %s\n", OPT_ARG(HASH));
- exit(1);
+ app_exit(1);
}
}
}
@@ -1144,7 +1157,7 @@ static void cmd_parser(int argc, char **argv)
if ((ret = gnutls_global_init()) < 0) {
fprintf(stderr, "global_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
memset(&cinfo, 0, sizeof(cinfo));
@@ -1161,7 +1174,7 @@ static void cmd_parser(int argc, char **argv)
if (ret < 0) {
fprintf(stderr, "pkcs11_add_provider: %s",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
}
@@ -1351,14 +1364,14 @@ void certificate_info(int pubkey, common_info_st * cinfo)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret =
gnutls_x509_crt_list_import2(&crts, &crt_num, &pem, incert_format, 0);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
free(pem.data);
@@ -1389,7 +1402,7 @@ void certificate_info(int pubkey, common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -1415,21 +1428,21 @@ void pgp_certificate_info(void)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_openpgp_crt_init(&crt);
if (ret < 0) {
fprintf(stderr, "openpgp_crt_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_openpgp_crt_import(crt, &pem, incert_format);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
free(pem.data);
@@ -1449,7 +1462,7 @@ void pgp_certificate_info(void)
{
fprintf(stderr, "verify signature error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -1467,7 +1480,7 @@ void pgp_certificate_info(void)
gnutls_openpgp_crt_export(crt, outcert_format, lbuffer, &size);
if (ret < 0) {
fprintf(stderr, "export error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "%s\n", lbuffer);
@@ -1496,7 +1509,7 @@ void pgp_privkey_info(void)
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
/* Public key algorithm
@@ -1505,7 +1518,7 @@ void pgp_privkey_info(void)
if (subkeys < 0) {
fprintf(stderr, "privkey_get_subkey_count: %s\n",
gnutls_strerror(subkeys));
- exit(1);
+ app_exit(1);
}
for (i = -1; i < subkeys; i++) {
@@ -1636,7 +1649,7 @@ void pgp_privkey_info(void)
NULL, 0, lbuffer, &size);
if (ret < 0) {
fprintf(stderr, "export error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\n%s\n", lbuffer);
@@ -1657,21 +1670,21 @@ void pgp_ring_info(void)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_openpgp_keyring_init(&ring);
if (ret < 0) {
fprintf(stderr, "openpgp_keyring_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_openpgp_keyring_import(ring, &pem, incert_format);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
free(pem.data);
@@ -1684,7 +1697,7 @@ void pgp_ring_info(void)
else {
fprintf(stderr, "keyring error: %s\n",
gnutls_strerror(count));
- exit(1);
+ app_exit(1);
}
for (i = 0; i < count; i++) {
@@ -1692,7 +1705,7 @@ void pgp_ring_info(void)
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -1701,7 +1714,7 @@ void pgp_ring_info(void)
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -1741,7 +1754,7 @@ print_certificate_info(gnutls_x509_crt_t crt, FILE * out, unsigned int all)
if (out == stderr && batch == 0) /* interactive */
if (read_yesno("Is the above information ok? (y/N): ", 0)
== 0) {
- exit(1);
+ app_exit(1);
}
}
@@ -1755,7 +1768,7 @@ static void print_crl_info(gnutls_x509_crl_t crl, FILE * out)
ret = gnutls_x509_crl_print(crl, full_format, &data);
if (ret < 0) {
fprintf(stderr, "crl_print: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "%s\n", data.data);
@@ -1766,7 +1779,7 @@ static void print_crl_info(gnutls_x509_crl_t crl, FILE * out)
gnutls_x509_crl_export2(crl, outcert_format, &cout);
if (ret < 0) {
fprintf(stderr, "crl_export: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(cout.data, 1, cout.size, outfile);
@@ -1783,7 +1796,7 @@ void crl_info(void)
ret = gnutls_x509_crl_init(&crl);
if (ret < 0) {
fprintf(stderr, "crl_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
pem.data = (void *) fread_file(infile, &size);
@@ -1791,7 +1804,7 @@ void crl_info(void)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crl_import(crl, &pem, incert_format);
@@ -1799,7 +1812,7 @@ void crl_info(void)
free(pem.data);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
print_crl_info(crl, outfile);
@@ -1818,7 +1831,7 @@ static void print_crq_info(gnutls_x509_crq_t crq, FILE * out)
if (ret < 0) {
fprintf(stderr, "crq_print: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "%s\n", data.data);
@@ -1839,7 +1852,7 @@ static void print_crq_info(gnutls_x509_crq_t crq, FILE * out)
ret = gnutls_x509_crq_export(crq, outcert_format, lbuffer, &size);
if (ret < 0) {
fprintf(stderr, "crq_export: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -1855,7 +1868,7 @@ void crq_info(void)
ret = gnutls_x509_crq_init(&crq);
if (ret < 0) {
fprintf(stderr, "crq_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
pem.data = (void *) fread_file(infile, &size);
@@ -1863,7 +1876,7 @@ void crq_info(void)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crq_import(crq, &pem, incert_format);
@@ -1871,7 +1884,7 @@ void crq_info(void)
free(pem.data);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
print_crq_info(crq, outfile);
@@ -1916,7 +1929,7 @@ void privkey_info(common_info_st * cinfo)
}
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
/* On this option we may import from PKCS #8 but we are always exporting
* to our format. */
@@ -1950,7 +1963,7 @@ void generate_request(common_info_st * cinfo)
ret = gnutls_x509_crq_init(&crq);
if (ret < 0) {
fprintf(stderr, "crq_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
/* Load the private key.
@@ -1959,14 +1972,14 @@ void generate_request(common_info_st * cinfo)
if (!pkey) {
if (HAVE_OPT(LOAD_PUBKEY)) {
fprintf(stderr, "--load-pubkey was specified without corresponding --load-privkey\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_privkey_init(&pkey);
if (ret < 0) {
fprintf(stderr, "privkey_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
xkey = generate_private_key_int(cinfo);
@@ -1979,7 +1992,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "privkey_import_x509: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2016,7 +2029,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "set_pass: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2033,7 +2046,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "set_basic_constraints: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (pk == GNUTLS_PK_RSA) {
@@ -2062,7 +2075,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2073,7 +2086,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2084,7 +2097,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2095,7 +2108,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2115,7 +2128,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_usage: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = get_tls_client_status();
@@ -2125,7 +2138,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2136,7 +2149,7 @@ void generate_request(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "key_kp: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2148,7 +2161,7 @@ void generate_request(common_info_st * cinfo)
ret = gnutls_x509_crq_set_pubkey(crq, pubkey);
if (ret < 0) {
fprintf(stderr, "set_key: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret =
@@ -2156,7 +2169,7 @@ void generate_request(common_info_st * cinfo)
get_dig_for_pub(pubkey), 0);
if (ret < 0) {
fprintf(stderr, "sign: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
print_crq_info(crq, outfile);
@@ -2185,7 +2198,7 @@ static int detailed_verification(gnutls_x509_crt_t cert,
if (ret < 0) {
fprintf(stderr, "gnutls_x509_crt_get_issuer_dn: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_get_dn3(cert, &name, 0);
@@ -2196,7 +2209,7 @@ static int detailed_verification(gnutls_x509_crt_t cert,
} else {
fprintf(stderr, "gnutls_x509_crt_get_dn: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2211,7 +2224,7 @@ static int detailed_verification(gnutls_x509_crt_t cert,
fprintf(stderr,
"gnutls_x509_crt_get_issuer_dn: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tChecked against: %s\n", issuer_name.data);
@@ -2227,7 +2240,7 @@ static int detailed_verification(gnutls_x509_crt_t cert,
fprintf(stderr,
"gnutls_x509_crl_get_issuer_dn: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
tmp_size = sizeof(tmp);
@@ -2243,7 +2256,7 @@ static int detailed_verification(gnutls_x509_crt_t cert,
if (ret < 0) {
fprintf(stderr, "gnutls_hex_encode: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
fprintf(outfile, "\tChecked against CRL[%s] of: %s\n",
@@ -2270,13 +2283,13 @@ static void load_data(common_info_st *cinfo, gnutls_datum_t *data)
fp = fopen(cinfo->data_file, "r");
if (fp == NULL) {
fprintf(stderr, "Could not open %s\n", cinfo->data_file);
- exit(1);
+ app_exit(1);
}
data->data = (void *) fread_file(fp, &size);
if (data->data == NULL) {
fprintf(stderr, "Error reading data file");
- exit(1);
+ app_exit(1);
}
data->size = size;
@@ -2292,7 +2305,7 @@ static gnutls_x509_trust_list_t load_tl(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trust_list_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (cinfo->ca == NULL) { /* system */
@@ -2300,7 +2313,7 @@ static gnutls_x509_trust_list_t load_tl(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "Error loading system trust: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "Loaded system trust (%d CAs available)\n", ret);
} else if (cinfo->ca != NULL) {
@@ -2314,7 +2327,7 @@ static gnutls_x509_trust_list_t load_tl(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trust_add_trust_file: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "Loaded CAs (%d available)\n", ret);
@@ -2341,7 +2354,7 @@ static gnutls_x509_trust_list_t load_tl_from_cert_chain(const char *cert, int ce
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trust_list_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
tmp.data = (void *) cert;
@@ -2351,7 +2364,7 @@ static gnutls_x509_trust_list_t load_tl_from_cert_chain(const char *cert, int ce
if (ret < 0 || x509_ncerts < 1) {
fprintf(stderr, "error parsing CRTs: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret =
@@ -2370,7 +2383,7 @@ static gnutls_x509_trust_list_t load_tl_from_cert_chain(const char *cert, int ce
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trust_add_cas: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
/* add CRLs */
@@ -2381,7 +2394,7 @@ static gnutls_x509_trust_list_t load_tl_from_cert_chain(const char *cert, int ce
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trust_add_crls: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -2439,7 +2452,7 @@ _verify_x509_mem(const void *cert, int cert_size, common_info_st *cinfo,
if (ret < 0 || x509_ncerts < 1) {
fprintf(stderr, "error parsing CRTs: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
vflags = GNUTLS_VERIFY_DO_NOT_ALLOW_SAME;
@@ -2490,7 +2503,7 @@ _verify_x509_mem(const void *cert, int cert_size, common_info_st *cinfo,
if (ret < 0) {
fprintf(stderr, "gnutls_x509_trusted_list_verify_crt: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "Chain verification output: ");
@@ -2503,6 +2516,7 @@ _verify_x509_mem(const void *cert, int cert_size, common_info_st *cinfo,
gnutls_x509_crt_deinit(x509_cert_list[i]);
gnutls_free(x509_cert_list);
+ /* intentionally does not use app_exit() to preserve outfile */
if (output != 0)
exit(EXIT_FAILURE);
@@ -2526,7 +2540,7 @@ static void print_verification_res(FILE * out, unsigned int output)
&pout, 0);
if (ret < 0) {
fprintf(stderr, "error: %s\n", gnutls_strerror(ret));
- exit(EXIT_FAILURE);
+ app_exit(EXIT_FAILURE);
}
fprintf(out, " %s", pout.data);
@@ -2540,13 +2554,13 @@ static void verify_chain(common_info_st * cinfo)
if (cinfo->ca != NULL) {
fprintf(stderr, "This option cannot be combined with --load-ca-certificate\n");
- exit(1);
+ app_exit(1);
}
buf = (void *) fread_file(infile, &size);
if (buf == NULL) {
- fprintf(stderr, "Error reading chain");
- exit(1);
+ fprintf(stderr, "Error reading certificate chain");
+ app_exit(1);
}
_verify_x509_mem(buf, size, cinfo, 0, OPT_ARG(VERIFY_PURPOSE),
@@ -2563,7 +2577,7 @@ static void verify_certificate(common_info_st * cinfo)
cert = (void *) fread_file(infile, &cert_size);
if (cert == NULL) {
fprintf(stderr, "Error reading certificate chain");
- exit(1);
+ app_exit(1);
}
_verify_x509_mem(cert, cert_size, cinfo, 1,
@@ -2592,7 +2606,7 @@ void verify_crl(common_info_st * cinfo)
ret = gnutls_x509_crt_get_dn3(issuer, &dn, 0);
if (ret < 0) {
fprintf(stderr, "crt_get_dn: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tSubject: %s\n\n", dn.data);
@@ -2600,7 +2614,7 @@ void verify_crl(common_info_st * cinfo)
ret = gnutls_x509_crl_init(&crl);
if (ret < 0) {
fprintf(stderr, "crl_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
pem.data = (void *) fread_file(infile, &size);
@@ -2608,14 +2622,14 @@ void verify_crl(common_info_st * cinfo)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crl_import(crl, &pem, incert_format);
free(pem.data);
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
print_crl_info(crl, outfile);
@@ -2625,7 +2639,7 @@ void verify_crl(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "verification error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (output) {
@@ -2640,7 +2654,7 @@ void verify_crl(common_info_st * cinfo)
&pout, 0);
if (ret < 0) {
fprintf(stderr, "error: %s\n", gnutls_strerror(ret));
- exit(EXIT_FAILURE);
+ app_exit(EXIT_FAILURE);
}
fprintf(outfile, " %s", pout.data);
@@ -2686,7 +2700,7 @@ static void print_raw(const char *prefix, const gnutls_datum_t *raw)
if (ret < 0) {
fprintf(stderr, "gnutls_hex_encode2: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "%s: %s\n", prefix, tmp.data);
@@ -2756,7 +2770,7 @@ void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_
ret = gnutls_pkcs7_init(&pkcs7);
if (ret < 0) {
fprintf(stderr, "p7_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
data.data = (void *) fread_file(infile, &size);
@@ -2764,7 +2778,7 @@ void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_
if (!data.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs7_import(pkcs7, &data, cinfo->incert_format);
@@ -2772,7 +2786,7 @@ void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_
if (ret < 0) {
fprintf(stderr, "import error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (cinfo->cert != NULL) {
@@ -2811,7 +2825,7 @@ void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_
ret = gnutls_pkcs7_get_embedded_data(pkcs7, 0, &tmp);
if (ret < 0) {
fprintf(stderr, "error getting embedded data: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(tmp.data, 1, tmp.size, outfile);
@@ -2854,7 +2868,7 @@ void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_
else
gnutls_x509_trust_list_deinit(tl, 1);
free(detached.data);
- exit(ecode);
+ app_exit(ecode);
}
void pkcs7_sign(common_info_st * cinfo, unsigned embed)
@@ -2876,7 +2890,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed)
ret = gnutls_pkcs7_init(&pkcs7);
if (ret < 0) {
fprintf(stderr, "p7_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
data.data = (void *) fread_file(infile, &size);
@@ -2884,7 +2898,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed)
if (!data.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
signer = load_cert(1, cinfo);
@@ -2896,7 +2910,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed)
ret = gnutls_pkcs7_sign(pkcs7, signer, key, &data, NULL, NULL, get_dig(signer), flags);
if (ret < 0) {
fprintf(stderr, "Error signing: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -2904,7 +2918,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed)
gnutls_pkcs7_export(pkcs7, outcert_format, lbuffer, &size);
if (ret < 0) {
fprintf(stderr, "pkcs7_export: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -2912,7 +2926,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed)
gnutls_privkey_deinit(key);
gnutls_x509_crt_deinit(signer);
gnutls_pkcs7_deinit(pkcs7);
- exit(0);
+ app_exit(0);
}
void pkcs7_generate(common_info_st * cinfo)
@@ -2931,14 +2945,14 @@ void pkcs7_generate(common_info_st * cinfo)
ret = gnutls_pkcs7_init(&pkcs7);
if (ret < 0) {
fprintf(stderr, "p7_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
for (i=0;i<crt_size;i++) {
ret = gnutls_pkcs7_set_crt(pkcs7, crts[i]);
if (ret < 0) {
fprintf(stderr, "Error adding cert: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crts[i]);
}
@@ -2948,7 +2962,7 @@ void pkcs7_generate(common_info_st * cinfo)
ret = gnutls_pkcs7_set_crl(pkcs7, crls[i]);
if (ret < 0) {
fprintf(stderr, "Error adding CRL: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crl_deinit(crls[i]);
}
@@ -2958,14 +2972,14 @@ void pkcs7_generate(common_info_st * cinfo)
gnutls_pkcs7_export2(pkcs7, outcert_format, &tmp);
if (ret < 0) {
fprintf(stderr, "pkcs7_export: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(tmp.data, 1, tmp.size, outfile);
gnutls_free(tmp.data);
gnutls_pkcs7_deinit(pkcs7);
- exit(0);
+ app_exit(0);
}
@@ -2993,7 +3007,7 @@ void generate_pkcs8(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "key_export: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -3033,7 +3047,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (keys == NULL && crts == NULL && ca_crt == NULL && crls == NULL) {
fprintf(stderr, "You must specify one of\n\t--load-privkey\n\t--load-certificate\n\t--load-ca-certificate\n\t--load-crl\n");
- exit(1);
+ app_exit(1);
}
if (HAVE_OPT(P12_NAME)) {
@@ -3046,7 +3060,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "pkcs12_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
pass = get_password(cinfo, &flags, 1);
@@ -3059,14 +3073,14 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_set_crt(bag, crts[i]);
if (result < 0) {
fprintf(stderr, "set_crt[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
indx = result;
@@ -3079,7 +3093,7 @@ void generate_pkcs12(common_info_st * cinfo)
fprintf(stderr,
"bag_set_friendly_name: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -3089,7 +3103,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "key_id[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
key_id.data = _key_id;
@@ -3099,21 +3113,21 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_set_key_id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_encrypt(bag, pass, flags);
if (result < 0) {
fprintf(stderr, "bag_encrypt: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_set_bag(pkcs12, bag);
if (result < 0) {
fprintf(stderr, "set_bag: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs12_bag_deinit(bag);
}
@@ -3126,28 +3140,28 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_set_crl(bag, crls[i]);
if (result < 0) {
fprintf(stderr, "set_crl[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_encrypt(bag, pass, flags);
if (result < 0) {
fprintf(stderr, "bag_encrypt: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_set_bag(pkcs12, bag);
if (result < 0) {
fprintf(stderr, "set_bag: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs12_bag_deinit(bag);
}
@@ -3160,28 +3174,28 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_set_crt(bag, ca_crt);
if (result < 0) {
fprintf(stderr, "set_crt[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_bag_encrypt(bag, pass, flags);
if (result < 0) {
fprintf(stderr, "bag_encrypt: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_set_bag(pkcs12, bag);
if (result < 0) {
fprintf(stderr, "set_bag: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs12_bag_deinit(bag);
}
@@ -3193,7 +3207,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -3205,7 +3219,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "key_export[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
data.data = lbuffer;
@@ -3217,7 +3231,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_set_data: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
indx = result;
@@ -3227,7 +3241,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_set_friendly_name: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = sizeof(_key_id);
@@ -3237,7 +3251,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "key_id[%d]: %s\n", i,
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
key_id.data = _key_id;
@@ -3247,14 +3261,14 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_set_key_id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_set_bag(pkcs12, kbag);
if (result < 0) {
fprintf(stderr, "set_bag: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs12_bag_deinit(kbag);
}
@@ -3263,7 +3277,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "generate_mac: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -3272,7 +3286,7 @@ void generate_pkcs12(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "pkcs12_export: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -3316,7 +3330,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag)
count = gnutls_pkcs12_bag_get_count(bag);
if (count < 0) {
fprintf(stderr, "get_count: %s\n", gnutls_strerror(count));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tElements: %d\n", count);
@@ -3326,7 +3340,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag)
if (type < 0) {
fprintf(stderr, "get_type: %s\n",
gnutls_strerror(type));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "\tType: %s\n", BAGTYPE(type));
@@ -3335,7 +3349,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag)
if (result < 0) {
fprintf(stderr, "get_data: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
if (type == GNUTLS_BAG_PKCS8_ENCRYPTED_KEY) {
@@ -3352,7 +3366,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag)
if (result < 0) {
fprintf(stderr, "get_friendly_name: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
if (name)
@@ -3364,7 +3378,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag)
if (result < 0) {
fprintf(stderr, "get_key_id: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
if (id.size > 0)
@@ -3444,7 +3458,7 @@ void pkcs12_bag_enc_info(gnutls_pkcs12_bag_t bag, FILE *out)
if (ret < 0) {
fprintf(stderr, "hex encode error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "\tSalt: %s\n", hex);
@@ -3472,7 +3486,7 @@ void pkcs12_info(common_info_st * cinfo)
result = gnutls_pkcs12_init(&pkcs12);
if (result < 0) {
fprintf(stderr, "p12_init: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
data.data = (void *) fread_file(infile, &size);
@@ -3480,14 +3494,14 @@ void pkcs12_info(common_info_st * cinfo)
if (!data.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_import(pkcs12, &data, incert_format, 0);
free(data.data);
if (result < 0) {
fprintf(stderr, "p12_import: %s\n", gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
salt_size = sizeof(salt);
@@ -3508,7 +3522,7 @@ void pkcs12_info(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "hex encode error: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tSalt: %s\n", hex);
@@ -3530,7 +3544,7 @@ void pkcs12_info(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
result = gnutls_pkcs12_get_bag(pkcs12, indx, bag);
@@ -3543,7 +3557,7 @@ void pkcs12_info(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_count: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "BAG #%d\n", indx);
@@ -3552,7 +3566,7 @@ void pkcs12_info(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "bag_init: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
if (result == GNUTLS_BAG_ENCRYPTED) {
@@ -3573,7 +3587,7 @@ void pkcs12_info(common_info_st * cinfo)
if (result < 0) {
fprintf(stderr, "encrypted bag_count: %s\n",
gnutls_strerror(result));
- exit(1);
+ app_exit(1);
}
}
@@ -3587,7 +3601,7 @@ void pkcs12_info(common_info_st * cinfo)
if (fail) {
fprintf(stderr,
"There were errors parsing the structure\n");
- exit(1);
+ app_exit(1);
}
}
@@ -3623,7 +3637,7 @@ void pkcs8_info_int(gnutls_datum_t *data, unsigned format,
return;
fprintf(stderr, "PKCS #8 read error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "%sPKCS #8 information:\n", tab);
@@ -3641,7 +3655,7 @@ void pkcs8_info_int(gnutls_datum_t *data, unsigned format,
if (ret < 0) {
fprintf(stderr, "hex encode error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "%s\tSalt: %s\n", tab, hex);
@@ -3662,7 +3676,7 @@ void pkcs8_info(void)
if (!data.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
pkcs8_info_int(&data, incert_format, 0, outfile, "");
@@ -3679,7 +3693,7 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data)
ret = gnutls_pkcs7_init(&pkcs7);
if (ret < 0) {
fprintf(stderr, "p7_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
data.data = (void *) fread_file(infile, &size);
@@ -3687,7 +3701,7 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data)
if (!data.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs7_import(pkcs7, &data, incert_format);
@@ -3695,7 +3709,7 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data)
if (ret < 0) {
fprintf(stderr, "import error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (display_data) {
@@ -3705,21 +3719,21 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data)
if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) {
if (ret < 0) {
fprintf(stderr, "error getting embedded data: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(tmp.data, 1, tmp.size, outfile);
gnutls_free(tmp.data);
} else {
fprintf(stderr, "no embedded data are available\n");
- exit(1);
+ app_exit(1);
}
} else {
ret = gnutls_pkcs7_print(pkcs7, GNUTLS_CRT_PRINT_FULL, &str);
if (ret < 0) {
fprintf(stderr, "printing error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "%s", str.data);
@@ -3732,7 +3746,7 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data)
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -3754,7 +3768,7 @@ void smime_to_pkcs7(void)
if (len == -1) {
fprintf(stderr,
"cannot find RFC 2822 header/body separator");
- exit(1);
+ app_exit(1);
}
}
while (strcmp(lineptr, "\r\n") != 0 && strcmp(lineptr, "\n") != 0);
@@ -3764,7 +3778,7 @@ void smime_to_pkcs7(void)
if (len == -1) {
fprintf(stderr,
"message has RFC 2822 header but no body");
- exit(1);
+ app_exit(1);
}
}
while (strcmp(lineptr, "\r\n") == 0 && strcmp(lineptr, "\n") == 0);
@@ -3801,7 +3815,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
ret = gnutls_pubkey_init(&pubkey);
if (ret < 0) {
fprintf(stderr, "pubkey_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (crt == NULL) {
@@ -3817,7 +3831,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "pubkey_import_x509: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crt);
} else if (crq != NULL) {
@@ -3825,7 +3839,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "pubkey_import_x509_crq: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crq_deinit(crq);
} else {
@@ -3839,7 +3853,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
fprintf(stderr,
"pubkey_import_privkey: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_privkey_deinit(privkey);
} else {
@@ -3852,7 +3866,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_init(&pubkey);
@@ -3860,7 +3874,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
fprintf(stderr,
"pubkey_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (memmem(pem.data, pem.size, "BEGIN CERTIFICATE", 16) != 0 ||
@@ -3870,7 +3884,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
fprintf(stderr,
"crt_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_import(crt, &pem, GNUTLS_X509_FMT_PEM);
@@ -3878,14 +3892,14 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
fprintf(stderr,
"crt_import: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_x509(pubkey, crt, 0);
if (ret < 0) {
fprintf(stderr, "pubkey_import_x509: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crt);
} else {
@@ -3894,7 +3908,7 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo)
fprintf(stderr,
"pubkey_import: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
free(pem.data);
@@ -3915,7 +3929,7 @@ void pubkey_info(gnutls_x509_crt_t crt, common_info_st * cinfo)
pubkey = find_pubkey(crt, cinfo);
if (pubkey == 0) {
fprintf(stderr, "find public key error\n");
- exit(1);
+ app_exit(1);
}
if (outcert_format == GNUTLS_X509_FMT_DER) {
@@ -3926,7 +3940,7 @@ void pubkey_info(gnutls_x509_crt_t crt, common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(lbuffer, 1, size, outfile);
@@ -3956,7 +3970,7 @@ void pubkey_keyid(common_info_st * cinfo)
pubkey = find_pubkey(NULL, cinfo);
if (pubkey == 0) {
fprintf(stderr, "find public key error\n");
- exit(1);
+ app_exit(1);
}
if (default_dig == GNUTLS_DIG_SHA1 || default_dig == GNUTLS_DIG_UNKNOWN)
@@ -3965,7 +3979,7 @@ void pubkey_keyid(common_info_st * cinfo)
flags = GNUTLS_KEYID_USE_SHA256;
else {
fprintf(stderr, "Cannot calculate key ID with the provided hash\n");
- exit(1);
+ app_exit(1);
}
fpr_size = sizeof(fpr);
@@ -3974,7 +3988,7 @@ void pubkey_keyid(common_info_st * cinfo)
fprintf(stderr,
"get_key_id: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
tmp.data = fpr;
@@ -3986,7 +4000,7 @@ void pubkey_keyid(common_info_st * cinfo)
fprintf(stderr,
"hex_encode: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fputs(txt, outfile);
@@ -4016,7 +4030,7 @@ void certificate_fpr(common_info_st * cinfo)
if (!pem.data) {
fprintf(stderr, "%s", infile ? "file" : "standard input");
- exit(1);
+ app_exit(1);
}
crt_num = 1;
@@ -4035,7 +4049,7 @@ void certificate_fpr(common_info_st * cinfo)
if (ret < 0) {
fprintf(stderr, "import error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fpr_size = sizeof(fpr);
@@ -4048,7 +4062,7 @@ void certificate_fpr(common_info_st * cinfo)
fprintf(stderr,
"get_key_id: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
tmp.data = fpr;
@@ -4060,7 +4074,7 @@ void certificate_fpr(common_info_st * cinfo)
fprintf(stderr,
"hex_encode: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fputs(txt, outfile);
diff --git a/src/danetool.c b/src/danetool.c
index 0334d94c5e..6ae8ff50b8 100644
--- a/src/danetool.c
+++ b/src/danetool.c
@@ -63,6 +63,7 @@ static void dane_check(const char *host, const char *proto,
const char *service, common_info_st * cinfo);
FILE *outfile;
+static const char *outfile_name = NULL;
static gnutls_digest_algorithm_t default_dig;
/* non interactive operation if set
@@ -70,6 +71,14 @@ static gnutls_digest_algorithm_t default_dig;
int batch = 0;
int ask_pass = 0;
+void app_exit(int val)
+{
+ if (val != 0) {
+ if (outfile_name)
+ remove(outfile_name);
+ }
+ exit(val);
+}
static void tls_log_func(int level, const char *str)
{
@@ -98,8 +107,9 @@ static void cmd_parser(int argc, char **argv)
outfile = safe_open_rw(OPT_ARG(OUTFILE), privkey_op);
if (outfile == NULL) {
fprintf(stderr, "%s", OPT_ARG(OUTFILE));
- exit(1);
+ app_exit(1);
}
+ outfile_name = OPT_ARG(OUTFILE);
} else
outfile = stdout;
@@ -123,7 +133,7 @@ static void cmd_parser(int argc, char **argv)
default_dig = GNUTLS_DIG_RMD160;
else {
fprintf(stderr, "invalid hash: %s", OPT_ARG(HASH));
- exit(1);
+ app_exit(1);
}
}
@@ -136,7 +146,7 @@ static void cmd_parser(int argc, char **argv)
if ((ret = gnutls_global_init()) < 0) {
fprintf(stderr, "global_init: %s", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
#ifdef ENABLE_PKCS11
pkcs11_common(NULL);
@@ -437,7 +447,7 @@ static void dane_check(const char *host, const char *proto,
remove(cinfo->cert);
}
- exit(retcode);
+ app_exit(retcode);
#else
fprintf(stderr,
"This functionality is disabled (GnuTLS was not compiled with support for DANE).\n");
@@ -472,7 +482,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crt);
@@ -484,7 +494,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "pubkey_init: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (crt != NULL) {
@@ -493,7 +503,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "pubkey_import_x509: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
size = lbuffer_size;
@@ -504,7 +514,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "pubkey_export: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_deinit(crt);
@@ -519,7 +529,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "export error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -537,7 +547,7 @@ static void dane_info(const char *host, const char *proto,
ret = gnutls_hash_fast(default_dig, lbuffer, size, digest);
if (ret < 0) {
fprintf(stderr, "hash error: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (default_dig == GNUTLS_DIG_SHA256)
@@ -566,7 +576,7 @@ static void dane_info(const char *host, const char *proto,
if (ret < 0) {
fprintf(stderr, "hex encode error: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "_%u._%s.%s. IN TLSA ( %.2x %.2x %.2x %s )\n",
@@ -603,7 +613,7 @@ static int cert_callback(gnutls_session_t session)
if (ret < 0) {
fprintf(stderr, "error[%d]: %s\n", __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
write(priv->fd, t.data, t.size);
@@ -631,7 +641,7 @@ gnutls_session_t init_tls_session(const char *hostname)
if (ret < 0) {
fprintf(stderr, "error[%d]: %s\n", __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_session_set_ptr(session, &priv);
@@ -672,7 +682,7 @@ static const char *obtain_cert(const char *hostname, const char *proto, const ch
if (ret < 0) {
fprintf(stderr, "error[%d]: %s\n", __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_certificate_set_verify_function(xcred, cert_callback);
@@ -703,7 +713,7 @@ static const char *obtain_cert(const char *hostname, const char *proto, const ch
int e = errno;
fprintf(stderr, "error[%d]: %s\n", __LINE__,
strerror(e));
- exit(1);
+ app_exit(1);
}
socket_open(&hd, hostname, txt_service, app_proto, socket_flags|SOCKET_FLAG_STARTTLS, str, NULL);
diff --git a/src/p11tool.c b/src/p11tool.c
index ff247835cd..e3b24b8353 100644
--- a/src/p11tool.c
+++ b/src/p11tool.c
@@ -51,9 +51,19 @@
static void cmd_parser(int argc, char **argv);
static FILE *outfile;
+static const char *outfile_name = NULL;
int batch = 0;
int ask_pass = 0;
+void app_exit(int val)
+{
+ if (val != 0) {
+ if (outfile_name)
+ remove(outfile_name);
+ }
+ exit(val);
+}
+
static void tls_log_func(int level, const char *str)
{
fprintf(stderr, "|<%d>| %s", level, str);
@@ -150,7 +160,7 @@ static void cmd_parser(int argc, char **argv)
if ((ret = gnutls_global_init()) < 0) {
fprintf(stderr, "global_init: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (HAVE_OPT(PROVIDER)) {
@@ -165,7 +175,7 @@ static void cmd_parser(int argc, char **argv)
if (ret < 0) {
fprintf(stderr, "pkcs11_add_provider: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
} else {
@@ -179,8 +189,9 @@ static void cmd_parser(int argc, char **argv)
outfile = safe_open_rw(OPT_ARG(OUTFILE), 0);
if (outfile == NULL) {
fprintf(stderr, "cannot open %s\n", OPT_ARG(OUTFILE));
- exit(1);
+ app_exit(1);
}
+ outfile_name = OPT_ARG(OUTFILE);
} else
outfile = stdout;
diff --git a/src/pkcs11.c b/src/pkcs11.c
index 975a97bc57..bd5bbf08e7 100644
--- a/src/pkcs11.c
+++ b/src/pkcs11.c
@@ -50,7 +50,7 @@ static char *_saved_url = NULL;
if (url == NULL) { \
fprintf(stderr, "warning: no token URL was provided for this operation; the available tokens are:\n\n"); \
pkcs11_token_list(out, det, info, 1); \
- exit(1); \
+ app_exit(1); \
} \
_saved_url = (void*)url; \
}
@@ -82,7 +82,7 @@ pkcs11_delete(FILE * outfile, const char *url,
("Are you sure you want to delete those objects? (y/N): ",
0);
if (ret == 0) {
- exit(1);
+ app_exit(1);
}
}
@@ -90,7 +90,7 @@ pkcs11_delete(FILE * outfile, const char *url,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\n%d objects deleted\n", ret);
@@ -144,12 +144,12 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in crt_list_import (1): %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (crt_list_size == 0) {
fprintf(stderr, "No matching objects found\n");
- exit(2);
+ app_exit(2);
}
for (i = 0; i < crt_list_size; i++) {
@@ -163,7 +163,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (info->only_urls) {
@@ -187,7 +187,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tLabel: %s\n", buf);
@@ -196,7 +196,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
str = gnutls_pkcs11_obj_flags_get_str(oflags);
if (str != NULL) {
@@ -212,7 +212,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tID: %s\n", buf);
@@ -274,35 +274,35 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_init(&pubkey);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_privkey_import_url(privkey, url, flags);
if (ret < 0) {
fprintf(stderr, "Cannot import private key: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_privkey(pubkey, privkey, GNUTLS_KEY_DIGITAL_SIGNATURE, flags);
if (ret < 0) {
fprintf(stderr, "Cannot import public key: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_privkey_sign_data(privkey, GNUTLS_DIG_SHA256, 0, &data, &sig);
if (ret < 0) {
fprintf(stderr, "Cannot sign data: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
pk = gnutls_pubkey_get_pk_algorithm(pubkey, NULL);
@@ -313,7 +313,7 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Cannot verify signed data: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "ok\n");
@@ -324,7 +324,7 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_url(pubkey, url, flags);
@@ -332,8 +332,8 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags,
fprintf(stderr, "Cannot find a corresponding public key object in token: %s\n",
gnutls_strerror(ret));
if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE)
- exit(0);
- exit(1);
+ app_exit(0);
+ app_exit(1);
}
fprintf(stderr, "Verifying against public key in the token... ");
@@ -342,7 +342,7 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Cannot verify signed data: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "ok\n");
@@ -370,21 +370,21 @@ pkcs11_export(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_obj_import_url(obj, url, obj_flags);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_obj_export3(obj, info->outcert_format, &t);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(t.data, 1, t.size, outfile);
@@ -417,14 +417,14 @@ pkcs11_export_chain(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_obj_import_url(obj, url, obj_flags);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
/* make a crt */
@@ -432,21 +432,21 @@ pkcs11_export_chain(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_import_pkcs11(xcrt, obj);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_obj_export3(obj, GNUTLS_X509_FMT_PEM, &t);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(t.data, 1, t.size, outfile);
fputs("\n\n", outfile);
@@ -461,7 +461,7 @@ pkcs11_export_chain(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(t.data, 1, t.size, outfile);
@@ -473,14 +473,14 @@ pkcs11_export_chain(FILE * outfile, const char *url, unsigned int flags,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_x509_crt_import(xcrt, &t, GNUTLS_X509_FMT_PEM);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_free(t.data);
@@ -565,7 +565,7 @@ pkcs11_token_list(FILE * outfile, unsigned int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (brief != 0) {
@@ -583,7 +583,7 @@ pkcs11_token_list(FILE * outfile, unsigned int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tLabel: %s\n", buf);
@@ -604,7 +604,7 @@ pkcs11_token_list(FILE * outfile, unsigned int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tManufacturer: %s\n", buf);
@@ -617,7 +617,7 @@ pkcs11_token_list(FILE * outfile, unsigned int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tModel: %s\n", buf);
@@ -630,7 +630,7 @@ pkcs11_token_list(FILE * outfile, unsigned int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(outfile, "\tSerial: %s\n", buf);
@@ -668,7 +668,7 @@ static void find_same_pubkey_with_id(const char *url, gnutls_x509_crt_t crt, gnu
ret = gnutls_pubkey_init(&pubkey);
if (ret < 0) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_x509(pubkey, crt, 0);
@@ -691,7 +691,7 @@ static void find_same_pubkey_with_id(const char *url, gnutls_x509_crt_t crt, gnu
if (ret < 0) {
fprintf(stderr, "Error in obj_list_import (1): %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (obj_list_size == 0)
@@ -730,14 +730,14 @@ static void find_same_pubkey_with_id(const char *url, gnutls_x509_crt_t crt, gnu
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
cid->data = gnutls_malloc(size);
cid->size = size;
if (cid->data == NULL) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
memcpy(cid->data, buf, size);
@@ -772,7 +772,7 @@ static void find_same_privkey_with_id(const char *url, gnutls_x509_crt_t crt, gn
ret = gnutls_pubkey_init(&pubkey);
if (ret < 0) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_x509(pubkey, crt, 0);
@@ -795,7 +795,7 @@ static void find_same_privkey_with_id(const char *url, gnutls_x509_crt_t crt, gn
if (ret < 0) {
fprintf(stderr, "Error in obj_list_import (1): %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
if (obj_list_size == 0)
@@ -822,7 +822,7 @@ static void find_same_privkey_with_id(const char *url, gnutls_x509_crt_t crt, gn
ret = gnutls_privkey_init(&privkey);
if (ret < 0) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_privkey_import_url(privkey, purl, 0);
@@ -839,7 +839,7 @@ static void find_same_privkey_with_id(const char *url, gnutls_x509_crt_t crt, gn
ret = gnutls_pubkey_init(&pubkey);
if (ret < 0) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0);
@@ -866,14 +866,14 @@ static void find_same_privkey_with_id(const char *url, gnutls_x509_crt_t crt, gn
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
cid->data = gnutls_malloc(size);
cid->size = size;
if (cid->data == NULL) {
fprintf(stderr, "memory error\n");
- exit(1);
+ app_exit(1);
}
memcpy(cid->data, buf, size);
@@ -921,7 +921,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
ret = gnutls_hex2bin(id, strlen(id), raw_id, &raw_id_size);
if (ret < 0) {
fprintf(stderr, "Error converting hex: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
cid.data = raw_id;
cid.size = raw_id_size;
@@ -937,7 +937,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
}
@@ -959,7 +959,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
ret = gnutls_hex_encode2(&cid, &hex);
if (ret < 0) {
fprintf(stderr, "Error converting hex: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "note: will re-use ID %s from corresponding public key\n", hex.data);
gnutls_free(hex.data);
@@ -970,7 +970,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
ret = gnutls_hex_encode2(&cid, &hex);
if (ret < 0) {
fprintf(stderr, "Error converting hex: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "note: will re-use ID %s from corresponding private key\n", hex.data);
gnutls_free(hex.data);
@@ -985,7 +985,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED)) &&
(flags & GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO) == 0)
fprintf(stderr, "note: some tokens may require security officer login for this operation\n");
- exit(1);
+ app_exit(1);
}
gnutls_x509_crt_get_key_usage(xcrt, &key_usage, NULL);
@@ -1002,7 +1002,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_x509_privkey_deinit(xkey);
}
@@ -1016,7 +1016,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__,
__LINE__, gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_pubkey_deinit(xpubkey);
}
@@ -1024,7 +1024,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label,
if (xkey == NULL && xcrt == NULL && secret_key == NULL && xpubkey == NULL) {
fprintf(stderr,
"You must use --load-privkey, --load-certificate, --load-pubkey or --secret-key to load the file to be copied\n");
- exit(1);
+ app_exit(1);
}
UNFIX;
@@ -1053,7 +1053,7 @@ pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t pk,
ret = gnutls_hex2bin(id, strlen(id), raw_id, &raw_id_size);
if (ret < 0) {
fprintf(stderr, "Error converting hex: %s\n", gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
cid.data = raw_id;
cid.size = raw_id_size;
@@ -1078,7 +1078,7 @@ pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t pk,
if (bits != 1024 && pk == GNUTLS_PK_RSA)
fprintf(stderr,
"note: several smart cards do not support arbitrary size keys; try --bits 1024 or 2048.\n");
- exit(1);
+ app_exit(1);
}
fwrite(pubkey.data, 1, pubkey.size, outfile);
@@ -1109,14 +1109,14 @@ pkcs11_export_pubkey(FILE * outfile, const char *url, int detailed, unsigned int
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_privkey_import_url(pkey, url, 0);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret =
@@ -1126,7 +1126,7 @@ pkcs11_export_pubkey(FILE * outfile, const char *url, int detailed, unsigned int
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs11_privkey_deinit(pkey);
@@ -1149,12 +1149,12 @@ pkcs11_init(FILE * outfile, const char *url, const char *label,
if (url == NULL) {
fprintf(stderr, "error: no token URL given to initialize!\n");
- exit(1);
+ app_exit(1);
}
if (label == NULL) {
fprintf(stderr, "error: no label provided for token initialization!\n");
- exit(1);
+ app_exit(1);
}
if (info->so_pin != NULL)
@@ -1164,11 +1164,11 @@ pkcs11_init(FILE * outfile, const char *url, const char *label,
if (pin == NULL && info->batch == 0)
pin = getpass("Enter Security Officer's PIN: ");
if (pin == NULL)
- exit(1);
+ app_exit(1);
}
if (strlen(pin) >= sizeof(so_pin) || pin[0] == '\n')
- exit(1);
+ app_exit(1);
strcpy(so_pin, pin);
@@ -1177,7 +1177,7 @@ pkcs11_init(FILE * outfile, const char *url, const char *label,
if (ret < 0) {
fprintf(stderr, "\nError in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "done\n");
@@ -1196,7 +1196,7 @@ pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned
if (url == NULL) {
fprintf(stderr, "error: no token URL given to initialize!\n");
- exit(1);
+ app_exit(1);
}
fprintf(stderr, "Setting token's user PIN...\n");
@@ -1209,7 +1209,7 @@ pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned
if (pin == NULL && info->batch == 0)
pin = getpass("Enter Administrators's new PIN: ");
if (pin == NULL)
- exit(1);
+ app_exit(1);
}
} else {
if (info->pin != NULL) {
@@ -1219,18 +1219,18 @@ pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned
if (pin == NULL && info->batch == 0)
pin = getpass("Enter User's new PIN: ");
if (pin == NULL)
- exit(1);
+ app_exit(1);
}
}
if (pin == NULL || pin[0] == '\n')
- exit(1);
+ app_exit(1);
ret = gnutls_pkcs11_token_set_pin(url, NULL, pin, (so!=0)?GNUTLS_PIN_SO:GNUTLS_PIN_USER);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
return;
@@ -1498,14 +1498,14 @@ pkcs11_get_random(FILE * outfile, const char *url, unsigned bytes,
output = malloc(bytes);
if (output == NULL) {
fprintf(stderr, "Memory error\n");
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_token_get_random(url, output, bytes);
if (ret < 0) {
fprintf(stderr, "gnutls_pkcs11_token_get_random: %s\n",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fwrite(output, 1, bytes, outfile);
@@ -1531,14 +1531,14 @@ void pkcs11_set_val(FILE * outfile, const char *url, int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret = gnutls_pkcs11_obj_import_url(obj, url, flags);
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
ret =
@@ -1546,7 +1546,7 @@ void pkcs11_set_val(FILE * outfile, const char *url, int detailed,
if (ret < 0) {
fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_pkcs11_obj_deinit(obj);
diff --git a/src/systemkey.c b/src/systemkey.c
index 7affc2ccbb..ce152a3aed 100644
--- a/src/systemkey.c
+++ b/src/systemkey.c
@@ -54,10 +54,20 @@ static gnutls_x509_crt_fmt_t incert_format, outcert_format;
static gnutls_x509_crt_fmt_t inkey_format, outkey_format;
static FILE *outfile;
+static const char *outfile_name = NULL;
static FILE *infile;
int batch = 0;
int ask_pass = 0;
+void app_exit(int val)
+{
+ if (val != 0) {
+ if (outfile_name)
+ remove(outfile_name);
+ }
+ exit(val);
+}
+
static void tls_log_func(int level, const char *str)
{
fprintf(stderr, "|<%d>| %s", level, str);
@@ -108,8 +118,9 @@ static void cmd_parser(int argc, char **argv)
outfile = safe_open_rw(OPT_ARG(OUTFILE), 0);
if (outfile == NULL) {
fprintf(stderr, "%s", OPT_ARG(OUTFILE));
- exit(1);
+ app_exit(1);
}
+ outfile_name = OPT_ARG(OUTFILE);
} else
outfile = stdout;
@@ -117,7 +128,7 @@ static void cmd_parser(int argc, char **argv)
infile = fopen(OPT_ARG(INFILE), "rb");
if (infile == NULL) {
fprintf(stderr, "%s", OPT_ARG(INFILE));
- exit(1);
+ app_exit(1);
}
} else
infile = stdin;
@@ -142,7 +153,7 @@ static void systemkey_delete(const char *url, FILE * out)
if (ret < 0) {
fprintf(stderr, "gnutls_systemkey_privkey_delete: %s",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
fprintf(out, "Key %s deleted\n", url);
@@ -164,7 +175,7 @@ static void systemkey_list(FILE * out)
if (ret < 0 && ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) {
fprintf(stderr, "gnutls_system_key_iter_get_url: %s",
gnutls_strerror(ret));
- exit(1);
+ app_exit(1);
}
gnutls_system_key_iter_deinit(iter);
fputs("\n", out);
diff --git a/src/tpmtool.c b/src/tpmtool.c
index ae89d12245..a9877829c7 100644
--- a/src/tpmtool.c
+++ b/src/tpmtool.c
@@ -59,10 +59,21 @@ static gnutls_x509_crt_fmt_t incert_format, outcert_format;
static gnutls_tpmkey_fmt_t inkey_format, outkey_format;
static FILE *outfile;
+static const char *outfile_name = NULL;
static FILE *infile;
int batch = 0;
int ask_pass = 0;
+void app_exit(int val)
+{
+ if (val != 0) {
+ if (outfile_name != NULL) {
+ remove(outfile_name);
+ }
+ }
+ exit(val);
+}
+
static void tls_log_func(int level, const char *str)
{
fprintf(stderr, "|<%d>| %s", level, str);
@@ -134,6 +145,7 @@ static void cmd_parser(int argc, char **argv)
fprintf(stderr, "%s\n", OPT_ARG(OUTFILE));
exit(1);
}
+ outfile_name = OPT_ARG(OUTFILE);
} else
outfile = stdout;