2. tar xvfz mod_rpaf-0.6.tar.gz
3. cd mod_rpaf-0.6
According to the following link, I created the patch file like below.
http://tech.superhappykittymeow.com/?p=281
4. vi diff.diff
--- mod_rpaf-2.0.c 2008-01-01 03:05:40.000000000 +0000
+++ mod_rpaf-2.0.c~ 2011-08-25 20:04:39.000000000 +0000
@@ -136,13 +136,25 @@
}
static int is_in_array(const char *remote_ip, apr_array_header_t *proxy_ips) {
- int i;
+ /* int i;
char **list = (char**)proxy_ips->elts;
for (i = 0; i < proxy_ips->nelts; i++) {
if (strcmp(remote_ip, list[i]) == 0)
return 1;
}
return 0;
+ */
+ return 1;
+}
+
+static char* last_not_in_array(apr_array_header_t *forwarded_for,
+ apr_array_header_t *proxy_ips) {
+ int i;
+ for (i = (forwarded_for->nelts)-1; i > 0; i--) {
+ if (!is_in_array(((char **)forwarded_for->elts)[i], proxy_ips))
+ break;
+ }
+ return ((char **)forwarded_for->elts)[i];
}
static apr_status_t rpaf_cleanup(void *data) {
@@ -161,7 +173,7 @@
if (!cfg->enable)
return DECLINED;
- if (is_in_array(r->connection->remote_ip, cfg->proxy_ips) == 1) {
+ /* if (is_in_array(r->connection->remote_ip, cfg->proxy_ips) == 1) { */
/* check if cfg->headername is set and if it is use
that instead of X-Forwarded-For by default */
if (cfg->headername && (fwdvalue = apr_table_get(r->headers_in, cfg->headername))) {
@@ -183,7 +195,8 @@
rcr->old_ip = apr_pstrdup(r->connection->pool, r->connection->remote_ip);
rcr->r = r;
apr_pool_cleanup_register(r->pool, (void *)rcr, rpaf_cleanup, apr_pool_cleanup_null);
- r->connection->remote_ip = apr_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]);
+ /* r->connection->remote_ip = apr_pstrdup(r->connection->pool, ((char **)arr->elts)[((arr->nelts)-1)]); */
+ r->connection->remote_ip = apr_pstrdup(r->connection->pool, last_not_in_array(arr, cfg->proxy_ips));
r->connection->remote_addr->sa.sin.sin_addr.s_addr = apr_inet_addr(r->connection->remote_ip);
if (cfg->sethostname) {
const char *hostvalue;
@@ -201,7 +214,7 @@
}
}
- }
+ /* } */
return DECLINED;
}
=======
5. patch < diff.diff
6. vi Makefile
edit the fourth line like below and save it.
=======
# Makefile for mod_rpaf.c (gmake)
# $Id: Makefile 16 2007-12-13 03:40:22Z thomas $
APXS=$(shell which apxs)
#APXS2=$(shell which apxs2)
APXS2=/usr/sbin/apxs
7. make rpaf-2.0
8. make install-2.0
9. /usr/sbin/apachectl configtest
10. service httpd restart
11. Check the apache log. :)
No comments:
Post a Comment