- defined(<name>) : returns true if an environment variable <name>
exists, regardless of its contents
+ - streq(<str1>,<str2>) : returns true only if the two strings are equal
+ - strneq(<str1>,<str2>) : returns true only if the two strings differ
+
Example:
.if defined(HAPROXY_MWORKER)
...
.endif
+ .if strneq("$SSL_ONLY",yes)
+ bind :80
+ .endif
+
+ .if streq("$WITH_SSL",yes)
+ bind :443 ssl crt ...
+ .endif
+
Three other directives are provided to report some status:
- .notice "message" : emit this message at level NOTICE
enum cond_predicate {
CFG_PRED_NONE, // none
CFG_PRED_DEFINED, // "defined"
+ CFG_PRED_STREQ, // "streq"
+ CFG_PRED_STRNEQ, // "strneq"
};
struct cond_pred_kw {
/* supported condition predicates */
const struct cond_pred_kw cond_predicates[] = {
{ "defined", CFG_PRED_DEFINED, ARG1(1, STR) },
+ { "streq", CFG_PRED_STREQ, ARG2(2, STR, STR) },
+ { "strneq", CFG_PRED_STRNEQ, ARG2(2, STR, STR) },
{ NULL, CFG_PRED_NONE, 0 }
};
ret = getenv(argp[0].data.str.area) != NULL;
goto done;
+ case CFG_PRED_STREQ: // checks if the two arg are equal
+ ret = strcmp(argp[0].data.str.area, argp[1].data.str.area) == 0;
+ goto done;
+
+ case CFG_PRED_STRNEQ: // checks if the two arg are different
+ ret = strcmp(argp[0].data.str.area, argp[1].data.str.area) != 0;
+ goto done;
+
default:
memprintf(err, "internal error: unhandled conditional expression predicate '%s'", cond_pred->word);
if (errptr)