summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-06-12 13:04:40 +0200
committerMichael Adam <obnox@samba.org>2014-09-19 09:15:13 +0200
commit6ed4eebe19bce7c5fcda9a136a494e467f7fa286 (patch)
treece20866b3fd20fb2f0f9b2b73637f909b0863302
parentcd7c24a9b186b5f8eb5c12e098a7fd7c306349c9 (diff)
downloadsamba-6ed4eebe19bce7c5fcda9a136a494e467f7fa286.tar.gz
samba-6ed4eebe19bce7c5fcda9a136a494e467f7fa286.tar.xz
samba-6ed4eebe19bce7c5fcda9a136a494e467f7fa286.zip
s3:smbXsrv_session: add smbXsrv_session_find_channel()
This function can check if a smbXsrv_connection is already bound to a smbXsrv_session. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
-rw-r--r--source3/smbd/globals.h4
-rw-r--r--source3/smbd/smbXsrv_session.c18
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;