[mirrorbrain-commits] r8197 - /trunk/mod_mirrorbrain/mod_mirrorbrain.c

From: <poeml_at_mirrorbrain.org>
Date: Fri, 05 Nov 2010 19:20:01 -0000
Author: poeml
Date: Fri Nov  5 20:20:00 2010
New Revision: 8197

URL: http://svn.mirrorbrain.org/viewvc/mirrorbrain?rev=8197&view=rev
Log:
mod_mirrorbrain:
- When running behind a proxy, prefix detection (for containment in network
  prefixes of mirrors) did not work because mod_mirrorbrain only saw the
  connecting IP address, and didn't look at an address passed via HTTP headers
  from the proxy.  This is fixed. (AS, country and continent comparisons already
  did this.)

Modified:
    trunk/mod_mirrorbrain/mod_mirrorbrain.c

Modified: trunk/mod_mirrorbrain/mod_mirrorbrain.c
URL: http://svn.mirrorbrain.org/viewvc/mirrorbrain/trunk/mod_mirrorbrain/mod_mirrorbrain.c?rev=8197&r1=8196&r2=8197&view=diff
==============================================================================
--- trunk/mod_mirrorbrain/mod_mirrorbrain.c (original)
+++ trunk/mod_mirrorbrain/mod_mirrorbrain.c Fri Nov  5 20:20:00 2010
_at_@ -1152,6 +1152,7 @@
     char *filename = NULL;
     char *realfile = NULL;
     const char *clientip = NULL;
+    apr_sockaddr_t *clientaddr;
     const char *query_country = NULL;
     char *query_asn = NULL;
     char fakefile = 0, newmirror = 0, only_hash = 0;
_at_@ -1238,7 +1239,6 @@
     form_lookup = APR_RETRIEVE_OPTIONAL_FN(form_value);
     if (form_lookup && r->args) {
         if (form_lookup(r, "fakefile")) fakefile = 1;
-        clientip = form_lookup(r, "clientip");
         query_country = form_lookup(r, "country");
         query_asn = (char *) form_lookup(r, "as");
         if (form_lookup(r, "newmirror")) newmirror = 1;
_at_@ -1286,22 +1286,15 @@
         }
     }
 
-    if (clientip) {
-        debugLog(r, cfg, "obsolete clientip address parameter: '%s'", clientip);
-        ap_set_content_type(r, "text/html; charset=UTF-8");
-        ap_rputs(DOCTYPE_XHTML_1_0T
-                 "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
-                 "<head>\n"
-                 "  <title>Sorry</title>\n", r);
-        ap_rputs("</head>\n<body>\n\n", r);
-        ap_rprintf(r, "<p>\n<kbd>clientip</kbd> is no longer supported as query parameter. "
-                      "Please use <kbd>country=xy</kbd> instead, where <kbd>xy</kbd> is a two-letter "
-                      "<a href=\"http://en.wikipedia.org/wiki/ISO_3166-1\">"
-                      "ISO 3166 country code</a>.\n</p>\n");
-        ap_rputs("\n\n</body>\n</html>\n", r);
-        return OK;
-    } else 
-        clientip = apr_pstrdup(r->pool, r->connection->remote_ip);
+    /* We might be running as a backend which sees client IPs only through HTTP
+     * headers */
+    clientip = apr_table_get(r->subprocess_env, "GEOIP_ADDR");
+    rv = apr_sockaddr_info_get(&clientaddr, clientip, APR_UNSPEC, 0, 0, r->pool);
+    if(APR_STATUS_IS_EINVAL(rv) || (rv != APR_SUCCESS)) {
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "[mod_mirrorbrain] "
+                "Error in parsing GEOIP_ADDR value '%s'", clientip);
+    }
+    debugLog(r, cfg, "clientip: %s", clientip);
 
     /* These checks apply only if the server response is not faked for testing */
     if (fakefile) {
_at_@ -1899,8 +1892,9 @@
 
         /* same prefix? */
         else if (new->ipsub 
-                && apr_ipsubnet_test(new->ipsub, r->connection->remote_addr)) {
+                && apr_ipsubnet_test(new->ipsub, clientaddr)) {
             *(void **)apr_array_push(mirrors_same_prefix) = new;
+            debugLog(r, cfg, "Mirror '%s' in same prefix (%s)", new->identifier, new->prefix);
         }
 
         /* same AS? */




_______________________________________________
mirrorbrain-commits mailing list
Archive: http://mirrorbrain.org/archive/mirrorbrain-commits/

Note: To remove yourself from this list, send a mail with the content
 	unsubscribe
to the address mirrorbrain-commits-request_at_mirrorbrain.org
Received on Fri Nov 05 2010 - 19:20:02 GMT

This archive was generated by hypermail 2.3.0 : Fri Nov 05 2010 - 19:32:09 GMT