svn commit: samba r10149 - in branches/SAMBA_4_0/source/heimdal/lib/krb5: .

abartlet at samba.org abartlet at samba.org
Sat Sep 10 22:25:17 GMT 2005


Author: abartlet
Date: 2005-09-10 22:25:13 +0000 (Sat, 10 Sep 2005)
New Revision: 10149

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10149

Log:
Update Samba4 to current lorikeet-heimdal.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c
   branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c


Changeset:
Modified: branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c
===================================================================
--- branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c	2005-09-10 22:13:50 UTC (rev 10148)
+++ branches/SAMBA_4_0/source/heimdal/lib/krb5/principal.c	2005-09-10 22:25:13 UTC (rev 10149)
@@ -91,10 +91,16 @@
     return princ_ncomp(principal, component);
 }
 
-krb5_error_code 
+enum realm_presence {
+	MAY,
+	MUSTNOT,
+	MUST
+};
+
+static krb5_error_code 
 parse_name(krb5_context context,
 	   const char *name,
-	   krb5_boolean short_form,
+	   enum realm_presence realm_presence,
 	   krb5_principal *principal)
 {
     krb5_error_code ret;
@@ -186,7 +192,7 @@
 	*q++ = c;
     }
     if (got_realm) {
-	if (short_form) {
+	if (realm_presence == MUSTNOT) {
 	    krb5_set_error_string (context, "realm found in 'short' principal expected to be without one!");
 	    ret = KRB5_PARSE_MALFORMED;
 	    goto exit;
@@ -201,12 +207,16 @@
 	    realm[q - start] = 0;
 	}
     }else{
-	if (short_form) {
+	if (realm_presence == MAY) {
 	    ret = krb5_get_default_realm (context, &realm);
 	    if (ret)
 	        goto exit;
-	} else {
+	} else if (realm_presence == MUSTNOT) {
 	    realm = NULL;
+	} else if (realm_presence == MUST) {
+	    krb5_set_error_string (context, "realm NOT found in principal expected to be with one!");
+	    ret = KRB5_PARSE_MALFORMED;
+	    goto exit;
 	}
 
 	comp[n] = malloc(q - start + 1);
@@ -245,7 +255,7 @@
 		const char *name,
 		krb5_principal *principal)
 {
-    return parse_name(context, name, FALSE, principal);
+    return parse_name(context, name, MAY, principal);
 }
 
 krb5_error_code KRB5_LIB_FUNCTION
@@ -253,8 +263,16 @@
 			const char *name,
 			krb5_principal *principal)
 {
-    return parse_name(context, name, TRUE, principal);
+    return parse_name(context, name, MUSTNOT, principal);
 }
+
+krb5_error_code KRB5_LIB_FUNCTION
+krb5_parse_name_mustrealm(krb5_context context,
+			  const char *name,
+			  krb5_principal *principal)
+{
+    return parse_name(context, name, MUST, principal);
+}
 static const char quotable_chars[] = " \n\t\b\\/@";
 static const char replace_chars[] = " ntb\\/@";
 

Modified: branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c
===================================================================
--- branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c	2005-09-10 22:13:50 UTC (rev 10148)
+++ branches/SAMBA_4_0/source/heimdal/lib/krb5/rd_req.c	2005-09-10 22:25:13 UTC (rev 10149)
@@ -560,13 +560,16 @@
 			    krb5_keytab keytab,
 			    krb5_flags *ap_req_options,
 			    krb5_ticket **ticket, 
-			    krb5_keyblock **keyblock)
+			    krb5_keyblock **return_keyblock)
 {
     krb5_error_code ret;
     krb5_ap_req ap_req;
+    krb5_keyblock *keyblock = NULL;
     krb5_principal service = NULL;
-    krb5_keyblock *local_keyblock;
 
+    if (return_keyblock)
+	*return_keyblock = NULL;
+
     if (*auth_context == NULL) {
 	ret = krb5_auth_con_init(context, auth_context);
 	if (ret)
@@ -597,13 +600,13 @@
 				  &ap_req,
 				  server,
 				  keytab,
-				  &local_keyblock);
+				  &keyblock);
 	if(ret)
 	    goto out;
     } else {
 	ret = krb5_copy_keyblock(context,
 				 (*auth_context)->keyblock,
-				 &local_keyblock);
+				 &keyblock);
 	if (ret)
 	    goto out;
     }
@@ -612,21 +615,20 @@
 			     auth_context,
 			     &ap_req,
 			     server,
-			     local_keyblock,
+			     keyblock,
 			     0,
 			     ap_req_options,
 			     ticket);
-    if (ret) {
-        krb5_free_keyblock(context, local_keyblock);
-    } else {
-	*keyblock = local_keyblock;
-    }
 
+    if (ret == 0 && return_keyblock)
+	*return_keyblock = keyblock;
+    else
+        krb5_free_keyblock(context, keyblock);
+
 out:
     free_AP_REQ(&ap_req);
     if(service)
 	krb5_free_principal(context, service);
-	    
     return ret;
 }
 
@@ -639,19 +641,14 @@
 	    krb5_flags *ap_req_options,
 	    krb5_ticket **ticket)
 {
-    krb5_error_code ret;
-    krb5_keyblock *keyblock;
+    return krb5_rd_req_return_keyblock(context,
+				       auth_context,
+				       inbuf,
+				       server,
+				       keytab,
+				       ap_req_options,
+				       ticket,
+				       NULL);
 
-    ret = krb5_rd_req_return_keyblock(context,
-				      auth_context,
-				      inbuf,
-				      server,
-				      keytab,
-				      ap_req_options,
-				      ticket,
-				      &keyblock);
-
-    krb5_free_keyblock(context, keyblock);
-    return ret;
 }
 



More information about the samba-cvs mailing list