diff options
-rw-r--r-- | source3/smbd/globals.h | 4 | ||||
-rw-r--r-- | source3/smbd/smbXsrv_session.c | 18 |
2 files changed, 22 insertions, 0 deletions
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h index 797a5c8551..d0015d5c45 100644 --- a/source3/smbd/globals.h +++ b/source3/smbd/globals.h @@ -523,6 +523,10 @@ NTSTATUS smbXsrv_session_create(struct smbXsrv_connection *conn, NTTIME now, struct smbXsrv_session **_session); NTSTATUS smbXsrv_session_update(struct smbXsrv_session *session); +struct smbXsrv_channel_global0; +NTSTATUS smbXsrv_session_find_channel(const struct smbXsrv_session *session, + const struct smbXsrv_connection *conn, + struct smbXsrv_channel_global0 **_c); NTSTATUS smbXsrv_session_logoff(struct smbXsrv_session *session); NTSTATUS smbXsrv_session_logoff_all(struct smbXsrv_connection *conn); NTSTATUS smb1srv_session_table_init(struct smbXsrv_connection *conn); diff --git a/source3/smbd/smbXsrv_session.c b/source3/smbd/smbXsrv_session.c index dd7991c3ea..7eca968285 100644 --- a/source3/smbd/smbXsrv_session.c +++ b/source3/smbd/smbXsrv_session.c @@ -1280,6 +1280,24 @@ NTSTATUS smbXsrv_session_update(struct smbXsrv_session *session) return NT_STATUS_OK; } +NTSTATUS smbXsrv_session_find_channel(const struct smbXsrv_session *session, + const struct smbXsrv_connection *conn, + struct smbXsrv_channel_global0 **_c) +{ + uint32_t i; + + for (i=0; i < session->global->num_channels; i++) { + struct smbXsrv_channel_global0 *c = &session->global->channels[i]; + + if (c->connection == conn) { + *_c = c; + return NT_STATUS_OK; + } + } + + return NT_STATUS_USER_SESSION_DELETED; +} + NTSTATUS smbXsrv_session_logoff(struct smbXsrv_session *session) { struct smbXsrv_session_table *table; |