Commit 4b0e0942 authored by Dirk-Willem van Gulik's avatar Dirk-Willem van Gulik
Browse files

Another one in the department of fairly useless patches which

are best described as feature creep. Allows ${ENV} constructs
in the config file. This avoids the need for mod_perl or
m4 cleverness whilst mainting some of the usefullness. It
does not do (of course) multiline things or anything that clever.

Feel free to flame me.

PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84765 13f79535-47bb-0310-9956-ffa450edef68
parent 6297ac5b
Loading
Loading
Loading
Loading
+1 −0
Changes for include/httpd.h: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -918,6 +918,7 @@ API_EXPORT(char *) ap_getword_nulls(ap_context_t *p, const char **line, char sto
API_EXPORT(char *) ap_getword_nulls_nc(ap_context_t *p, char **line, char stop);
API_EXPORT(char *) ap_getword_conf(ap_context_t *p, const char **line);
API_EXPORT(char *) ap_getword_conf_nc(ap_context_t *p, char **line);
API_EXPORT(char *) ap_resolve_env(ap_context_t *p, const char * word); 

API_EXPORT(const char *) ap_size_list_item(const char **field, int *len);
API_EXPORT(char *) ap_get_list_item(ap_context_t *p, const char **field);
+8 −0
Changes for server/config.c: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -636,6 +636,9 @@ static const char *invoke_cmd(const command_rec *cmd, cmd_parms *parms,

    switch (cmd->args_how) {
    case RAW_ARGS:
#ifdef RESOLVE_ENV_PER_TOKEN
	args = ap_resolve_env(parms->pool,args);
#endif
	return ((const char *(*)(cmd_parms *, void *, const char *))
		(cmd->func)) (parms, mconfig, args);

@@ -829,6 +832,7 @@ CORE_EXPORT(void *) ap_set_config_vectors(cmd_parms *parms, void *config, module
    return mconfig;
}


CORE_EXPORT(const char *) ap_handle_command(cmd_parms *parms, void *config, const char *l)
{
    void *oldconfig;
@@ -839,7 +843,11 @@ CORE_EXPORT(const char *) ap_handle_command(cmd_parms *parms, void *config, cons
    if ((l[0] == '#') || (!l[0]))
	return NULL;

#if RESOLVE_ENV_PER_TOKEN
    args = l;
#else
    args = ap_resolve_env(parms->temp_pool,l); 
#endif
    cmd_name = ap_getword_conf(parms->temp_pool, &args);
    if (*cmd_name == '\0')
	return NULL;
+39 −0
Changes for server/util.c: 39 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -706,7 +706,11 @@ static char *substring_conf(ap_context_t *p, const char *start, int len, char qu
    }

    *resp++ = '\0';
#if RESOLVE_ENV_PER_TOKEN
    return ap_resolve_env(p,result);
#else
    return result;
#endif
}

API_EXPORT(char *) ap_getword_conf_nc(ap_context_t *p, char **line)
@@ -755,6 +759,41 @@ API_EXPORT(char *) ap_getword_conf(ap_context_t *p, const char **line)
    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.
 */
API_EXPORT(char *) ap_resolve_env(ap_context_t *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,'}'))) {
                       *e = '\0';
                       word = e + 1;
                       e = getenv(s+2);
                       strcat(tmp,e ? e : "");
               } else {
                       /* ignore invalid strings */
                       word = s+1;
                       strcat(tmp,"$");
               };
       } while ((s=strchr(word,'$')));
       strcat(tmp,word);

       return ap_pstrdup(p,tmp);
}
API_EXPORT(int) ap_cfg_closefile(configfile_t *cfp)
{
#ifdef DEBUG