s3:smbd/session: Added a routine find_sessions()
authorShekhar Amlekar <samlekar@in.ibm.com>
Tue, 10 Sep 2013 06:28:07 +0000 (11:58 +0530)
committerJeremy Allison <jra@samba.org>
Tue, 10 Sep 2013 18:32:46 +0000 (11:32 -0700)
this routine builds a list of sessions from a
particular remote machine or user.

Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/proto.h
source3/smbd/session.c

index 8b6987ec05b21c133535ec7e39e6b5fcbd0aeeb6..54d6da0b4ce1cd2a02b7837670e9d8cc9457fd5f 100644 (file)
@@ -1001,6 +1001,8 @@ bool session_init(void);
 bool session_claim(struct smbXsrv_session *session);
 void session_yield(struct smbXsrv_session *session);
 int list_sessions(TALLOC_CTX *mem_ctx, struct sessionid **session_list);
+int find_sessions(TALLOC_CTX *mem_ctx, const char *username,
+                 const char *machine, struct sessionid **session_list);
 
 /* The following definitions come from smbd/sesssetup.c  */
 
index e4d68b4dead7cb1e36eb8a1e7625ec89417a1e5e..4ddb856930d01f3f44485d8b16ffe43bb67dabfd 100644 (file)
@@ -184,3 +184,31 @@ int list_sessions(TALLOC_CTX *mem_ctx, struct sessionid **session_list)
        *session_list = sesslist.sessions;
        return sesslist.count;
 }
+
+/********************************************************************
+find the sessions that match the given username and machine
+********************************************************************/
+
+int find_sessions(TALLOC_CTX *mem_ctx, const char *username,
+                 const char *machine, struct sessionid **session_list)
+{
+       struct session_list sesslist;
+       NTSTATUS status;
+
+       sesslist.mem_ctx = mem_ctx;
+       sesslist.count = 0;
+       sesslist.filter_user = username;
+       sesslist.filter_machine = machine;
+       sesslist.sessions = NULL;
+
+       status = sessionid_traverse_read(gather_sessioninfo, (void *)&sesslist);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(3, ("Session traverse failed: %s\n", nt_errstr(status)));
+               TALLOC_FREE(sesslist.sessions);
+               *session_list = NULL;
+               return 0;
+       }
+
+       *session_list = sesslist.sessions;
+       return sesslist.count;
+}