]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
call urlCanonical() in refreshCheck() if entry->mem_obj == NULL.
authorwessels <>
Fri, 17 Jul 1998 04:22:46 +0000 (04:22 +0000)
committerwessels <>
Fri, 17 Jul 1998 04:22:46 +0000 (04:22 +0000)
Changed urlCanonical() interface and operation.  Writes the URL
into a xmalloc'd buffer (request_t->canonical).  Eliminated 'buf'
arg to urlCanonical().  client_side.c was the only place which used it,
so now we must xstrdup() there.

src/acl.cc
src/client_side.cc
src/http.cc
src/peer_select.cc
src/protos.h
src/refresh.cc
src/ssl.cc
src/structs.h
src/tunnel.cc
src/url.cc

index 09c120e1bb7f9961e3acb44f6870a41f8ad0a51a..ba8dcbe8c38714621a352146cfaa4de8c9104b84 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: acl.cc,v 1.169 1998/07/14 22:28:08 wessels Exp $
+ * $Id: acl.cc,v 1.170 1998/07/16 22:22:46 wessels Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -1319,7 +1319,7 @@ aclMatchAcl(acl * acl, aclCheck_t * checklist)
        return k;
        /* NOTREACHED */
     case ACL_URL_REGEX:
-       esc_buf = xstrdup(urlCanonical(r, NULL));
+       esc_buf = xstrdup(urlCanonical(r));
        rfc1738_unescape(esc_buf);
        k = aclMatchRegex(acl->data, esc_buf);
        safe_free(esc_buf);
index 8ba34a9ae9f7dc79e47bcac2911b2dc97dee83db..8bfb1bd5f43796fc15f7a2d2fc736d3411f3f4a6 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: client_side.cc,v 1.354 1998/07/16 03:46:47 wessels Exp $
+ * $Id: client_side.cc,v 1.355 1998/07/16 22:22:47 wessels Exp $
  *
  * DEBUG: section 33    Client-side Routines
  * AUTHOR: Duane Wessels
@@ -165,7 +165,8 @@ clientAccessCheckDone(int answer, void *data)
     debug(33, 5) ("clientAccessCheckDone: '%s' answer=%d\n", http->uri, answer);
     http->acl_checklist = NULL;
     if (answer == ACCESS_ALLOWED) {
-       urlCanonical(http->request, http->uri);
+       safe_free(http->uri);
+       http->uri = xstrdup(urlCanonical(http->request));
        assert(http->redirect_state == REDIRECT_NONE);
        http->redirect_state = REDIRECT_PENDING;
        redirectStart(http, clientRedirectDone, http);
@@ -198,7 +199,6 @@ static void
 clientRedirectDone(void *data, char *result)
 {
     clientHttpRequest *http = data;
-    size_t l;
     request_t *new_request = NULL;
     request_t *old_request = http->request;
     debug(33, 5) ("clientRedirectDone: '%s' result=%s\n", http->uri,
@@ -209,12 +209,7 @@ clientRedirectDone(void *data, char *result)
        new_request = urlParse(old_request->method, result);
     if (new_request) {
        safe_free(http->uri);
-       /* need to malloc because the URL returned by the redirector might
-        * not be big enough to append the local domain
-        * -- David Lamkin drl@net-tel.co.uk */
-       l = strlen(result) + Config.appendDomainLen + 64;
-       http->uri = xcalloc(l, 1);
-       xstrncpy(http->uri, result, l);
+       http->uri = xstrdup(urlCanonical(new_request));
        new_request->http_ver = old_request->http_ver;
        httpHeaderAppend(&new_request->header, &old_request->header);
        new_request->client_addr = old_request->client_addr;
@@ -226,7 +221,6 @@ clientRedirectDone(void *data, char *result)
        }
        requestUnlink(old_request);
        http->request = requestLink(new_request);
-       urlCanonical(http->request, http->uri);
     }
     clientInterpretRequestHeaders(http);
     fd_note(http->conn->fd, http->uri);
index 305809ed6db77b4b67f7ed186cdaff6c07dbac97..88fb2a7f1b31eeb2a48ba8cb3aacfdba0bfbc499 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.cc,v 1.290 1998/06/29 19:29:01 wessels Exp $
+ * $Id: http.cc,v 1.291 1998/07/16 22:22:49 wessels Exp $
  *
  * DEBUG: section 11    Hypertext Transfer Protocol (HTTP)
  * AUTHOR: Harvest Derived
@@ -691,7 +691,7 @@ httpBuildRequestHeader(request_t * request,
        if (!cc)
            cc = httpHdrCcCreate();
        if (!EBIT_TEST(cc->mask, CC_MAX_AGE)) {
-           const char *url = entry ? storeUrl(entry) : urlCanonical(orig_request, NULL);
+           const char *url = entry ? storeUrl(entry) : urlCanonical(orig_request);
            httpHdrCcSetMaxAge(cc, getMaxAge(url));
            if (strLen(request->urlpath))
                assert(strstr(url, strBuf(request->urlpath)));
index bf5bdaee7a31013704e7dd2e53c20ba7648ab189..5ac5752e20f07e7e057c701b6dd5567bc72f10dc 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: peer_select.cc,v 1.68 1998/06/30 07:11:11 wessels Exp $
+ * $Id: peer_select.cc,v 1.69 1998/07/16 22:22:50 wessels Exp $
  *
  * DEBUG: section 44    Peer Selection Algorithm
  * AUTHOR: Duane Wessels
@@ -203,7 +203,7 @@ peerSelectCallbackFail(ps_state * psstate)
 {
     request_t *request = psstate->request;
     void *data = psstate->callback_data;
-    const char *url = psstate->entry ? storeUrl(psstate->entry) : urlCanonical(request, NULL);
+    const char *url = psstate->entry ? storeUrl(psstate->entry) : urlCanonical(request);
     debug(44, 1) ("Failed to select source for '%s'\n", url);
     debug(44, 1) ("  always_direct = %d\n", psstate->always_direct);
     debug(44, 1) ("   never_direct = %d\n", psstate->never_direct);
index 6810816c3035f5fc84e7e449c7fb6a49960a87aa..e6141aea21172f446bcb1718146e485e0aa68f34 100644 (file)
@@ -914,7 +914,7 @@ extern protocol_t urlParseProtocol(const char *);
 extern method_t urlParseMethod(const char *);
 extern void urlInitialize(void);
 extern request_t *urlParse(method_t, char *);
-extern char *urlCanonical(const request_t *, char *);
+extern char *urlCanonical(const request_t *);
 extern char *urlRInternal(const char *host, u_short port, const char *dir, const char *name);
 extern char *urlInternal(const char *dir, const char *name);
 extern int matchDomainName(const char *d, const char *h);
index f1cefc3b60763dc4d7438d402bc2caaac006fdbb..8ae4773b61cf5f203426174f9e8c51e565fffa98 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: refresh.cc,v 1.22 1998/07/14 21:25:51 wessels Exp $
+ * $Id: refresh.cc,v 1.23 1998/07/16 22:22:52 wessels Exp $
  *
  * DEBUG: section 22    Refresh Calculation
  * AUTHOR: Harvest Derived
@@ -78,6 +78,7 @@ int
 refreshCheck(const StoreEntry * entry, const request_t * request, time_t delta)
 {
     const refresh_t *R;
+    const char *uri;
     time_t min = REFRESH_DEFAULT_MIN;
     double pct = REFRESH_DEFAULT_PCT;
     time_t max = REFRESH_DEFAULT_MAX;
@@ -85,14 +86,16 @@ refreshCheck(const StoreEntry * entry, const request_t * request, time_t delta)
     time_t age;
     double factor;
     time_t check_time = squid_curtime + delta;
-    assert(entry->mem_obj);
-    assert(entry->mem_obj->url);
-    debug(22, 3) ("refreshCheck: '%s'\n", entry->mem_obj->url);
+    if (entry->mem_obj)
+       uri = entry->mem_obj->url;
+    else
+       uri = urlCanonical(request);
+    debug(22, 3) ("refreshCheck: '%s'\n", uri);
     if (EBIT_TEST(entry->flag, ENTRY_REVALIDATE)) {
        debug(22, 3) ("refreshCheck: YES: Required Authorization\n");
        return 1;
     }
-    if ((R = refreshLimits(entry->mem_obj->url))) {
+    if ((R = refreshLimits(uri))) {
        min = R->min;
        pct = R->pct;
        max = R->max;
index c0c6a2f097f30363d4f9850358ae03c63d1df81d..b7996de570e341b0f3d9c5d3ce4d97524d1c5389 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ssl.cc,v 1.81 1998/06/09 21:18:53 wessels Exp $
+ * $Id: ssl.cc,v 1.82 1998/07/16 22:22:53 wessels Exp $
  *
  * DEBUG: section 26    Secure Sockets Layer Proxy
  * AUTHOR: Duane Wessels
@@ -177,7 +177,9 @@ sslReadClient(int fd, void *data)
        }
     } else if (len == 0) {
        /* Connection closed; retrieval done. */
+#if DONT
        sslClose(sslState);
+#endif
     } else {
        sslState->client.offset = 0;
        sslState->client.len = len;
index 15154fdf175371f5dbdc2607ca8260010269efb2..1a4de22cfe6a8c187e7db4b4d385f5d220e24645 100644 (file)
@@ -1126,6 +1126,7 @@ struct _request_t {
     char user_ident[USER_IDENT_SZ];    /* from proxy auth or ident server */
     u_short port;
     String urlpath;
+    char *canonical;
     int link_count;            /* free when zero */
     int flags;
     HttpHdrCc *cache_control;
index b1127558faec64c029d674e0aa672d2231a4edd5..6f51ef8373fc4ac52ff335a58813c540dfd503f6 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: tunnel.cc,v 1.81 1998/06/09 21:18:53 wessels Exp $
+ * $Id: tunnel.cc,v 1.82 1998/07/16 22:22:53 wessels Exp $
  *
  * DEBUG: section 26    Secure Sockets Layer Proxy
  * AUTHOR: Duane Wessels
@@ -177,7 +177,9 @@ sslReadClient(int fd, void *data)
        }
     } else if (len == 0) {
        /* Connection closed; retrieval done. */
+#if DONT
        sslClose(sslState);
+#endif
     } else {
        sslState->client.offset = 0;
        sslState->client.len = len;
index f85ecfb78e54c6712388b7c587b0e526e550d00b..48c9e37ff3fac6b3a5f11ca9bc0dfb342d7442d6 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: url.cc,v 1.98 1998/07/15 23:56:24 wessels Exp $
+ * $Id: url.cc,v 1.99 1998/07/16 22:22:55 wessels Exp $
  *
  * DEBUG: section 23    URL Parsing
  * AUTHOR: Duane Wessels
@@ -103,7 +103,6 @@ url_convert_hex(char *org_url, int allocate)
 void
 urlInitialize(void)
 {
-    int i;
     debug(23, 5) ("urlInitialize: Initializing...\n");
     assert(sizeof(ProtocolStr) == (PROTO_MAX + 1) * sizeof(char *));
 }
@@ -263,24 +262,24 @@ urnParse(method_t method, char *urn)
 }
 
 char *
-urlCanonical(const request_t * request, char *buf)
+urlCanonical(const request_t * request)
 {
-    LOCAL_ARRAY(char, urlbuf, MAX_URL);
     LOCAL_ARRAY(char, portbuf, 32);
-    if (buf == NULL)
-       buf = urlbuf;
+    LOCAL_ARRAY(char, urlbuf, MAX_URL);
+    if (request->canonical)
+       return request->canonical;
     if (request->protocol == PROTO_URN) {
-       snprintf(buf, MAX_URL, "urn:%s", strBuf(request->urlpath));
-    } else
+       snprintf(urlbuf, MAX_URL, "urn:%s", strBuf(request->urlpath));
+    } else {
        switch (request->method) {
        case METHOD_CONNECT:
-           snprintf(buf, MAX_URL, "%s:%d", request->host, request->port);
+           snprintf(urlbuf, MAX_URL, "%s:%d", request->host, request->port);
            break;
        default:
            portbuf[0] = '\0';
            if (request->port != urlDefaultPort(request->protocol))
                snprintf(portbuf, 32, ":%d", request->port);
-           snprintf(buf, MAX_URL, "%s://%s%s%s%s%s",
+           snprintf(urlbuf, MAX_URL, "%s://%s%s%s%s%s",
                ProtocolStr[request->protocol],
                request->login,
                *request->login ? "@" : null_string,
@@ -289,7 +288,8 @@ urlCanonical(const request_t * request, char *buf)
                strBuf(request->urlpath));
            break;
        }
-    return buf;
+    }
+    return request->canonical = xstrdup(urlbuf);
 }
 
 char *
@@ -357,6 +357,7 @@ requestUnlink(request_t * request)
 #endif
     safe_free(request->body);
     stringClean(&request->urlpath);
+    safe_free(request->canonical);
     memFree(MEM_REQUEST_T, request);
 }
 #endif