From 9269663ad235179712275d68cbded59541b3da82 Mon Sep 17 00:00:00 2001 From: beck <> Date: Mon, 14 Apr 2014 17:20:24 +0000 Subject: convert the use of OPENSSL_DIR_XXX functions to opendir() and frends. ok deraadt@ --- src/lib/libssl/src/ssl/ssl_cert.c | 50 ++++++++++++++++----------------------- src/lib/libssl/ssl_cert.c | 50 ++++++++++++++++----------------------- 2 files changed, 40 insertions(+), 60 deletions(-) diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c index 79eb4ee031..9c952f452a 100644 --- a/src/lib/libssl/src/ssl/ssl_cert.c +++ b/src/lib/libssl/src/ssl/ssl_cert.c @@ -118,6 +118,7 @@ #include #include +#include #include #include @@ -798,42 +799,31 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, const char *dir) { - OPENSSL_DIR_CTX *d = NULL; - const char *filename; + DIR *dirp = NULL; + char *path = NULL; int ret = 0; CRYPTO_w_lock(CRYPTO_LOCK_READDIR); - - /* Note that a side effect is that the CAs will be sorted by name */ - - while ((filename = OPENSSL_DIR_read(&d, dir))) { - char buf[1024]; - int r; - - if (strlen(dir) + strlen(filename) + 2 > sizeof buf) { - SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, SSL_R_PATH_TOO_LONG); - goto err; + dirp = opendir(dir); + if (dirp) { + struct dirent * dp; + while ((dp = readdir(dirp)) != NULL) { + if (asprintf(&path, "%s/%s", dir, dp->d_name) != -1) { + ret = SSL_add_file_cert_subjects_to_stack + (stack,path); + free(path); + } + if (!ret) + break; } - r = BIO_snprintf(buf, sizeof buf, "%s/%s", dir, filename); - if (r <= 0 || r >= (int)sizeof(buf)) - goto err; - if (!SSL_add_file_cert_subjects_to_stack(stack, buf)) - goto err; + (void) closedir(dirp); } - - if (errno) { - SYSerr(SYS_F_OPENDIR, errno); - ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); - SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); - goto err; + if (!ret) { + SYSerr(SYS_F_OPENDIR, errno); + ERR_add_error_data(3, "opendir ('", dir, "')"); + SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, + ERR_R_SYS_LIB); } - - ret = 1; - -err: - if (d) - OPENSSL_DIR_end(&d); CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); return ret; } - diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 79eb4ee031..9c952f452a 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c @@ -118,6 +118,7 @@ #include #include +#include #include #include @@ -798,42 +799,31 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack, const char *dir) { - OPENSSL_DIR_CTX *d = NULL; - const char *filename; + DIR *dirp = NULL; + char *path = NULL; int ret = 0; CRYPTO_w_lock(CRYPTO_LOCK_READDIR); - - /* Note that a side effect is that the CAs will be sorted by name */ - - while ((filename = OPENSSL_DIR_read(&d, dir))) { - char buf[1024]; - int r; - - if (strlen(dir) + strlen(filename) + 2 > sizeof buf) { - SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, SSL_R_PATH_TOO_LONG); - goto err; + dirp = opendir(dir); + if (dirp) { + struct dirent * dp; + while ((dp = readdir(dirp)) != NULL) { + if (asprintf(&path, "%s/%s", dir, dp->d_name) != -1) { + ret = SSL_add_file_cert_subjects_to_stack + (stack,path); + free(path); + } + if (!ret) + break; } - r = BIO_snprintf(buf, sizeof buf, "%s/%s", dir, filename); - if (r <= 0 || r >= (int)sizeof(buf)) - goto err; - if (!SSL_add_file_cert_subjects_to_stack(stack, buf)) - goto err; + (void) closedir(dirp); } - - if (errno) { - SYSerr(SYS_F_OPENDIR, errno); - ERR_add_error_data(3, "OPENSSL_DIR_read(&ctx, '", dir, "')"); - SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB); - goto err; + if (!ret) { + SYSerr(SYS_F_OPENDIR, errno); + ERR_add_error_data(3, "opendir ('", dir, "')"); + SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, + ERR_R_SYS_LIB); } - - ret = 1; - -err: - if (d) - OPENSSL_DIR_end(&d); CRYPTO_w_unlock(CRYPTO_LOCK_READDIR); return ret; } - -- cgit v1.2.3-55-g6feb