From: Alan T. DeKok Date: Fri, 5 Aug 2022 13:11:52 +0000 (-0400) Subject: don't allow "foo.bar = baz" to become a subsection in attr definition X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8978b77c7751b3185073d54e9fde5b5a0ef2fa28;p=thirdparty%2Ffreeradius-server.git don't allow "foo.bar = baz" to become a subsection in attr definition --- diff --git a/src/lib/server/cf_file.c b/src/lib/server/cf_file.c index b1c159d9a5d..4110f67e5dd 100644 --- a/src/lib/server/cf_file.c +++ b/src/lib/server/cf_file.c @@ -1827,7 +1827,7 @@ static int add_pair(CONF_SECTION *parent, char const *attr, char const *value, * with '&' (or %), so we don't pick up attribute * references. */ - if ((*attr >= 'A') && (name1_token == T_BARE_WORD) && value) { + if ((*attr >= 'A') && (name1_token == T_BARE_WORD) && value && !parent->attr) { char const *p = strchr(attr, '.'); if (p && (add_section_pair(&parent, &attr, p, buff, talloc_array_length(buff), filename, lineno) < 0)) { diff --git a/src/lib/server/cf_priv.h b/src/lib/server/cf_priv.h index c6a8432a880..aa2f2ef8477 100644 --- a/src/lib/server/cf_priv.h +++ b/src/lib/server/cf_priv.h @@ -100,7 +100,8 @@ struct cf_section { void *base; int depth; - int allow_unlang; + int allow_unlang; //!< depth at which we allow unlang + bool attr; //!< is this thing an attribute definition? CONF_SECTION *template; }; diff --git a/src/lib/server/cf_util.c b/src/lib/server/cf_util.c index 1409a3b76e5..5084280bbc3 100644 --- a/src/lib/server/cf_util.c +++ b/src/lib/server/cf_util.c @@ -739,6 +739,8 @@ CONF_SECTION *_cf_section_alloc(TALLOC_CTX *ctx, CONF_SECTION *parent, } talloc_set_destructor(cs, _cf_section_free); + cs->attr = (cs->name1[0] == '&') | (parent && parent->attr); + if (parent) { CONF_DATA const *cd; CONF_PARSER *rule;