krb5 commit: Fix S4U user identification in preauth case

Greg Hudson ghudson at MIT.EDU
Thu May 24 13:07:20 EDT 2012


https://github.com/krb5/krb5/commit/33a64a7f9dc7342880f7a477a8b3447891d20af5
commit 33a64a7f9dc7342880f7a477a8b3447891d20af5
Author: Greg Hudson <ghudson at mit.edu>
Date:   Thu May 24 13:03:26 2012 -0400

    Fix S4U user identification in preauth case
    
    In 1.10, encrypted timestamp became a built-in module instead of a
    hardcoded padata handler.  This changed the behavior of
    krb5_get_init_creds as invoked by s4u_identify_user such that
    KRB5_PREAUTH_FAILED is returned instead of the gak function's error.
    (Module failures are not treated as hard errors, while hardcoded
    padata handler errors are.)  Accordingly, we should look for
    KRB5_PREAUTH_FAILED in s4u_identify_user.
    
    On a less harmful note, the gak function was returning a protocol
    error code instead of a com_err code, and the caller was testing for a
    different protocol error code (KDC_ERR_PREAUTH_REQUIRED) which could
    never be returned by krb5_get_init_creds.  Clean up both of those by
    returning KRB5_PREAUTH_FAILED from the gak function and testing for
    that alone.
    
    Reported by Michael Morony.
    
    ticket: 7136
    target_version: 1.10.2
    tags: pullup

 src/lib/krb5/krb/s4u_creds.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/lib/krb5/krb/s4u_creds.c b/src/lib/krb5/krb/s4u_creds.c
index e4cc8a1..6a1bcc3 100644
--- a/src/lib/krb5/krb/s4u_creds.c
+++ b/src/lib/krb5/krb/s4u_creds.c
@@ -48,7 +48,7 @@ krb5_get_as_key_noop(
     void *gak_data)
 {
     /* force a hard error, we don't actually have the key */
-    return KDC_ERR_PREAUTH_FAILED;
+    return KRB5_PREAUTH_FAILED;
 }
 
 static krb5_error_code
@@ -118,9 +118,7 @@ s4u_identify_user(krb5_context context,
                                   NULL, NULL, 0, NULL, opts,
                                   krb5_get_as_key_noop, &userid,
                                   &use_master, NULL);
-    if (code == 0 ||
-        code == KDC_ERR_PREAUTH_REQUIRED ||
-        code == KDC_ERR_PREAUTH_FAILED) {
+    if (code == 0 || code == KRB5_PREAUTH_FAILED) {
         *canon_user = userid.user;
         userid.user = NULL;
         code = 0;


More information about the cvs-krb5 mailing list