]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug #1342: Odd URLs in error messages on forwarded requests
authorserassio <>
Sat, 10 Sep 2005 22:03:52 +0000 (22:03 +0000)
committerserassio <>
Sat, 10 Sep 2005 22:03:52 +0000 (22:03 +0000)
   While trying to retrieve the
   URL:NONE://10.72.43.56:8181http://www.abcd.com/

and error message content incomplete (many % codes not known) in several
other error conditions

Forward port of 2.5 patch.

src/cache_manager.cc
src/forward.cc
src/ftp.cc
src/gopher.cc
src/http.cc
src/urn.cc
src/wais.cc
src/whois.cc

index fb04c39e689d75fd9befb72c924d0df4ac914505..2aecaa823efea8403044afcc7bcd71772bb99508 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: cache_manager.cc,v 1.31 2003/09/01 03:49:38 robertc Exp $
+ * $Id: cache_manager.cc,v 1.32 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 16    Cache Manager Objects
  * AUTHOR: Duane Wessels
@@ -251,6 +251,7 @@ cachemgrStart(int fd, HttpRequest * request, StoreEntry * entry)
     if ((mgr = cachemgrParseUrl(storeUrl(entry))) == NULL) {
         err = errorCon(ERR_INVALID_URL, HTTP_NOT_FOUND);
         err->url = xstrdup(storeUrl(entry));
+        err->request = requestLink(request);
         errorAppendEntry(entry, err);
         entry->expires = squid_curtime;
         return;
index 47f7fa2541f68a4806ff9bea3e616ff9f3271cde..306e6b26189fd427bf0214119d70ea6725c13b8a 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: forward.cc,v 1.128 2005/06/09 16:04:30 serassio Exp $
+ * $Id: forward.cc,v 1.129 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 17    Request Forwarding
  * AUTHOR: Duane Wessels
@@ -414,8 +414,6 @@ fwdConnectDone(int server_fd, comm_err_t status, int xerrno, void *data)
 
         err->dnsserver_msg = xstrdup(dns_error_message);
 
-        err->request = requestLink(request);
-
         fwdFail(fwdState, err);
 
         comm_close(server_fd);
@@ -432,7 +430,6 @@ fwdConnectDone(int server_fd, comm_err_t status, int xerrno, void *data)
             err->port = request->port;
         }
 
-        err->request = requestLink(request);
         fwdFail(fwdState, err);
 
         if (fs->_peer)
@@ -469,7 +466,6 @@ fwdConnectTimeout(int fd, void *data)
 
     if (entry->isEmpty()) {
         err = errorCon(ERR_CONNECT_FAIL, HTTP_GATEWAY_TIMEOUT);
-        err->request = requestLink(fwdState->request);
         err->xerrno = ETIMEDOUT;
         fwdFail(fwdState, err);
         /*
@@ -632,7 +628,6 @@ fwdConnectStart(void *data)
         debug(50, 4) ("fwdConnectStart: %s\n", xstrerror());
         err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR);
         err->xerrno = errno;
-        err->request = requestLink(fwdState->request);
         fwdFail(fwdState, err);
         fwdStateFree(fwdState);
         return;
@@ -686,7 +681,6 @@ fwdStartFail(FwdState * fwdState)
     ErrorState *err;
     debug(17, 3) ("fwdStartFail: %s\n", storeUrl(fwdState->entry));
     err = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE);
-    err->request = requestLink(fwdState->request);
     err->xerrno = errno;
     fwdFail(fwdState, err);
     fwdStateFree(fwdState);
@@ -781,7 +775,6 @@ fwdDispatch(FwdState * fwdState)
             debug(17, 1) ("fwdDispatch: Cannot retrieve '%s'\n",
                           storeUrl(entry));
             err = errorCon(ERR_UNSUP_REQ, HTTP_BAD_REQUEST);
-            err->request = requestLink(request);
             fwdFail(fwdState, err);
             /*
              * Force a persistent connection to be closed because
@@ -953,7 +946,6 @@ fwdStart(int fd, StoreEntry * e, HttpRequest * r)
 void
 fwdFail(FwdState * fwdState, ErrorState * errorState)
 {
-    assert(EBIT_TEST(fwdState->entry->flags, ENTRY_FWD_HDR_WAIT));
     debug(17, 3) ("fwdFail: %s \"%s\"\n\t%s\n",
                   err_type_str[errorState->type],
                   httpStatusString(errorState->httpStatus),
@@ -963,6 +955,9 @@ fwdFail(FwdState * fwdState, ErrorState * errorState)
         errorStateFree(fwdState->err);
 
     fwdState->err = errorState;
+
+    if (!errorState->request)
+        errorState->request = requestLink(fwdState->request);
 }
 
 /*
index 992d9eabfe6bc6f31cba0ca4c66b689fe56fdc02..45762f9ce94027b84ddeb44079f77ba3372fa757 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: ftp.cc,v 1.364 2005/09/03 10:09:09 serassio Exp $
+ * $Id: ftp.cc,v 1.365 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 9     File Transfer Protocol (FTP)
  * AUTHOR: Harvest Derived
@@ -2956,8 +2956,6 @@ ftpFailedErrorMessage(FtpStateData * ftpState, err_type error, int xerrno)
 
     err->xerrno = xerrno;
 
-    err->request = requestLink(ftpState->request);
-
     err->ftp.server_msg = ftpState->ctrl.message;
 
     ftpState->ctrl.message = NULL;
index 57e95fca63a0d84318594caeb85bcfad9dc31008..9da8be0d45a27c801a0a6d113d53d4839222dbb3 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: gopher.cc,v 1.187 2005/05/01 08:11:48 serassio Exp $
+ * $Id: gopher.cc,v 1.188 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 10    Gopher
  * AUTHOR: Harvest Derived
@@ -707,12 +707,8 @@ gopherTimeout(int fd, void *data)
     StoreEntry *entry = gopherState->entry;
     debug(10, 4) ("gopherTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
 
-    if (entry->store_status == STORE_PENDING) {
-        if (entry->isEmpty()) {
-            fwdFail(gopherState->fwdState,
-                    errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
-        }
-    }
+    fwdFail(gopherState->fwdState,
+            errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
 
     comm_close(fd);
 }
@@ -780,24 +776,16 @@ gopherReadReply(int fd, char *buf, size_t len, comm_err_t flag, int xerrno, void
 
         if (ignoreErrno(errno)) {
             do_next_read = 1;
-        } else if (entry->isEmpty()) {
+        } else {
             ErrorState *err;
             err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
             err->xerrno = errno;
-            err->url = xstrdup(storeUrl(entry));
-            errorAppendEntry(entry, err);
-            comm_close(fd);
-            do_next_read = 0;
-        } else {
+            fwdFail(gopherState->fwdState, err);
             comm_close(fd);
             do_next_read = 0;
         }
     } else if (len == 0 && entry->isEmpty()) {
-        ErrorState *err;
-        err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE);
-        err->xerrno = errno;
-        err->url = xstrdup(gopherState->request);
-        errorAppendEntry(entry, err);
+        fwdFail(gopherState->fwdState, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE));
         comm_close(fd);
         do_next_read = 0;
     } else if (len == 0) {
@@ -850,12 +838,12 @@ gopherSendComplete(int fd, char *buf, size_t size, comm_err_t errflag, int xerrn
 
     if (errflag) {
         ErrorState *err;
-        err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE);
+        err = errorCon(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE);
         err->xerrno = errno;
         err->host = xstrdup(gopherState->req->host);
         err->port = gopherState->req->port;
         err->url = xstrdup(storeUrl(entry));
-        errorAppendEntry(entry, err);
+        fwdFail(gopherState->fwdState, err);
         comm_close(fd);
 
         if (buf)
@@ -963,18 +951,6 @@ gopherStart(FwdState * fwdState)
     /* Parse url. */
     gopher_request_parse(fwdState->request,
                          &gopherState->type_id, gopherState->request);
-#if OLD_PARSE_ERROR_CODE
-
-    if (...) {
-        ErrorState *err;
-        err = errorCon(ERR_INVALID_URL, HTTP_BAD_REQUEST);
-        err->url = xstrdup(storeUrl(entry));
-        errorAppendEntry(entry, err);
-        gopherStateFree(-1, gopherState);
-        return;
-    }
-
-#endif
     comm_add_close_handler(fd, gopherStateFree, gopherState);
 
     if (((gopherState->type_id == GOPHER_INDEX) || (gopherState->type_id == GOPHER_CSO))
index 197e1740a1071d846e9d42ad7f062199d8551f8f..a74d086917f3e6b80ad09b4d3d8e7e1a0f5b8abd 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: http.cc,v 1.455 2005/08/31 19:15:36 wessels Exp $
+ * $Id: http.cc,v 1.456 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 11    Hypertext Transfer Protocol (HTTP)
  * AUTHOR: Harvest Derived
@@ -124,10 +124,8 @@ httpTimeout(int fd, void *data)
     debug(11, 4) ("httpTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
 
     if (entry->store_status == STORE_PENDING) {
-        if (entry->isEmpty()) {
-            fwdFail(httpState->fwd,
-                    errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
-        }
+        fwdFail(httpState->fwd,
+                errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
     }
 
     comm_close(fd);
@@ -1004,24 +1002,16 @@ HttpStateData::readReply (int fd, char *readBuf, size_t len, comm_err_t flag, in
 
         if (ignoreErrno(errno)) {
             flags.do_next_read = 1;
-        } else if (entry->isEmpty()) {
+        } else {
             ErrorState *err;
             err = errorCon(ERR_READ_ERROR, HTTP_BAD_GATEWAY);
-            err->request = requestLink((HttpRequest *) request);
             err->xerrno = errno;
             fwdFail(fwd, err);
             flags.do_next_read = 0;
             comm_close(fd);
-        } else {
-            flags.do_next_read = 0;
-            comm_close(fd);
         }
     } else if (flag == COMM_OK && len == 0 && entry->isEmpty()) {
-        ErrorState *err;
-        err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_BAD_GATEWAY);
-        err->xerrno = errno;
-        err->request = requestLink((HttpRequest *) request);
-        fwdFail(fwd, err);
+        fwdFail(fwd, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_BAD_GATEWAY));
         eof = 1;
         flags.do_next_read = 0;
         comm_close(fd);
@@ -1038,18 +1028,12 @@ HttpStateData::readReply (int fd, char *readBuf, size_t len, comm_err_t flag, in
              */
             processReplyHeader(buf, len);
         else if (entry->getReply()->sline.status == HTTP_INVALID_HEADER && HttpVersion(0,9) != entry->getReply()->sline.version) {
-            ErrorState *err;
-            err = errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY);
-            err->request = requestLink((HttpRequest *) request);
-            fwdFail(fwd, err);
+            fwdFail(fwd, errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY));
             flags.do_next_read = 0;
         } else {
             if (entry->mem_obj->getReply()->sline.status == HTTP_HEADER_TOO_LARGE) {
-                ErrorState *err;
                 storeEntryReset(entry);
-                err = errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY);
-                err->request = requestLink((HttpRequest *) request);
-                fwdFail(fwd, err);
+                fwdFail(fwd, errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY));
                 fwd->flags.dont_retry = 1;
             } else {
                 fwdComplete(fwd);
@@ -1067,11 +1051,8 @@ HttpStateData::readReply (int fd, char *readBuf, size_t len, comm_err_t flag, in
                 HttpVersion httpver = entry->getReply()->sline.version;
 
                 if (s == HTTP_INVALID_HEADER && httpver != HttpVersion(0,9)) {
-                    ErrorState *err;
                     storeEntryReset(entry);
-                    err = errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY);
-                    err->request = requestLink((HttpRequest *) request);
-                    fwdFail(fwd, err);
+                    fwdFail(fwd, errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY));
                     comm_close(fd);
                     return;
                 }
@@ -1210,8 +1191,6 @@ void
 HttpStateData::SendComplete(int fd, char *bufnotused, size_t size, comm_err_t errflag, void *data)
 {
     HttpStateData *httpState = static_cast<HttpStateData *>(data);
-    StoreEntry *entry = httpState->entry;
-    ErrorState *err;
     debug(11, 5) ("httpSendComplete: FD %d: size %d: errflag %d.\n",
                   fd, (int) size, errflag);
 #if URL_CHECKSUM_DEBUG
@@ -1229,10 +1208,10 @@ HttpStateData::SendComplete(int fd, char *bufnotused, size_t size, comm_err_t er
         return;
 
     if (errflag) {
+        ErrorState *err;
         err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
         err->xerrno = errno;
-        err->request = requestLink(httpState->orig_request);
-        errorAppendEntry(entry, err);
+        fwdFail(httpState->fwd, err);
         comm_close(fd);
         return;
     } else {
@@ -1869,7 +1848,6 @@ httpSendRequestEntity(int fd, char *bufnotused, size_t size, comm_err_t errflag,
 {
     HttpStateData *httpState = static_cast<HttpStateData *>(data);
     StoreEntry *entry = httpState->entry;
-    ErrorState *err;
     debug(11, 5) ("httpSendRequestEntity: FD %d: size %d: errflag %d.\n",
                   fd, (int) size, errflag);
 
@@ -1883,10 +1861,10 @@ httpSendRequestEntity(int fd, char *bufnotused, size_t size, comm_err_t errflag,
         return;
 
     if (errflag) {
+        ErrorState *err;
         err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
         err->xerrno = errno;
-        err->request = requestLink(httpState->orig_request);
-        errorAppendEntry(entry, err);
+        fwdFail(httpState->fwd, err);
         comm_close(fd);
         return;
     }
index ce5e6a7cc8721487325f3b52889ce9499a9b7422..55e508870d8fb0bc5144d8ded559ceccaef734d3 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: urn.cc,v 1.87 2005/08/31 19:15:36 wessels Exp $
+ * $Id: urn.cc,v 1.88 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 52    URN Parsing
  * AUTHOR: Kostas Anagnostakis
@@ -226,6 +226,7 @@ UrnState::setUriResFromRequest(HttpRequest *r)
         debug(52, 3) ("urnStart: Bad uri-res URL %s\n", urlres);
         ErrorState *err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND);
         err->url = urlres;
+        err->request = requestLink(r);
         urlres = NULL;
         errorAppendEntry(entry, err);
         return;
index d1e7eb11fbf85a1c8be7639b079fd555abbef45e..9b487534f26206965ca89dbc84e20bf086831be3 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: wais.cc,v 1.151 2005/08/31 19:15:36 wessels Exp $
+ * $Id: wais.cc,v 1.152 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 24    WAIS Relay
  * AUTHOR: Harvest Derived
@@ -87,10 +87,8 @@ waisTimeout(int fd, void *data)
     debug(24, 4) ("waisTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
 
     if (entry->store_status == STORE_PENDING) {
-        if (!waisState->dataWritten) {
-            fwdFail(waisState->fwd,
-                    errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
-        }
+        fwdFail(waisState->fwd,
+                errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
     }
 
     comm_close(fd);
@@ -161,20 +159,13 @@ waisReadReply(int fd, char *buf, size_t len, comm_err_t flag, int xerrno, void *
             comm_read(fd, waisState->buf, read_sz, waisReadReply, waisState);
         } else {
             ErrorState *err;
-            EBIT_CLR(entry->flags, ENTRY_CACHABLE);
-            storeReleaseRequest(entry);
             err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
             err->xerrno = errno;
-            err->request = requestLink(waisState->request);
-            errorAppendEntry(entry, err);
+            fwdFail(waisState->fwd, err);
             comm_close(fd);
         }
     } else if (flag == COMM_OK && len == 0 && !waisState->dataWritten) {
-        ErrorState *err;
-        err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE);
-        err->xerrno = errno;
-        err->request = requestLink(waisState->request);
-        errorAppendEntry(entry, err);
+        fwdFail(waisState->fwd, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE));
         comm_close(fd);
     } else if (flag == COMM_OK && len == 0) {
         /* Connection closed; retrieval done. */
@@ -211,8 +202,7 @@ waisSendComplete(int fd, char *bufnotused, size_t size, comm_err_t errflag, void
         ErrorState *err;
         err = errorCon(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE);
         err->xerrno = errno;
-        err->request = requestLink(waisState->request);
-        errorAppendEntry(entry, err);
+        fwdFail(waisState->fwd, err);
         comm_close(fd);
     } else {
         /* Schedule read reply. */
index 8ec8ab23179b57b2614f7f58c61df93dfa7d4126..3bb150b200aeef556d10eb69f23b31f43d9956d8 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: whois.cc,v 1.28 2003/09/01 03:49:40 robertc Exp $
+ * $Id: whois.cc,v 1.29 2005/09/10 16:03:52 serassio Exp $
  *
  * DEBUG: section 75    WHOIS protocol
  * AUTHOR: Duane Wessels, Kostas Anagnostakis
@@ -153,16 +153,13 @@ WhoisState::readReply (int fd, char *buf, size_t len, comm_err_t flag, int xerrn
 
         if (ignoreErrno(errno)) {
             do_next_read = 1;
-        } else if (!dataWritten) {
+        } else {
             ErrorState *err;
             err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
             err->xerrno = errno;
             fwdFail(fwd, err);
             comm_close(fd);
             do_next_read = 0;
-        } else {
-            comm_close(fd);
-            do_next_read = 0;
         }
     } else {
         storeTimestampsSet(entry);