Adding a slash between the directoryt and the file is a problem with
VMS. The C RTL can handle it well if the "directory" is a logical name with no colon, therefore ending being 'logname/file'. However, if the given logical names actually has a colon, or if you use a full VMS-syntax directory, you end up with 'logname:/file' or 'dev:[dir1.dir2]/file', and that isn't handled in any good way. So, on VMS, we need to check if the directory string ends with a separator (one of ':', ']' or '>' (< and > can be used instead [ and ])), and handle that by not inserting anything between the directory spec and the file name. In all other cases, it's assumed the directory spec is a logical name, so we need to place a colon between it and the file. Notified by Kevin Greaney <kevin.greaney@hp.com>.
This commit is contained in:
parent
cdb42bcf0c
commit
af6dab9b00
@ -302,9 +302,38 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
|
|||||||
k=0;
|
k=0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
char c = '/';
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
char c = ctx->dirs[i][strlen(ctx->dirs[i])-1];
|
||||||
|
if (c != ':' && c != '>' && c != ']')
|
||||||
|
{
|
||||||
|
/* If no separator is present, we assume the
|
||||||
|
directory specifier is a logical name, and
|
||||||
|
add a colon. We really should use better
|
||||||
|
VMS routines for merging things like this,
|
||||||
|
but this will do for now...
|
||||||
|
-- Richard Levitte */
|
||||||
|
c = ':';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
c = '\0';
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (c == '\0')
|
||||||
|
{
|
||||||
|
/* This is special. When c == '\0', no
|
||||||
|
directory separator should be added. */
|
||||||
BIO_snprintf(b->data,b->max,
|
BIO_snprintf(b->data,b->max,
|
||||||
"%s/%08lx.%s%d",ctx->dirs[i],h,
|
"%s%08lx.%s%d",ctx->dirs[i],h,
|
||||||
postfix,k);
|
postfix,k);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIO_snprintf(b->data,b->max,
|
||||||
|
"%s%c%08lx.%s%d",ctx->dirs[i],c,h,
|
||||||
|
postfix,k);
|
||||||
|
}
|
||||||
k++;
|
k++;
|
||||||
if (stat(b->data,&st) < 0)
|
if (stat(b->data,&st) < 0)
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user