You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Peter Huang <pe...@hp.com> on 1999/09/03 18:20:33 UTC

mod_digest/4957: mod_auth_digest failed with incorrect nonce value

>Number:         4957
>Category:       mod_digest
>Synopsis:       mod_auth_digest failed with incorrect nonce value
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    apache
>State:          open
>Class:          sw-bug
>Submitter-Id:   apache
>Arrival-Date:   Fri Sep  3 09:30:00 PDT 1999
>Last-Modified:
>Originator:     peter_huang@hp.com
>Organization:
apache
>Release:        1.3.9
>Environment:
HP-UX 10.20 (HP-UX hpial41 B.10.20 C 9000/712 2013012526 32-user license)
HP-UX 11.00
>Description:
check_nonce code in mod_auth_digest code does not work correctly in HP-UX CC compiler where the strcmp(hash, resp->nonce+NONCE_TIME_LEN) always failed.
I modified the mod_auth_digest code to extract the hash from resp->nonce and it works for HP-UX 10.20 and HPUX 11.0.  the diff is below.
>How-To-Repeat:

>Fix:
the attached code should fix it.


*** mod_auth_digest.c.org	Fri Sep  3 09:04:19 1999
--- mod_auth_digest.c	Fri Sep  3 09:05:45 1999
***************
*** 1332,1338 ****
  {
      double dt;
      time_rec nonce_time;
!     char tmp, hash[NONCE_HASH_LEN+1];
  
      if (strlen(resp->nonce) != NONCE_LEN) {
  	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
--- 1332,1338 ----
  {
      double dt;
      time_rec nonce_time;
!     char tmp, r_hash[NONCE_HASH_LEN+1], hash[NONCE_HASH_LEN+1];
  
      if (strlen(resp->nonce) != NONCE_LEN) {
  	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
***************
*** 1342,1347 ****
--- 1342,1351 ----
  	return AUTH_REQUIRED;
      }
  
+     	/*extract the nonce hash code for later use*/
+ 	memset(r_hash, '\0', NONCE_HASH_LEN+1);
+ 	strncpy(r_hash, &resp->nonce[NONCE_TIME_LEN], strlen(resp->nonce)-NONCE_TIME_LEN);
+ 	
      tmp = resp->nonce[NONCE_TIME_LEN];
      resp->nonce[NONCE_TIME_LEN] = '\0';
      ap_base64decode_binary(nonce_time.arr, resp->nonce);
***************
*** 1349,1358 ****
      resp->nonce[NONCE_TIME_LEN] = tmp;
      resp->nonce_time = nonce_time.time;
  
!     if (strcmp(hash, resp->nonce+NONCE_TIME_LEN)) {
  	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
  		      "Digest: invalid nonce %s received - hash is not %s",
! 		      resp->nonce, hash);
  	note_digest_auth_failure(r, conf, resp, 1);
  	return AUTH_REQUIRED;
      }
--- 1353,1362 ----
      resp->nonce[NONCE_TIME_LEN] = tmp;
      resp->nonce_time = nonce_time.time;
  
!     if (strcmp(hash, r_hash)) {
  	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
  		      "Digest: invalid nonce %s received - hash is not %s",
! 		      r_hash, hash);
  	note_digest_auth_failure(r, conf, resp, 1);
  	return AUTH_REQUIRED;
      }
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, you need]
[to include <ap...@Apache.Org> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or      ]
["Re: general/1098:").  If the subject doesn't match this       ]
[pattern, your message will be misfiled and ignored.  The       ]
["apbugs" address is not added to the Cc line of messages from  ]
[the database automatically because of the potential for mail   ]
[loops.  If you do not include this Cc, your reply may be ig-   ]
[nored unless you are responding to an explicit request from a  ]
[developer.  Reply only with text; DO NOT SEND ATTACHMENTS!     ]