coar        99/04/08 13:56:44

  Modified:    src      CHANGES
               src/ap   ap_md5c.c
               src/include ap_md5.h
               src/main http_core.c util_md5.c
               src/support htpasswd.c
  Log:
        Passwords, as user input, may not be 7-bit ASCII -- so we need
        to treat them as unsigned char*'s.  No surprises there; this
        just regularises the usage so we don't get compilation messages.
  
  Revision  Changes    Path
  1.1300    +4 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1299
  retrieving revision 1.1300
  diff -u -r1.1299 -r1.1300
  --- CHANGES   1999/04/08 11:36:37     1.1299
  +++ CHANGES   1999/04/08 20:56:34     1.1300
  @@ -1,4 +1,8 @@
   Changes with Apache 1.3.7
  +  *) Correct the signed/unsigned character handling for the MD5 routines;
  +     mismatches were causing compilation problems with gcc -pedantic and
  +     in the TPF cross-compilation.  [Ken Coar]
  +
     *) OS/2: Rework CGI handling to use spawn*() instead of fork/exec, 
achieving
        a roughly 5 fold speed up. [Brian Havard]
   
  
  
  
  1.25      +35 -25    apache-1.3/src/ap/ap_md5c.c
  
  Index: ap_md5c.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/ap/ap_md5c.c,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- ap_md5c.c 1999/03/25 16:43:21     1.24
  +++ ap_md5c.c 1999/04/08 20:56:38     1.25
  @@ -181,7 +181,7 @@
   
   /* MD5 initialization. Begins an MD5 operation, writing a new context.
    */
  -API_EXPORT(void) ap_MD5Init(AP_MD5_CTX * context)
  +API_EXPORT(void) ap_MD5Init(AP_MD5_CTX *context)
   {
       context->count[0] = context->count[1] = 0;
       /* Load magic initialization constants. */
  @@ -195,8 +195,8 @@
      operation, processing another message block, and updating the
      context.
    */
  -API_EXPORT(void) ap_MD5Update(AP_MD5_CTX * context, const unsigned char 
*input,
  -                        unsigned int inputLen)
  +API_EXPORT(void) ap_MD5Update(AP_MD5_CTX *context, const unsigned char 
*input,
  +                           unsigned int inputLen)
   {
       unsigned int i, idx, partLen;
   
  @@ -204,8 +204,10 @@
       idx = (unsigned int) ((context->count[0] >> 3) & 0x3F);
   
       /* Update number of bits */
  -    if ((context->count[0] += ((UINT4) inputLen << 3)) < ((UINT4) inputLen 
<< 3))
  +    if ((context->count[0] += ((UINT4) inputLen << 3))
  +     < ((UINT4) inputLen << 3)) {
        context->count[1]++;
  +    }
       context->count[1] += (UINT4) inputLen >> 29;
   
       partLen = 64 - idx;
  @@ -216,13 +218,15 @@
        memcpy(&context->buffer[idx], input, partLen);
        MD5Transform(context->state, context->buffer);
   
  -     for (i = partLen; i + 63 < inputLen; i += 64)
  +     for (i = partLen; i + 63 < inputLen; i += 64) {
            MD5Transform(context->state, &input[i]);
  +     }
   
        idx = 0;
       }
  -    else
  +    else {
        i = 0;
  +    }
   
       /* Buffer remaining input */
       memcpy(&context->buffer[idx], &input[i], inputLen - i);
  @@ -239,8 +243,9 @@
   
        idx = 0;
       }
  -    else
  +    else {
        i = 0;
  +    }
   
       /* Buffer remaining input */
       ebcdic2ascii_strictly(&context->buffer[idx], &input[i], inputLen - i);
  @@ -250,7 +255,7 @@
   /* MD5 finalization. Ends an MD5 message-digest operation, writing the
      the message digest and zeroizing the context.
    */
  -API_EXPORT(void) ap_MD5Final(unsigned char digest[16], AP_MD5_CTX * context)
  +API_EXPORT(void) ap_MD5Final(unsigned char digest[16], AP_MD5_CTX *context)
   {
       unsigned char bits[8];
       unsigned int idx, padLen;
  @@ -277,10 +282,10 @@
       /* Pad out to 56 mod 64. */
       idx = (unsigned int) ((context->count[0] >> 3) & 0x3f);
       padLen = (idx < 56) ? (56 - idx) : (120 - idx);
  -    ap_MD5Update(context, PADDING, padLen);
  +    ap_MD5Update(context, (const unsigned char *)PADDING, padLen);
   
       /* Append length (before padding) */
  -    ap_MD5Update(context, bits, 8);
  +    ap_MD5Update(context, (const unsigned char *)bits, 8);
   
       /* Store state in digest */
       Encode(digest, context->state, 16);
  @@ -429,7 +434,8 @@
       }
   }
   
  -API_EXPORT(void) ap_MD5Encode(const char *pw, const char *salt,
  +API_EXPORT(void) ap_MD5Encode(const unsigned char *pw,
  +                           const unsigned char *salt,
                              char *result, size_t nbytes)
   {
       /*
  @@ -439,9 +445,11 @@
        */
   
       char passwd[120], *p;
  -    const char *sp, *ep;
  +    const unsigned char *sp, *ep;
       unsigned char final[16];
  -    int sl, pl, i;
  +    int i;
  +    unsigned int sl, pl;
  +    unsigned int pwlen;
       AP_MD5_CTX ctx, ctx1;
       unsigned long l;
   
  @@ -455,7 +463,7 @@
       /*
        * If it starts with the magic string, then skip that.
        */
  -    if (!strncmp(sp, apr1_id, strlen(apr1_id))) {
  +    if (!strncmp((char *)sp, apr1_id, strlen(apr1_id))) {
        sp += strlen(apr1_id);
       }
   
  @@ -476,15 +484,16 @@
        */
       ap_MD5Init(&ctx);
   
  +    pwlen = strlen((char *)pw);
       /*
        * The password first, since that is what is most unknown
        */
  -    ap_MD5Update(&ctx, pw, strlen(pw));
  +    ap_MD5Update(&ctx, pw, pwlen);
   
       /*
        * Then our magic string
        */
  -    ap_MD5Update(&ctx, apr1_id, strlen(apr1_id));
  +    ap_MD5Update(&ctx, (const unsigned char *)apr1_id, strlen(apr1_id));
   
       /*
        * Then the raw salt
  @@ -495,11 +504,11 @@
        * Then just as many characters of the MD5(pw, salt, pw)
        */
       ap_MD5Init(&ctx1);
  -    ap_MD5Update(&ctx1, pw, strlen(pw));
  +    ap_MD5Update(&ctx1, pw, pwlen);
       ap_MD5Update(&ctx1, sp, sl);
  -    ap_MD5Update(&ctx1, pw, strlen(pw));
  +    ap_MD5Update(&ctx1, pw, pwlen);
       ap_MD5Final(final, &ctx1);
  -    for(pl = strlen(pw); pl > 0; pl -= 16) {
  +    for(pl = pwlen; pl > 0; pl -= 16) {
        ap_MD5Update(&ctx, final, (pl > 16) ? 16 : pl);
       }
   
  @@ -511,7 +520,7 @@
       /*
        * Then something really weird...
        */
  -    for (i = strlen(pw); i != 0; i >>= 1) {
  +    for (i = pwlen; i != 0; i >>= 1) {
        if (i & 1) {
            ap_MD5Update(&ctx, final, 1);
        }
  @@ -525,7 +534,7 @@
        * can use the string routines without bounds checking.
        */
       strcpy(passwd, apr1_id);
  -    strncat(passwd, sp, sl);
  +    strncat(passwd, (char *)sp, sl);
       strcat(passwd, "$");
   
       ap_MD5Final(final, &ctx);
  @@ -538,7 +547,7 @@
       for (i = 0; i < 1000; i++) {
        ap_MD5Init(&ctx1);
        if (i & 1) {
  -         ap_MD5Update(&ctx1, pw, strlen(pw));
  +         ap_MD5Update(&ctx1, pw, pwlen);
        }
        else {
            ap_MD5Update(&ctx1, final, 16);
  @@ -548,14 +557,14 @@
        }
   
        if (i % 7) {
  -         ap_MD5Update(&ctx1, pw, strlen(pw));
  +         ap_MD5Update(&ctx1, pw, pwlen);
        }
   
        if (i & 1) {
            ap_MD5Update(&ctx1, final, 16);
        }
        else {
  -         ap_MD5Update(&ctx1, pw, strlen(pw));
  +         ap_MD5Update(&ctx1, pw, pwlen);
        }
        ap_MD5Final(final,&ctx1);
       }
  @@ -594,7 +603,8 @@
        /*
         * The hash was created using our custom algorithm.
         */
  -     ap_MD5Encode(passwd, hash, sample, sizeof(sample));
  +     ap_MD5Encode((const unsigned char *)passwd,
  +                  (const unsigned char *)hash, sample, sizeof(sample));
       }
       else {
        /*
  
  
  
  1.5       +6 -5      apache-1.3/src/include/ap_md5.h
  
  Index: ap_md5.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_md5.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ap_md5.h  1999/02/03 16:22:31     1.4
  +++ ap_md5.h  1999/04/08 20:56:39     1.5
  @@ -104,11 +104,12 @@
       unsigned char buffer[64];        /* input buffer */
   } AP_MD5_CTX;
   
  -API_EXPORT(void) ap_MD5Init(AP_MD5_CTX * context);
  -API_EXPORT(void) ap_MD5Update(AP_MD5_CTX * context, const unsigned char 
*input,
  -                        unsigned int inputLen);
  -API_EXPORT(void) ap_MD5Final(unsigned char digest[16], AP_MD5_CTX * context);
  -API_EXPORT(void) ap_MD5Encode(const char *password, const char *salt,
  +API_EXPORT(void) ap_MD5Init(AP_MD5_CTX *context);
  +API_EXPORT(void) ap_MD5Update(AP_MD5_CTX *context, const unsigned char 
*input,
  +                           unsigned int inputLen);
  +API_EXPORT(void) ap_MD5Final(unsigned char digest[16], AP_MD5_CTX *context);
  +API_EXPORT(void) ap_MD5Encode(const unsigned char *password,
  +                           const unsigned char *salt,
                              char *result, size_t nbytes);
   API_EXPORT(char *) ap_validate_password(const char *passwd, const char 
*hash);
   
  
  
  
  1.257     +1 -1      apache-1.3/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v
  retrieving revision 1.256
  retrieving revision 1.257
  diff -u -r1.256 -r1.257
  --- http_core.c       1999/03/19 23:54:08     1.256
  +++ http_core.c       1999/04/08 20:56:43     1.257
  @@ -3101,7 +3101,7 @@
            AP_MD5_CTX context;
            
            ap_MD5Init(&context);
  -         ap_MD5Update(&context, (void *)mm, r->finfo.st_size);
  +         ap_MD5Update(&context, (void *)mm, (unsigned int)r->finfo.st_size);
            ap_table_setn(r->headers_out, "Content-MD5",
                          ap_md5contextTo64(r->pool, &context));
        }
  
  
  
  1.18      +3 -3      apache-1.3/src/main/util_md5.c
  
  Index: util_md5.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/util_md5.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- util_md5.c        1999/01/01 19:04:53     1.17
  +++ util_md5.c        1999/04/08 20:56:43     1.18
  @@ -100,7 +100,7 @@
        */
   
       ap_MD5Init(&my_md5);
  -    ap_MD5Update(&my_md5, buf, length);
  +    ap_MD5Update(&my_md5, buf, (unsigned int)length);
       ap_MD5Final(hash, &my_md5);
   
       for (i = 0, r = result; i < 16; i++) {
  @@ -114,7 +114,7 @@
   
   API_EXPORT(char *) ap_md5(pool *p, const unsigned char *string)
   {
  -    return ap_md5_binary(p, string, strlen(string));
  +    return ap_md5_binary(p, string, (int) strlen((char *)string));
   }
   
   /* these portions extracted from mpack, John G. Myers - [EMAIL PROTECTED] */
  @@ -192,7 +192,7 @@
       AP_MD5_CTX context;
       unsigned char buf[1000];
       long length = 0;
  -    int nbytes;
  +    unsigned int nbytes;
   
       ap_MD5Init(&context);
       while ((nbytes = fread(buf, 1, sizeof(buf), infile))) {
  
  
  
  1.25      +2 -1      apache-1.3/src/support/htpasswd.c
  
  Index: htpasswd.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/support/htpasswd.c,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- htpasswd.c        1999/03/19 21:20:48     1.24
  +++ htpasswd.c        1999/04/08 20:56:44     1.25
  @@ -247,7 +247,8 @@
   
       switch (alg) {
       case ALG_APMD5:
  -     ap_MD5Encode(pw, salt, cpw, sizeof(cpw));
  +     ap_MD5Encode((const unsigned char *)pw, (const unsigned char *)salt,
  +                  cpw, sizeof(cpw));
        break;
       case ALG_CRYPT:
        ap_cpystrn(cpw, (char *)crypt(pw, salt), sizeof(cpw) - 1);
  
  
  

Reply via email to