ACT_F_HTTP_RES, /* http-response */
};
+enum act_name {
+ ACT_ACTION_CONT = 0,
+ ACT_ACTION_STOP,
+
+ /* http request actions. */
+ HTTP_REQ_ACT_UNKNOWN,
+ HTTP_REQ_ACT_ALLOW,
+ HTTP_REQ_ACT_DENY,
+ HTTP_REQ_ACT_TARPIT,
+ HTTP_REQ_ACT_AUTH,
+ HTTP_REQ_ACT_ADD_HDR,
+ HTTP_REQ_ACT_SET_HDR,
+ HTTP_REQ_ACT_DEL_HDR,
+ HTTP_REQ_ACT_REPLACE_HDR,
+ HTTP_REQ_ACT_REPLACE_VAL,
+ HTTP_REQ_ACT_REDIR,
+ HTTP_REQ_ACT_SET_NICE,
+ HTTP_REQ_ACT_SET_LOGL,
+ HTTP_REQ_ACT_SET_TOS,
+ HTTP_REQ_ACT_SET_MARK,
+ HTTP_REQ_ACT_ADD_ACL,
+ HTTP_REQ_ACT_DEL_ACL,
+ HTTP_REQ_ACT_DEL_MAP,
+ HTTP_REQ_ACT_SET_MAP,
+ HTTP_REQ_ACT_SET_SRC,
+ HTTP_REQ_ACT_TRK_SC0,
+ /* SC1, SC2, ... SCn */
+ HTTP_REQ_ACT_TRK_SCMAX = HTTP_REQ_ACT_TRK_SC0 + MAX_SESS_STKCTR - 1,
+
+ /* http response actions */
+ HTTP_RES_ACT_UNKNOWN,
+ HTTP_RES_ACT_ALLOW,
+ HTTP_RES_ACT_DENY,
+ HTTP_RES_ACT_ADD_HDR,
+ HTTP_RES_ACT_REPLACE_HDR,
+ HTTP_RES_ACT_REPLACE_VAL,
+ HTTP_RES_ACT_SET_HDR,
+ HTTP_RES_ACT_DEL_HDR,
+ HTTP_RES_ACT_SET_NICE,
+ HTTP_RES_ACT_SET_LOGL,
+ HTTP_RES_ACT_SET_TOS,
+ HTTP_RES_ACT_SET_MARK,
+ HTTP_RES_ACT_ADD_ACL,
+ HTTP_RES_ACT_DEL_ACL,
+ HTTP_RES_ACT_DEL_MAP,
+ HTTP_RES_ACT_SET_MAP,
+ HTTP_RES_ACT_REDIR,
+
+ /* tcp actions */
+ TCP_ACT_ACCEPT,
+ TCP_ACT_REJECT,
+ TCP_ACT_EXPECT_PX,
+ TCP_ACT_TRK_SC0, /* TCP request tracking : must be contiguous and cover up to MAX_SESS_STKCTR values */
+ TCP_ACT_TRK_SC1,
+ TCP_ACT_TRK_SC2,
+ TCP_ACT_TRK_SCMAX = TCP_ACT_TRK_SC0 + MAX_SESS_STKCTR - 1,
+ TCP_ACT_CLOSE, /* close at the sender's */
+ TCP_ACT_CAPTURE, /* capture a fetched sample */
+};
+
struct act_rule {
struct list list;
struct acl_cond *cond; /* acl condition to meet */
- unsigned int action; /* HTTP_REQ_* */
+ enum act_name action; /* ACT_ACTION_* */
enum act_from from; /* ACT_F_* */
short deny_status; /* HTTP status to return to user when denying */
int (*action_ptr)(struct act_rule *rule, struct proxy *px,
HTTP_AUTH_DIGEST,
} __attribute__((packed));
-/* actions for "http-request" */
-enum {
- HTTP_REQ_ACT_UNKNOWN = 0,
- HTTP_REQ_ACT_ALLOW,
- HTTP_REQ_ACT_DENY,
- HTTP_REQ_ACT_TARPIT,
- HTTP_REQ_ACT_AUTH,
- HTTP_REQ_ACT_ADD_HDR,
- HTTP_REQ_ACT_SET_HDR,
- HTTP_REQ_ACT_DEL_HDR,
- HTTP_REQ_ACT_REPLACE_HDR,
- HTTP_REQ_ACT_REPLACE_VAL,
- HTTP_REQ_ACT_REDIR,
- HTTP_REQ_ACT_SET_NICE,
- HTTP_REQ_ACT_SET_LOGL,
- HTTP_REQ_ACT_SET_TOS,
- HTTP_REQ_ACT_SET_MARK,
- HTTP_REQ_ACT_ADD_ACL,
- HTTP_REQ_ACT_DEL_ACL,
- HTTP_REQ_ACT_DEL_MAP,
- HTTP_REQ_ACT_SET_MAP,
- HTTP_REQ_ACT_CUSTOM_STOP,
- HTTP_REQ_ACT_CUSTOM_CONT,
- HTTP_REQ_ACT_SET_SRC,
- HTTP_REQ_ACT_TRK_SC0,
- /* SC1, SC2, ... SCn */
- HTTP_REQ_ACT_TRK_SCMAX = HTTP_REQ_ACT_TRK_SC0 + MAX_SESS_STKCTR - 1,
-};
-
-/* actions for "http-response" */
-enum {
- HTTP_RES_ACT_UNKNOWN = 0,
- HTTP_RES_ACT_ALLOW,
- HTTP_RES_ACT_DENY,
- HTTP_RES_ACT_ADD_HDR,
- HTTP_RES_ACT_REPLACE_HDR,
- HTTP_RES_ACT_REPLACE_VAL,
- HTTP_RES_ACT_SET_HDR,
- HTTP_RES_ACT_DEL_HDR,
- HTTP_RES_ACT_SET_NICE,
- HTTP_RES_ACT_SET_LOGL,
- HTTP_RES_ACT_SET_TOS,
- HTTP_RES_ACT_SET_MARK,
- HTTP_RES_ACT_ADD_ACL,
- HTTP_RES_ACT_DEL_ACL,
- HTTP_RES_ACT_DEL_MAP,
- HTTP_RES_ACT_SET_MAP,
- HTTP_RES_ACT_REDIR,
- HTTP_RES_ACT_CUSTOM_STOP, /* used for module keywords */
- HTTP_RES_ACT_CUSTOM_CONT, /* used for module keywords */
-};
-
/* final results for http-request rules */
enum rule_result {
HTTP_RULE_RES_CONT = 0, /* nothing special, continue rules evaluation */
#include <types/acl.h>
#include <types/stream.h>
-/* Layer4 accept/reject rules */
-enum {
- TCP_ACT_ACCEPT = 1,
- TCP_ACT_REJECT = 2,
- TCP_ACT_EXPECT_PX = 3,
- TCP_ACT_TRK_SC0 = 4, /* TCP request tracking : must be contiguous and cover up to MAX_SESS_STKCTR values */
- TCP_ACT_TRK_SC1 = 5,
- TCP_ACT_TRK_SC2 = 6,
- TCP_ACT_TRK_SCMAX = TCP_ACT_TRK_SC0 + MAX_SESS_STKCTR - 1,
- TCP_ACT_CLOSE, /* close at the sender's */
- TCP_ACT_CAPTURE, /* capture a fetched sample */
- TCP_ACT_CUSTOM, /* Use for custom registered keywords. */
- TCP_ACT_CUSTOM_CONT, /* Use for custom registered keywords. */
-};
-
struct tcp_action_kw {
const char *kw;
int (*parse)(const char **args, int *cur_arg, struct proxy *px,
{
if (!hlua_parse_rule(args, cur_arg, px, &rule->arg.hlua_rule, err))
return 0;
- rule->action = TCP_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = hlua_tcp_req_act_wrapper;
return 1;
}
{
if (!hlua_parse_rule(args, cur_arg, px, &rule->arg.hlua_rule, err))
return 0;
- rule->action = TCP_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = hlua_tcp_res_act_wrapper;
return 1;
}
{
if (!hlua_parse_rule(args, cur_arg, px, &rule->arg.hlua_rule, err))
return -1;
- rule->action = HTTP_REQ_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = hlua_http_req_act_wrapper;
return 1;
}
{
if (!hlua_parse_rule(args, cur_arg, px, &rule->arg.hlua_rule, err))
return -1;
- rule->action = HTTP_RES_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = hlua_http_res_act_wrapper;
return 1;
}
break;
}
- case HTTP_REQ_ACT_CUSTOM_CONT:
+ case ACT_ACTION_CONT:
if (!rule->action_ptr(rule, px, s->sess, s)) {
s->current_rule = rule;
return HTTP_RULE_RES_YIELD;
}
break;
- case HTTP_REQ_ACT_CUSTOM_STOP:
+ case ACT_ACTION_STOP:
rule->action_ptr(rule, px, s->sess, s);
return HTTP_RULE_RES_DONE;
return HTTP_RULE_RES_BADREQ;
return HTTP_RULE_RES_DONE;
- case HTTP_RES_ACT_CUSTOM_CONT:
+ case ACT_ACTION_CONT:
if (!rule->action_ptr(rule, px, s->sess, s)) {
s->current_rule = rule;
return HTTP_RULE_RES_YIELD;
}
break;
- case HTTP_RES_ACT_CUSTOM_STOP:
+ case ACT_ACTION_STOP:
rule->action_ptr(rule, px, s->sess, s);
return HTTP_RULE_RES_STOP;
{
int cur_arg = *orig_arg;
- rule->action = HTTP_REQ_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
switch (args[0][4]) {
case 'm' :
px->req_cap = hdr;
px->to_log |= LW_REQHDR;
- rule->action = HTTP_REQ_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = http_action_req_capture;
rule->arg.cap.expr = expr;
rule->arg.cap.hdr = hdr;
proxy->conf.args.ctx = ARGC_CAP;
- rule->action = HTTP_REQ_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = http_action_req_capture_by_id;
rule->arg.capid.expr = expr;
rule->arg.capid.idx = id;
proxy->conf.args.ctx = ARGC_CAP;
- rule->action = HTTP_RES_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = http_action_res_capture_by_id;
rule->arg.capid.expr = expr;
rule->arg.capid.idx = id;
}
/* accept */
- if (rule->action == TCP_ACT_CUSTOM)
+ if (rule->action == ACT_ACTION_STOP)
break;
/* otherwise continue */
}
}
/* accept */
- if (rule->action == TCP_ACT_CUSTOM)
+ if (rule->action == ACT_ACTION_STOP)
break;
/* otherwise continue */
}
/* Custom keywords. */
if (rule->action_ptr) {
rule->action_ptr(rule, sess->fe, sess, NULL);
- if (rule->action == TCP_ACT_CUSTOM_CONT)
+ if (rule->action == ACT_ACTION_CONT)
continue;
}
&rule->arg.vars.name,
&rule->arg.vars.scope))
return 0;
- rule->action = TCP_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = action_tcp_req_store;
return 1;
}
&rule->arg.vars.name,
&rule->arg.vars.scope))
return 0;
- rule->action = TCP_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = action_tcp_res_store;
return 1;
}
&rule->arg.vars.name,
&rule->arg.vars.scope))
return -1;
- rule->action = HTTP_REQ_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = action_http_req_store;
return 0;
}
&rule->arg.vars.name,
&rule->arg.vars.scope))
return -1;
- rule->action = HTTP_RES_ACT_CUSTOM_CONT;
+ rule->action = ACT_ACTION_CONT;
rule->action_ptr = action_http_res_store;
return 0;
}