From: Christopher Faulet Date: Fri, 18 Nov 2022 14:52:58 +0000 (+0100) Subject: MEDIUM: thread: Restric nbthread/thread-group(s) to very first global sections X-Git-Tag: v2.7-dev9~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5534334f1f4c0fa879415a116e707ed80bf74169;p=thirdparty%2Fhaproxy.git MEDIUM: thread: Restric nbthread/thread-group(s) to very first global sections nbhread, thead-group and thread-groups directives must only be defined in very first global sections. It means no other section must have been parsed before. Indeed, some parts of the configuratio depends on the value of these settings and it is undefined to change them after. --- diff --git a/src/thread.c b/src/thread.c index 64ac476a35..59bfbf89ce 100644 --- a/src/thread.c +++ b/src/thread.c @@ -1312,6 +1312,11 @@ static int cfg_parse_nbthread(char **args, int section_type, struct proxy *curpx if (too_many_args(1, args, err, NULL)) return -1; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + nbthread = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]); @@ -1349,6 +1354,11 @@ static int cfg_parse_thread_group(char **args, int section_type, struct proxy *c long tnum, tend, tgroup; int arg, tot; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + tgroup = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]); @@ -1446,6 +1456,11 @@ static int cfg_parse_thread_groups(char **args, int section_type, struct proxy * if (too_many_args(1, args, err, NULL)) return -1; + if (non_global_section_parsed == 1) { + memprintf(err, "'%s' not allowed if a non-global section was previously defined. This parameter must be declared in the first global section", args[0]); + return -1; + } + nbtgroups = strtol(args[1], &errptr, 10); if (!*args[1] || *errptr) { memprintf(err, "'%s' passed a missing or unparsable integer value in '%s'", args[0], args[1]);