make update (libeay.num has been edited to match 0.9.7-stable)
[openssl.git] / crypto / x509 / by_file.c
index 0457f01..92e00d2 100644 (file)
@@ -66,7 +66,7 @@
 #include <openssl/x509.h>
 #include <openssl/pem.h>
 
-#ifndef NO_STDIO
+#ifndef OPENSSL_NO_STDIO
 
 static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,
        long argl, char **ret);
@@ -92,7 +92,7 @@ X509_LOOKUP_METHOD *X509_LOOKUP_file(void)
 static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
             char **ret)
        {
-       int ok=0,ok2=0;
+       int ok=0;
        char *file;
 
        switch (cmd)
@@ -100,31 +100,30 @@ static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
        case X509_L_FILE_LOAD:
                if (argl == X509_FILETYPE_DEFAULT)
                        {
-                       ok=X509_load_cert_file(ctx,X509_get_default_cert_file(),
-                               X509_FILETYPE_PEM);
-                       ok2=X509_load_crl_file(ctx,X509_get_default_cert_file(),
-                               X509_FILETYPE_PEM);
-                       if (!ok || !ok2)
+                       ok = (X509_load_cert_crl_file(ctx,X509_get_default_cert_file(),
+                               X509_FILETYPE_PEM) != 0);
+                       if (!ok)
                                {
                                X509err(X509_F_BY_FILE_CTRL,X509_R_LOADING_DEFAULTS);
                                }
                        else
                                {
                                file=(char *)Getenv(X509_get_default_cert_file_env());
-                               ok=X509_load_cert_file(ctx,file,
-                                       X509_FILETYPE_PEM);
-                               ok2=X509_load_crl_file(ctx,file,
-                                       X509_FILETYPE_PEM);
+                               ok = (X509_load_cert_crl_file(ctx,file,
+                                       X509_FILETYPE_PEM) != 0);
                                }
                        }
                else
                        {
-                       ok=X509_load_cert_file(ctx,argp,(int)argl);
-                       ok2=X509_load_crl_file(ctx,argp,(int)argl);
+                       if(argl == X509_FILETYPE_PEM)
+                               ok = (X509_load_cert_crl_file(ctx,argp,
+                                       X509_FILETYPE_PEM) != 0);
+                       else
+                               ok = (X509_load_cert_file(ctx,argp,(int)argl) != 0);
                        }
                break;
                }
-       return((ok && ok2)?ok:0);
+       return(ok);
        }
 
 int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type)
@@ -261,5 +260,39 @@ err:
        return(ret);
        }
 
-#endif /* NO_STDIO */
+int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type)
+{
+       STACK_OF(X509_INFO) *inf;
+       X509_INFO *itmp;
+       BIO *in;
+       int i, count = 0;
+       if(type != X509_FILETYPE_PEM)
+               return X509_load_cert_file(ctx, file, type);
+       in = BIO_new_file(file, "r");
+       if(!in) {
+               X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_SYS_LIB);
+               return 0;
+       }
+       inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
+       BIO_free(in);
+       if(!inf) {
+               X509err(X509_F_X509_LOAD_CERT_CRL_FILE,ERR_R_PEM_LIB);
+               return 0;
+       }
+       for(i = 0; i < sk_X509_INFO_num(inf); i++) {
+               itmp = sk_X509_INFO_value(inf, i);
+               if(itmp->x509) {
+                       X509_STORE_add_cert(ctx->store_ctx, itmp->x509);
+                       count++;
+               } else if(itmp->crl) {
+                       X509_STORE_add_crl(ctx->store_ctx, itmp->crl);
+                       count++;
+               }
+       }
+       sk_X509_INFO_pop_free(inf, X509_INFO_free);
+       return count;
+}
+
+
+#endif /* OPENSSL_NO_STDIO */