diff --git a/include/haproxy/vars-t.h b/include/haproxy/vars-t.h index 0e35ade19..06f2712e1 100644 --- a/include/haproxy/vars-t.h +++ b/include/haproxy/vars-t.h @@ -27,6 +27,7 @@ /* flags used when setting/clearing variables */ #define VF_UPDATEONLY 0x00000001 // SCOPE_PROC variables are only updated +#define VF_CREATEONLY 0x00000002 // do nothing if the variable already exists enum vars_scope { SCOPE_SESS = 0, diff --git a/src/vars.c b/src/vars.c index df26ac160..80a6a4520 100644 --- a/src/vars.c +++ b/src/vars.c @@ -356,6 +356,7 @@ static int smp_fetch_var(const struct arg *args, struct sample *smp, const char * Flags is a bitfield that may contain one of the following flags: * - VF_UPDATEONLY: if the scope is SCOPE_PROC, the variable may only be * updated but not created. + * - VF_CREATEONLY: do nothing if the variable already exists (success). * * It returns 0 on failure, non-zero on success. */ @@ -375,6 +376,11 @@ static int var_set(const char *name, enum vars_scope scope, struct sample *smp, var = var_get(vars, name); if (var) { + if (flags & VF_CREATEONLY) { + ret = 1; + goto unlock; + } + /* free its used memory. */ if (var->data.type == SMP_T_STR || var->data.type == SMP_T_BIN) {