openbsd-ports/www/apache/patches/patch-am
1998-03-16 15:15:29 +00:00

86 lines
2.3 KiB
Plaintext

--- src/main/http_protocol.c 1998/02/09 01:09:40 1.188
+++ src/main/http_protocol.c 1998/02/21 01:18:28 1.190
@@ -625,9 +625,10 @@
const char *check_fulluri(request_rec *r, const char *uri)
{
- char *name, *host, *proto;
- int i, plen;
+ char *host, *proto, *slash, *colon;
+ int plen;
unsigned port;
+ const char *res_uri;
/* This routine parses full URLs, if they match the server */
proto = http_method(r);
@@ -635,33 +636,49 @@
if (strncasecmp(uri, proto, plen) || strncasecmp(uri + plen, "://", 3))
return uri;
- name = pstrdup(r->pool, uri + plen);
+ host = pstrdup(r->pool, uri + plen + 3);
/* Find the hostname, assuming a valid request */
- i = ind(name, '/');
- name[i] = '\0';
+ slash = strchr(host, '/');
+ if (slash) {
+ *slash = 0;
+ }
+ else {
+ slash = host + strlen(host);
+ }
/* Find the port */
- host = getword_nc(r->pool, &name, ':');
- if (*name)
- port = atoi(name);
- else
+ colon = strchr(host, ':');
+ if (colon) {
+ *colon = '\0';
+ port = atoi(colon+1);
+ if (port == 0) {
+ return uri;
+ }
+ }
+ else {
port = default_port(r);
+ }
/* Make sure ports patch */
if (port != r->server->port)
return uri;
/* Save it for later use */
- r->hostname = pstrdup(r->pool, host);
- r->hostlen = plen + 3 + i;
+ r->hostname = host;
+ r->hostlen = plen + 3 + slash - host;
+ res_uri = uri + r->hostlen;
+ /* deal with "http://host" */
+ if (*res_uri == '\0') {
+ res_uri = "/";
+ }
/* The easy cases first */
if (!strcasecmp(host, r->server->server_hostname)) {
- return (uri + r->hostlen);
+ return res_uri;
}
else if (!strcmp(host, inet_ntoa(r->connection->local_addr.sin_addr))) {
- return (uri + r->hostlen);
+ return res_uri;
}
else {
/* Now things get a bit trickier - check the IP address(es) of
@@ -674,7 +691,7 @@
for (n = 0; hp->h_addr_list[n] != NULL; n++) {
if (r->connection->local_addr.sin_addr.s_addr ==
(((struct in_addr *) (hp->h_addr_list[n]))->s_addr)) {
- return (uri + r->hostlen);
+ return res_uri;
}
}
}