aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/x509/by_dir.c
diff options
context:
space:
mode:
authorNils Larsch <nils@openssl.org>2006-12-05 21:21:37 +0000
committerNils Larsch <nils@openssl.org>2006-12-05 21:21:37 +0000
commitfa9ac569b8d5fa779a326b91b3ef73646d82969c (patch)
treef6580f21906905ff05f8181ffbe94651a1095deb /crypto/x509/by_dir.c
parent10a10fb83461e666dfc64d74d40564825c93c74c (diff)
downloadopenssl-fa9ac569b8d5fa779a326b91b3ef73646d82969c.tar.gz
avoid duplicate entries in add_cert_dir()
PR: 1407 Submitted by: Tomas Mraz <tmraz@redhat.com>
Diffstat (limited to 'crypto/x509/by_dir.c')
-rw-r--r--crypto/x509/by_dir.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/crypto/x509/by_dir.c b/crypto/x509/by_dir.c
index b0a4afae83..f02168ab92 100644
--- a/crypto/x509/by_dir.c
+++ b/crypto/x509/by_dir.c
@@ -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) == 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;
}