summaryrefslogtreecommitdiffstats
path: root/ssl/ssl_cert.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2001-10-04 12:27:39 +0000
committerRichard Levitte <levitte@openssl.org>2001-10-04 12:27:39 +0000
commit285046ec511611e7a124c66b89810f2e828c9dec (patch)
tree757e4eba55cb5ae94818913929b1918899e8eb29 /ssl/ssl_cert.c
parentf8000b93459cff7468c0a86dec913d06c0f0b6d6 (diff)
SSL_add_dir_cert_subjects_to_stack for Win32 finally implemented.
Submitted by Massimo Santin <msantin@santineassociati.com>.
Diffstat (limited to 'ssl/ssl_cert.c')
-rw-r--r--ssl/ssl_cert.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c
index 6895f62166..cf7102bdc2 100644
--- a/ssl/ssl_cert.c
+++ b/ssl/ssl_cert.c
@@ -115,6 +115,10 @@
#include <dirent.h>
#endif
+#if defined(WIN32)
+#include <windows.h>
+#endif
+
#ifdef NeXT
#include <sys/dir.h>
#define dirent direct
@@ -771,4 +775,52 @@ err:
#endif
#endif
+
+#else
+
+int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
+ const char *dir)
+ {
+ WIN32_FIND_DATA FindFileData;
+ HANDLE hFind;
+ int ret = 0;
+
+ CRYPTO_w_lock(CRYPTO_LOCK_READDIR);
+
+ hFind = FindFirstFile(dir, &FindFileData);
+ /* Note that a side effect is that the CAs will be sorted by name */
+ if(hFind == INVALID_HANDLE_VALUE)
+ {
+ SYSerr(SYS_F_OPENDIR, get_last_sys_error());
+ ERR_add_error_data(3, "opendir('", dir, "')");
+ SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK, ERR_R_SYS_LIB);
+ goto err;
+ }
+
+ do
+ {
+ char buf[1024];
+ int r;
+
+ if(strlen(dir)+strlen(FindFileData.cFileName)+2 > sizeof buf)
+ {
+ SSLerr(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK,SSL_R_PATH_TOO_LONG);
+ goto err;
+ }
+
+ r = BIO_snprintf(buf,sizeof buf,"%s/%s",dir,FindFileData.cFileName);
+ if (r <= 0 || r >= sizeof buf)
+ goto err;
+ if(!SSL_add_file_cert_subjects_to_stack(stack,buf))
+ goto err;
+ }
+ while (FindNextFile(hFind, &FindFileData) != FALSE);
+ FindClose(hFind);
+ ret = 1;
+
+err:
+ CRYPTO_w_unlock(CRYPTO_LOCK_READDIR);
+ return ret;
+ }
+
#endif