summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2015-05-08 23:12:19 +0200
committerMichael Adam <obnox@samba.org>2015-07-29 18:26:07 +0200
commit66bf0e51bc864d87ef1db5b52dd54da28b75af52 (patch)
tree44ab9f9fb814b777cd5e025b257c341a980cb44d /source3/smbd
parentd57e4ac3de5f53346a8d7c3f96825c1345b58f6a (diff)
downloadsamba-66bf0e51bc864d87ef1db5b52dd54da28b75af52.tar.gz
smbXsrv: add a smbXsrv_connection argument to smbXsrv_session_local_lookup()
This way, we can verify that a session is valid on the channel. Pair-Programmed-With: Michael Adam <obnox@samba.org> Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/smbXsrv_session.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c
index 3201670f7a3..256d8203a56 100644
--- a/source3/smbd/smbXsrv_session.c
+++ b/source3/smbd/smbXsrv_session.c
@@ -584,6 +584,8 @@ static void smbXsrv_session_local_fetch_parser(TDB_DATA key, TDB_DATA data,
}
static NTSTATUS smbXsrv_session_local_lookup(struct smbXsrv_session_table *table,
+ /* conn: optional */
+ struct smbXsrv_connection *conn,
uint32_t session_local_id,
NTTIME now,
struct smbXsrv_session **_session)
@@ -629,6 +631,19 @@ static NTSTATUS smbXsrv_session_local_lookup(struct smbXsrv_session_table *table
return NT_STATUS_USER_SESSION_DELETED;
}
+ /*
+ * If a connection is specified check if the session is
+ * valid on the channel.
+ */
+ if (conn != NULL) {
+ struct smbXsrv_channel_global0 *c = NULL;
+
+ status = smbXsrv_session_find_channel(state.session, conn, &c);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
+ }
+ }
+
state.session->idle_time = now;
if (!NT_STATUS_IS_OK(state.session->status)) {
@@ -1719,7 +1734,8 @@ NTSTATUS smb1srv_session_lookup(struct smbXsrv_connection *conn,
struct smbXsrv_session_table *table = conn->client->session_table;
uint32_t local_id = vuid;
- return smbXsrv_session_local_lookup(table, local_id, now, session);
+ return smbXsrv_session_local_lookup(table, conn, local_id, now,
+ session);
}
NTSTATUS smb2srv_session_table_init(struct smbXsrv_connection *conn)
@@ -1742,7 +1758,8 @@ static NTSTATUS smb2srv_session_lookup_raw(struct smbXsrv_session_table *table,
return NT_STATUS_USER_SESSION_DELETED;
}
- return smbXsrv_session_local_lookup(table, local_id, now, session);
+ return smbXsrv_session_local_lookup(table, NULL, local_id, now,
+ session);
}
NTSTATUS smb2srv_session_lookup(struct smbXsrv_connection *conn,