SOURCES: lighttpd-mod_evasive-status_code.patch (NEW) - additional...

paszczus paszczus at pld-linux.org
Wed Jul 12 10:08:45 CEST 2006


Author: paszczus                     Date: Wed Jul 12 08:08:45 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- additional configs for mod_evastive (see: http://forum.lighttpd.net/topic/611#1702)

---- Files affected:
SOURCES:
   lighttpd-mod_evasive-status_code.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/lighttpd-mod_evasive-status_code.patch
diff -u /dev/null SOURCES/lighttpd-mod_evasive-status_code.patch:1.1
--- /dev/null	Wed Jul 12 10:08:45 2006
+++ SOURCES/lighttpd-mod_evasive-status_code.patch	Wed Jul 12 10:08:40 2006
@@ -0,0 +1,94 @@
+--- 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 @@
+ 
+ typedef struct {
+ 	unsigned short max_conns;
++	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 @@
+ 	
+ 	p = calloc(1, sizeof(*p));
+ 	
++	p->evasive_rftmp = buffer_init();
++	
++	buffer_prepare_copy(p->evasive_rftmp, 255);
++	
+ 	return p;
+ }
+ 
+@@ -52,6 +60,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 },
+ 		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+ 	};
+ 	
+@@ -82,9 +94,13 @@
+ 		plugin_config *s;
+ 		
+ 		s = calloc(1, sizeof(plugin_config));
+-		s->max_conns       = 0;
++		s->max_conns        = 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);
+ 		
+ 		p->config_storage[i] = s;
+ 	
+@@ -103,6 +119,8 @@
+ 	plugin_config *s = p->config_storage[0];
+ 
+ 	PATCH(max_conns);
++	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"))) {
+ 				PATCH(max_conns);
++			} 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"))) {
++				PATCH(retry_after);
+ 			}
+ 		}
+ 	}
+@@ -153,7 +175,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;
+ 			}
+ 		}
================================================================


More information about the pld-cvs-commit mailing list