svn commit: samba r12056 - in branches/SAMBA_4_0/source/auth/kerberos: .

abartlet at samba.org abartlet at samba.org
Sun Dec 4 12:17:02 GMT 2005


Author: abartlet
Date: 2005-12-04 12:17:02 +0000 (Sun, 04 Dec 2005)
New Revision: 12056

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

Log:
Some clarification fixes for the keytab code, and use the right
function for enctype to string.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/auth/kerberos/kerberos_util.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/kerberos/kerberos_util.c
===================================================================
--- branches/SAMBA_4_0/source/auth/kerberos/kerberos_util.c	2005-12-03 20:28:18 UTC (rev 12055)
+++ branches/SAMBA_4_0/source/auth/kerberos/kerberos_util.c	2005-12-04 12:17:02 UTC (rev 12056)
@@ -50,7 +50,7 @@
 	char *machine_username;
 	char *salt_body;
 	char *lower_realm;
-	char *salt_principal;
+	const char *salt_principal;
 	struct principal_container *mem_ctx = talloc(parent_ctx, struct principal_container);
 	if (!mem_ctx) {
 		return ENOMEM;
@@ -249,7 +249,7 @@
 	int i;
 	krb5_error_code ret;
 	krb5_enctype *enctypes;
-	char *enctype_string = NULL;
+	char *enctype_string;
 	struct enctypes_container *etc;
 	krb5_data password;
 	TALLOC_CTX *mem_ctx = talloc_new(parent_ctx);
@@ -283,7 +283,7 @@
 		krb5_keytab_entry entry;
 		ret = create_kerberos_key_from_string(smb_krb5_context->krb5_context, 
 						      salt_princ, &password, &entry.keyblock, enctypes[i]);
-		if (ret) {
+		if (ret != 0) {
 			talloc_free(mem_ctx);
 			return ret;
 		}
@@ -291,19 +291,21 @@
                 entry.principal = princ;
                 entry.vno       = kvno;
 		ret = krb5_kt_add_entry(smb_krb5_context->krb5_context, keytab, &entry);
+		enctype_string = NULL;
+		krb5_enctype_to_string(smb_krb5_context->krb5_context, enctypes[i], &enctype_string);
 		if (ret != 0) {
-			DEBUG(1, ("Failed to add entry for %s(kvno %d) to keytab: %s",
+			DEBUG(1, ("Failed to add %s entry for %s(kvno %d) to keytab: %s\n",
+				  enctype_string,
 				  princ_string,
 				  kvno,
 				  smb_get_krb5_error_message(smb_krb5_context->krb5_context, 
 							     ret, mem_ctx)));
 			talloc_free(mem_ctx);
+			free(enctype_string);		
 			krb5_free_keyblock_contents(smb_krb5_context->krb5_context, &entry.keyblock);
 			return ret;
 		}
 
-		enctype_string = NULL;
-		krb5_keytype_to_string(smb_krb5_context->krb5_context, enctypes[i], &enctype_string);
 		DEBUG(5, ("Added %s(kvno %d) to keytab (%s)\n", 
 			  princ_string, kvno,
 			  enctype_string));
@@ -318,7 +320,7 @@
 static int create_keytab(TALLOC_CTX *parent_ctx,
 			 struct cli_credentials *machine_account,
 			 struct smb_krb5_context *smb_krb5_context,
-			 struct keytab_container *keytab_container,
+			 krb5_keytab keytab,
 			 BOOL add_old) 
 {
 	krb5_error_code ret;
@@ -328,7 +330,6 @@
 	int kvno;
 	krb5_principal salt_princ;
 	krb5_principal princ;
-	krb5_keytab keytab;
 	const char *princ_string;
 
 	TALLOC_CTX *mem_ctx = talloc_new(parent_ctx);
@@ -336,8 +337,6 @@
 		return ENOMEM;
 	}
 
-	keytab = keytab_container->keytab;
-	
 	princ_string = cli_credentials_get_principal(machine_account, mem_ctx);
 	/* Get the principal we will store the new keytab entries under */
 	ret = principal_from_credentials(mem_ctx, machine_account, smb_krb5_context, &princ);
@@ -400,7 +399,7 @@
 			return ret;
 		}
 		
-		krb5_keytype_to_string(smb_krb5_context->krb5_context, ENCTYPE_ARCFOUR_HMAC, &enctype_string);
+		krb5_enctype_to_string(smb_krb5_context->krb5_context, ENCTYPE_ARCFOUR_HMAC, &enctype_string);
 		DEBUG(5, ("Added %s(kvno %d) to keytab (%s)\n", 
 			  cli_credentials_get_principal(machine_account, mem_ctx),
 			  cli_credentials_get_kvno(machine_account),
@@ -417,7 +416,7 @@
 	kvno = cli_credentials_get_kvno(machine_account);
 	/* good, we actually have the real plaintext */
 	ret = keytab_add_keys(mem_ctx, princ_string, princ, salt_princ, 
-		       kvno, password_s, smb_krb5_context, keytab);
+			      kvno, password_s, smb_krb5_context, keytab);
 	if (!ret) {
 		talloc_free(mem_ctx);
 		return ret;
@@ -599,7 +598,7 @@
 	 * Otherwise, add kvno, and kvno -1 */
 	
 	ret = create_keytab(mem_ctx, machine_account, smb_krb5_context, 
-			    keytab_container, 
+			    keytab_container->keytab, 
 			    found_previous ? False : True);
 	talloc_free(mem_ctx);
 	return ret;
@@ -639,7 +638,9 @@
 	ret = update_keytab(mem_ctx, machine_account, smb_krb5_context, *keytab_container);
 	if (ret == 0) {
 		talloc_steal(parent_ctx, *keytab_container);
-	} 
+	} else {
+		*keytab_container = NULL;
+	}
 	talloc_free(mem_ctx);
 	return ret;
 }



More information about the samba-cvs mailing list