version up : percona-toolkit 2.2.10.
[slapos.git] / component / apache / mod_antiloris-apache-2.4.patch
1 --- mod_antiloris.c.orig        2009-07-28 15:27:42.000000000 +0200
2 +++ mod_antiloris.c     2012-03-06 11:05:50.167576066 +0100
3 @@ -1,5 +1,5 @@
4  /*
5 -   mod_antiloris 0.2
6 +   mod_antiloris 0.5
7     Copyright (C) 2008 Monshouwer Internet Diensten
8  
9     Author: Kees Monshouwer
10 @@ -22,11 +22,16 @@
11  #include "http_connection.h"
12  #include "http_log.h"
13  #include "ap_mpm.h"
14 +#include "ap_release.h" 
15  #include "apr_strings.h"
16  #include "scoreboard.h"
17  
18  #define MODULE_NAME "mod_antiloris"
19 -#define MODULE_VERSION "0.4"
20 +#define MODULE_VERSION "0.5.1"
21 +
22 +#ifdef APLOG_USE_MODULE 
23 +APLOG_USE_MODULE(antiloris); 
24 +#endif 
25  
26  module AP_MODULE_DECLARE_DATA antiloris_module;
27  
28 @@ -58,6 +63,8 @@
29  /* Parse the IPReadLimit directive */
30  static const char *ipreadlimit_config_cmd(cmd_parms *parms, void *mconfig, const char *arg)
31  {
32 +    signed long int limit;
33 +
34      antiloris_config *conf = ap_get_module_config(parms->server->module_config, &antiloris_module);
35      const char *err = ap_check_cmd_context (parms, GLOBAL_ONLY);
36      
37 @@ -65,7 +72,7 @@
38         return err;
39      }
40      
41 -    signed long int limit = strtol(arg, (char **) NULL, 10);
42 +    limit = strtol(arg, (char **) NULL, 10);
43  
44      /* No reasonable person would want more than 2^16. Better would be
45         to use LONG_MAX but that causes portability problems on win32 */
46 @@ -80,7 +87,7 @@
47  
48  /* Array describing structure of configuration directives */
49  static command_rec antiloris_cmds[] = {
50 -    AP_INIT_TAKE1("IPReadLimit", ipreadlimit_config_cmd, NULL, RSRC_CONF, "Maximum simultaneous connections in READ state per IP address"),
51 +    AP_INIT_TAKE1("IPReadLimit", ipreadlimit_config_cmd, NULL, RSRC_CONF, "Maximum simultaneous connections per IP address"),
52      {NULL}
53  };
54  
55 @@ -103,12 +110,15 @@
56      ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, MODULE_NAME " " MODULE_VERSION " started");
57      ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
58      ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
59 +    ap_add_version_component(p, MODULE_NAME "/" MODULE_VERSION); 
60      return OK;
61  }
62  
63  
64  static int pre_connection(conn_rec *c)
65  {
66 +    char *client_ip;
67 +
68      antiloris_config *conf = ap_get_module_config (c->base_server->module_config,  &antiloris_module);
69      sb_handle *sbh = c->sbh;
70      
71 @@ -123,16 +133,26 @@
72      worker_score *ws_record;
73      
74      ws_record = &ap_scoreboard_image->servers[sbh->child_num][sbh->thread_num];
75 -    apr_cpystrn(ws_record->client, c->remote_ip, sizeof(ws_record->client));
76 +    apr_cpystrn(ws_record->client, c->client_ip, sizeof(ws_record->client)); 
77      
78 -    char *client_ip = ws_record->client;
79 +    client_ip = ws_record->client;
80      
81      /* Count up the number of connections we are handling right now from this IP address */
82      for (i = 0; i < server_limit; ++i) {
83         for (j = 0; j < thread_limit; ++j) {
84 -           ws_record = ap_get_scoreboard_worker(i, j);
85 +#if AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER > 2 
86 +           ws_record = ap_get_scoreboard_worker_from_indexes(i, j); 
87 +#else 
88 +           ws_record = ap_get_scoreboard_worker(i, j); 
89 +#endif 
90              switch (ws_record->status) {
91                 case SERVER_BUSY_READ:
92 +               case SERVER_BUSY_WRITE:
93 +               case SERVER_BUSY_KEEPALIVE:
94 +               case SERVER_BUSY_DNS:
95 +               case SERVER_BUSY_LOG:
96 +               case SERVER_CLOSING:
97 +               case SERVER_GRACEFUL:
98                     if (strcmp(client_ip, ws_record->client) == 0)
99                         ip_count++;
100                      break;
101 @@ -143,7 +163,7 @@
102      }
103      
104      if (ip_count > conf->limit) {
105 -       ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "Rejected, too many connections in READ state from %s", c->remote_ip);
106 +       ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "[client %s] Antiloris rejected, too many connections", c->client_ip); 
107         return OK;
108      } else {
109         return DECLINED;
110 @@ -151,17 +171,10 @@
111  }
112  
113  
114 -static void child_init (apr_pool_t *p, server_rec *s)
115 -{
116 -    ap_add_version_component(p, MODULE_NAME "/" MODULE_VERSION);
117 -}
118 -
119 -
120  static void register_hooks(apr_pool_t *p)
121  {
122      ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_MIDDLE);
123      ap_hook_process_connection(pre_connection, NULL, NULL, APR_HOOK_FIRST);
124 -    ap_hook_child_init(child_init, NULL, NULL, APR_HOOK_MIDDLE);    
125  }
126  
127  module AP_MODULE_DECLARE_DATA antiloris_module = {