diff options
author | Stefan Metzmacher <metze@samba.org> | 2015-05-08 23:12:19 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2015-07-29 18:26:07 +0200 |
commit | 66bf0e51bc864d87ef1db5b52dd54da28b75af52 (patch) | |
tree | 44ab9f9fb814b777cd5e025b257c341a980cb44d /source3/smbd | |
parent | d57e4ac3de5f53346a8d7c3f96825c1345b58f6a (diff) | |
download | samba-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.c | 21 |
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, |