summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2013-09-04 16:57:17 +0200
committerKarolin Seeger <kseeger@samba.org>2013-09-06 11:22:38 +0200
commit5978eab3cdbbc8971ed7f0fd9f0aadb02c98aba7 (patch)
tree6401c58a4fdd146425ed4832581c265d15bbf828
parentd1352013bb694a30480282e398e29238470b0768 (diff)
downloadsamba-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.h1
-rw-r--r--source3/lib/sessionid_tdb.c16
-rw-r--r--source3/utils/net_status.c2
-rw-r--r--source3/utils/status.c2
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;