svn commit: samba r6313 - in branches/SAMBA_4_0/source/smb_server: .

abartlet at samba.org abartlet at samba.org
Tue Apr 12 07:29:13 GMT 2005


Author: abartlet
Date: 2005-04-12 07:29:12 +0000 (Tue, 12 Apr 2005)
New Revision: 6313

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

Log:
Much better handling of LogoffAndX when the vuid is invalid (ie, don't
segfault).  This should fix another of the issues that Richard came up
with last week.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/smb_server/reply.c


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/reply.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/reply.c	2005-04-12 06:51:36 UTC (rev 6312)
+++ branches/SAMBA_4_0/source/smb_server/reply.c	2005-04-12 07:29:12 UTC (rev 6313)
@@ -2172,26 +2172,28 @@
 void reply_ulogoffX(struct smbsrv_request *req)
 {
 	struct smbsrv_tcon *tcon;
-	uint16_t vuid;
 	NTSTATUS status;
 
-	vuid = SVAL(req->in.hdr, HDR_UID);
+	if (!req->session) {
+		req_reply_error(req, NT_STATUS_DOS(ERRSRV, ERRbaduid));
+		return;
+	}
 
 	/* in user level security we are supposed to close any files
 	   open by this user on all open tree connects */
-	if ((vuid != 0) && (lp_security() != SEC_SHARE)) {
-		for (tcon=req->smb_conn->tree.tcons;tcon;tcon=tcon->next) {
-			req->tcon = tcon;
-			status = ntvfs_logoff(req);
-			req->tcon = NULL;
-			if (!NT_STATUS_IS_OK(status)) {
-				req_reply_error(req, status);
-				return;
-			}
+	for (tcon=req->smb_conn->tree.tcons;tcon;tcon=tcon->next) {
+		req->tcon = tcon;
+		status = ntvfs_logoff(req);
+		req->tcon = NULL;
+		if (!NT_STATUS_IS_OK(status)) {
+			req_reply_error(req, status);
+			return;
 		}
 	}
 
-	smbsrv_invalidate_vuid(req->smb_conn, vuid);
+	talloc_free(req->session);
+	req->session = NULL; /* it is now invalid, don't use on 
+				any chained packets */
 
 	req_setup_reply(req, 2, 0);
 



More information about the samba-cvs mailing list