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);
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);
return mconfig;
}
+
CORE_EXPORT(const char *) ap_handle_command(cmd_parms *parms, void *config, const char *l)
{
void *oldconfig;
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;
}
*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)
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