1 --- mod_rpaf-0.5/mod_rpaf.c 2004-03-17 17:47:30.000000000 +0200
2 +++ mod_rpaf-0.5.ipv6/mod_rpaf.c 2006-01-05 18:18:09.000000000 +0200
6 r->connection->remote_ip = ap_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]);
7 - r->connection->remote_addr.sin_addr.s_addr = inet_addr(r->connection->remote_ip);
8 + switch (r->connection->remote_addr.ss_family) {
10 + inet_pton(AF_INET, r->connection->remote_ip, &((struct sockaddr_in*)&r->connection->remote_addr)->sin_addr.s_addr);
13 + inet_pton(AF_INET6, r->connection->remote_ip, ((struct sockaddr_in6*)&r->connection->remote_addr)->sin6_addr.s6_addr);
16 + ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r, "Apache doesn't support this address family");
20 if (cfg->sethostname) {
21 const char *hostvalue;
22 if (hostvalue = ap_table_get(r->headers_in, "X-Forwarded-Host")) {
23 --- mod_rpaf-0.6/mod_rpaf-2.0.c~ 2008-01-14 12:27:30.000000000 +0200
24 +++ mod_rpaf-0.6/mod_rpaf-2.0.c 2008-01-14 12:28:18.413347347 +0200
29 +static char* last_not_in_array(apr_array_header_t *forwarded_for,
30 + apr_array_header_t *proxy_ips) {
32 + for (i = (forwarded_for->nelts)-1; i > 0; i--) {
33 + if (!is_in_array(((char **)forwarded_for->elts)[i], proxy_ips))
36 + return ((char **)forwarded_for->elts)[i];
39 static int change_remote_ip(request_rec *r) {
43 rcr->old_ip = apr_pstrdup(r->connection->pool, r->connection->remote_ip);
45 apr_pool_cleanup_register(r->pool, (void *)rcr, rpaf_cleanup, apr_pool_cleanup_null);
46 - r->connection->remote_ip = apr_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]);
47 + r->connection->remote_ip = apr_pstrdup(r->connection->pool, last_not_in_array(arr, cfg->proxy_ips));
48 r->connection->remote_addr->sa.sin.sin_addr.s_addr = apr_inet_addr(r->connection->remote_ip);
49 if (cfg->sethostname) {
50 const char *hostvalue;
51 --- mod_rpaf-0.6/mod_rpaf.c~ 2008-01-14 12:28:40.000000000 +0200
52 +++ mod_rpaf-0.6/mod_rpaf.c 2008-01-14 12:30:47.021926815 +0200
57 +static char* last_not_in_array(array_header *forwarded_for,
58 + array_header *proxy_ips) {
60 + for (i = (forwarded_for->nelts)-1; i > 0; i--) {
61 + if (!is_in_array(((char **)forwarded_for->elts)[i], proxy_ips))
64 + return ((char **)forwarded_for->elts)[i];
67 static int change_remote_ip(request_rec *r) {
71 rcr->old_ip = ap_pstrdup(r->connection->pool, r->connection->remote_ip);
73 ap_register_cleanup(r->pool, (void *)rcr, rpaf_cleanup, ap_null_cleanup);
74 - r->connection->remote_ip = ap_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]);
75 - switch (r->connection->remote_addr.ss_family) {
77 - inet_pton(AF_INET, r->connection->remote_ip, &((struct sockaddr_in*)&r->connection->remote_addr)->sin_addr.s_addr);
80 - inet_pton(AF_INET6, r->connection->remote_ip, ((struct sockaddr_in6*)&r->connection->remote_addr)->sin6_addr.s6_addr);
83 - ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, r, "Apache doesn't support this address family");
86 + r->connection->remote_ip = ap_pstrdup(r->connection->pool, last_not_in_array(arr, cfg->proxy_ips));
88 if (cfg->sethostname) {
89 const char *hostvalue;
90 --- mod_rpaf-0.6/mod_rpaf.c~ 2008-01-14 12:31:19.000000000 +0200
91 +++ mod_rpaf-0.6/mod_rpaf.c 2008-01-14 12:35:56.507787818 +0200
93 static void rpaf_cleanup(void *data) {
94 rpaf_cleanup_rec *rcr = (rpaf_cleanup_rec *)data;
95 rcr->r->connection->remote_ip = ap_pstrdup(rcr->r->connection->pool, rcr->old_ip);
97 + switch (rcr->r->connection->remote_addr.ss_family) {
99 + inet_pton(AF_INET, rcr->r->connection->remote_ip, &((struct sockaddr_in*)&rcr->r->connection->remote_addr)->sin_addr.s_addr);
103 rcr->r->connection->remote_addr.sin_addr.s_addr = inet_addr(rcr->r->connection->remote_ip);
107 static char* last_not_in_array(array_header *forwarded_for,
108 --- mod_rpaf-0.6/mod_rpaf.c~ 2008-01-14 12:39:58.000000000 +0200
109 +++ mod_rpaf-0.6/mod_rpaf.c 2008-01-14 12:42:16.393702934 +0200
112 ap_register_cleanup(r->pool, (void *)rcr, rpaf_cleanup, ap_null_cleanup);
113 r->connection->remote_ip = ap_pstrdup(r->connection->pool, last_not_in_array(arr, cfg->proxy_ips));
115 + switch (r->connection->remote_addr.ss_family) {
117 + inet_pton(AF_INET, r->connection->remote_ip, &((struct sockaddr_in*)&r->connection->remote_addr)->sin_addr.s_addr);
121 + r->connection->remote_addr.sin_addr.s_addr = inet_addr(r->connection->remote_ip);
124 if (cfg->sethostname) {
125 const char *hostvalue;