Package: libapache2-mod-rpaf Version: 0.5-2 Severity: normal Tags: patch hi,
I wanted to use libapache2-mod-rpaf on an IPv6-enabled Webserver, and created the attached patch in the process. I've been running this since one week an a busy server. This should most probably be forwarded upstream. Maybe this can be optimized further, because change_remote_ip() is called for each request, which is unnecessary for all expect the first request for persistent connections. cu Maurice Massar -- System Information: Debian Release: 4.0 APT prefers unstable APT policy: (500, 'unstable'), (400, 'experimental') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.16-1-k7 Locale: LANG=C, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
--- libapache-mod-rpaf-0.5.orig/mod_rpaf-2.0.c +++ libapache-mod-rpaf-0.5/mod_rpaf-2.0.c @@ -133,6 +133,8 @@ static int change_remote_ip(request_rec *r) { const char *fwdvalue; char *val; + apr_port_t tmpport; + apr_pool_t *tmppool; rpaf_server_cfg *cfg = (rpaf_server_cfg *)ap_get_module_config(r->server->module_config, &rpaf_module); @@ -148,7 +150,11 @@ ++fwdvalue; } r->connection->remote_ip = apr_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]); - r->connection->remote_addr->sa.sin.sin_addr.s_addr = inet_addr(r->connection->remote_ip); + tmppool = r->connection->remote_addr->pool; + tmpport = r->connection->remote_addr->port; + memset(r->connection->remote_addr, '\0', sizeof(apr_sockaddr_t)); + r->connection->remote_addr = NULL; + apr_sockaddr_info_get(&(r->connection->remote_addr), r->connection->remote_ip, APR_UNSPEC, tmpport, 0, tmppool); if (cfg->sethostname) { const char *hostvalue; if (hostvalue = apr_table_get(r->headers_in, "X-Forwarded-Host")) {