--- Begin Message ---
Package: squid
Version: 2.7.STABLE3-1
Severity: normal
The problem has been fixed in 2.7.STABLE5, the original patch is located here:
http://www.squid-cache.org/Versions/v2/2.7/changesets/12378.patch
See also:
http://www.squid-cache.org/Versions/v2/2.7/changesets/SQUID_2_7_STABLE5.html
Would be great if the patch could be included in lenny as the official Squid3
hasn't this patch implemented yet too. So all squid versions in lenny are
stream incompatible...
Mathias Tauber
-- System Information:
Debian Release: 5.0
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.26-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages squid depends on:
ii adduser 3.110 add and remove users and groups
ii debconf [debconf-2.0] 1.5.24 Debian configuration management sy
ii libc6 2.7-18 GNU C Library: Shared libraries
ii libcomerr2 1.41.3-1 common error description library
ii libdb4.6 4.6.21-11 Berkeley v4.6 Database Libraries [
ii libkrb53 1.6.dfsg.4~beta1-5 MIT Kerberos runtime libraries
ii libldap-2.4-2 2.4.11-1 OpenLDAP libraries
ii libpam0g 1.0.1-5 Pluggable Authentication Modules l
ii logrotate 3.7.1-5 Log rotation utility
ii lsb-base 3.2-20 Linux Standard Base 3.2 init scrip
ii netbase 4.34 Basic TCP/IP networking system
ii squid-common 2.7.STABLE3-1 Internet object cache (WWW proxy c
squid recommends no packages.
Versions of packages squid suggests:
pn logcheck-database <none> (no description available)
pn resolvconf <none> (no description available)
pn smbclient <none> (no description available)
pn squid-cgi <none> (no description available)
pn squidclient <none> (no description available)
pn winbind <none> (no description available)
-- debconf information excluded
---------------------
PatchSet 12378
Date: 2008/09/25 02:33:37
Author: hno
Branch: SQUID_2_7
Tag: (none)
Log:
Bug #2394: add upgrade_http0.9 option making it possible to disable upgrade of
HTTP/0.9 responses
Apparently there is some applications which may get confused if HTTP/0.9
(aka headerless) responses gets upgraded to HTTP. This squid.conf option
makes it possible to disable the upgrade of such responses, leaving them
as-is without any HTTP header.
Members:
src/HttpHeader.c:1.99->1.99.2.1
src/cf.data.pre:1.450.2.27->1.450.2.28
src/client_side.c:1.754.2.22->1.754.2.23
src/enums.h:1.245.2.2->1.245.2.3
src/http.c:1.439.2.6->1.439.2.7
src/structs.h:1.538.2.15->1.538.2.16
Index: squid/src/HttpHeader.c
===================================================================
RCS file: /cvsroot/squid/squid/src/HttpHeader.c,v
retrieving revision 1.99
retrieving revision 1.99.2.1
diff -u -r1.99 -r1.99.2.1
--- squid/src/HttpHeader.c 21 Dec 2007 09:50:19 -0000 1.99
+++ squid/src/HttpHeader.c 25 Sep 2008 02:33:37 -0000 1.99.2.1
@@ -1,6 +1,6 @@
/*
- * $Id: HttpHeader.c,v 1.99 2007/12/21 09:50:19 adrian Exp $
+ * $Id: HttpHeader.c,v 1.99.2.1 2008/09/25 02:33:37 hno Exp $
*
* DEBUG: section 55 HTTP Header
* AUTHOR: Alex Rousskov
@@ -129,6 +129,7 @@
{"X-Forwarded-For", HDR_X_FORWARDED_FOR, ftStr},
{"X-Request-URI", HDR_X_REQUEST_URI, ftStr},
{"X-Squid-Error", HDR_X_SQUID_ERROR, ftStr},
+ {"X-HTTP09-First-Line", HDR_X_HTTP09_FIRST_LINE, ftStr},
{"Negotiate", HDR_NEGOTIATE, ftStr},
#if X_ACCELERATOR_VARY
{"X-Accelerator-Vary", HDR_X_ACCELERATOR_VARY, ftStr},
Index: squid/src/cf.data.pre
===================================================================
RCS file: /cvsroot/squid/squid/src/cf.data.pre,v
retrieving revision 1.450.2.27
retrieving revision 1.450.2.28
diff -u -r1.450.2.27 -r1.450.2.28
--- squid/src/cf.data.pre 25 Sep 2008 02:19:57 -0000 1.450.2.27
+++ squid/src/cf.data.pre 25 Sep 2008 02:33:37 -0000 1.450.2.28
@@ -1,6 +1,6 @@
#
-# $Id: cf.data.pre,v 1.450.2.27 2008/09/25 02:19:57 hno Exp $
+# $Id: cf.data.pre,v 1.450.2.28 2008/09/25 02:33:37 hno Exp $
#
# SQUID Web Proxy Cache http://www.squid-cache.org/
# ----------------------------------------------------------
@@ -3253,6 +3253,29 @@
broken_posts allow buggy_server
DOC_END
+NAME: upgrade_http0.9
+TYPE: acl_access
+DEFAULT: none
+LOC: Config.accessList.upgrade_http09
+DOC_START
+ This access list controls when HTTP/0.9 responses is upgraded
+ to our current HTTP version. The default is to always upgrade.
+
+ Some applications expect to be able to respond with non-HTTP
+ responses and clients gets confused if the response is upgraded.
+ For example SHOUTcast servers used for mp3 streaming.
+
+ To enable some flexibility in detection of such applications
+ the first line of the response is available in the internal header
+ X-HTTP09-First-Line for use in the rep_header acl.
+
+NOCOMMENT_START
+# Don't upgrade ShoutCast responses to HTTP
+acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
+upgrade_http0.9 deny shoutcast
+NOCOMMENT_END
+DOC_END
+
NAME: via
IFDEF: HTTP_VIOLATIONS
COMMENT: on|off
Index: squid/src/client_side.c
===================================================================
RCS file: /cvsroot/squid/squid/src/client_side.c,v
retrieving revision 1.754.2.22
retrieving revision 1.754.2.23
diff -u -r1.754.2.22 -r1.754.2.23
--- squid/src/client_side.c 25 Sep 2008 02:28:57 -0000 1.754.2.22
+++ squid/src/client_side.c 25 Sep 2008 02:33:37 -0000 1.754.2.23
@@ -1,6 +1,6 @@
/*
- * $Id: client_side.c,v 1.754.2.22 2008/09/25 02:28:57 hno Exp $
+ * $Id: client_side.c,v 1.754.2.23 2008/09/25 02:33:37 hno Exp $
*
* DEBUG: section 33 Client-side Routines
* AUTHOR: Duane Wessels
@@ -1942,8 +1942,8 @@
LOCAL_ARRAY(char, bbuf, MAX_URL + 32);
String strVia = httpHeaderGetList(hdr, HDR_VIA);
snprintf(bbuf, MAX_URL + 32, "%d.%d %s",
- http->entry->mem_obj->reply->sline.version.major,
- http->entry->mem_obj->reply->sline.version.minor, ThisCache);
+ rep->sline.version.major,
+ rep->sline.version.minor, ThisCache);
strListAdd(&strVia, bbuf, ',');
httpHeaderDelById(hdr, HDR_VIA);
httpHeaderPutStr(hdr, HDR_VIA, strBuf(strVia));
@@ -2003,13 +2003,6 @@
/* try to grab the already-parsed header */
rep = httpReplyClone(orig_rep);
if (rep->pstate == psParsed) {
- if (http->conn->port->http11) {
- /* enforce 1.1 reply version */
- httpBuildVersion(&rep->sline.version, 1, 1);
- } else {
- /* enforce 1.0 reply version */
- httpBuildVersion(&rep->sline.version, 1, 0);
- }
/* do header conversions */
clientBuildReplyHeader(http, rep);
/* if we do ranges, change status to "Partial Content" */
@@ -3018,17 +3011,41 @@
{
HttpReply *rep = http->reply;
MemBuf mb;
+ int send_header = 1;
/* reset range iterator */
http->range_iter.pos = HttpHdrRangeInitPos;
if (http->request->method == METHOD_HEAD) {
/* do not forward body for HEAD replies */
http->flags.done_copying = 1;
}
+ if (http->http_ver.major < 1)
+ send_header = 0;
+ if (rep->sline.version.major < 1) {
+ if (send_header && Config.accessList.upgrade_http09) {
+ aclCheck_t *checklist =
clientAclChecklistCreate(Config.accessList.upgrade_http09, http);
+ checklist->reply = rep;
+ if (aclCheckFast(Config.accessList.upgrade_http09, checklist) != 1)
+ send_header = 0;
+ aclChecklistFree(checklist);
+ }
+ httpHeaderDelById(&rep->header, HDR_X_HTTP09_FIRST_LINE);
+ }
/* init mb; put status line and headers */
- if (http->http_ver.major >= 1)
+ if (send_header) {
+ if (http->conn->port->http11) {
+ /* enforce 1.1 reply version */
+ httpBuildVersion(&rep->sline.version, 1, 1);
+ } else {
+ /* enforce 1.0 reply version */
+ httpBuildVersion(&rep->sline.version, 1, 0);
+ }
mb = httpReplyPack(rep);
- else
+ } else {
+ debug(33, 2) ("HTTP/0.9 response, disable everything\n");
+ http->request->flags.chunked_response = 0;
+ http->request->flags.proxy_keepalive = 0;
memBufDefInit(&mb);
+ }
if (Config.onoff.log_mime_hdrs) {
http->al.headers.reply = xmalloc(mb.size + 1);
xstrncpy(http->al.headers.reply, mb.buf, mb.size);
Index: squid/src/enums.h
===================================================================
RCS file: /cvsroot/squid/squid/src/enums.h,v
retrieving revision 1.245.2.2
retrieving revision 1.245.2.3
diff -u -r1.245.2.2 -r1.245.2.3
--- squid/src/enums.h 27 May 2008 12:49:39 -0000 1.245.2.2
+++ squid/src/enums.h 25 Sep 2008 02:33:37 -0000 1.245.2.3
@@ -1,6 +1,6 @@
/*
- * $Id: enums.h,v 1.245.2.2 2008/05/27 12:49:39 hno Exp $
+ * $Id: enums.h,v 1.245.2.3 2008/09/25 02:33:37 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -261,6 +261,7 @@
#endif
HDR_X_ERROR_URL, /* errormap, requested URL */
HDR_X_ERROR_STATUS, /* errormap, received HTTP status line
*/
+ HDR_X_HTTP09_FIRST_LINE, /* internal, first line of HTTP/0.9 response */
HDR_FRONT_END_HTTPS,
HDR_PROXY_SUPPORT,
HDR_KEEP_ALIVE,
Index: squid/src/http.c
===================================================================
RCS file: /cvsroot/squid/squid/src/http.c,v
retrieving revision 1.439.2.6
retrieving revision 1.439.2.7
diff -u -r1.439.2.6 -r1.439.2.7
--- squid/src/http.c 25 Jun 2008 22:14:02 -0000 1.439.2.6
+++ squid/src/http.c 25 Sep 2008 02:33:37 -0000 1.439.2.7
@@ -1,6 +1,6 @@
/*
- * $Id: http.c,v 1.439.2.6 2008/06/25 22:14:02 hno Exp $
+ * $Id: http.c,v 1.439.2.7 2008/09/25 02:33:37 hno Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
@@ -432,6 +432,18 @@
hdr_len = httpState->reply_hdr.size;
if (hdr_len > 4 && strncmp(httpState->reply_hdr.buf, "HTTP/", 5)) {
debug(11, 3) ("httpProcessReplyHeader: Non-HTTP-compliant header:
'%s'\n", httpState->reply_hdr.buf);
+ {
+ char *t, *t2;
+ t = xstrdup(httpState->reply_hdr.buf);
+ t2 = strchr(t, '\n');
+ if (t2)
+ *t2 = '\0';
+ t2 = strchr(t, '\r');
+ if (t2)
+ *t2 = '\0';
+ httpHeaderPutStr(&reply->header, HDR_X_HTTP09_FIRST_LINE, t);
+ safe_free(t);
+ }
httpState->reply_hdr_state += 2;
httpState->chunk_size = -1; /* Terminated by EOF */
httpState->reply_hdr.size = old_size;
@@ -972,7 +984,6 @@
} else if (s == HTTP_INVALID_HEADER) {
MemBuf mb;
HttpReply *reply = entry->mem_obj->reply;
- httpReplyReset(reply);
httpBuildVersion(&reply->sline.version, 0, 9);
reply->sline.status = HTTP_OK;
httpHeaderPutTime(&reply->header, HDR_DATE, squid_curtime);
Index: squid/src/structs.h
===================================================================
RCS file: /cvsroot/squid/squid/src/structs.h,v
retrieving revision 1.538.2.15
retrieving revision 1.538.2.16
diff -u -r1.538.2.15 -r1.538.2.16
--- squid/src/structs.h 21 Jul 2008 20:18:50 -0000 1.538.2.15
+++ squid/src/structs.h 25 Sep 2008 02:33:37 -0000 1.538.2.16
@@ -1,6 +1,6 @@
/*
- * $Id: structs.h,v 1.538.2.15 2008/07/21 20:18:50 hno Exp $
+ * $Id: structs.h,v 1.538.2.16 2008/09/25 02:33:37 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -737,6 +737,7 @@
#endif
acl_access *vary_encoding;
acl_access *auth_ip_shortcircuit;
+ acl_access *upgrade_http09;
} accessList;
acl_deny_info_list *denyInfoList;
struct _authConfig {
--- End Message ---