summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2013-02-21 16:34:32 +0100
committerJeremy Allison <jra@samba.org>2014-05-22 21:05:14 +0200
commitb4b8e393e5bde7989707b5a7c6cab1da7ae2c0d0 (patch)
treeeee11f48934ebb79498e52464bc7a214fae95202
parent781563061dbf2b53bc6685cd2db7ace9ee35d280 (diff)
downloadsamba-b4b8e393e5bde7989707b5a7c6cab1da7ae2c0d0.tar.gz
tdb/tools: add -l option to tdbtool
This opens the tdb with TDB_NOLOCK. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r--lib/tdb/man/tdbtool.8.xml21
-rw-r--r--lib/tdb/tools/tdbtool.c18
2 files changed, 37 insertions, 2 deletions
diff --git a/lib/tdb/man/tdbtool.8.xml b/lib/tdb/man/tdbtool.8.xml
index ddca04c020b..cedc7eb4e0c 100644
--- a/lib/tdb/man/tdbtool.8.xml
+++ b/lib/tdb/man/tdbtool.8.xml
@@ -24,6 +24,7 @@
<cmdsynopsis>
<command>tdbtool</command>
+ <arg choice="opt">-l</arg>
<arg choice="plain">
<replaceable>TDBFILE</replaceable>
</arg>
@@ -48,6 +49,26 @@
</refsect1>
+<refsect1>
+ <title>OPTIONS</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>-l</term>
+ <listitem><para>
+ This options disables any locking, by passing TDB_NOLOCK
+ to tdb_open_ex(). Only use this for database files which
+ are not used by any other process! And also only if it is otherwise not
+ possible to open the database, e.g. databases which were created with
+ mutex locking.
+ </para></listitem>
+ </varlistentry>
+
+ </variablelist>
+</refsect1>
+
+
<refsect1>
<title>COMMANDS</title>
diff --git a/lib/tdb/tools/tdbtool.c b/lib/tdb/tools/tdbtool.c
index 01b9a14cc1f..c4861178610 100644
--- a/lib/tdb/tools/tdbtool.c
+++ b/lib/tdb/tools/tdbtool.c
@@ -36,6 +36,7 @@ char *line;
TDB_DATA iterate_kbuf;
char cmdline[1024];
static int disable_mmap;
+static int disable_lock;
enum commands {
CMD_CREATE_TDB,
@@ -226,7 +227,10 @@ static void create_tdb(const char *tdbname)
log_ctx.log_fn = tdb_log;
if (tdb) tdb_close(tdb);
- tdb = tdb_open_ex(tdbname, 0, TDB_CLEAR_IF_FIRST | (disable_mmap?TDB_NOMMAP:0),
+ tdb = tdb_open_ex(tdbname, 0,
+ TDB_CLEAR_IF_FIRST |
+ (disable_mmap?TDB_NOMMAP:0) |
+ (disable_lock?TDB_NOLOCK:0),
O_RDWR | O_CREAT | O_TRUNC, 0600, &log_ctx, NULL);
if (!tdb) {
printf("Could not create %s: %s\n", tdbname, strerror(errno));
@@ -239,7 +243,10 @@ static void open_tdb(const char *tdbname)
log_ctx.log_fn = tdb_log;
if (tdb) tdb_close(tdb);
- tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
+ tdb = tdb_open_ex(tdbname, 0,
+ (disable_mmap?TDB_NOMMAP:0) |
+ (disable_lock?TDB_NOLOCK:0),
+ O_RDWR, 0600,
&log_ctx, NULL);
if (!tdb) {
printf("Could not open %s: %s\n", tdbname, strerror(errno));
@@ -736,6 +743,13 @@ int main(int argc, char *argv[])
arg2 = NULL;
arg2len = 0;
+ if (argv[1] && (strcmp(argv[1], "-l") == 0)) {
+ disable_lock = 1;
+ argv[1] = argv[0];
+ argv += 1;
+ argc -= 1;
+ }
+
if (argv[1]) {
cmdname = "open";
arg1 = argv[1];