From 58bf4b160eb292bb40c79f65e4bc6a6f244577b9 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 17 Nov 2005 12:52:40 +0000 Subject: r11759: 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 (This used to be commit 5b5fb1772034fbfebbb7174df235c8c11d4819fe) --- source4/smb_server/receive.c | 18 ++++++------------ source4/smb_server/session.c | 6 ++---- source4/smb_server/smb_server.h | 6 ++++++ 3 files changed, 14 insertions(+), 16 deletions(-) (limited to 'source4') diff --git a/source4/smb_server/receive.c b/source4/smb_server/receive.c index b339f1391a..371333b647 100644 --- a/source4/smb_server/receive.c +++ b/source4/smb_server/receive.c @@ -459,7 +459,6 @@ static void switch_message(int type, struct smbsrv_request *req) { int flags; struct smbsrv_connection *smb_conn = req->smb_conn; - uint16_t session_tag; NTSTATUS status; type &= 0xff; @@ -476,24 +475,19 @@ static void switch_message(int type, struct smbsrv_request *req) 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)); diff --git a/source4/smb_server/session.c b/source4/smb_server/session.c index 0bee536b93..50bea16ee2 100644 --- a/source4/smb_server/session.c +++ b/source4/smb_server/session.c @@ -106,9 +106,7 @@ struct smbsrv_session *smbsrv_register_session(struct smbsrv_connection *smb_con 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 @@ struct smbsrv_session *smbsrv_register_session(struct smbsrv_connection *smb_con 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; } diff --git a/source4/smb_server/smb_server.h b/source4/smb_server/smb_server.h index 4ab7637558..4b2f65d14a 100644 --- a/source4/smb_server/smb_server.h +++ b/source4/smb_server/smb_server.h @@ -80,6 +80,12 @@ struct smbsrv_tcon { /* 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; }; -- cgit