The branch, v3-6-test has been updated via 5978eab s3-sessionid: use sessionid_init_readonly() from cmdline tools. via d135201 s3-sessionid: change session_db_ctx() to always return the session_id_ctx pointer. via 039171a s3-sessionid: make sure to call sessionid_init() also from the cmdline tools. from 66b9ebd Optimization. Don't do the retry logic if sitename_fetch() returned NULL, we already did a NULL query.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test - Log ----------------------------------------------------------------- commit 5978eab3cdbbc8971ed7f0fd9f0aadb02c98aba7 Author: Günther Deschner <g...@samba.org> Date: Wed Sep 4 16:57:17 2013 +0200 s3-sessionid: use sessionid_init_readonly() from cmdline tools. Guenther Signed-off-by: Günther Deschner <g...@samba.org> The last 3 patches address bug #10127 - smbstatus stopped working as non-root user. commit d1352013bb694a30480282e398e29238470b0768 Author: Günther Deschner <g...@samba.org> Date: Wed Sep 4 16:55:11 2013 +0200 s3-sessionid: change session_db_ctx() to always return the session_id_ctx pointer. Guenther Signed-off-by: Günther Deschner <g...@samba.org> commit 039171a9d1fc72de39ee8aa51830a37221988859 Author: Günther Deschner <g...@samba.org> Date: Wed Sep 4 16:45:32 2013 +0200 s3-sessionid: make sure to call sessionid_init() also from the cmdline tools. Guenther Signed-off-by: Günther Deschner <g...@samba.org> ----------------------------------------------------------------------- Summary of changes: source3/include/proto.h | 1 + source3/lib/sessionid_tdb.c | 25 ++++++++++++++++++------- source3/utils/net_serverid.c | 5 +++++ source3/utils/net_status.c | 6 ++++++ source3/utils/status.c | 6 ++++++ 5 files changed, 36 insertions(+), 7 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/include/proto.h b/source3/include/proto.h index 189b286..7303e76 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 de3ccab..769aac2 100644 --- a/source3/lib/sessionid_tdb.c +++ b/source3/lib/sessionid_tdb.c @@ -23,23 +23,34 @@ #include "session.h" #include "util_tdb.h" +static struct db_context *session_db_ctx_ptr = NULL; + static struct db_context *session_db_ctx(void) { - static struct db_context *session_db_ctx_ptr; - - if (session_db_ctx_ptr != NULL) { - return session_db_ctx_ptr; - } + return session_db_ctx_ptr; +} +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() == 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_serverid.c b/source3/utils/net_serverid.c index 08a1a7f..01109b9 100644 --- a/source3/utils/net_serverid.c +++ b/source3/utils/net_serverid.c @@ -150,5 +150,10 @@ int net_serverid(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; + if (!sessionid_init()) { + d_printf("failed to open sessionid.tdb\n"); + return -1; + }; + return net_run_function(c, argc, argv, "net serverid", func); } diff --git a/source3/utils/net_status.c b/source3/utils/net_status.c index d602743..857b184 100644 --- a/source3/utils/net_status.c +++ b/source3/utils/net_status.c @@ -239,5 +239,11 @@ int net_status(struct net_context *c, int argc, const char **argv) }, {NULL, NULL, 0, NULL, NULL} }; + + if (!sessionid_init_readonly()) { + d_printf("failed to open sessionid.tdb\n"); + return -1; + } + return net_run_function(c, argc, argv, "net status", func); } diff --git a/source3/utils/status.c b/source3/utils/status.c index cf625fb..dc05096 100644 --- a/source3/utils/status.c +++ b/source3/utils/status.c @@ -378,6 +378,12 @@ static int traverse_sessionid(const char *key, struct sessionid *session, } + if (!sessionid_init_readonly()) { + fprintf(stderr, "Can't open sessionid.tdb\n"); + ret = -1; + goto done; + } + if (lp_clustering()) { /* * This implicitly initializes the global ctdbd -- Samba Shared Repository