diff options
author | Volker Lendecke <vl@samba.org> | 2013-02-21 16:34:32 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-05-22 21:05:14 +0200 |
commit | b4b8e393e5bde7989707b5a7c6cab1da7ae2c0d0 (patch) | |
tree | eee11f48934ebb79498e52464bc7a214fae95202 | |
parent | 781563061dbf2b53bc6685cd2db7ace9ee35d280 (diff) | |
download | samba-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.xml | 21 | ||||
-rw-r--r-- | lib/tdb/tools/tdbtool.c | 18 |
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]; |