[krbdev.mit.edu #3142] kinit fails when password-change required attribute is set
Public Submitter via RT
rt-comment at krbdev.mit.edu
Mon Aug 8 09:54:46 EDT 2005
When kinit is used to obtain an initial ticket, if the passwd change
required attribute is set (pwchg attribute in case of HP-UX kerberos
servers) for the principal, kinit fails with 'Realm unknown' error
instead of asking for a new password.
I have attached the fix below.
Source files changed:
/vob/krb5-1.3.3/src/lib/krb5/krb/gic_pwd.c
Source file changed
***************
*** /vob/krb5-1.3.3/src/lib/krb5/krb/gic_pwd.c
--- /vob/krb5-1.3.3/src/lib/krb5/krb/gic_pwd.c.fix
*** 131,143 ****
if (ret == 0)
goto cleanup;
/* If all the kdc's are unavailable, or if the error was due to a
user interrupt, or preauth errored out, fail */
if ((ret == KRB5_KDC_UNREACH) ||
(ret == KRB5_PREAUTH_FAILED) ||
! (ret == KRB5_LIBOS_PWDINTR) ||
! (ret == KRB5_REALM_CANT_RESOLVE))
goto cleanup;
/* if the reply did not come from the master kdc, try again with
--- 131,147 ----
if (ret == 0)
goto cleanup;
+ /* If it's passwd change */
+ if (ret == KRB5KDC_ERR_KEY_EXP)
+ goto passwd_chg;
+
/* If all the kdc's are unavailable, or if the error was due to a
user interrupt, or preauth errored out, fail */
if ((ret == KRB5_KDC_UNREACH) ||
(ret == KRB5_PREAUTH_FAILED) ||
! (ret == KRB5_LIBOS_PWDINTR) /*||
! (ret == KRB5_REALM_CANT_RESOLVE)*/)
goto cleanup;
/* if the reply did not come from the master kdc, try again with
***************
*** 163,174 ****
/* if the master is unreachable, return the error from the
slave we were able to contact */
if ((ret2 == KRB5_KDC_UNREACH) ||
(ret2 == KRB5_REALM_CANT_RESOLVE) ||
! (ret2 == KRB5_REALM_UNKNOWN))
! goto cleanup;
- ret = ret2;
}
#ifdef USE_LOGIN_LIBRARY
--- 167,180 ----
/* if the master is unreachable, return the error from the
slave we were able to contact */
+ ret = ret2;
+
if ((ret2 == KRB5_KDC_UNREACH) ||
(ret2 == KRB5_REALM_CANT_RESOLVE) ||
! (ret2 == KRB5_REALM_UNKNOWN)) {
! goto cleanup;
! }
}
#ifdef USE_LOGIN_LIBRARY
***************
*** 179,185 ****
/* at this point, we have an error from the master. if the error
is not password expired, or if it is but there's no prompter,
return this error */
!
if ((ret != KRB5KDC_ERR_KEY_EXP) ||
(prompter == NULL))
goto cleanup;
--- 185,191 ----
/* at this point, we have an error from the master. if the error
is not password expired, or if it is but there's no prompter,
return this error */
! passwd_chg:
if ((ret != KRB5KDC_ERR_KEY_EXP) ||
(prompter == NULL))
goto cleanup;
More information about the krb5-bugs
mailing list