ASF Bugzilla – Attachment 25229 Details for
Bug 29404
Allow definition of source address of outgoing connections from mod_proxy
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
ProxySourceAddress patch for 2.2.15
httpd_2.2.15_mod_proxy.diff.patch (text/plain), 4.46 KB, created by
dan
on 2010-04-05 17:46:18 UTC
(
hide
)
Description:
ProxySourceAddress patch for 2.2.15
Filename:
MIME Type:
Creator:
dan
Created:
2010-04-05 17:46:18 UTC
Size:
4.46 KB
patch
obsolete
>Index: modules/proxy/proxy_util.c >=================================================================== >--- modules/proxy/proxy_util.c (revision 930908) >+++ modules/proxy/proxy_util.c (working copy) >@@ -1617,6 +1617,15 @@ > "proxy: %s: fam %d socket created to connect to %s", > proxy_function, backend_addr->family, backend_name); > >+ if (conf->source_address) { >+ rv = apr_socket_bind(*newsock, conf->source_address); >+ if (rv != APR_SUCCESS) { >+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, >+ "proxy: %s: failed to bind socket to local address", >+ proxy_function); >+ } >+ } >+ > /* make the connection out of the socket */ > rv = apr_socket_connect(*newsock, backend_addr); > >@@ -2369,6 +2378,8 @@ > int connected = 0; > int loglevel; > apr_sockaddr_t *backend_addr = conn->addr; >+ /* the local address to use for the outgoing connection */ >+ apr_sockaddr_t *local_addr; > apr_socket_t *newsock; > void *sconf = s->module_config; > proxy_server_conf *conf = >@@ -2445,6 +2456,18 @@ > "proxy: %s: fam %d socket created to connect to %s", > proxy_function, backend_addr->family, worker->hostname); > >+ if (conf->source_address_set == 1) { >+ local_addr = apr_pcalloc(conn->pool, sizeof(apr_sockaddr_t)); >+ memcpy(local_addr, conf->source_address, sizeof(apr_sockaddr_t)); >+ local_addr->pool = conn->pool; >+ rv = apr_socket_bind(newsock, local_addr); >+ if (rv != APR_SUCCESS) { >+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, >+ "proxy: %s: failed to bind socket to local address", >+ proxy_function); >+ } >+ } >+ > /* make the connection out of the socket */ > rv = apr_socket_connect(newsock, backend_addr); > >Index: modules/proxy/mod_proxy.c >=================================================================== >--- modules/proxy/mod_proxy.c (revision 930908) >+++ modules/proxy/mod_proxy.c (working copy) >@@ -1089,6 +1089,8 @@ > ps->timeout_set = 0; > ps->badopt = bad_error; > ps->badopt_set = 0; >+ ps->source_address = 0; >+ ps->source_address_set = 0; > ps->pool = p; > > return ps; >@@ -1132,6 +1134,8 @@ > ps->badopt_set = overrides->badopt_set || base->badopt_set; > ps->proxy_status = (overrides->proxy_status_set == 0) ? base->proxy_status : overrides->proxy_status; > ps->proxy_status_set = overrides->proxy_status_set || base->proxy_status_set; >+ ps->source_address = (overrides->source_address_set == 0) ? base->source_address : overrides->source_address; >+ ps->source_address_set = overrides->source_address_set || base->source_address_set; > ps->pool = p; > return ps; > } >@@ -1891,6 +1895,24 @@ > return NULL; > } > >+ >+static const char * set_source_address(cmd_parms *parms, void *dummy, const char *arg) >+{ >+ proxy_server_conf *psf = >+ ap_get_module_config(parms->server->module_config, &proxy_module); >+ struct apr_sockaddr_t *addr; >+ >+ if (APR_SUCCESS == apr_sockaddr_info_get(&addr, arg, APR_UNSPEC, 0, 0, psf->pool)) { >+ psf->source_address = addr; >+ psf->source_address_set = 1; >+ } >+ else { >+ return "ProxySourceAddress invalid value"; >+ } >+ >+ return NULL; >+} >+ > static const char *set_ftp_directory_charset(cmd_parms *cmd, void *dconf, > const char *arg) > { >@@ -2112,6 +2134,8 @@ > "A balancer or worker name with list of params"), > AP_INIT_TAKE1("ProxyFtpDirCharset", set_ftp_directory_charset, NULL, > RSRC_CONF|ACCESS_CONF, "Define the character set for proxied FTP listings"), >+ AP_INIT_TAKE1("ProxySourceAddress", set_source_address, NULL, RSRC_CONF, >+ "Configure local source IP used for request forward"), > {NULL} > }; > >Index: modules/proxy/mod_proxy.h >=================================================================== >--- modules/proxy/mod_proxy.h (revision 930908) >+++ modules/proxy/mod_proxy.h (working copy) >@@ -192,6 +192,8 @@ > status_full > } proxy_status; /* Status display options */ > char proxy_status_set; >+ apr_sockaddr_t *source_address; /* the address the proxy client will use to make requests */ >+ char source_address_set; /* whether or not the source address is set */ > apr_pool_t *pool; /* Pool used for allocating this struct */ > } proxy_server_conf; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 29404
:
11770
|
11796
|
18579
|
21507
|
21508
|
24440
|
24441
| 25229