23
23
24
24
ngx_int_t ngx_http_modsecurity_process_connection (ngx_http_request_t * r ,
25
25
ngx_http_modsecurity_ctx_t * ctx ,
26
- const char * client_addr , in_port_t client_port );
26
+ const char * client_addr , in_port_t client_port ,
27
+ const char * server_addr , in_port_t server_port );
27
28
ngx_int_t ngx_http_modsecurity_process_url (ngx_http_request_t * r ,
28
29
ngx_http_modsecurity_ctx_t * ctx ,
29
30
const char * uri , const char * method , const char * http_version );
@@ -58,7 +59,7 @@ ngx_http_modsecurity_rewrite_handler(ngx_http_request_t *r)
58
59
return rc ;
59
60
}
60
61
61
- rc = ngx_http_modsecurity_process_connection (r , ctx , NULL , 0 );
62
+ rc = ngx_http_modsecurity_process_connection (r , ctx , NULL , 0 , NULL , 0 );
62
63
if (rc > 0 ) {
63
64
return rc ;
64
65
}
@@ -85,11 +86,11 @@ ngx_http_modsecurity_rewrite_handler(ngx_http_request_t *r)
85
86
ngx_int_t
86
87
ngx_http_modsecurity_process_connection (ngx_http_request_t * r ,
87
88
ngx_http_modsecurity_ctx_t * ctx ,
88
- const char * client_addr , in_port_t client_port )
89
+ const char * client_addr , in_port_t client_port ,
90
+ const char * server_addr , in_port_t server_port )
89
91
{
90
- in_port_t server_port ;
92
+ size_t len ;
91
93
ngx_int_t rc ;
92
- ngx_str_t server_addr ;
93
94
ngx_pool_t * old_pool ;
94
95
ngx_connection_t * c ;
95
96
u_char addr [NGX_SOCKADDR_STRLEN + 1 ];
@@ -101,21 +102,21 @@ ngx_http_modsecurity_process_connection(ngx_http_request_t *r,
101
102
client_port = ngx_inet_get_port (c -> sockaddr );
102
103
}
103
104
104
- // fill c->local_sockaddr
105
- ngx_connection_local_sockaddr (c , NULL , 0 );
105
+ if (server_addr == NULL ) {
106
+ // fill c->local_sockaddr
107
+ ngx_connection_local_sockaddr (c , NULL , 0 );
106
108
107
- server_addr .data = addr ;
108
- server_addr .len = NGX_SOCKADDR_STRLEN ;
109
-
110
- server_addr .len = ngx_sock_ntop (c -> local_sockaddr , c -> local_socklen ,
111
- server_addr .data , server_addr .len , 0 );
112
- server_addr .data [server_addr .len ] = 0 ;
113
- server_port = ngx_inet_get_port (c -> local_sockaddr );
109
+ len = ngx_sock_ntop (c -> local_sockaddr , c -> local_socklen ,
110
+ addr , NGX_SOCKADDR_STRLEN , 0 );
111
+ addr [len ] = 0 ;
112
+ server_addr = (char * )addr ;
113
+ server_port = ngx_inet_get_port (c -> local_sockaddr );
114
+ }
114
115
115
116
old_pool = ngx_http_modsecurity_pcre_malloc_init (r -> pool );
116
117
rc = msc_process_connection (ctx -> modsec_transaction ,
117
118
client_addr , client_port ,
118
- ( char * ) server_addr . data , server_port );
119
+ server_addr , server_port );
119
120
ngx_http_modsecurity_pcre_malloc_done (old_pool );
120
121
if (rc != 1 ){
121
122
dd ("Was not able to extract connection information." );
0 commit comments