X-Git-Url: https://git.tld-linux.org/?p=packages%2Flighttpd.git;a=blobdiff_plain;f=lighttpd-mod_evasive-status_code.patch;h=02cbd9ecd0f2ef8c74318e824169cb102ec80e03;hp=7f8daccda9b64e7959bbbca511b2929b09b6d7eb;hb=8239b3691d1ae536833b6d53a2efd289956ccbcd;hpb=2bc378a1b82f8e82ab66bd2a656282134a6d05e0 diff --git a/lighttpd-mod_evasive-status_code.patch b/lighttpd-mod_evasive-status_code.patch index 7f8dacc..02cbd9e 100644 --- a/lighttpd-mod_evasive-status_code.patch +++ b/lighttpd-mod_evasive-status_code.patch @@ -1,12 +1,11 @@ ---- lighttpd-1.4.40/src/mod_evasive.c 2016-07-16 10:06:16.000000000 +0000 -+++ lighttpd-1.4.40/src/mod_evasive.c 2016-07-26 12:11:56.730554000 +0000 -@@ -31,12 +31,16 @@ +--- lighttpd-1.4.19/src/mod_evasive.c 2008-09-19 17:50:24.307245276 +0300 ++++ lighttpd-1.4.22/src/mod_evasive.c 2009-05-12 02:21:58.524447939 +0300 +@@ -28,11 +28,15 @@ typedef struct { unsigned short max_conns; unsigned short silent; + unsigned short http_status_code; + unsigned int retry_after; - buffer *location; } plugin_config; typedef struct { @@ -17,7 +16,7 @@ plugin_config **config_storage; plugin_config conf; -@@ -47,6 +51,10 @@ +@@ -46,6 +50,10 @@ p = calloc(1, sizeof(*p)); @@ -28,7 +27,7 @@ return p; } -@@ -57,6 +65,8 @@ +@@ -56,6 +64,8 @@ if (!p) return HANDLER_GO_ON; @@ -37,49 +36,46 @@ if (p->config_storage) { size_t i; for (i = 0; i < srv->config_context->used; i++) { -@@ -84,6 +94,8 @@ +@@ -85,6 +85,8 @@ + config_values_t cv[] = { { "evasive.max-conns-per-ip", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 0 */ { "evasive.silent", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 1 */ - { "evasive.location", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 2 */ -+ { "evasive.http-status-code", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 3 */ -+ { "evasive.retry-after", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 4 */ ++ { "evasive.http-status-code", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 2 */ ++ { "evasive.retry-after", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 3 */ { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } }; -@@ -94,13 +106,17 @@ +@@ -94,11 +96,15 @@ plugin_config *s; s = calloc(1, sizeof(plugin_config)); - s->max_conns = 0; - s->silent = 0; -- s->location = buffer_init(); + s->max_conns = 0; + s->silent = 0; -+ s->location = buffer_init(); + s->http_status_code = 503; + s->retry_after = 0; cv[0].destination = &(s->max_conns); cv[1].destination = &(s->silent); - cv[2].destination = s->location; + cv[2].destination = &(s->http_status_code); + cv[3].destination = &(s->retry_after); p->config_storage[i] = s; -@@ -121,6 +137,8 @@ +@@ -107,6 +123,8 @@ + PATCH(max_conns); PATCH(silent); - PATCH(location); + PATCH(http_status_code); + PATCH(retry_after); /* skip the first, the global context */ for (i = 1; i < srv->config_context->used; i++) { -@@ -140,6 +158,10 @@ +@@ -124,6 +142,10 @@ + PATCH(max_conns); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.silent"))) { PATCH(silent); - } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.location"))) { - PATCH(location); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.http-status-code"))) { + PATCH(http_status_code); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.retry-after"))) { @@ -87,14 +83,15 @@ } } } -@@ -205,7 +227,9 @@ - con->http_status = 302; - con->file_finished = 1; - } else { -- con->http_status = 403; -+ con->http_status = p->conf.http_status_code; -+ buffer_copy_long(p->evasive_rftmp, p->conf.retry_after); -+ response_header_overwrite(srv, con, CONST_STR_LEN("Retry-After"), CONST_BUF_LEN(p->evasive_rftmp)); - } +@@ -192,8 +214,10 @@ + inet_ntop_cache_get_ip(srv, &(con->dst_addr)), + "turned away. Too many connections."); + +- con->http_status = 403; con->mode = DIRECT; ++ con->http_status = p->conf.http_status_code; ++ buffer_copy_long(p->evasive_rftmp, p->conf.retry_after); ++ response_header_overwrite(srv, con, CONST_STR_LEN("Retry-After"), CONST_BUF_LEN(p->evasive_rftmp)); return HANDLER_FINISHED; + } + }