httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From c...@hyperreal.org
Subject cvs commit: apache-1.3/src/main gen_test_char.c http_protocol.c util.c
Date Wed, 27 Jan 1999 12:16:04 GMT
coar        99/01/27 04:16:04

  Modified:    src      CHANGES
               src/include ap_mmn.h httpd.h
               src/main gen_test_char.c http_protocol.c util.c
  Log:
  	ETags aren't normal tokens by the RFC 2068 definition; they
  	explicitly contain quoted strings and can include stuff *outside*
  	the quotes as well ('W/' for a weak ETag).  So add a new function
  	that treats *everything* except ',' and ' ' (and not even those,
  	if they're in a quoted string) as part of the token, and fix the
  	ETag checks to use it.
  
  PR:		2065, 3657
  
  Revision  Changes    Path
  1.1224    +3 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1223
  retrieving revision 1.1224
  diff -u -r1.1223 -r1.1224
  --- CHANGES	1999/01/25 22:55:33	1.1223
  +++ CHANGES	1999/01/27 12:15:58	1.1224
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3.5
   
  +  *) Fix checking of ETags and other opaque 'tokens' by adding
  +     ap_find_opaque_token().  PR#2065, 3657 [Ken Coar]
  +
     *) Add ability to handle DES or MD5 authentication passwords.
        [Ryan Bloom <rbb@Raleigh.IBM.Com>]
   
  
  
  
  1.23      +3 -1      apache-1.3/src/include/ap_mmn.h
  
  Index: ap_mmn.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- ap_mmn.h	1999/01/09 00:21:33	1.22
  +++ ap_mmn.h	1999/01/27 12:16:00	1.23
  @@ -203,6 +203,8 @@
    *                        scan_script_header -> ap_scan_script_header_err
    *                      - reordered entries in request_rec that were waiting
    *                        for a non-binary-compatible release.
  + * 19990108-1           - add ap_find_opaque_token() for things like ETags
  + *   (1.3.5-dev)          which can contain opaque quoted strings
    */
   
   #define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */
  @@ -210,7 +212,7 @@
   #ifndef MODULE_MAGIC_NUMBER_MAJOR
   #define MODULE_MAGIC_NUMBER_MAJOR 19990108
   #endif
  -#define MODULE_MAGIC_NUMBER_MINOR 0                     /* 0...n */
  +#define MODULE_MAGIC_NUMBER_MINOR 1                     /* 0...n */
   #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR	/* backward compat */
   
   /* Useful for testing for features. */
  
  
  
  1.265     +2 -0      apache-1.3/src/include/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/httpd.h,v
  retrieving revision 1.264
  retrieving revision 1.265
  diff -u -r1.264 -r1.265
  --- httpd.h	1999/01/10 07:48:59	1.264
  +++ httpd.h	1999/01/27 12:16:00	1.265
  @@ -936,6 +936,8 @@
   
   API_EXPORT(char *) ap_get_token(pool *p, const char **accept_line, int accept_white);
   API_EXPORT(int) ap_find_token(pool *p, const char *line, const char *tok);
  +API_EXPORT(int) ap_find_opaque_token(pool *p, const char *line,
  +				     const char *tok);
   API_EXPORT(int) ap_find_last_token(pool *p, const char *line, const char *tok);
   
   API_EXPORT(int) ap_is_url(const char *u);
  
  
  
  1.5       +9 -1      apache-1.3/src/main/gen_test_char.c
  
  Index: gen_test_char.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/gen_test_char.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- gen_test_char.c	1998/07/08 17:47:05	1.4
  +++ gen_test_char.c	1999/01/27 12:16:01	1.5
  @@ -8,6 +8,7 @@
   #define T_ESCAPE_PATH_SEGMENT	(0x02)
   #define T_OS_ESCAPE_PATH	(0x04)
   #define T_HTTP_TOKEN_STOP	(0x08)
  +#define T_HTTP_OPAQUETOKEN_STOP	(0x10)
   
   int main(int argc, char *argv[])
   {
  @@ -20,13 +21,15 @@
   "#define T_ESCAPE_PATH_SEGMENT	(%u)\n"
   "#define T_OS_ESCAPE_PATH	(%u)\n"
   "#define T_HTTP_TOKEN_STOP	(%u)\n"
  +"#define T_HTTP_OPAQUETOKEN_STOP	(%u)\n"
   "\n"
   "static const unsigned char test_char_table[256] = {\n"
   "    0,",
   	T_ESCAPE_SHELL_CMD,
   	T_ESCAPE_PATH_SEGMENT,
   	T_OS_ESCAPE_PATH,
  -	T_HTTP_TOKEN_STOP);
  +	T_HTTP_TOKEN_STOP,
  +	T_HTTP_OPAQUETOKEN_STOP);
   
       /* we explicitly dealt with NUL above
        * in case some strchr() do bogosity with it */
  @@ -52,6 +55,11 @@
   	/* these are the "tspecials" from RFC2068 */
   	if (ap_iscntrl(c) || strchr(" \t()<>@,;:\\/[]?={}", c)) {
   	    flags |= T_HTTP_TOKEN_STOP;
  +	}
  +
  +	/* some tokens (like etags) are opaque strings; stop at the end */
  +	if (ap_iscntrl(c) || strchr(" ,", c)) {
  +	    flags |= T_HTTP_OPAQUETOKEN_STOP;
   	}
   	printf("%u%c", flags, (c < 255) ? ',' : ' ');
   
  
  
  
  1.254     +4 -2      apache-1.3/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v
  retrieving revision 1.253
  retrieving revision 1.254
  diff -u -r1.253 -r1.254
  --- http_protocol.c	1999/01/08 17:54:41	1.253
  +++ http_protocol.c	1999/01/27 12:16:01	1.254
  @@ -404,7 +404,8 @@
        */
       if ((if_match = ap_table_get(r->headers_in, "If-Match")) != NULL) {
           if ((etag == NULL) ||
  -            ((if_match[0] != '*') && !ap_find_token(r->pool, if_match, etag)))
{
  +            ((if_match[0] != '*')
  +	     && !ap_find_opaque_token(r->pool, if_match, etag))) {
               return HTTP_PRECONDITION_FAILED;
           }
       }
  @@ -437,7 +438,8 @@
           int rstatus;
   
           if ((if_nonematch[0] == '*')
  -            || ((etag != NULL) && ap_find_token(r->pool, if_nonematch, etag)))
{
  +            || ((etag != NULL)
  +		&& ap_find_opaque_token(r->pool, if_nonematch, etag))) {
               rstatus = (r->method_number == M_GET) ? HTTP_NOT_MODIFIED
                                                     : HTTP_PRECONDITION_FAILED;
               return rstatus;
  
  
  
  1.147     +61 -0     apache-1.3/src/main/util.c
  
  Index: util.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/util.c,v
  retrieving revision 1.146
  retrieving revision 1.147
  diff -u -r1.146 -r1.147
  --- util.c	1999/01/21 19:17:09	1.146
  +++ util.c	1999/01/27 12:16:02	1.147
  @@ -1057,6 +1057,67 @@
       }
   }
   
  +/*
  + * Find opaque HTTP tokens, which have no internal semantics and end
  + * at the first unquoted ',' or ' '.
  + */
  +API_EXPORT(int) ap_find_opaque_token(pool *p, const char *line,
  +				     const char *tok)
  +{
  +    const unsigned char *start_token;
  +    const unsigned char *s;
  +    char stop_quote = '\0';
  +
  +    if (!line) {
  +	return 0;
  +    }
  +
  +    s = (const unsigned char *)line;
  +    for (;;) {
  +	/* 
  +	 * Find start of token, skip all stop characters, note NUL
  +	 * isn't a token stop, so we don't need to test for it
  +	 */
  +	while (TEST_CHAR(*s, T_HTTP_OPAQUETOKEN_STOP)) {
  +	    ++s;
  +	}
  +	if (!*s) {
  +	    return 0;
  +	}
  +	start_token = s;
  +	/* 
  +	 * Find end of the token 
  +	 */
  +	while (*s) {
  +	    /*
  +	     * If we see the beginning of a quoted string ("foo" or <foo>),
  +	     * mark the end character so we know when to stop skipping.
  +	     */
  +	    if (!stop_quote && ((*s == '"') || (*s == '<'))) {
  +		stop_quote = (*s == '"') ? '"' : '>';
  +	    }
  +	    else if (*s == stop_quote) {
  +		stop_quote = '\0';
  +	    }
  +	    /*
  +	     * If we're not inside a quoted string, check to see if we're
  +	     * at the end of the token.
  +	     */
  +	    else if (!stop_quote && TEST_CHAR(*s, T_HTTP_OPAQUETOKEN_STOP)) {
  +		break;
  +	    }
  +	    ++s;
  +	}
  +	if (!strncmp((const char *)start_token, (const char *)tok,
  +		     s - start_token)) {
  +	    return 1;
  +	}
  +	if (!*s) {
  +	    return 0;
  +	}
  +    }
  +}
  +
   
   API_EXPORT(int) ap_find_last_token(pool *p, const char *line, const char *tok)
   {
  
  
  

Mime
View raw message