s3-sessionid: use sessionid_init_readonly() from cmdline tools.
authorGünther Deschner <gd@samba.org>
Wed, 4 Sep 2013 14:57:17 +0000 (16:57 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 6 Sep 2013 09:22:38 +0000 (11:22 +0200)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
The last 3 patches address bug #10127 - smbstatus stopped working as non-root
user.

source3/include/proto.h
source3/lib/sessionid_tdb.c
source3/utils/net_status.c
source3/utils/status.c

index 189b286dd6cfad61c671e3d1317989fa2057f9d9..7303e76c9613ac4a945f46cfb15ee12d190e1b66 100644 (file)
@@ -1846,6 +1846,7 @@ void server_messaging_context_free(void);
 /* The following definitions come from lib/sessionid_tdb.c  */
 struct sessionid;
 bool sessionid_init(void);
+bool sessionid_init_readonly(void);
 struct db_record *sessionid_fetch_record(TALLOC_CTX *mem_ctx, const char *key);
 int sessionid_traverse(int (*fn)(struct db_record *rec, const char *key,
                                 struct sessionid *session,
index 6bd39c4ef96fe3db411aeccc68258c5985222c96..769aac2931397521abe654475d6fb5ea48054b45 100644 (file)
@@ -30,17 +30,27 @@ static struct db_context *session_db_ctx(void)
        return session_db_ctx_ptr;
 }
 
-static struct db_context *session_db_ctx_init(void)
+static struct db_context *session_db_ctx_init(bool readonly)
 {
        session_db_ctx_ptr = db_open(NULL, lock_path("sessionid.tdb"), 0,
                                     TDB_CLEAR_IF_FIRST|TDB_DEFAULT|TDB_INCOMPATIBLE_HASH,
-                                    O_RDWR | O_CREAT, 0644);
+                                    readonly ? O_RDONLY : O_RDWR | O_CREAT, 0644);
        return session_db_ctx_ptr;
 }
 
 bool sessionid_init(void)
 {
-       if (session_db_ctx_init() == NULL) {
+       if (session_db_ctx_init(false) == NULL) {
+               DEBUG(1,("session_init: failed to open sessionid tdb\n"));
+               return False;
+       }
+
+       return True;
+}
+
+bool sessionid_init_readonly(void)
+{
+       if (session_db_ctx_init(true) == NULL) {
                DEBUG(1,("session_init: failed to open sessionid tdb\n"));
                return False;
        }
index 39e2d205e2e248ef12a480b9d1af6fb5b4c49b7a..857b18463fe1a6c4bb489179f4e30df1a8bb61e1 100644 (file)
@@ -240,7 +240,7 @@ int net_status(struct net_context *c, int argc, const char **argv)
                {NULL, NULL, 0, NULL, NULL}
        };
 
-       if (!sessionid_init()) {
+       if (!sessionid_init_readonly()) {
                d_printf("failed to open sessionid.tdb\n");
                return -1;
        }
index 34a7730994c3d9a82982cf453379901fe21bbd06..dc0509673a0117d836969fdb108553c5bfe9e648 100644 (file)
@@ -378,7 +378,7 @@ static int traverse_sessionid(const char *key, struct sessionid *session,
        }
 
 
-       if (!sessionid_init()) {
+       if (!sessionid_init_readonly()) {
                fprintf(stderr, "Can't open sessionid.tdb\n");
                ret = -1;
                goto done;