New functions CONF_load_bio() and CONF_load_fp() to load a configuration
file from a bio or fp. Added some more constification to the BN library.
diff --git a/crypto/conf/conf.c b/crypto/conf/conf.c
index a55ecbb..3a055fa 100644
--- a/crypto/conf/conf.c
+++ b/crypto/conf/conf.c
@@ -82,10 +82,48 @@
 
 const char *CONF_version="CONF" OPENSSL_VERSION_PTEXT;
 
-LHASH *CONF_load(LHASH *h, char *file, long *line)
+
+LHASH *CONF_load(LHASH *h, const char *file, long *line)
+	{
+	LHASH *ltmp;
+	FILE *in=NULL;
+
+#ifdef VMS
+	in=fopen(file,"r");
+#else
+	in=fopen(file,"rb");
+#endif
+	if (in == NULL)
+		{
+		SYSerr(SYS_F_FOPEN,get_last_sys_error());
+		ERR_set_error_data(BUF_strdup(file),
+			ERR_TXT_MALLOCED|ERR_TXT_STRING);
+		CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+		return NULL;
+		}
+
+	ltmp = CONF_load_fp(h, in, line);
+	fclose(in);
+
+	return ltmp;
+}
+
+LHASH *CONF_load_fp(LHASH *h, FILE *in, long *line)
+{
+	BIO *btmp;
+	LHASH *ltmp;
+	if(!(btmp = BIO_new_fp(in, BIO_NOCLOSE))) {
+		CONFerr(CONF_F_CONF_LOAD_FP,ERR_R_BUF_LIB);
+		return NULL;
+	}
+	ltmp = CONF_load_bio(h, btmp, line);
+	BIO_free(btmp);
+	return ltmp;
+}
+
+LHASH *CONF_load_bio(LHASH *h, BIO *in, long *line)
 	{
 	LHASH *ret=NULL;
-	FILE *in=NULL;
 #define BUFSIZE	512
 	char btmp[16];
 	int bufnum=0,i,ii;
@@ -101,28 +139,14 @@
 
 	if ((buff=BUF_MEM_new()) == NULL)
 		{
-		CONFerr(CONF_F_CONF_LOAD,ERR_R_BUF_LIB);
-		goto err;
-		}
-
-#ifdef VMS
-	in=fopen(file,"r");
-#else
-	in=fopen(file,"rb");
-#endif
-	if (in == NULL)
-		{
-		SYSerr(SYS_F_FOPEN,get_last_sys_error());
-		ERR_set_error_data(BUF_strdup(file),
-			ERR_TXT_MALLOCED|ERR_TXT_STRING);
-		CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB);
+		CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_BUF_LIB);
 		goto err;
 		}
 
 	section=(char *)Malloc(10);
 	if (section == NULL)
 		{
-		CONFerr(CONF_F_CONF_LOAD,ERR_R_MALLOC_FAILURE);
+		CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
 		goto err;
 		}
 	strcpy(section,"default");
@@ -131,7 +155,7 @@
 		{
 		if ((ret=lh_new(hash,cmp)) == NULL)
 			{
-			CONFerr(CONF_F_CONF_LOAD,ERR_R_MALLOC_FAILURE);
+			CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_MALLOC_FAILURE);
 			goto err;
 			}
 		}
@@ -141,7 +165,8 @@
 	sv=new_section(ret,section);
 	if (sv == NULL)
 		{
-		CONFerr(CONF_F_CONF_LOAD,CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
+		CONFerr(CONF_F_CONF_LOAD_BIO,
+					CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
 		goto err;
 		}
 	section_sk=(STACK *)sv->value;
@@ -152,12 +177,12 @@
 		again=0;
 		if (!BUF_MEM_grow(buff,bufnum+BUFSIZE))
 			{
-			CONFerr(CONF_F_CONF_LOAD,ERR_R_BUF_LIB);
+			CONFerr(CONF_F_CONF_LOAD_BIO,ERR_R_BUF_LIB);
 			goto err;
 			}
 		p= &(buff->data[bufnum]);
 		*p='\0';
-		fgets(p,BUFSIZE-1,in);
+		BIO_gets(in, p, BUFSIZE-1);
 		p[BUFSIZE-1]='\0';
 		ii=i=strlen(p);
 		if (i == 0) break;
@@ -222,7 +247,8 @@
 					ss=p;
 					goto again;
 					}
-				CONFerr(CONF_F_CONF_LOAD,CONF_R_MISSING_CLOSE_SQUARE_BRACKET);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+					CONF_R_MISSING_CLOSE_SQUARE_BRACKET);
 				goto err;
 				}
 			*end='\0';
@@ -231,7 +257,8 @@
 				sv=new_section(ret,section);
 			if (sv == NULL)
 				{
-				CONFerr(CONF_F_CONF_LOAD,CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+					CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
 				goto err;
 				}
 			section_sk=(STACK *)sv->value;
@@ -253,7 +280,8 @@
 			p=eat_ws(end);
 			if (*p != '=')
 				{
-				CONFerr(CONF_F_CONF_LOAD,CONF_R_MISSING_EQUAL_SIGN);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+						CONF_R_MISSING_EQUAL_SIGN);
 				goto err;
 				}
 			*end='\0';
@@ -269,7 +297,8 @@
 
 			if ((v=(CONF_VALUE *)Malloc(sizeof(CONF_VALUE))) == NULL)
 				{
-				CONFerr(CONF_F_CONF_LOAD,ERR_R_MALLOC_FAILURE);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+							ERR_R_MALLOC_FAILURE);
 				goto err;
 				}
 			if (psection == NULL) psection=section;
@@ -277,7 +306,8 @@
 			v->value=NULL;
 			if (v->name == NULL)
 				{
-				CONFerr(CONF_F_CONF_LOAD,ERR_R_MALLOC_FAILURE);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+							ERR_R_MALLOC_FAILURE);
 				goto err;
 				}
 			strcpy(v->name,pname);
@@ -290,7 +320,8 @@
 					tv=new_section(ret,psection);
 				if (tv == NULL)
 					{
-					CONFerr(CONF_F_CONF_LOAD,CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
+					CONFerr(CONF_F_CONF_LOAD_BIO,
+						CONF_R_UNABLE_TO_CREATE_NEW_SECTION);
 					goto err;
 					}
 				ts=(STACK *)tv->value;
@@ -303,7 +334,8 @@
 			v->section=tv->section;	
 			if (!sk_push(ts,(char *)v))
 				{
-				CONFerr(CONF_F_CONF_LOAD,ERR_R_MALLOC_FAILURE);
+				CONFerr(CONF_F_CONF_LOAD_BIO,
+							ERR_R_MALLOC_FAILURE);
 				goto err;
 				}
 			vv=(CONF_VALUE *)lh_insert(ret,(char *)v);
@@ -319,7 +351,6 @@
 		}
 	if (buff != NULL) BUF_MEM_free(buff);
 	if (section != NULL) Free(section);
-	if (in != NULL) fclose(in);
 	return(ret);
 err:
 	if (buff != NULL) BUF_MEM_free(buff);
@@ -327,7 +358,6 @@
 	if (line != NULL) *line=eline;
 	sprintf(btmp,"%ld",eline);
 	ERR_add_error_data(2,"line ",btmp);
-	if (in != NULL) fclose(in);
 	if ((h != ret) && (ret != NULL)) CONF_free(ret);
 	if (v != NULL)
 		{
@@ -337,7 +367,7 @@
 		}
 	return(NULL);
 	}
-		
+
 char *CONF_get_string(LHASH *conf, char *section, char *name)
 	{
 	CONF_VALUE *v,vv;