svn commit: samba r3186 - in branches/SAMBA_4_0/source: auth smb_server

abartlet at samba.org abartlet at samba.org
Mon Oct 25 04:19:03 GMT 2004


Author: abartlet
Date: 2004-10-25 04:19:02 +0000 (Mon, 25 Oct 2004)
New Revision: 3186

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=3186&nolog=1

Log:
Use the properties of the new talloc() system to handle the auth
session info and server info structures.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/auth/auth_util.c
   branches/SAMBA_4_0/source/smb_server/password.c
   branches/SAMBA_4_0/source/smb_server/sesssetup.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/auth_util.c
===================================================================
--- branches/SAMBA_4_0/source/auth/auth_util.c	2004-10-25 04:16:57 UTC (rev 3185)
+++ branches/SAMBA_4_0/source/auth/auth_util.c	2004-10-25 04:19:02 UTC (rev 3186)
@@ -534,18 +534,19 @@
 	return True;
 }
 
-NTSTATUS make_session_info(struct auth_serversupplied_info *server_info, 
+NTSTATUS make_session_info(TALLOC_CTX *mem_ctx, 
+			   struct auth_serversupplied_info *server_info, 
 			   struct auth_session_info **session_info) 
 {
 	NTSTATUS nt_status;
 
-	*session_info = talloc_p(server_info, struct auth_session_info);
+	*session_info = talloc_p(mem_ctx, struct auth_session_info);
 	if (!*session_info) {
 		return NT_STATUS_NO_MEMORY;
 	}
 	
-	(*session_info)->refcount = 1;
 	(*session_info)->server_info = server_info;
+	talloc_reference(*session_info, server_info);
 
 	/* unless set otherwise, the session key is the user session
 	 * key from the auth subsystem */
@@ -570,12 +571,7 @@
 void free_session_info(struct auth_session_info **session_info)
 {
 	DEBUG(5,("attempting to free a session_info structure\n"));
-	if (*session_info) {
-		(*session_info)->refcount--;
-		if ((*session_info)->refcount <= 0) {
-			talloc_free((*session_info));
-		}
-	}
+	talloc_free((*session_info));
 	*session_info = NULL;
 }
 

Modified: branches/SAMBA_4_0/source/smb_server/password.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/password.c	2004-10-25 04:16:57 UTC (rev 3185)
+++ branches/SAMBA_4_0/source/smb_server/password.c	2004-10-25 04:19:02 UTC (rev 3186)
@@ -58,8 +58,6 @@
 
 	session_yield(sess);
 
-	free_session_info(&sess->session_info);
-
 	DLIST_REMOVE(smb_conn->sessions.session_list, sess);
 
 	/* clear the vuid from the 'cache' on each connection, and
@@ -135,9 +133,14 @@
 	smb_conn->sessions.num_validated_vuids++;
 
 	/* use this to keep tabs on all our info from the authentication */
-	sess->session_info = session_info;
-	sess->gensec_ctx = gensec_ctx;
+	if (session_info) {
+		sess->session_info = talloc_reference(sess, session_info);
+	}
 
+	if (gensec_ctx) {
+		sess->gensec_ctx = talloc_reference(sess, gensec_ctx);
+	}
+
 	sess->smb_conn = smb_conn;
 	DLIST_ADD(smb_conn->sessions.session_list, sess);
 

Modified: branches/SAMBA_4_0/source/smb_server/sesssetup.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/sesssetup.c	2004-10-25 04:16:57 UTC (rev 3185)
+++ branches/SAMBA_4_0/source/smb_server/sesssetup.c	2004-10-25 04:19:02 UTC (rev 3186)
@@ -74,7 +74,8 @@
 		return nt_status_squash(status);
 	}
 
-	status = make_session_info(server_info, &session_info);
+	/* This references server_info into session_info */
+	status = make_session_info(req, server_info, &session_info);
 	if (!NT_STATUS_IS_OK(status)) {
 		return nt_status_squash(status);
 	}
@@ -157,13 +158,13 @@
 		return nt_status_squash(status);
 	}
 
-	status = make_session_info(server_info, &session_info);
+	/* This references server_info into session_info */
+	status = make_session_info(req, server_info, &session_info);
 	if (!NT_STATUS_IS_OK(status)) {
 		return nt_status_squash(status);
 	}
+	talloc_free(server_info);
 
-	talloc_steal(session_info, server_info);
-
 	sess->nt1.out.action = 0;
 	sess->nt1.out.vuid = smbsrv_register_session(req->smb_conn, session_info, NULL);
 	if (sess->nt1.out.vuid == UID_FIELD_INVALID) {
@@ -238,7 +239,8 @@
 	}
 
 	if (!smb_sess) {
-		vuid = smbsrv_register_session(req->smb_conn, session_info, gensec_ctx);
+		vuid = smbsrv_register_session(req->smb_conn, 
+					       session_info, gensec_ctx);
 		if (vuid == UID_FIELD_INVALID) {
 			return NT_STATUS_ACCESS_DENIED;
 		}



More information about the samba-cvs mailing list