[krbdev.mit.edu #5551] SVN Commit

Sam Hartman via RT rt-comment at krbdev.mit.edu
Sun Apr 29 17:58:52 EDT 2007


As you will note, this doesn't apply cleanly to the 1.6 branch.
Personally I'd just pull up the difference too as it is improved error
messaging handling.
If you don't want to do that here's a 1.6 patch I'm using for Debian:

----------------------------------------------------------------------
r2783 (orig r2731):  hartmans | 2007-04-28 16:19:23 -0400

  * Fix handling of null realm in krb5_rd_req_decoded; now we treat a null realm as a default realm there.

----------------------------------------------------------------------
=== remote/krb5/branches/experimental/krb5/debian/changelog
==================================================================
--- remote/krb5/branches/experimental/krb5/debian/changelog	(revision 2782)
+++ remote/krb5/branches/experimental/krb5/debian/changelog	(revision 2783)
@@ -4,8 +4,9 @@
   * New Portuguese translation, thanks Miguel Figueiredo , Closes: #409318
   * New Upstream release
       - Update shlibs for new API
+  * Fix handling of null realm in krb5_rd_req_decoded; now we treat a null realm as a default realm there.
 
- -- Sam Hartman <hartmans at debian.org>  Sun, 22 Apr 2007 05:52:49 -0400
+ -- Sam Hartman <hartmans at debian.org>  Sat, 28 Apr 2007 16:21:03 -0400
 
 krb5 (1.6.dfsg-1) experimental; urgency=low
 
=== remote/krb5/branches/experimental/krb5/src/lib/krb5/krb/rd_req_dec.c
==================================================================
--- remote/krb5/branches/experimental/krb5/src/lib/krb5/krb/rd_req_dec.c	(revision 2782)
+++ remote/krb5/branches/experimental/krb5/src/lib/krb5/krb/rd_req_dec.c	(revision 2783)
@@ -91,10 +91,24 @@
 {
     krb5_error_code 	  retval = 0;
     krb5_timestamp 	  currenttime;
+    krb5_principal_data princ_data;
+    
+    req->ticket->enc_part2 == NULL;
+    if (server && krb5_is_referral_realm(&server->realm)) {
+	char *realm;
+	princ_data = *server;
+	server = &princ_data;
+	retval = krb5_get_default_realm(context, &realm);
+	if (retval)
+	    return retval;
+	princ_data.realm.data = realm;
+	princ_data.realm.length = strlen(realm);
+    }
+    if (server && !krb5_principal_compare(context, server, req->ticket->server)) {
+	retval =  KRB5KRB_AP_WRONG_PRINC;
+	goto cleanup;
+    }
 
-    if (server && !krb5_principal_compare(context, server, req->ticket->server))
-	return KRB5KRB_AP_WRONG_PRINC;
-
     /* if (req->ap_options & AP_OPTS_USE_SESSION_KEY)
        do we need special processing here ?	*/
 
@@ -102,12 +116,12 @@
     if ((*auth_context)->keyblock) { /* User to User authentication */
     	if ((retval = krb5_decrypt_tkt_part(context, (*auth_context)->keyblock,
 					    req->ticket)))
-	    return retval;
+goto cleanup;
 	krb5_free_keyblock(context, (*auth_context)->keyblock);
 	(*auth_context)->keyblock = NULL;
     } else {
     	if ((retval = krb5_rd_req_decrypt_tkt_part(context, req, keytab)))
-	    return retval;
+	    goto cleanup;
     }
 
     /* XXX this is an evil hack.  check_valid_flag is set iff the call
@@ -327,10 +341,13 @@
     retval = 0;
     
 cleanup:
+    if (server == &princ_data)
+	krb5_free_default_realm(context, princ_data.realm.data);
     if (retval) {
 	/* only free if we're erroring out...otherwise some
 	   applications will need the output. */
-        krb5_free_enc_tkt_part(context, req->ticket->enc_part2);
+	if (req->ticket->enc_part2)
+	    krb5_free_enc_tkt_part(context, req->ticket->enc_part2);
 	req->ticket->enc_part2 = NULL;
     }
     return retval;





More information about the krb5-bugs mailing list