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

metze at samba.org metze at samba.org
Thu Nov 17 12:52:40 GMT 2005


Author: metze
Date: 2005-11-17 12:52:40 +0000 (Thu, 17 Nov 2005)
New Revision: 11759

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

Log:
fix up the SEC_SHARE handling, when we want to support that later
we need to fake a smbsrv_session for each smbsrv_tcon...

metze
Modified:
   branches/SAMBA_4_0/source/smb_server/receive.c
   branches/SAMBA_4_0/source/smb_server/session.c
   branches/SAMBA_4_0/source/smb_server/smb_server.h


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/receive.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/receive.c	2005-11-17 11:06:13 UTC (rev 11758)
+++ branches/SAMBA_4_0/source/smb_server/receive.c	2005-11-17 12:52:40 UTC (rev 11759)
@@ -459,7 +459,6 @@
 {
 	int flags;
 	struct smbsrv_connection *smb_conn = req->smb_conn;
-	uint16_t session_tag;
 	NTSTATUS status;
 
 	type &= 0xff;
@@ -476,24 +475,19 @@
 
 	req->tcon = smbsrv_tcon_find(smb_conn, SVAL(req->in.hdr,HDR_TID));
 
-	if (req->session == NULL) {
+	if (!req->session) {
 		/* setup the user context for this request if it
 		   hasn't already been initialised (to cope with SMB
 		   chaining) */
 
 		/* In share mode security we must ignore the vuid. */
 		if (smb_conn->config.security == SEC_SHARE) {
-			session_tag = UID_FIELD_INVALID;
-		} else {
-			session_tag = SVAL(req->in.hdr,HDR_UID);
+			if (req->tcon) {
+				req->session = req->tcon->sec_share.session;
+			}
+ 		} else {
+			req->session = smbsrv_session_find(req->smb_conn, SVAL(req->in.hdr,HDR_UID));
 		}
-
-		req->session = smbsrv_session_find(req->smb_conn, session_tag);
-		if (req->session) {
-			req->session->vuid = session_tag;
-		}
-	} else {
-		session_tag = req->session->vuid;
 	}
 
 	DEBUG(3,("switch message %s (task_id %d)\n",smb_fn_name(type), req->smb_conn->connection->server_id));

Modified: branches/SAMBA_4_0/source/smb_server/session.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/session.c	2005-11-17 11:06:13 UTC (rev 11758)
+++ branches/SAMBA_4_0/source/smb_server/session.c	2005-11-17 12:52:40 UTC (rev 11759)
@@ -106,9 +106,7 @@
 	int i;
 
 	/* Ensure no vuid gets registered in share level security. */
-	/* TODO: replace lp_security with a flag in smbsrv_connection */
-	if (lp_security() == SEC_SHARE)
-		return UID_FIELD_INVALID;
+	if (smb_conn->config.security == SEC_SHARE) return NULL;
 
 	sess = talloc(smb_conn, struct smbsrv_session);
 	if (sess == NULL) {
@@ -120,7 +118,7 @@
 
 	i = idr_get_new_random(smb_conn->sessions.idtree_vuid, sess, UINT16_MAX);
 	if (i == -1) {
-		DEBUG(1,("ERROR! Out of connection structures\n"));	       
+		DEBUG(1,("ERROR! Out of connection structures\n"));
 		talloc_free(sess);
 		return NULL;
 	}

Modified: branches/SAMBA_4_0/source/smb_server/smb_server.h
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb_server.h	2005-11-17 11:06:13 UTC (rev 11758)
+++ branches/SAMBA_4_0/source/smb_server/smb_server.h	2005-11-17 12:52:40 UTC (rev 11759)
@@ -80,6 +80,12 @@
 	/* the reported device type */
 	char *dev_type;
 
+	/* some stuff to support share level security */
+	struct {
+		/* in share level security we need to fake up a session */
+		struct smbsrv_session *session;
+	} sec_share;
+
 	struct timeval connect_time;
 };
 



More information about the samba-cvs mailing list