Recent changes from 0.9.6-stable.
authorRichard Levitte <levitte@openssl.org>
Fri, 23 Jan 2004 16:08:20 +0000 (16:08 +0000)
committerRichard Levitte <levitte@openssl.org>
Fri, 23 Jan 2004 16:08:20 +0000 (16:08 +0000)
crypto/x509/by_dir.c

index 448bd7e69cca5a17c0179b03fb13e518ea1ea270..f09022379f218fded9a4e71ad8a9a8c20ee973bb 100644 (file)
@@ -302,8 +302,36 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
                k=0;
                for (;;)
                        {
-                       sprintf(b->data,"%s/%08lx.%s%d",ctx->dirs[i],h,
-                               postfix,k);
+                       char c = '/';
+#ifdef VMS
+                       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. */
+                               sprintf(b->data,"%s%08lx.%s%d",ctx->dirs[i],h,
+                                       postfix,k);
+                               }
+                       else
+                               {
+                               snprintf(b->data,"%s%c%08lx.%s%d",
+                                       ctx->dirs[i],c,h,postfix,k);
+                               }
                        k++;
                        if (stat(b->data,&st) < 0)
                                break;