httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dirk-Willem van Gulik <di...@webweaving.org>
Subject patch - ENV() vars in conf files.
Date Thu, 18 Dec 2003 14:20:32 GMT

Quick patch which allows ENV() variables in config files for the old old
apache 1.3 branch. Posted to stop a certain someone from bugging me about
it.

Have fun.

Dw

Index: src/ApacheCore.def
===================================================================
RCS file: /home/cvs/apache-1.3/src/ApacheCore.def,v
retrieving revision 1.35
diff -u -r1.35 ApacheCore.def
--- src/ApacheCore.def	18 Jun 2002 04:19:46 -0000	1.35
+++ src/ApacheCore.def	18 Dec 2003 14:05:51 -0000
@@ -447,3 +447,4 @@
         ap_getline @439
         ap_get_chunk_size @440
         ap_escape_logitem @441
+        ap_resolve_env @442
Index: src/include/httpd.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/httpd.h,v
retrieving revision 1.374
diff -u -r1.374 httpd.h
--- src/include/httpd.h	14 Dec 2003 18:16:49 -0000	1.374
+++ src/include/httpd.h	18 Dec 2003 14:05:52 -0000
@@ -1008,6 +1008,7 @@
 API_EXPORT(char *) ap_getword_nulls_nc(pool *p, char **line, char stop);
 API_EXPORT(char *) ap_getword_conf(pool *p, const char **line);
 API_EXPORT(char *) ap_getword_conf_nc(pool *p, char **line);
+API_EXPORT(char *) ap_resolve_env(pool *p, const char * word);

 API_EXPORT(const char *) ap_size_list_item(const char **field, int *len);
 API_EXPORT(char *) ap_get_list_item(pool *p, const char **field);
Index: src/main/http_core.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v
retrieving revision 1.327
diff -u -r1.327 http_core.c
--- src/main/http_core.c	17 Nov 2003 17:14:53 -0000	1.327
+++ src/main/http_core.c	18 Dec 2003 14:05:54 -0000
@@ -1282,6 +1282,8 @@
 			  w, NULL);
     }

+    line = ap_resolve_env(cmd->pool,line);
+
     /* The entry should be ignored if it is a full URL for a 401 error */

     if (error_number == 401 &&
Index: src/main/util.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/util.c,v
retrieving revision 1.208
diff -u -r1.208 util.c
--- src/main/util.c	14 Dec 2003 18:16:50 -0000	1.208
+++ src/main/util.c	18 Dec 2003 14:06:01 -0000
@@ -756,6 +756,49 @@
     return res;
 }

+/* Check a string for any ${ENV} environment variable
+ * construct and replace each them by the value of
+ * that environment variable, if it exists. If the
+ * environment value does not exist, replace by an
+ * empty string. Any unrecognized construct is not
+ * replaced and silently ignored. Apart from that
+ * simple ${ENV:=defaults} are also possible.
+ */
+API_EXPORT(char *) ap_resolve_env(pool *p, const char * word)
+{
+       char tmp[ MAX_STRING_LEN ];
+       char * s, * e;
+       tmp[0] = '\0';
+
+       if (!(s=strchr(word,'$')))
+               return (char *)word;
+
+       do {
+               /* XXX - relies on strncat() to add '\0'
+                */
+               strncat(tmp,word,s - word);
+
+               if ((s[1] == '{') && (e=strchr(s,'}'))) {
+			char * dfault = "";
+                        *e = '\0';
+			if ((dfault = strchr(s,':')) && ((dfault[1] == '='))) {
+				*dfault = '\0';
+				dfault +=2;
+			}
+                        word = e + 1;
+                        e = getenv(s+2);
+                        strcat(tmp,e ? e : dfault);
+               } else {
+                       /* ignore invalid strings */
+                       word = s+1;
+                       strcat(tmp,"$");
+               };
+       } while ((s=strchr(word,'$')));
+       strcat(tmp,word);
+
+       return ap_pstrdup(p,tmp);
+}
+
 /* Get a word, (new) config-file style --- quoted strings and backslashes
  * all honored
  */
@@ -775,7 +818,7 @@
     }

     *resp++ = '\0';
-    return result;
+    return ap_resolve_env(p, result);
 }

 API_EXPORT(char *) ap_getword_conf_nc(pool *p, char **line)
@@ -1469,54 +1512,90 @@
     return where;
 }

Index: src/support/httpd.exp
===================================================================
RCS file: /home/cvs/apache-1.3/src/support/httpd.exp,v
retrieving revision 1.41
diff -u -r1.41 httpd.exp
--- src/support/httpd.exp	17 Jan 2003 12:23:10 -0000	1.41
+++ src/support/httpd.exp	18 Dec 2003 14:06:03 -0000
@@ -107,6 +107,7 @@
 ap_error_log2stderr
 ap_escape_html
 ap_escape_logitem
+ap_esolve_env
 ap_escape_path_segment
 ap_escape_quotes
 ap_escape_shell_cmd

Mime
View raw message