diff --git a/doc/configuration.txt b/doc/configuration.txt index 93437bbd6..0fa3b62b6 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -8795,6 +8795,20 @@ connslots([]) : integer then this fetch clearly does not make sense, in which case the value returned will be -1. +env() : string + Returns a string containing the value of environment variable . As a + reminder, environment variables are per-process and are sampled when the + process starts. This can be useful to pass some information to a next hop + server, or with ACLs to take specific action when the process is started a + certain way. + + Examples : + # Pass the Via header to next hop with the local hostname in it + http-request add-header Via 1.1\ %[env(HOSTNAME)] + + # reject cookie-less requests when the STOP environment variable is set + http-request deny if !{ cook(SESSIONID) -m found } { env(STOP) -m found } + fe_conn([]) : integer Returns the number of currently established connections on the frontend, possibly including the connection being evaluated. If no frontend name is diff --git a/src/acl.c b/src/acl.c index f2abd4418..26c0ac820 100644 --- a/src/acl.c +++ b/src/acl.c @@ -1980,6 +1980,26 @@ smp_fetch_false(struct proxy *px, struct session *s, void *l7, unsigned int opt, return 1; } +/* retrieve environment variable $1 as a string */ +static int +smp_fetch_env(struct proxy *px, struct session *s, void *l7, unsigned int opt, + const struct arg *args, struct sample *smp) +{ + char *env; + + if (!args || args[0].type != ARGT_STR) + return 0; + + env = getenv(args[0].data.str.str); + if (!env) + return 0; + + smp->type = SMP_T_CSTR; + smp->data.str.str = env; + smp->data.str.len = strlen(env); + return 1; +} + /************************************************************************/ /* All supported sample and ACL keywords must be declared here. */ @@ -1991,8 +2011,9 @@ smp_fetch_false(struct proxy *px, struct session *s, void *l7, unsigned int opt, * instance IPv4/IPv6 must be declared IPv4. */ static struct sample_fetch_kw_list smp_kws = {{ },{ - { "always_false", smp_fetch_false, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, - { "always_true", smp_fetch_true, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, + { "always_false", smp_fetch_false, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, + { "always_true", smp_fetch_true, 0, NULL, SMP_T_BOOL, SMP_USE_INTRN }, + { "env", smp_fetch_env, ARG1(1,STR), NULL, SMP_T_CSTR, SMP_USE_INTRN }, { /* END */ }, }};