svn commit: samba r23020 - in branches/SAMBA_4_0/source/smb_server: . smb smb2

tridge at samba.org tridge at samba.org
Sun May 20 09:44:04 GMT 2007


Author: tridge
Date: 2007-05-20 09:44:03 +0000 (Sun, 20 May 2007)
New Revision: 23020

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

Log:

a better fix for the memory leak - this one doesn't stuff up spnego :)

Modified:
   branches/SAMBA_4_0/source/smb_server/session.c
   branches/SAMBA_4_0/source/smb_server/smb/sesssetup.c
   branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/session.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/session.c	2007-05-20 08:57:01 UTC (rev 23019)
+++ branches/SAMBA_4_0/source/smb_server/session.c	2007-05-20 09:44:03 UTC (rev 23020)
@@ -136,6 +136,7 @@
  * gensec_ctx is optional, but talloc_steal'ed when present
  */
 struct smbsrv_session *smbsrv_session_new(struct smbsrv_connection *smb_conn,
+					  TALLOC_CTX *mem_ctx,
 					  struct gensec_security *gensec_ctx)
 {
 	struct smbsrv_session *sess = NULL;
@@ -144,7 +145,7 @@
 	/* Ensure no vuid gets registered in share level security. */
 	if (smb_conn->config.security == SEC_SHARE) return NULL;
 
-	sess = talloc_zero(smb_conn, struct smbsrv_session);
+	sess = talloc_zero(mem_ctx, struct smbsrv_session);
 	if (!sess) return NULL;
 	sess->smb_conn = smb_conn;
 

Modified: branches/SAMBA_4_0/source/smb_server/smb/sesssetup.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/sesssetup.c	2007-05-20 08:57:01 UTC (rev 23019)
+++ branches/SAMBA_4_0/source/smb_server/smb/sesssetup.c	2007-05-20 09:44:03 UTC (rev 23020)
@@ -49,6 +49,8 @@
 {
 	if (NT_STATUS_IS_OK(status)) {
 		req->smb_conn->negotiate.done_sesssetup = True;
+		/* we need to keep the session long term */
+		req->session = talloc_steal(req->smb_conn, req->session);
 	}
 	smbsrv_reply_sesssetup_send(req, sess, status);
 }
@@ -71,7 +73,7 @@
 	if (!NT_STATUS_IS_OK(status)) goto failed;
 
 	/* allocate a new session */
-	smb_sess = smbsrv_session_new(req->smb_conn, NULL);
+	smb_sess = smbsrv_session_new(req->smb_conn, req, NULL);
 	if (!smb_sess) {
 		status = NT_STATUS_INSUFFICIENT_RESOURCES;
 		goto failed;
@@ -166,7 +168,7 @@
 	if (!NT_STATUS_IS_OK(status)) goto failed;
 
 	/* allocate a new session */
-	smb_sess = smbsrv_session_new(req->smb_conn, NULL);
+	smb_sess = smbsrv_session_new(req->smb_conn, req, NULL);
 	if (!smb_sess) {
 		status = NT_STATUS_INSUFFICIENT_RESOURCES;
 		goto failed;
@@ -339,6 +341,10 @@
 failed:
 	status = auth_nt_status_squash(status);
 	smbsrv_sesssetup_backend_send(req, sess, status);
+	if (!NT_STATUS_IS_OK(status) && 
+	    !NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		talloc_free(smb_sess);
+	}
 }
 
 /*
@@ -394,7 +400,7 @@
 		}
 
 		/* allocate a new session */
-		smb_sess = smbsrv_session_new(req->smb_conn, gensec_ctx);
+		smb_sess = smbsrv_session_new(req->smb_conn, req->smb_conn, gensec_ctx);
 		if (!smb_sess) {
 			status = NT_STATUS_INSUFFICIENT_RESOURCES;
 			goto failed;

Modified: branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c	2007-05-20 08:57:01 UTC (rev 23019)
+++ branches/SAMBA_4_0/source/smb_server/smb2/sesssetup.c	2007-05-20 09:44:03 UTC (rev 23020)
@@ -95,6 +95,10 @@
 failed:
 	req->status = auth_nt_status_squash(status);
 	smb2srv_sesssetup_send(req, io);
+	if (!NT_STATUS_IS_OK(status) && !
+	    NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		talloc_free(smb_sess);
+	}
 }
 
 static void smb2srv_sesssetup_backend(struct smb2srv_request *req, union smb_sesssetup *io)
@@ -138,7 +142,7 @@
 		}
 
 		/* allocate a new session */
-		smb_sess = smbsrv_session_new(req->smb_conn, gensec_ctx);
+		smb_sess = smbsrv_session_new(req->smb_conn, req->smb_conn, gensec_ctx);
 		if (!smb_sess) {
 			status = NT_STATUS_INSUFFICIENT_RESOURCES;
 			goto failed;



More information about the samba-cvs mailing list