From: Alan T. DeKok Date: Wed, 11 Sep 2019 16:54:22 +0000 (-0400) Subject: make conditional parser check for regexes, too X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=31806f7b699779b6247b951cf2e43f53974f09ee;p=thirdparty%2Ffreeradius-server.git make conditional parser check for regexes, too if tmpl_preparse() is told to not require a regex, then it should treat '/' as any other character --- diff --git a/src/lib/server/cond_tokenize.c b/src/lib/server/cond_tokenize.c index 1f6ae113fc1..5f1ebbfdddb 100644 --- a/src/lib/server/cond_tokenize.c +++ b/src/lib/server/cond_tokenize.c @@ -581,6 +581,18 @@ static ssize_t cond_preparse(TALLOC_CTX *ctx, char const **out, size_t *outlen, char *p, *expanded; char buffer[8192]; + /* + * When 'request_regex == false', tmpl_preparse() treats + * '/' as a bare word. This is so that the configuration + * file parser can parse filenames, which may begin with + * '/'. We therefore check for leading '/' here, as + * conditions don't use filenames. + */ + if (!require_regex && (*start == '/')) { + *error = "Unexpected regular expression"; + return 0; + } + /* * Allow dynamic xlat expansion everywhere. */ diff --git a/src/lib/server/tmpl.c b/src/lib/server/tmpl.c index ac323149938..99c11986f7b 100644 --- a/src/lib/server/tmpl.c +++ b/src/lib/server/tmpl.c @@ -2994,10 +2994,7 @@ ssize_t tmpl_preparse(char const **out, size_t *outlen, char const *start, if (*p != '/') { return_P("Expected regular expression"); } - - } else if (*p == '/') { - return_P("Unexpected regular expression"); - } + } /* else treat '/' as any other character */ switch (*p) { /*