dgaudet     98/01/14 13:01:09

  Modified:    .        STATUS
               src      CHANGES
               src/main util_script.c
  Log:
  protect environment variable names from having bad things in them
  
  Reviewed by:  Martin Kraemer, Jim Jagielski
  
  Revision  Changes    Path
  1.92      +1 -4      apachen/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /export/home/cvs/apachen/STATUS,v
  retrieving revision 1.91
  retrieving revision 1.92
  diff -u -r1.91 -r1.92
  --- STATUS    1998/01/14 16:41:34     1.91
  +++ STATUS    1998/01/14 21:01:03     1.92
  @@ -81,12 +81,9 @@
       * Dean's [PATCH] make mod_rewrite use ap_cpystrn
       * Martin's [PORT] Make apache compile & run on an EBCDIC mainframe
       * Martin's [PATCH] mod_speling [300] Multiple Choices bug (Take 2)
  +    * Dean's [PATCH] protect the environment
   
   Available Patches:
  -
  -    * Dean's [PATCH] protect the environment
  -     <[EMAIL PROTECTED]>
  -     Status: Dean +1, Martin +1, Jim +1
   
       * Dean's [PATCH] MONCONTROL for profiling children
        <[EMAIL PROTECTED]>
  
  
  
  1.566     +9 -0      apachen/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/CHANGES,v
  retrieving revision 1.565
  retrieving revision 1.566
  diff -u -r1.565 -r1.566
  --- CHANGES   1998/01/13 23:29:10     1.565
  +++ CHANGES   1998/01/14 21:01:06     1.566
  @@ -1,5 +1,14 @@
   Changes with Apache 1.3b4
   
  +  *) For maximum portability, the environment passed to CGIs should
  +     only contain variables whose names match the regex
  +     /[a-zA-Z][a-zA-Z0-9_]*/.  This is now enforced by stamping
  +     underscores over any character outside the regex.  This
  +     affects HTTP_* variables, in a way that should be backward
  +     compatible for all the standard headers; and affects variables
  +     set with SetEnv/BrowserMatch and similar directives.
  +     [Dean Gaudet]
  +
     *) Mod_speling returned incorrect HREF's when an ambigous match
        was found. Noticed by <[EMAIL PROTECTED]> (Soeren Ziehe)
        [EMAIL PROTECTED] (Soeren Ziehe), Martin Kraemer]
  
  
  
  1.91      +19 -4     apachen/src/main/util_script.c
  
  Index: util_script.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/util_script.c,v
  retrieving revision 1.90
  retrieving revision 1.91
  diff -u -r1.90 -r1.91
  --- util_script.c     1998/01/11 20:55:19     1.90
  +++ util_script.c     1998/01/14 21:01:08     1.91
  @@ -129,11 +129,14 @@
       char *res = pstrcat(a, "HTTP_", w, NULL);
       char *cp = res;
   
  -    while (*++cp)
  -     if (*cp == '-')
  +    while (*++cp) {
  +     if (!isalnum(*cp) && *cp != '_') {
            *cp = '_';
  -     else
  +     }
  +     else {
            *cp = toupper(*cp);
  +     }
  +    }
   
       return res;
   }
  @@ -145,6 +148,7 @@
       char **env = (char **) palloc(p, (env_arr->nelts + 2) * sizeof(char *));
       int i, j;
       char *tz;
  +    char *whack;
   
       j = 0;
       tz = getenv("TZ");
  @@ -153,7 +157,18 @@
       for (i = 0; i < env_arr->nelts; ++i) {
        if (!elts[i].key)
            continue;
  -     env[j++] = pstrcat(p, elts[i].key, "=", elts[i].val, NULL);
  +     env[j] = pstrcat(p, elts[i].key, "=", elts[i].val, NULL);
  +     whack = env[j];
  +     if (isdigit(*whack)) {
  +         *whack++ = '_';
  +     }
  +     while (*whack != '=') {
  +         if (!isalnum(*whack) && *whack != '_') {
  +             *whack = '_';
  +         }
  +         ++whack;
  +     }
  +     ++j;
       }
   
       env[j] = NULL;
  
  
  

Reply via email to