summaryrefslogtreecommitdiff
path: root/modules/metadata/mod_env.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/metadata/mod_env.c')
-rw-r--r--modules/metadata/mod_env.c276
1 files changed, 0 insertions, 276 deletions
diff --git a/modules/metadata/mod_env.c b/modules/metadata/mod_env.c
deleted file mode 100644
index ebe112b859..0000000000
--- a/modules/metadata/mod_env.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-/*
- * mod_env.c
- * version 0.0.5
- * status beta
- * Pass environment variables to CGI/SSI scripts.
- *
- * Andrew Wilson <Andrew.Wilson@cm.cf.ac.uk> 06.Dec.95
- *
- * Change log:
- * 08.Dec.95 Now allows PassEnv directive to appear more than once in
- * conf files.
- * 10.Dec.95 optimisation. getenv() only called at startup and used
- * to build a fast-to-access table. apr_table_t used to build
- * per-server environment for each request.
- * robustness. better able to handle errors in configuration
- * files:
- * 1) PassEnv directive present, but no environment variable listed
- * 2) PassEnv FOO present, but $FOO not present in environment
- * 3) no PassEnv directive present
- * 23.Dec.95 Now allows SetEnv directive with same semantics as 'sh' setenv:
- * SetEnv Var sets Var to the empty string
- * SetEnv Var Val sets Var to the value Val
- * Values containing whitespace should be quoted, eg:
- * SetEnv Var "this is some text"
- * Environment variables take their value from the last instance
- * of PassEnv / SetEnv to be reached in the configuration file.
- * For example, the sequence:
- * PassEnv FOO
- * SetEnv FOO override
- * Causes FOO to take the value 'override'.
- * 23.Feb.96 Added UnsetEnv directive to allow environment variables
- * to be removed.
- * Virtual hosts now 'inherit' parent server environment which
- * they're able to overwrite with their own directives or
- * selectively ignore with UnsetEnv.
- * *** IMPORTANT - the way that virtual hosts inherit their ***
- * *** environment variables from the default server's ***
- * *** configuration has changed. You should test your ***
- * *** configuration carefully before accepting this ***
- * *** version of the module in a live webserver which used ***
- * *** older versions of the module. ***
- */
-
-#include "apr.h"
-#include "apr_strings.h"
-
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "ap_config.h"
-#include "httpd.h"
-#include "http_config.h"
-#include "http_request.h"
-
-
-typedef struct {
- apr_table_t *vars;
- const char *unsetenv;
- int vars_present;
-} env_dir_config_rec;
-
-module AP_MODULE_DECLARE_DATA env_module;
-
-static void *create_env_dir_config(apr_pool_t *p, char *dummy)
-{
- env_dir_config_rec *conf = apr_palloc(p, sizeof(*conf));
-
- conf->vars = apr_table_make(p, 50);
- conf->unsetenv = "";
- conf->vars_present = 0;
-
- return conf;
-}
-
-static void *merge_env_dir_configs(apr_pool_t *p, void *basev, void *addv)
-{
- env_dir_config_rec *base = basev;
- env_dir_config_rec *add = addv;
- env_dir_config_rec *newconf = apr_palloc(p, sizeof(*newconf));
-
- apr_table_t *new_table;
- apr_table_entry_t *elts;
- apr_array_header_t *arr;
-
- int i;
- const char *uenv, *unset;
-
- /*
- * new_table = copy_table( p, base->vars );
- * foreach $element ( @add->vars ) {
- * table_set( new_table, $element.key, $element.val );
- * };
- * foreach $unsetenv ( @UNSETENV ) {
- * table_unset( new_table, $unsetenv );
- * }
- */
-
- new_table = apr_table_copy(p, base->vars);
-
- arr = apr_table_elts(add->vars);
- elts = (apr_table_entry_t *)arr->elts;
-
- for (i = 0; i < arr->nelts; ++i) {
- apr_table_setn(new_table, elts[i].key, elts[i].val);
- }
-
- unset = add->unsetenv;
- uenv = ap_getword_conf(p, &unset);
- while (uenv[0] != '\0') {
- apr_table_unset(new_table, uenv);
- uenv = ap_getword_conf(p, &unset);
- }
-
- newconf->vars = new_table;
-
- newconf->vars_present = base->vars_present || add->vars_present;
-
- return newconf;
-}
-
-static const char *add_env_module_vars_passed(cmd_parms *cmd, void *sconf_,
- const char *arg)
-{
- env_dir_config_rec *sconf = sconf_;
- apr_table_t *vars = sconf->vars;
- char *env_var;
- char *name_ptr;
-
- while (*arg) {
- name_ptr = ap_getword_conf(cmd->pool, &arg);
- env_var = getenv(name_ptr);
- if (env_var != NULL) {
- sconf->vars_present = 1;
- apr_table_setn(vars, name_ptr, apr_pstrdup(cmd->pool, env_var));
- }
- }
- return NULL;
-}
-
-static const char *add_env_module_vars_set(cmd_parms *cmd, void *sconf_,
- const char *arg)
-{
- env_dir_config_rec *sconf = sconf_;
- apr_table_t *vars = sconf->vars;
- char *name, *value;
-
- name = ap_getword_conf(cmd->pool, &arg);
- value = ap_getword_conf(cmd->pool, &arg);
-
- /* name is mandatory, value is optional. no value means
- * set the variable to an empty string
- */
-
-
- if ((*name == '\0') || (*arg != '\0')) {
- return "SetEnv takes one or two arguments. An environment variable name and an optional value to pass to CGI.";
- }
-
- sconf->vars_present = 1;
- apr_table_setn(vars, name, value);
-
- return NULL;
-}
-
-static const char *add_env_module_vars_unset(cmd_parms *cmd, void *sconf_,
- const char *arg)
-{
- env_dir_config_rec *sconf = sconf_;
-
- sconf->unsetenv = sconf->unsetenv
- ? apr_pstrcat(cmd->pool, sconf->unsetenv, " ", arg, NULL)
- : arg;
-
- return NULL;
-}
-
-static const command_rec env_module_cmds[] =
-{
-AP_INIT_RAW_ARGS("PassEnv", add_env_module_vars_passed, NULL,
- OR_FILEINFO, "a list of environment variables to pass to CGI."),
-AP_INIT_RAW_ARGS("SetEnv", add_env_module_vars_set, NULL,
- OR_FILEINFO, "an environment variable name and a value to pass to CGI."),
-AP_INIT_RAW_ARGS("UnsetEnv", add_env_module_vars_unset, NULL,
- OR_FILEINFO, "a list of variables to remove from the CGI environment."),
- {NULL},
-};
-
-static int fixup_env_module(request_rec *r)
-{
- apr_table_t *e = r->subprocess_env;
- env_dir_config_rec *sconf = ap_get_module_config(r->per_dir_config,
- &env_module);
- apr_table_t *vars = sconf->vars;
-
- if (!sconf->vars_present)
- return DECLINED;
-
- r->subprocess_env = apr_table_overlay(r->pool, e, vars);
-
- return OK;
-}
-
-static void register_hooks(apr_pool_t *p)
-{
- ap_hook_fixups(fixup_env_module, NULL, NULL, APR_HOOK_MIDDLE);
-}
-
-module AP_MODULE_DECLARE_DATA env_module =
-{
- STANDARD20_MODULE_STUFF,
- create_env_dir_config, /* dir config creater */
- merge_env_dir_configs, /* dir merger --- default is to override */
- NULL, /* server config */
- NULL, /* merge server configs */
- env_module_cmds, /* command apr_table_t */
- register_hooks /* register hooks */
-};