svn commit: samba r18198 - in branches/SAMBA_4_0/source/auth/gensec: .

abartlet at samba.org abartlet at samba.org
Thu Sep 7 03:24:08 GMT 2006


Author: abartlet
Date: 2006-09-07 03:24:08 +0000 (Thu, 07 Sep 2006)
New Revision: 18198

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

Log:
Fix callbacks to use allocated or constant memory, not the stack.
These values are used by SASL at a later time, and must remain valid.

Make the password callback actually return the password.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/auth/gensec/cyrus_sasl.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/gensec/cyrus_sasl.c
===================================================================
--- branches/SAMBA_4_0/source/auth/gensec/cyrus_sasl.c	2006-09-07 02:15:31 UTC (rev 18197)
+++ branches/SAMBA_4_0/source/auth/gensec/cyrus_sasl.c	2006-09-07 03:24:08 UTC (rev 18198)
@@ -101,6 +101,7 @@
 	}
 	secret->len = strlen(password);
 	safe_strcpy(secret->data, password, secret->len+1);
+	*psecret = secret;
 	return SASL_OK;
 }
 
@@ -119,9 +120,16 @@
 	struct socket_address *remote_socket_addr = gensec_get_peer_addr(gensec_security);
 	char *local_addr = NULL;
 	char *remote_addr = NULL;
-	sasl_callback_t callbacks[5];
 	int sasl_ret;
 
+	sasl_callback_t *callbacks;
+
+	gensec_sasl_state = talloc(gensec_security, struct gensec_sasl_state);
+	if (!gensec_sasl_state) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	callbacks = talloc_array(gensec_sasl_state, sasl_callback_t, 5);
 	callbacks[0].id = SASL_CB_USER;
 	callbacks[0].proc = gensec_sasl_get_user;
 	callbacks[0].context = gensec_security;
@@ -142,11 +150,6 @@
 	callbacks[4].proc = NULL;
 	callbacks[4].context = NULL;
 
-	gensec_sasl_state = talloc(gensec_security, struct gensec_sasl_state);
-	if (!gensec_sasl_state) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	gensec_security->private_data = gensec_sasl_state;
 
 	if (local_socket_addr) {
@@ -342,7 +345,7 @@
 		debug_level = 0;
 		break;
 	}
-	DEBUG(debug_level, ("gensec_sasl: %s", message));
+	DEBUG(debug_level, ("gensec_sasl: %s\n", message));
 
 	return SASL_OK;
 }
@@ -351,17 +354,20 @@
 {
 	NTSTATUS ret;
 	int sasl_ret, i;
-	sasl_callback_t callbacks[2];
 	const char **sasl_mechs;
 	
-	callbacks[0].id = SASL_CB_LOG;
-	callbacks[0].proc = gensec_sasl_log;
-	callbacks[0].context = NULL;
-
-	callbacks[1].id = SASL_CB_LIST_END;
-	callbacks[1].proc = gensec_sasl_log;
-	callbacks[1].context = NULL;
-
+	static const sasl_callback_t callbacks[] = {
+		{ 
+			.id = SASL_CB_LOG,
+			.proc = gensec_sasl_log,
+			.context = NULL,
+		},
+		{
+			.id = SASL_CB_LIST_END,
+			.proc = gensec_sasl_log,
+			.context = NULL,
+		}
+	};
 	sasl_ret = sasl_client_init(callbacks);
 	
 	if (sasl_ret == SASL_NOMECH) {



More information about the samba-cvs mailing list