summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2005-03-29 07:22:29 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2005-03-29 07:22:29 +0000
commita2304f1b91e649c9aeb74b1300d81d5a6b1da752 (patch)
tree3963f8c86f3d66651197e83ba4ff11e48bc62a0e /src
parent09c52310f8c27186bc2ca5893785523018bb0e0e (diff)
downloadgnutls-a2304f1b91e649c9aeb74b1300d81d5a6b1da752.tar.gz
more improvments to gnutls_x509_crt_list_import()
Diffstat (limited to 'src')
-rw-r--r--src/certtool.c10
-rw-r--r--src/cli.c15
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);
diff --git a/src/cli.c b/src/cli.c
index c3f48b9fb4..68566725d6 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -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); */