On 10/31/2005 05:31 PM, [EMAIL PROTECTED] wrote: > Author: jim > Date: Mon Oct 31 08:31:29 2005 > New Revision: 329849 > > URL: http://svn.apache.org/viewcvs?rev=329849&view=rev > Log: > Fix a problem where we are doing a case insensitive > match between the worker and the URL. Instead, only > the scheme and hostname are insensitive, the rest > should be case sensitive. > > Modified: > httpd/httpd/trunk/CHANGES > httpd/httpd/trunk/modules/proxy/proxy_util.c
Thanks for looking into this. I think this is also related to PR36906. Given the fact that the hostname and the schema already get lowercased by ap_proxy_add_worker, wouldn't it be faster and clearer to do something like the following (honest question, I do not know the answer and the best code should go in): PROXY_DECLARE(proxy_worker *) ap_proxy_get_worker(apr_pool_t *p, proxy_server_conf *conf, const char *url) { proxy_worker *worker; proxy_worker *max_worker = NULL; int max_match = 0; int url_length; int worker_name_length; const char *c; int i; char *url_copy; c = ap_strchr_c(url, ':'); if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') return NULL; url_copy = apr_pstrdup(p, url); url_length = strlen(url_copy); /* * We need to find the start of the path and * and lowercase all characters before. */ c = ap_strchr_c(c+3, '/'); if (c) { *c = '\0'; ap_str_tolower(url_copy); *c = '/'; } else { ap_str_tolower(url_copy); } worker = (proxy_worker *)conf->workers->elts; /* * Do a "longest match" on the worker name to find the worker that * fits best to the URL. */ for (i = 0; i < conf->workers->nelts; i++) { if ( ((worker_name_length = strlen(worker->name)) <= url_length) && (worker_name_length > max_match) && (strncmp(url_copy, worker->name, worker_name_length) == 0)) { max_worker = worker; max_match = worker_name_length; } worker++; } return max_worker; } Regards Rüdiger