diff options
author | Holger Hetterich <hhetter@novell.com> | 2008-11-02 00:12:32 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2008-12-16 13:58:48 +0100 |
commit | 42366bcbbdd42bb9d5821dfcc9dbe71a1eafa330 (patch) | |
tree | dcdbe47ab6022fa0ccb9659102844ee9b9dbaf4b /lib | |
parent | 5ee0392a55d3a35692c026f1b88909d7fd2d2666 (diff) | |
download | samba-42366bcbbdd42bb9d5821dfcc9dbe71a1eafa330.tar.gz samba-42366bcbbdd42bb9d5821dfcc9dbe71a1eafa330.tar.bz2 samba-42366bcbbdd42bb9d5821dfcc9dbe71a1eafa330.zip |
Added a simple tdb integrity check to tdbtool. The command "check" runs traverse on the currently open tdb, and returns the number of entries if the integrity check is successful.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tdb/tools/tdbtool.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/tdb/tools/tdbtool.c b/lib/tdb/tools/tdbtool.c index d104ccd7c4..1ecad62a3d 100644 --- a/lib/tdb/tools/tdbtool.c +++ b/lib/tdb/tools/tdbtool.c @@ -57,6 +57,7 @@ enum commands { CMD_FIRST, CMD_NEXT, CMD_SYSTEM, + CMD_CHECK, CMD_QUIT, CMD_HELP }; @@ -87,6 +88,7 @@ COMMAND_TABLE cmd_table[] = { {"1", CMD_FIRST}, {"next", CMD_NEXT}, {"n", CMD_NEXT}, + {"check", CMD_CHECK}, {"quit", CMD_QUIT}, {"q", CMD_QUIT}, {"!", CMD_SYSTEM}, @@ -179,7 +181,8 @@ static void help(void) " delete key : delete a record by key\n" " list : print the database hash table and freelist\n" " free : print the database freelist\n" -" ! command : execute system command\n" +" check : check the integrity of an opened database\n" +" ! command : execute system command\n" " 1 | first : print the first record\n" " n | next : print the next record\n" " q | quit : terminate\n" @@ -452,6 +455,27 @@ static void next_record(TDB_CONTEXT *the_tdb, TDB_DATA *pkey) print_rec(the_tdb, *pkey, dbuf, NULL); } +static int test_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state) +{ + return 0; +} + +static void check_db(TDB_CONTEXT *the_tdb) +{ + int tdbcount=-1; + if (the_tdb) { + tdbcount = tdb_traverse(the_tdb, test_fn, NULL); + } else { + printf("Error: No database opened!\n"); + } + + if (tdbcount<0) { + printf("Integrity check for the opened database failed.\n"); + } else { + printf("Database integrity is OK and has %d records.\n", tdbcount); + } +} + static int do_command(void) { COMMAND_TABLE *ctp = cmd_table; @@ -552,6 +576,9 @@ static int do_command(void) if (bIterate) next_record(tdb, &iterate_kbuf); return 0; + case CMD_CHECK: + check_db(tdb); + return 0; case CMD_HELP: help(); return 0; |