fix warning
[openssl.git] / crypto / conf / conf_def.c
index 52a87aa76c5f0ad581f3da46a9f42e1109f12c55..ff55876b6eda82839ab3e0f5948b21712ddb411f 100644 (file)
@@ -60,6 +60,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include "cryptlib.h"
 #include <openssl/stack.h>
 #include <openssl/lhash.h>
 #include <openssl/conf.h>
@@ -67,7 +68,6 @@
 #include "conf_def.h"
 #include <openssl/buffer.h>
 #include <openssl/err.h>
-#include "cryptlib.h"
 
 static char *eat_ws(CONF *conf, char *p);
 static char *eat_alpha_numeric(CONF *conf, char *p);
@@ -88,7 +88,7 @@ static int def_dump(const CONF *conf, BIO *bp);
 static int def_is_number(const CONF *conf, char c);
 static int def_to_int(const CONF *conf, char c);
 
-const char *CONF_def_version="CONF_def" OPENSSL_VERSION_PTEXT;
+const char CONF_def_version[]="CONF_def" OPENSSL_VERSION_PTEXT;
 
 static CONF_METHOD default_method = {
        "OpenSSL default",
@@ -129,7 +129,7 @@ static CONF *def_create(CONF_METHOD *meth)
        {
        CONF *ret;
 
-       ret = (CONF *)OPENSSL_malloc(sizeof(CONF) + sizeof(unsigned short *));
+       ret = OPENSSL_malloc(sizeof(CONF) + sizeof(unsigned short *));
        if (ret)
                if (meth->init(ret) == 0)
                        {
@@ -194,9 +194,9 @@ static int def_load(CONF *conf, const char *name, long *line)
        if (in == NULL)
                {
                if (ERR_GET_REASON(ERR_peek_last_error()) == BIO_R_NO_SUCH_FILE)
-                       CONFerr(CONF_F_CONF_LOAD,CONF_R_NO_SUCH_FILE);
+                       CONFerr(CONF_F_DEF_LOAD,CONF_R_NO_SUCH_FILE);
                else
-                       CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+                       CONFerr(CONF_F_DEF_LOAD,ERR_R_SYS_LIB);
                return 0;
                }
 
@@ -213,44 +213,42 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
        int bufnum=0,i,ii;
        BUF_MEM *buff=NULL;
        char *s,*p,*end;
-       int again,n;
+       int again;
        long eline=0;
        char btmp[DECIMAL_SIZE(eline)+1];
        CONF_VALUE *v=NULL,*tv;
        CONF_VALUE *sv=NULL;
        char *section=NULL,*buf;
-       STACK_OF(CONF_VALUE) *section_sk=NULL,*ts;
        char *start,*psection,*pname;
        void *h = (void *)(conf->data);
 
        if ((buff=BUF_MEM_new()) == NULL)
                {
-               CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_BUF_LIB);
+               CONFerr(CONF_F_DEF_LOAD_BIO,ERR_R_BUF_LIB);
                goto err;
                }
 
        section=(char *)OPENSSL_malloc(10);
        if (section == NULL)
                {
-               CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
+               CONFerr(CONF_F_DEF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
                goto err;
                }
-       strcpy(section,"default");
+       BUF_strlcpy(section,"default",10);
 
        if (_CONF_new_data(conf) == 0)
                {
-               CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
+               CONFerr(CONF_F_DEF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
                goto err;
                }
 
        sv=_CONF_new_section(conf,section);
        if (sv == NULL)
                {
-               CONFerr(CONF_F_CONF_LOAD_BIO,
+               CONFerr(CONF_F_DEF_LOAD_BIO,
                                        CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
                goto err;
                }
-       section_sk=(STACK_OF(CONF_VALUE) *)sv->value;
 
        bufnum=0;
        again=0;
@@ -258,7 +256,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
                {
                if (!BUF_MEM_grow(buff,bufnum+CONFBUFSIZE))
                        {
-                       CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_BUF_LIB);
+                       CONFerr(CONF_F_DEF_LOAD_BIO,ERR_R_BUF_LIB);
                        goto err;
                        }
                p= &(buff->data[bufnum]);
@@ -309,7 +307,6 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
                buf=buff->data;
 
                clear_comments(conf, buf);
-               n=strlen(buf);
                s=eat_ws(conf, buf);
                if (IS_EOF(conf,*s)) continue; /* blank line */
                if (*s == '[')
@@ -324,12 +321,12 @@ again:
                        p=eat_ws(conf, end);
                        if (*p != ']')
                                {
-                               if (*p != '\0')
+                               if (*p != '\0' && ss != p)
                                        {
                                        ss=p;
                                        goto again;
                                        }
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                        CONF_R_MISSING_CLOSE_SQUARE_BRACKET);
                                goto err;
                                }
@@ -339,11 +336,10 @@ again:
                                sv=_CONF_new_section(conf,section);
                        if (sv == NULL)
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                        CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
                                goto err;
                                }
-                       section_sk=(STACK_OF(CONF_VALUE) *)sv->value;
                        continue;
                        }
                else
@@ -362,7 +358,7 @@ again:
                        p=eat_ws(conf, end);
                        if (*p != '=')
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                                CONF_R_MISSING_EQUAL_SIGN);
                                goto err;
                                }
@@ -379,7 +375,7 @@ again:
 
                        if (!(v=(CONF_VALUE *)OPENSSL_malloc(sizeof(CONF_VALUE))))
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                                        ERR_R_MALLOC_FAILURE);
                                goto err;
                                }
@@ -388,11 +384,11 @@ again:
                        v->value=NULL;
                        if (v->name == NULL)
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                                        ERR_R_MALLOC_FAILURE);
                                goto err;
                                }
-                       strcpy(v->name,pname);
+                       BUF_strlcpy(v->name,pname,strlen(pname)+1);
                        if (!str_copy(conf,psection,&(v->value),start)) goto err;
 
                        if (strcmp(psection,section) != 0)
@@ -402,21 +398,17 @@ again:
                                        tv=_CONF_new_section(conf,psection);
                                if (tv == NULL)
                                        {
-                                       CONFerr(CONF_F_CONF_LOAD_BIO,
+                                       CONFerr(CONF_F_DEF_LOAD_BIO,
                                           CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
                                        goto err;
                                        }
-                               ts=(STACK_OF(CONF_VALUE) *)tv->value;
                                }
                        else
-                               {
                                tv=sv;
-                               ts=section_sk;
-                               }
 #if 1
                        if (_CONF_add_string(conf, tv, v) == 0)
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                                        ERR_R_MALLOC_FAILURE);
                                goto err;
                                }
@@ -424,7 +416,7 @@ again:
                        v->section=tv->section; 
                        if (!sk_CONF_VALUE_push(ts,v))
                                {
-                               CONFerr(CONF_F_CONF_LOAD_BIO,
+                               CONFerr(CONF_F_DEF_LOAD_BIO,
                                                        ERR_R_MALLOC_FAILURE);
                                goto err;
                                }
@@ -447,7 +439,7 @@ err:
        if (buff != NULL) BUF_MEM_free(buff);
        if (section != NULL) OPENSSL_free(section);
        if (line != NULL) *line=eline;
-       sprintf(btmp,"%ld",eline);
+       BIO_snprintf(btmp,sizeof btmp,"%ld",eline);
        ERR_add_error_data(2,"line ",btmp);
        if ((h != conf->data) && (conf->data != NULL))
                {
@@ -465,9 +457,6 @@ err:
 
 static void clear_comments(CONF *conf, char *p)
        {
-       char *to;
-
-       to=p;
        for (;;)
                {
                if (IS_FCOMMENT(conf,*p))
@@ -613,13 +602,13 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from)
                                e++;
                                }
                        /* So at this point we have
-                        * ns which is the start of the name string which is
+                        * np which is the start of the name string which is
                         *   '\0' terminated. 
-                        * cs which is the start of the section string which is
+                        * cp which is the start of the section string which is
                         *   '\0' terminated.
                         * e is the 'next point after'.
-                        * r and s are the chars replaced by the '\0'
-                        * rp and sp is where 'r' and 's' came from.
+                        * r and rr are the chars replaced by the '\0'
+                        * rp and rrp is where 'r' and 'rr' came from.
                         */
                        p=_CONF_get_string(conf,cp,np);
                        if (rrp != NULL) *rrp=rr;
@@ -632,7 +621,17 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from)
                        BUF_MEM_grow_clean(buf,(strlen(p)+buf->length-(e-from)));
                        while (*p)
                                buf->data[to++]= *(p++);
+
+                       /* Since we change the pointer 'from', we also have
+                          to change the perceived length of the string it
+                          points at.  /RL */
+                       len -= e-from;
                        from=e;
+
+                       /* In case there were no braces or parenthesis around
+                          the variable reference, we have to put back the
+                          character that was replaced with a '\0'.  /RL */
+                       *rp = r;
                        }
                else
                        buf->data[to++]= *(from++);
@@ -712,7 +711,7 @@ static char *scan_dquote(CONF *conf, char *p)
        return(p);
        }
 
-static void dump_value(CONF_VALUE *a, BIO *out)
+static void dump_value_doall_arg(CONF_VALUE *a, BIO *out)
        {
        if (a->name)
                BIO_printf(out, "[%s] %s=%s\n", a->section, a->name, a->value);
@@ -720,11 +719,12 @@ static void dump_value(CONF_VALUE *a, BIO *out)
                BIO_printf(out, "[[%s]]\n", a->section);
        }
 
-static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_value, CONF_VALUE *, BIO *)
+static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_value, CONF_VALUE, BIO)
 
 static int def_dump(const CONF *conf, BIO *out)
        {
-       lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_value), out);
+       lh_CONF_VALUE_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_value),
+                               BIO, out);
        return 1;
        }