httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wr...@apache.org
Subject svn commit: r771583 - /httpd/httpd/trunk/modules/proxy/proxy_util.c
Date Tue, 05 May 2009 06:39:03 GMT
Author: wrowe
Date: Tue May  5 06:39:03 2009
New Revision: 771583

URL: http://svn.apache.org/viewvc?rev=771583&view=rev
Log:
REVERT 771581 modules/proxy/ changes (miscommitted)

Modified:
    httpd/httpd/trunk/modules/proxy/proxy_util.c

Modified: httpd/httpd/trunk/modules/proxy/proxy_util.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/proxy_util.c?rev=771583&r1=771582&r2=771583&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/proxy_util.c (original)
+++ httpd/httpd/trunk/modules/proxy/proxy_util.c Tue May  5 06:39:03 2009
@@ -1052,7 +1052,6 @@
     /*
      * XXX FIXME: Make sure this handled the ambiguous case of the :<PORT>
      * after the hostname
-     * XXX FIXME: Ensure the /uri component is a case sensitive match
      */
     if (r->proxyreq != PROXYREQ_REVERSE) {
         return url;
@@ -1070,55 +1069,56 @@
         proxy_server_conf *sconf = (proxy_server_conf *)
             ap_get_module_config(r->server->module_config, &proxy_module);
         proxy_balancer *balancer;
-        const char *real = ent[i].real;
+        const char *real;
+        real = ent[i].real;
+        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                         "ppr: real: %s", real);
         /*
          * First check if mapping against a balancer and see
          * if we have such a entity. If so, then we need to
          * find the particulars of the actual worker which may
          * or may not be the right one... basically, we need
          * to find which member actually handled this request.
+         *
+         * TODO: Recover the path from real and use that
+         *       for more exact matching
          */
-        if ((strncasecmp(real, "balancer://", 11) == 0) &&
+        if ((strncasecmp(real, "balancer:", 9) == 0) &&
             (balancer = ap_proxy_get_balancer(r->pool, sconf, real))) {
-            int n, l3;
-            proxy_worker *worker = (proxy_worker *)balancer->workers->elts;
-            const char *urlpart = ap_strchr_c(real + 11, '/');
-            if (urlpart) {
-                if (!urlpart[1])
-                    urlpart = NULL;
-                else
-                    l3 = strlen(urlpart);
-            }
-            /* The balancer comparison is a bit trickier.  Given the context
-             *   BalancerMember balancer://alias http://example.com/foo
-             *   ProxyPassReverse /bash balancer://alias/bar
-             * translate url http://example.com/foo/bar/that to /bash/that
-             */
+            int n;
+            proxy_worker *worker;
+            worker = (proxy_worker *)balancer->workers->elts;
+            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                         "ppr: checking balancer: %s",
+                         balancer->name);
             for (n = 0; n < balancer->workers->nelts; n++) {
-                l2 = strlen(worker->name);
-                if (urlpart) {
-                    if (worker->name[l2 - 1] == '/')
-                        --l2;
-                    if (l1 >= l2 + l3 
-                            && strncasecmp(worker->name, url, l2) == 0
-                            && strncmp(urlpart, url + l2, l3) == 0) {
-                        u = apr_pstrcat(r->pool, ent[i].fake,
-                                        &url[l2 + l3], NULL);
-                        return ap_construct_url(r->pool, u, r);
-                    }
+                if (worker->port) {
+                    u = apr_psprintf(r->pool, "%s://%s:%d/", worker->scheme,
+                                     worker->hostname, worker->port);
+                }
+                else {
+                    u = apr_psprintf(r->pool, "%s://%s/", worker->scheme,
+                                     worker->hostname);
                 }
-                else if (l1 >= l2 && strncasecmp(worker->name, url, l2) ==
0) {
+                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                         "ppr: matching member (%s) and URL (%s)",
+                         u, url);
+
+                l2 = strlen(u);
+                if (l1 >= l2 && strncasecmp(u, url, l2) == 0) {
                     u = apr_pstrcat(r->pool, ent[i].fake, &url[l2], NULL);
+                    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                         "ppr: matched member (%s)", u);
                     return ap_construct_url(r->pool, u, r);
                 }
                 worker++;
             }
         }
-        else {
-            l2 = strlen(real);
-            if (l1 >= l2 && strncasecmp(real, url, l2) == 0) {
-                u = apr_pstrcat(r->pool, ent[i].fake, &url[l2], NULL);
-                return ap_construct_url(r->pool, u, r);
+
+        l2 = strlen(real);
+        if (l1 >= l2 && strncasecmp(real, url, l2) == 0) {
+            u = apr_pstrcat(r->pool, ent[i].fake, &url[l2], NULL);
+            return ap_construct_url(r->pool, u, r);
         }
     }
 



Mime
View raw message