mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-02-08 10:51:06 +01:00
MINOR: config: alphanumerically sort config keywords output
The output produced by dump_registered_keywords() really deserves to be sorted in order to ease comparisons. The function now implements a tiny sorting mechanism that's suitable for each two-level list, and makes use of dump_act_rules() to dump rulesets. The code is not significantly more complicated and some parts (e.g options) could even be factored. The output is much more exploitable to detect differences now.
This commit is contained in:
parent
2100b383ab
commit
d905826000
160
src/cfgparse.c
160
src/cfgparse.c
@ -4250,12 +4250,20 @@ void cfg_dump_registered_keywords()
|
||||
|
||||
for (section = 1; sect_names[section]; section++) {
|
||||
struct cfg_kw_list *kwl;
|
||||
const struct cfg_keyword *kwp, *kwn;
|
||||
|
||||
printf("%s\n", sect_names[section]);
|
||||
list_for_each_entry(kwl, &cfg_keywords.list, list) {
|
||||
for (index = 0; kwl->kw[index].kw != NULL; index++)
|
||||
if (kwl->kw[index].section == section)
|
||||
printf("\t%s\n", kwl->kw[index].kw);
|
||||
|
||||
for (kwn = kwp = NULL;; kwp = kwn) {
|
||||
list_for_each_entry(kwl, &cfg_keywords.list, list) {
|
||||
for (index = 0; kwl->kw[index].kw != NULL; index++)
|
||||
if (kwl->kw[index].section == section &&
|
||||
strordered(kwp ? kwp->kw : NULL, kwl->kw[index].kw, kwn != kwp ? kwn->kw : NULL))
|
||||
kwn = &kwl->kw[index];
|
||||
}
|
||||
if (kwn == kwp)
|
||||
break;
|
||||
printf("\t%s\n", kwn->kw);
|
||||
}
|
||||
|
||||
if (section == CFG_LISTEN) {
|
||||
@ -4265,100 +4273,96 @@ void cfg_dump_registered_keywords()
|
||||
extern struct bind_kw_list bind_keywords;
|
||||
extern struct ssl_bind_kw ssl_bind_kws[] __maybe_unused;
|
||||
extern struct srv_kw_list srv_keywords;
|
||||
struct action_kw_list *akwl;
|
||||
struct bind_kw_list *bkwl;
|
||||
struct srv_kw_list *skwl;
|
||||
const struct bind_kw *bkwp, *bkwn;
|
||||
const struct srv_kw *skwp, *skwn;
|
||||
const struct ssl_bind_kw *sbkwp __maybe_unused, *sbkwn __maybe_unused;
|
||||
const struct cfg_opt *coptp, *coptn;
|
||||
|
||||
list_for_each_entry(bkwl, &bind_keywords.list, list) {
|
||||
for (index = 0; bkwl->kw[index].kw != NULL; index++) {
|
||||
if (!bkwl->kw[index].skip)
|
||||
printf("\tbind <addr> %s\n", bkwl->kw[index].kw);
|
||||
else
|
||||
printf("\tbind <addr> %s +%d\n", bkwl->kw[index].kw, bkwl->kw[index].skip);
|
||||
for (bkwn = bkwp = NULL;; bkwp = bkwn) {
|
||||
list_for_each_entry(bkwl, &bind_keywords.list, list) {
|
||||
for (index = 0; bkwl->kw[index].kw != NULL; index++)
|
||||
if (strordered(bkwp ? bkwp->kw : NULL,
|
||||
bkwl->kw[index].kw,
|
||||
bkwn != bkwp ? bkwn->kw : NULL))
|
||||
bkwn = &bkwl->kw[index];
|
||||
}
|
||||
if (bkwn == bkwp)
|
||||
break;
|
||||
|
||||
if (!bkwn->skip)
|
||||
printf("\tbind <addr> %s\n", bkwn->kw);
|
||||
else
|
||||
printf("\tbind <addr> %s +%d\n", bkwn->kw, bkwn->skip);
|
||||
}
|
||||
|
||||
#if defined(USE_OPENSSL)
|
||||
for (index = 0; ssl_bind_kws[index].kw != NULL; index++) {
|
||||
if (!ssl_bind_kws[index].skip)
|
||||
printf("\tbind <addr> ssl %s\n", ssl_bind_kws[index].kw);
|
||||
for (sbkwn = sbkwp = NULL;; sbkwp = sbkwn) {
|
||||
for (index = 0; ssl_bind_kws[index].kw != NULL; index++) {
|
||||
if (strordered(sbkwp ? sbkwp->kw : NULL,
|
||||
ssl_bind_kws[index].kw,
|
||||
sbkwn != sbkwp ? sbkwn->kw : NULL))
|
||||
sbkwn = &ssl_bind_kws[index];
|
||||
}
|
||||
if (sbkwn == sbkwp)
|
||||
break;
|
||||
if (!sbkwn->skip)
|
||||
printf("\tbind <addr> ssl %s\n", sbkwn->kw);
|
||||
else
|
||||
printf("\tbind <addr> ssl %s +%d\n", ssl_bind_kws[index].kw, ssl_bind_kws[index].skip);
|
||||
printf("\tbind <addr> ssl %s +%d\n", sbkwn->kw, sbkwn->skip);
|
||||
}
|
||||
#endif
|
||||
|
||||
list_for_each_entry(skwl, &srv_keywords.list, list) {
|
||||
for (index = 0; skwl->kw[index].kw != NULL; index++) {
|
||||
if (!skwl->kw[index].skip)
|
||||
printf("\tserver <name> <addr> %s\n", skwl->kw[index].kw);
|
||||
else
|
||||
printf("\tserver <name> <addr> %s +%d\n", skwl->kw[index].kw, skwl->kw[index].skip);
|
||||
for (skwn = skwp = NULL;; skwp = skwn) {
|
||||
list_for_each_entry(skwl, &srv_keywords.list, list) {
|
||||
for (index = 0; skwl->kw[index].kw != NULL; index++)
|
||||
if (strordered(skwp ? skwp->kw : NULL,
|
||||
skwl->kw[index].kw,
|
||||
skwn != skwp ? skwn->kw : NULL))
|
||||
skwn = &skwl->kw[index];
|
||||
}
|
||||
if (skwn == skwp)
|
||||
break;
|
||||
|
||||
if (!skwn->skip)
|
||||
printf("\tserver <name> <addr> %s\n", skwn->kw);
|
||||
else
|
||||
printf("\tserver <name> <addr> %s +%d\n", skwn->kw, skwn->skip);
|
||||
}
|
||||
|
||||
for (index = 0; cfg_opts[index].name; index++) {
|
||||
printf("\toption %s [ ", cfg_opts[index].name);
|
||||
if (cfg_opts[index].cap & PR_CAP_FE)
|
||||
for (coptn = coptp = NULL;; coptp = coptn) {
|
||||
for (index = 0; cfg_opts[index].name; index++)
|
||||
if (strordered(coptp ? coptp->name : NULL,
|
||||
cfg_opts[index].name,
|
||||
coptn != coptp ? coptn->name : NULL))
|
||||
coptn = &cfg_opts[index];
|
||||
|
||||
for (index = 0; cfg_opts2[index].name; index++)
|
||||
if (strordered(coptp ? coptp->name : NULL,
|
||||
cfg_opts2[index].name,
|
||||
coptn != coptp ? coptn->name : NULL))
|
||||
coptn = &cfg_opts2[index];
|
||||
if (coptn == coptp)
|
||||
break;
|
||||
|
||||
printf("\toption %s [ ", coptn->name);
|
||||
if (coptn->cap & PR_CAP_FE)
|
||||
printf("FE ");
|
||||
if (cfg_opts[index].cap & PR_CAP_BE)
|
||||
if (coptn->cap & PR_CAP_BE)
|
||||
printf("BE ");
|
||||
if (cfg_opts[index].mode == PR_MODE_HTTP)
|
||||
if (coptn->mode == PR_MODE_HTTP)
|
||||
printf("HTTP ");
|
||||
printf("]\n");
|
||||
}
|
||||
|
||||
for (index = 0; cfg_opts2[index].name; index++) {
|
||||
printf("\toption %s [ ", cfg_opts2[index].name);
|
||||
if (cfg_opts2[index].cap & PR_CAP_FE)
|
||||
printf("FE ");
|
||||
if (cfg_opts2[index].cap & PR_CAP_BE)
|
||||
printf("BE ");
|
||||
if (cfg_opts2[index].mode == PR_MODE_HTTP)
|
||||
printf("HTTP ");
|
||||
printf("]\n");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &tcp_req_conn_keywords, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\ttcp-request connection %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &tcp_req_sess_keywords, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\ttcp-request session %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &tcp_req_cont_keywords, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\ttcp-request content %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &tcp_res_cont_keywords, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\ttcp-response content %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &http_req_keywords.list, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\thttp-request %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &http_res_keywords.list, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\thttp-response %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
|
||||
list_for_each_entry(akwl, &http_after_res_keywords.list, list) {
|
||||
for (index = 0; akwl->kw[index].kw != NULL; index++)
|
||||
printf("\thttp-after-response %s%s\n", akwl->kw[index].kw,
|
||||
(akwl->kw[index].flags & KWF_MATCH_PREFIX) ? "*" : "");
|
||||
}
|
||||
dump_act_rules(&tcp_req_conn_keywords, "\ttcp-request connection ");
|
||||
dump_act_rules(&tcp_req_sess_keywords, "\ttcp-request session ");
|
||||
dump_act_rules(&tcp_req_cont_keywords, "\ttcp-request content ");
|
||||
dump_act_rules(&tcp_res_cont_keywords, "\ttcp-response content ");
|
||||
dump_act_rules(&http_req_keywords.list, "\thttp-request ");
|
||||
dump_act_rules(&http_res_keywords.list, "\thttp-response ");
|
||||
dump_act_rules(&http_after_res_keywords.list, "\thttp-after-response ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user