X-Git-Url: https://git.pld-linux.org/?a=blobdiff_plain;f=lighttpd-mod_evasive-status_code.patch;h=02cbd9ecd0f2ef8c74318e824169cb102ec80e03;hb=591ca263b6883b021a74d9017061d7885b758d71;hp=b82e9f61572706c6c4f6c55bb93350529b736057;hpb=53e138623f4c615b25b36703d00a3ba47257c609;p=packages%2Flighttpd.git diff --git a/lighttpd-mod_evasive-status_code.patch b/lighttpd-mod_evasive-status_code.patch index b82e9f6..02cbd9e 100644 --- a/lighttpd-mod_evasive-status_code.patch +++ b/lighttpd-mod_evasive-status_code.patch @@ -1,78 +1,81 @@ ---- src/mod_evasive_orig.c Wed Jan 4 21:24:51 2006 -+++ src/mod_evasive.c Thu Apr 13 21:32:12 2006 -@@ -27,11 +27,15 @@ - +--- 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; } plugin_config; typedef struct { PLUGIN_DATA; - + + buffer *evasive_rftmp; -+ ++ plugin_config **config_storage; - - plugin_config conf; -@@ -42,6 +46,10 @@ - + + plugin_config conf; +@@ -46,6 +50,10 @@ + p = calloc(1, sizeof(*p)); - + + p->evasive_rftmp = buffer_init(); + + buffer_prepare_copy(p->evasive_rftmp, 255); -+ ++ return p; } -@@ -52,6 +60,8 @@ +@@ -56,6 +64,8 @@ if (!p) return HANDLER_GO_ON; - + + buffer_free(p->evasive_rftmp); -+ ++ if (p->config_storage) { size_t i; for (i = 0; i < srv->config_context->used; i++) { -@@ -73,6 +83,8 @@ - - config_values_t cv[] = { - { "evasive.max-conns-per-ip", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, -+ { "evasive.http-status-code", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, -+ { "evasive.retry-after", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, +@@ -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.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 } }; - -@@ -82,9 +94,13 @@ + +@@ -94,11 +96,15 @@ plugin_config *s; - + s = calloc(1, sizeof(plugin_config)); - s->max_conns = 0; +- s->silent = 0; + s->max_conns = 0; ++ s->silent = 0; + s->http_status_code = 503; + s->retry_after = 0; - + cv[0].destination = &(s->max_conns); -+ cv[1].destination = &(s->http_status_code); -+ cv[2].destination = &(s->retry_after); - + cv[1].destination = &(s->silent); ++ cv[2].destination = &(s->http_status_code); ++ cv[3].destination = &(s->retry_after); + p->config_storage[i] = s; - -@@ -103,6 +119,8 @@ - plugin_config *s = p->config_storage[0]; + +@@ -107,6 +123,8 @@ PATCH(max_conns); + PATCH(silent); + PATCH(http_status_code); + PATCH(retry_after); - + /* skip the first, the global context */ for (i = 1; i < srv->config_context->used; i++) { -@@ -118,6 +136,10 @@ - - if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.max-conns-per-ip"))) { +@@ -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.http-status-code"))) { + PATCH(http_status_code); + } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.retry-after"))) { @@ -80,15 +83,15 @@ } } } -@@ -153,7 +175,10 @@ - inet_ntop_cache_get_ip(srv, &(con->dst_addr)), - "turned away. Too many connections."); +@@ -192,8 +214,10 @@ + inet_ntop_cache_get_ip(srv, &(con->dst_addr)), + "turned away. Too many connections."); -- con->http_status = 403; -+ buffer_copy_long(p->evasive_rftmp, p->conf.retry_after); -+ -+ con->http_status = p->conf.http_status_code; -+ response_header_overwrite(srv, con, CONST_STR_LEN("Retry-After"), CONST_BUF_LEN(p->evasive_rftmp)); - return HANDLER_FINISHED; - } +- 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; } + }