You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by br...@hyperreal.org on 1998/05/21 06:11:28 UTC
cvs commit: apache-1.3/src/main http_protocol.c
brian 98/05/20 21:11:28
Modified: . STATUS
src CHANGES
src/main http_protocol.c
Log:
Ed Korthof's fixes for 408 and 414 protocol issues.
<Pi...@aether.organic.com>
Revision Changes Path
1.404 +17 -4 apache-1.3/STATUS
Index: STATUS
===================================================================
RCS file: /export/home/cvs/apache-1.3/STATUS,v
retrieving revision 1.403
retrieving revision 1.404
diff -u -r1.403 -r1.404
--- STATUS 1998/05/20 01:58:25 1.403
+++ STATUS 1998/05/21 04:11:18 1.404
@@ -37,10 +37,6 @@
Available Patches:
- * Ed Korthof's patch to fix protocol issues surrounding 400, 408, and
- 414 responses.
- <Pi...@aether.organic.com>
-
* Wilfredo Sanchez's port to Rhapsody 5.1 for 1.2.6 - forward port to
1.3?
<19...@scv2.apple.com>
@@ -316,6 +312,9 @@
execuables, usually after a very long pause. Ought
to stuff .conf in the registry mapping it to text.
+ * apparently either "BrowserMatch" or the "nokeepalive" variable
+ cause instability - see PR#1729.
+
Delayed until after 1.3.0, unless someone happens to get to it:
* Arnt Gulbrandsen <ag...@troll.no> 03 Apr 1998 21:28:17 +0200
@@ -371,4 +370,18 @@
use the new child_info structure, is this still safe? Needs to be
looked at.
+ * suexec doesn't understand argv parameters; e.g.
+
+ <!--#exec cmd="./ls -l" -->
+
+ fails even when "ls" is in the same directory because suexec is trying
+ to stat a file called "ls -l". A patch for this is available at
+
+ http://www.xnet.com/~emarshal/suexec.diff
+ and it's not bad except that it doesn't handle programs with spaces in
+ the filename (think win32, or samba-mounted filesystems). There are
+ several PR's to this and I don't see for security reasons why we can't
+ accomodate it, though it does add complexity to suexec.c.
+ PR #1120
+ Brian: +1
1.858 +3 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.857
retrieving revision 1.858
diff -u -r1.857 -r1.858
--- CHANGES 1998/05/21 04:07:11 1.857
+++ CHANGES 1998/05/21 04:11:23 1.858
@@ -1,5 +1,8 @@
Changes with Apache 1.3b7
+ *) A fix for protocol issues surrounding 400, 408, and
+ 414 responses. [Ed Korthof]
+
*) Ignore MaxRequestsPerChild on WIN32. [Brian Behlendorf]
*) Fix discrepancy in proxy_ftp.c which was causing failures when
1.214 +40 -5 apache-1.3/src/main/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.213
retrieving revision 1.214
diff -u -r1.213 -r1.214
--- http_protocol.c 1998/05/07 01:21:22 1.213
+++ http_protocol.c 1998/05/21 04:11:27 1.214
@@ -661,7 +661,11 @@
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r->server,
"request failed for %s, reason: URI too long",
ap_get_remote_host(r->connection, r->per_dir_config, REMOTE_NAME));
- r->status = HTTP_REQUEST_URI_TOO_LARGE;
+ /* hack to deal with the HTTP_REQUEST_TIME_OUT setting up above: */
+ if (r->status == HTTP_REQUEST_TIME_OUT)
+ r->status = HTTP_OK;
+ r->request_time = time(NULL);
+ ap_die (HTTP_REQUEST_URI_TOO_LARGE, r);
return 0;
}
@@ -720,16 +724,33 @@
while ((len = getline(field, MAX_STRING_LEN, c->client, 1)) > 0) {
char *copy = ap_palloc(r->pool, len + 1);
memcpy(copy, field, len + 1);
+
+ if (!(value = strchr(copy, ':'))) { /* Find the colon separator */
+ /* if there's none, this request is screwed up.
+ * a hack to deal with how we set HTTP_REQUEST_TIME_OUT earlier.*/
+ if (r->status == HTTP_REQUEST_TIME_OUT)
+ r->status = HTTP_OK;
+
+ ap_die (HTTP_BAD_REQUEST, r);
+ return;
+ }
- if (!(value = strchr(copy, ':'))) /* Find the colon separator */
- continue; /* or should puke 400 here */
-
*value = '\0';
++value;
while (isspace(*value))
++value; /* Skip to start of value */
ap_table_mergen(r->headers_in, copy, value);
+
+ /* the header was too long; at the least we should skip extra data */
+ if (len >= MAX_STRING_LEN - 1) {
+ char junk[MAX_STRING_LEN];
+ while ((len = getline(junk, MAX_STRING_LEN, c->client, 1))
+ >= MAX_STRING_LEN - 1) /* soak up the extra data */
+ ;
+ if (len == 0) /* time to exit the larger loop as well */
+ break;
+ }
}
}
@@ -767,6 +788,7 @@
r->read_body = REQUEST_NO_BODY;
r->status = HTTP_REQUEST_TIME_OUT; /* Until we get a request */
+ r->the_request = NULL;
/* Get the request... */
@@ -776,11 +798,22 @@
ap_keepalive_timeout("read request line", r);
if (!read_request_line(r)) {
ap_kill_timeout(r);
+ if (r->status != HTTP_REQUEST_TIME_OUT) /* we must have had an error.*/
+ ap_log_transaction(r);
return NULL;
}
if (!r->assbackwards) {
ap_hard_timeout("read request headers", r);
get_mime_headers(r);
+ if (r->status != HTTP_REQUEST_TIME_OUT) {/* we must have had an error.*/
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r->server,
+ "request failed for %s: error reading the headers",
+ ap_get_remote_host(r->connection, r->per_dir_config,
+ REMOTE_NAME));
+ ap_log_transaction(r);
+ return NULL;
+ }
+
}
ap_kill_timeout(r);
@@ -798,6 +831,8 @@
if ((access_status = ap_run_post_read_request(r))) {
ap_die(access_status, r);
+ ap_log_transaction(r);
+
return NULL;
}
@@ -1985,7 +2020,7 @@
* redirect URL. We don't really want to output this URL
* as a text message, so first check the custom response
* string to ensure that it is a text-string (using the
- * same test used in die(), i.e. does it start with a ").
+ * same test used in ap_die(), i.e. does it start with a ").
* If it doesn't, we've got a recursive error, so find
* the original error and output that as well.
*/
Re: cvs commit: apache-1.3/src/main http_protocol.c
Posted by Dean Gaudet <dg...@arctic.org>.
On 21 May 1998 brian@hyperreal.org wrote:
> brian 98/05/20 21:11:28
>
> Modified: . STATUS
> src CHANGES
> src/main http_protocol.c
> Log:
> Ed Korthof's fixes for 408 and 414 protocol issues.
> <Pi...@aether.organic.com>
>
...
> + r->request_time = time(NULL);
> + ap_die (HTTP_REQUEST_URI_TOO_LARGE, r);
> return 0;
> }
>
> @@ -720,16 +724,33 @@
> while ((len = getline(field, MAX_STRING_LEN, c->client, 1)) > 0) {
> char *copy = ap_palloc(r->pool, len + 1);
> memcpy(copy, field, len + 1);
> +
> + if (!(value = strchr(copy, ':'))) { /* Find the colon separator */
> + /* if there's none, this request is screwed up.
> + * a hack to deal with how we set HTTP_REQUEST_TIME_OUT earlier.*/
> + if (r->status == HTTP_REQUEST_TIME_OUT)
> + r->status = HTTP_OK;
> +
> + ap_die (HTTP_BAD_REQUEST, r);
> + return;
> + }
This patch definately does not fit within the apache style guide.
Dean