Pass CFLAG to dependency makers, so non-standard system include paths are
[openssl.git] / crypto / conf / conf_lib.c
index a1d31cf9537207a734f53bc2dddc078635b9cbc7..6a3cf109ddc5a63a21e17f4766716549272e49ea 100644 (file)
@@ -67,6 +67,17 @@ const char *CONF_version="CONF" OPENSSL_VERSION_PTEXT;
 
 static CONF_METHOD *default_CONF_method=NULL;
 
+/* Init a 'CONF' structure from an old LHASH */
+
+void CONF_set_nconf(CONF *conf, LHASH *hash)
+       {
+       if (default_CONF_method == NULL)
+               default_CONF_method = NCONF_default();
+
+       default_CONF_method->init(conf);
+       conf->data = hash;
+       }
+
 /* The following section contains the "CONF classic" functions,
    rewritten in terms of the new CONF interface. */
 
@@ -81,7 +92,7 @@ LHASH *CONF_load(LHASH *conf, const char *file, long *eline)
        LHASH *ltmp;
        BIO *in=NULL;
 
-#ifdef VMS
+#ifdef OPENSSL_SYS_VMS
        in=BIO_new_file(file, "r");
 #else
        in=BIO_new_file(file, "rb");
@@ -98,7 +109,7 @@ LHASH *CONF_load(LHASH *conf, const char *file, long *eline)
        return ltmp;
        }
 
-#ifndef NO_FP_API
+#ifndef OPENSSL_NO_FP_API
 LHASH *CONF_load_fp(LHASH *conf, FILE *fp,long *eline)
        {
        BIO *btmp;
@@ -118,53 +129,58 @@ LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline)
        CONF ctmp;
        int ret;
 
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
+       CONF_set_nconf(&ctmp, conf);
 
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
        ret = NCONF_load_bio(&ctmp, bp, eline);
        if (ret)
                return ctmp.data;
        return NULL;
        }
 
-STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,char *section)
+STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,const char *section)
        {
-       CONF ctmp;
-
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
-
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
-       return NCONF_get_section(&ctmp, section);
+       if (conf == NULL)
+               {
+               return NULL;
+               }
+       else
+               {
+               CONF ctmp;
+               CONF_set_nconf(&ctmp, conf);
+               return NCONF_get_section(&ctmp, section);
+               }
        }
 
-char *CONF_get_string(LHASH *conf,char *group,char *name)
+char *CONF_get_string(LHASH *conf,const char *group,const char *name)
        {
-       CONF ctmp;
-
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
-
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
-       return NCONF_get_string(&ctmp, group, name);
+       if (conf == NULL)
+               {
+               return NCONF_get_string(NULL, group, name);
+               }
+       else
+               {
+               CONF ctmp;
+               CONF_set_nconf(&ctmp, conf);
+               return NCONF_get_string(&ctmp, group, name);
+               }
        }
 
-long CONF_get_number(LHASH *conf,char *group,char *name)
+long CONF_get_number(LHASH *conf,const char *group,const char *name)
        {
-       CONF ctmp;
        int status;
        long result = 0;
 
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
+       if (conf == NULL)
+               {
+               status = NCONF_get_number_e(NULL, group, name, &result);
+               }
+       else
+               {
+               CONF ctmp;
+               CONF_set_nconf(&ctmp, conf);
+               status = NCONF_get_number_e(&ctmp, group, name, &result);
+               }
 
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
-       status = NCONF_get_number_e(&ctmp, group, name, &result);
        if (status == 0)
                {
                /* This function does not believe in errors... */
@@ -176,16 +192,11 @@ long CONF_get_number(LHASH *conf,char *group,char *name)
 void CONF_free(LHASH *conf)
        {
        CONF ctmp;
-
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
-
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
+       CONF_set_nconf(&ctmp, conf);
        NCONF_free_data(&ctmp);
        }
 
-#ifndef NO_FP_API
+#ifndef OPENSSL_NO_FP_API
 int CONF_dump_fp(LHASH *conf, FILE *out)
        {
        BIO *btmp;
@@ -204,12 +215,7 @@ int CONF_dump_fp(LHASH *conf, FILE *out)
 int CONF_dump_bio(LHASH *conf, BIO *out)
        {
        CONF ctmp;
-
-       if (default_CONF_method == NULL)
-               default_CONF_method = NCONF_default();
-
-       default_CONF_method->init(&ctmp);
-       ctmp.data = conf;
+       CONF_set_nconf(&ctmp, conf);
        return NCONF_dump_bio(&ctmp, out);
        }
 
@@ -252,34 +258,23 @@ void NCONF_free_data(CONF *conf)
 
 int NCONF_load(CONF *conf, const char *file, long *eline)
        {
-       int ret;
-       BIO *in=NULL;
-
-#ifdef VMS
-       in=BIO_new_file(file, "r");
-#else
-       in=BIO_new_file(file, "rb");
-#endif
-       if (in == NULL)
+       if (conf == NULL)
                {
-               CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+               CONFerr(CONF_F_NCONF_LOAD,CONF_R_NO_CONF);
                return 0;
                }
 
-       ret = NCONF_load_bio(conf, in, eline);
-       BIO_free(in);
-
-       return ret;
+       return conf->meth->load(conf, file, eline);
        }
 
-#ifndef NO_FP_API
+#ifndef OPENSSL_NO_FP_API
 int NCONF_load_fp(CONF *conf, FILE *fp,long *eline)
        {
        BIO *btmp;
        int ret;
        if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE)))
                {
-               CONFerr(CONF_F_CONF_LOAD_FP,ERR_R_BUF_LIB);
+               CONFerr(CONF_F_NCONF_LOAD_FP,ERR_R_BUF_LIB);
                return 0;
                }
        ret = NCONF_load_bio(conf, btmp, eline);
@@ -296,10 +291,10 @@ int NCONF_load_bio(CONF *conf, BIO *bp,long *eline)
                return 0;
                }
 
-       return conf->meth->load(conf, bp, eline);
+       return conf->meth->load_bio(conf, bp, eline);
        }
 
-STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section)
+STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,const char *section)
        {
        if (conf == NULL)
                {
@@ -316,7 +311,7 @@ STACK_OF(CONF_VALUE) *NCONF_get_section(CONF *conf,char *section)
        return _CONF_get_section_values(conf, section);
        }
 
-char *NCONF_get_string(CONF *conf,char *group,char *name)
+char *NCONF_get_string(const CONF *conf,const char *group,const char *name)
        {
        char *s = _CONF_get_string(conf, group, name);
 
@@ -332,10 +327,12 @@ char *NCONF_get_string(CONF *conf,char *group,char *name)
                }
        CONFerr(CONF_F_NCONF_GET_STRING,
                CONF_R_NO_VALUE);
+       ERR_add_error_data(4,"group=",group," name=",name);
        return NULL;
        }
 
-int NCONF_get_number_e(CONF *conf,char *group,char *name,long *result)
+int NCONF_get_number_e(const CONF *conf,const char *group,const char *name,
+                      long *result)
        {
        char *str;
 
@@ -350,7 +347,7 @@ int NCONF_get_number_e(CONF *conf,char *group,char *name,long *result)
        if (str == NULL)
                return 0;
 
-       for (;conf->meth->is_number(conf, *str);)
+       for (*result = 0;conf->meth->is_number(conf, *str);)
                {
                *result = (*result)*10 + conf->meth->to_int(conf, *str);
                str++;
@@ -359,8 +356,8 @@ int NCONF_get_number_e(CONF *conf,char *group,char *name,long *result)
        return 1;
        }
 
-#ifndef NO_FP_API
-int NCONF_dump_fp(CONF *conf, FILE *out)
+#ifndef OPENSSL_NO_FP_API
+int NCONF_dump_fp(const CONF *conf, FILE *out)
        {
        BIO *btmp;
        int ret;
@@ -374,7 +371,7 @@ int NCONF_dump_fp(CONF *conf, FILE *out)
        }
 #endif
 
-int NCONF_dump_bio(CONF *conf, BIO *out)
+int NCONF_dump_bio(const CONF *conf, BIO *out)
        {
        if (conf == NULL)
                {
@@ -385,8 +382,9 @@ int NCONF_dump_bio(CONF *conf, BIO *out)
        return conf->meth->dump(conf, out);
        }
 
+
 /* This function should be avoided */
-#undef NCONF_get_number
+#if 0
 long NCONF_get_number(CONF *conf,char *group,char *name)
        {
        int status;
@@ -400,4 +398,4 @@ long NCONF_get_number(CONF *conf,char *group,char *name)
                }
        return ret;
        }
-
+#endif