diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2005-03-29 07:22:29 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2005-03-29 07:22:29 +0000 |
commit | a2304f1b91e649c9aeb74b1300d81d5a6b1da752 (patch) | |
tree | 3963f8c86f3d66651197e83ba4ff11e48bc62a0e /src | |
parent | 09c52310f8c27186bc2ca5893785523018bb0e0e (diff) | |
download | gnutls-a2304f1b91e649c9aeb74b1300d81d5a6b1da752.tar.gz |
more improvments to gnutls_x509_crt_list_import()
Diffstat (limited to 'src')
-rw-r--r-- | src/certtool.c | 10 | ||||
-rw-r--r-- | src/cli.c | 15 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/certtool.c b/src/certtool.c index 123e0acf7a..ca33bc8924 100644 --- a/src/certtool.c +++ b/src/certtool.c @@ -917,6 +917,7 @@ void certificate_info(void) size_t size; int ret,i, count; gnutls_datum pem; + unsigned int crt_num; size = fread(buffer, 1, sizeof(buffer) - 1, infile); buffer[size] = 0; @@ -926,7 +927,14 @@ void certificate_info(void) pem.data = buffer; pem.size = size; - ret = gnutls_x509_crt_list_import(crt, MAX_CRTS, &pem, in_cert_format, 0); + crt_num = MAX_CRTS; + ret = gnutls_x509_crt_list_import(crt, &crt_num, &pem, in_cert_format, GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED); + if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { + fprintf(stderr, "Too many certificates (%d), will only read the first %d.\n", crt_num, MAX_CRTS); + crt_num = MAX_CRTS; + ret = gnutls_x509_crt_list_import(crt, &crt_num, &pem, in_cert_format,0); + } + if (ret < 0) { fprintf(stderr, "Decoding error: %s\n", gnutls_strerror(ret)); exit(1); @@ -167,6 +167,7 @@ static gnutls_openpgp_privkey pgp_key = NULL; */ static void load_keys(void) { + unsigned int crt_num; int ret; gnutls_datum data; @@ -177,12 +178,20 @@ static void load_keys(void) exit(1); } - ret = gnutls_x509_crt_list_import(x509_crt, MAX_CRT, &data, GNUTLS_X509_FMT_PEM, GNUTLS_X509_CRT_IMPORT_LIST_FAIL_IF_EXCEED); + crt_num = MAX_CRT; + ret = gnutls_x509_crt_list_import(x509_crt, &crt_num, &data, GNUTLS_X509_FMT_PEM, GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED); if (ret < 0) { - fprintf(stderr, + if (ret==GNUTLS_E_SHORT_MEMORY_BUFFER) { + fprintf(stderr, + "*** Error loading cert file: Too many certs %d\n", + crt_num); + + } else { + fprintf(stderr, "*** Error loading cert file: %s\n", gnutls_strerror(ret)); - exit(1); + } + exit(1); } x509_crt_size = ret; /* fprintf(stderr, "Processed %d client certificates...\n", ret); */ |