X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fx509%2Fby_dir.c;h=170cd89608f9646ee9a2b291b512cedeebff27b3;hb=4b4f249e0d878d1037dc52d4fb96a657589ce5e5;hp=b0a4afae838dd2db455cc75cac1753bebf805abd;hpb=019bfef89964105cdf9256b6a6bc0aa7790bd020;p=oweals%2Fopenssl.git diff --git a/crypto/x509/by_dir.c b/crypto/x509/by_dir.c index b0a4afae83..170cd89608 100644 --- a/crypto/x509/by_dir.c +++ b/crypto/x509/by_dir.c @@ -72,8 +72,6 @@ #include #include -DECLARE_STACK_OF(BY_DIR_HASH) -DECLARE_STACK_OF(BY_DIR_ENTRY) typedef struct lookup_dir_hashes_st { @@ -94,6 +92,8 @@ typedef struct lookup_dir_st STACK_OF(BY_DIR_ENTRY) *dirs; } BY_DIR; +DECLARE_STACK_OF(BY_DIR_HASH) +DECLARE_STACK_OF(BY_DIR_ENTRY) static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, char **ret); @@ -218,7 +218,7 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) s=dir; p=s; - for (;;) + for (;;p++) { if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) { @@ -230,10 +230,12 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) for (j=0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++) { ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j); - if (strncmp(ent->dir,ss,(unsigned int)len) == 0) - continue; + if (strlen(ent->dir) == (size_t)len && + strncmp(ent->dir,ss,(unsigned int)len) == 0) + break; } - + if (j < sk_BY_DIR_ENTRY_num(ctx->dirs)) + continue; if (ctx->dirs == NULL) { ctx->dirs = sk_BY_DIR_ENTRY_new_null(); @@ -264,7 +266,6 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) } if (*p == '\0') break; - p++; } return 1; } @@ -391,6 +392,9 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, postfix,k); } #ifndef OPENSSL_NO_POSIX_IO +#ifdef _WIN32 +#define stat _stat +#endif { struct stat st; if (stat(b->data,&st) < 0)