svn commit: samba r21847 - in branches: SAMBA_3_0/source/libads SAMBA_3_0/source/smbd SAMBA_3_0_25/source/libads SAMBA_3_0_25/source/smbd

jra at samba.org jra at samba.org
Thu Mar 15 21:53:54 GMT 2007


Author: jra
Date: 2007-03-15 21:53:53 +0000 (Thu, 15 Mar 2007)
New Revision: 21847

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

Log:
Fix memory leaks in error paths (and in main code path in one case...)
in sasl bind. Wonder why coverity didn't find these ?
Jeremy.

Modified:
   branches/SAMBA_3_0/source/libads/sasl.c
   branches/SAMBA_3_0/source/smbd/sesssetup.c
   branches/SAMBA_3_0_25/source/libads/sasl.c
   branches/SAMBA_3_0_25/source/smbd/sesssetup.c


Changeset:
Modified: branches/SAMBA_3_0/source/libads/sasl.c
===================================================================
--- branches/SAMBA_3_0/source/libads/sasl.c	2007-03-15 20:45:27 UTC (rev 21846)
+++ branches/SAMBA_3_0/source/libads/sasl.c	2007-03-15 21:53:53 UTC (rev 21847)
@@ -311,9 +311,9 @@
 	int gss_rc, rc;
 	uint8 *p;
 	uint32 max_msg_size = 0;
-	char *sname;
+	char *sname = NULL;
 	ADS_STATUS status;
-	krb5_principal principal;
+	krb5_principal principal = NULL;
 	krb5_context ctx = NULL;
 	krb5_enctype enc_types[] = {
 #ifdef ENCTYPE_ARCFOUR_HMAC
@@ -331,24 +331,32 @@
 	initialize_krb5_error_table();
 	status = ADS_ERROR_KRB5(krb5_init_context(&ctx));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
 		return status;
 	}
 	status = ADS_ERROR_KRB5(krb5_set_default_tgs_ktypes(ctx, enc_types));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
 		return status;
 	}
 	status = ADS_ERROR_KRB5(smb_krb5_parse_name(ctx, sname, &principal));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
 		return status;
 	}
 
-	free(sname);
-	krb5_free_context(ctx);	
-
 	input_name.value = &principal;
 	input_name.length = sizeof(principal);
 
 	gss_rc = gss_import_name(&minor_status, &input_name, &nt_principal, &serv_name);
+
+	/* We've finished with principal and sname now. */
+	SAFE_FREE(sname);
+	krb5_free_principal(ctx, principal);
+	krb5_free_context(ctx);	
+
 	if (gss_rc) {
 		return ADS_ERROR_GSS(gss_rc, minor_status);
 	}

Modified: branches/SAMBA_3_0/source/smbd/sesssetup.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/sesssetup.c	2007-03-15 20:45:27 UTC (rev 21846)
+++ branches/SAMBA_3_0/source/smbd/sesssetup.c	2007-03-15 21:53:53 UTC (rev 21847)
@@ -176,6 +176,7 @@
 
 	*pblob_out = data_blob(NULL,0);
 
+	initialize_krb5_error_table();
 	kerr = krb5_init_context(&context);
 	if (kerr) {
 		return False;

Modified: branches/SAMBA_3_0_25/source/libads/sasl.c
===================================================================
--- branches/SAMBA_3_0_25/source/libads/sasl.c	2007-03-15 20:45:27 UTC (rev 21846)
+++ branches/SAMBA_3_0_25/source/libads/sasl.c	2007-03-15 21:53:53 UTC (rev 21847)
@@ -311,9 +311,9 @@
 	int gss_rc, rc;
 	uint8 *p;
 	uint32 max_msg_size = 0;
-	char *sname;
+	char *sname = NULL;
 	ADS_STATUS status;
-	krb5_principal principal;
+	krb5_principal principal = NULL;
 	krb5_context ctx = NULL;
 	krb5_enctype enc_types[] = {
 #ifdef ENCTYPE_ARCFOUR_HMAC
@@ -331,24 +331,32 @@
 	initialize_krb5_error_table();
 	status = ADS_ERROR_KRB5(krb5_init_context(&ctx));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
 		return status;
 	}
 	status = ADS_ERROR_KRB5(krb5_set_default_tgs_ktypes(ctx, enc_types));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
 		return status;
 	}
 	status = ADS_ERROR_KRB5(smb_krb5_parse_name(ctx, sname, &principal));
 	if (!ADS_ERR_OK(status)) {
+		SAFE_FREE(sname);
+		krb5_free_context(ctx);	
 		return status;
 	}
 
-	free(sname);
-	krb5_free_context(ctx);	
-
 	input_name.value = &principal;
 	input_name.length = sizeof(principal);
 
 	gss_rc = gss_import_name(&minor_status, &input_name, &nt_principal, &serv_name);
+
+	/* We've finished with principal and sname now. */
+	SAFE_FREE(sname);
+	krb5_free_principal(ctx, principal);
+	krb5_free_context(ctx);	
+
 	if (gss_rc) {
 		return ADS_ERROR_GSS(gss_rc, minor_status);
 	}

Modified: branches/SAMBA_3_0_25/source/smbd/sesssetup.c
===================================================================
--- branches/SAMBA_3_0_25/source/smbd/sesssetup.c	2007-03-15 20:45:27 UTC (rev 21846)
+++ branches/SAMBA_3_0_25/source/smbd/sesssetup.c	2007-03-15 21:53:53 UTC (rev 21847)
@@ -176,6 +176,7 @@
 
 	*pblob_out = data_blob(NULL,0);
 
+	initialize_krb5_error_table();
 	kerr = krb5_init_context(&context);
 	if (kerr) {
 		return False;



More information about the samba-cvs mailing list