diff options
author | Günther Deschner <gd@samba.org> | 2013-09-04 16:57:17 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2013-09-06 11:22:38 +0200 |
commit | 5978eab3cdbbc8971ed7f0fd9f0aadb02c98aba7 (patch) | |
tree | 6401c58a4fdd146425ed4832581c265d15bbf828 | |
parent | d1352013bb694a30480282e398e29238470b0768 (diff) | |
download | samba-5978eab3cdbbc8971ed7f0fd9f0aadb02c98aba7.tar.gz |
s3-sessionid: use sessionid_init_readonly() from cmdline tools.
Guenther
Signed-off-by: Günther Deschner <gd@samba.org>
The last 3 patches address bug #10127 - smbstatus stopped working as non-root
user.
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/lib/sessionid_tdb.c | 16 | ||||
-rw-r--r-- | source3/utils/net_status.c | 2 | ||||
-rw-r--r-- | source3/utils/status.c | 2 |
4 files changed, 16 insertions, 5 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 189b286dd6c..7303e76c961 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -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, diff --git a/source3/lib/sessionid_tdb.c b/source3/lib/sessionid_tdb.c index 6bd39c4ef96..769aac29313 100644 --- a/source3/lib/sessionid_tdb.c +++ b/source3/lib/sessionid_tdb.c @@ -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; } diff --git a/source3/utils/net_status.c b/source3/utils/net_status.c index 39e2d205e2e..857b18463fe 100644 --- a/source3/utils/net_status.c +++ b/source3/utils/net_status.c @@ -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; } diff --git a/source3/utils/status.c b/source3/utils/status.c index 34a7730994c..dc0509673a0 100644 --- a/source3/utils/status.c +++ b/source3/utils/status.c @@ -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; |