#include <haproxy/tools.h>
+/* Check an action ruleset validity. It returns the number of error encountered
+ * andd err_code is updated if a warning is emitted.
+ */
+int check_action_rules(struct list *rules, struct proxy *px, int *err_code)
+{
+ struct act_rule *rule;
+ char *errmsg = NULL;
+ int err = 0;
+
+ list_for_each_entry(rule, rules, list) {
+ if (rule->check_ptr && !rule->check_ptr(rule, px, &errmsg)) {
+ ha_alert("Proxy '%s': %s.\n", px->id, errmsg);
+ err++;
+ }
+
+ free(errmsg);
+ errmsg = NULL;
+ }
+
+ return err;
+}
+
/* Find and check the target table used by an action track-sc*. This
* function should be called during the configuration validity check.
*
#include <unistd.h>
#include <haproxy/acl.h>
-#include <haproxy/action-t.h>
+#include <haproxy/action.h>
#include <haproxy/api.h>
#include <haproxy/auth.h>
#include <haproxy/backend.h>
struct switching_rule *rule;
struct server_rule *srule;
struct sticking_rule *mrule;
- struct act_rule *arule;
struct logsrv *tmplogsrv;
unsigned int next_id;
int nbproc;
}
}
- /* check validity for 'tcp-request' layer 4 rules */
- list_for_each_entry(arule, &curproxy->tcp_req.l4_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
-
- /* check validity for 'tcp-request' layer 5 rules */
- list_for_each_entry(arule, &curproxy->tcp_req.l5_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
-
- /* check validity for 'tcp-request' layer 6 rules */
- list_for_each_entry(arule, &curproxy->tcp_req.inspect_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
-
- /* check validity for 'http-request' layer 7 rules */
- list_for_each_entry(arule, &curproxy->http_req_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
-
- /* check validity for 'http-response' layer 7 rules */
- list_for_each_entry(arule, &curproxy->http_res_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
-
- /* check validity for 'http-after-response' layer 7 rules */
- list_for_each_entry(arule, &curproxy->http_after_res_rules, list) {
- err = NULL;
- if (arule->check_ptr && !arule->check_ptr(arule, curproxy, &err)) {
- ha_alert("Proxy '%s': %s.\n", curproxy->id, err);
- free(err);
- cfgerr++;
- }
- }
+ /* check validity for 'tcp-request' layer 4/5/6/7 rules */
+ cfgerr += check_action_rules(&curproxy->tcp_req.l4_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->tcp_req.l5_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->tcp_req.inspect_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->tcp_rep.inspect_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->http_req_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->http_res_rules, curproxy, &err_code);
+ cfgerr += check_action_rules(&curproxy->http_after_res_rules, curproxy, &err_code);
/* Warn is a switch-mode http is used on a TCP listener with servers but no backend */
if (!curproxy->defbe.name && LIST_ISEMPTY(&curproxy->switching_rules) && curproxy->srv) {