1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/lib/ldb/tools/cmdline.h
Andrew Bartlett b8aa05525e ldb: ensure that ldbedit operates like ldbmodify: set DONT_CREATE_DB
ldb* tools, when passed a raw filename assume tdb://

By default, ldb_tdb will call tdb with O_CREAT.

TDB, when passed O_CREAT and a not-tdb file, will wipe the file.

This means that if you run ldbedit <path to mdb-format-ldb file> the file
will be wiped, which is unexpected.  I noticed this while trying to
corrupt a sam.ldb backend file (for testing), but instead I wiped it!

Ideally tdb would not do that, but the behaviour has been this way for
decades.  Ideally ldb would have had a "create db" command, but this
has been the job of ldbadd for over a decade.

So this just blunts the knife for ldbedit.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14302

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
2020-03-02 02:47:30 +00:00

63 lines
1.9 KiB
C

/*
ldb database library - command line handling for ldb tools
Copyright (C) Andrew Tridgell 2005
** NOTE! The following LGPL license applies to the ldb
** library. This does NOT imply that all of Samba is released
** under the LGPL
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include <popt.h>
struct ldb_cmdline {
const char *url;
enum ldb_scope scope;
const char *basedn;
const char *modules_path;
int interactive;
int sorted;
const char *editor;
int verbose;
int recursive;
int all_records;
int nosync;
const char **options;
int argc;
const char **argv;
int num_records;
int num_searches;
const char *sasl_mechanism;
const char **controls;
int show_binary;
int tracing;
};
struct ldb_cmdline *ldb_cmdline_process_search(struct ldb_context *ldb,
int argc, const char **argv,
void (*usage)(struct ldb_context *));
struct ldb_cmdline *ldb_cmdline_process_edit(struct ldb_context *ldb,
int argc, const char **argv,
void (*usage)(struct ldb_context *));
struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb, int argc,
const char **argv,
void (*usage)(struct ldb_context *));
int handle_controls_reply(struct ldb_control **reply, struct ldb_control **request);
void ldb_cmdline_help(struct ldb_context *ldb, const char *cmdname, FILE *f);