[242] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

Patch for kpasswd, improvement for kdc

daemon@ATHENA.MIT.EDU (Barry Jaspan)
Wed Nov 4 17:52:39 1992

Date: Wed, 4 Nov 92 17:48:02 -0500
From: "Barry Jaspan" <bjaspan@Athena.MIT.EDU>
To: krb5-bugs@Athena.MIT.EDU, kerberos@Athena.MIT.EDU
Cc: yuan@syl.dl.nec.com


Below are two patches.  The first fixes a silly bug in kpasswd that
caused it to report "out of memory" every time it is run on some
machines. The second causes the kdc's AS_REP general handler to
include the client and server principal names in error messages.  The
latter came in useful when I was trying to get kpasswd to work; I
didn't have a "kadmin/REALM" principal and was getting a "server not
found" error, but I had no way to find out *which* server wasn't
defined.

Barry Jaspan

diff -c -r5.1 kpasswd.c
*** 5.1 1992/09/30 14:33:37
--- kpasswd.c   1992/11/04 21:15:33
***************
*** 150,156 ****
        arg = &arg2;
      }
      my_keyblock = (krb5_keyblock *)malloc(sizeof(**key));
!     if (!*key) {
        if (f_salt) xfree(salt.data);
        if (arg != (struct v4_pwd_keyproc_arg *) keyseed) 
                memset((char *) arg->password.data, 0, arg->password.length);
--- 150,156 ----
        arg = &arg2;
      }
      my_keyblock = (krb5_keyblock *)malloc(sizeof(**key));
!     if (!my_keyblock) {
        if (f_salt) xfree(salt.data);
        if (arg != (struct v4_pwd_keyproc_arg *) keyseed) 
                memset((char *) arg->password.data, 0, arg->password.length);

diff -c -r5.32 do_as_req.c
*** 5.32        1992/09/30 14:06:19
--- do_as_req.c 1992/11/04 22:20:52
***************
*** 548,556 ****
      krb5_error errpkt;
      krb5_error_code retval;
      krb5_data *scratch;
  
!     syslog(LOG_INFO, "AS_REQ: %s while processing request",
!          error_message(error+KRB5KDC_ERR_NONE));
  
      errpkt.ctime = request->nonce;
      errpkt.cusec = 0;
--- 548,581 ----
      krb5_error errpkt;
      krb5_error_code retval;
      krb5_data *scratch;
+     char unparse_failed = 0, *cname = 0, *sname = 0;
  
!     if (retval = krb5_unparse_name(request->client, &cname)) {
!        syslog(LOG_INFO, "AS_REQ: %s while unparsing client name for error",
!               error_message(retval));
!        unparse_failed = 1;
!     }
!     if (retval = krb5_unparse_name(request->server, &sname)) {
!        syslog(LOG_INFO, "AS_REQ: %s while unparsing server name for error",
!               error_message(retval));
!        unparse_failed = 2;
!     }
! 
!     if (!unparse_failed)
!        syslog(LOG_INFO, "AS_REQ: %s while processing request from %s for %s",
!               error_message(error+KRB5KDC_ERR_NONE), cname, sname);
!     else
!        syslog(LOG_INFO, "AS_REQ: %s while processing request",
!               error_message(error+KRB5KDC_ERR_NONE));
! 
!     switch (unparse_failed) {
!     case 0:
!        free(sname);
!     case 2:
!        free(cname);
!     case 1:
!        break;
!     }
  
      errpkt.ctime = request->nonce;
      errpkt.cusec = 0;



home help back first fref pref prev next nref lref last post