diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2012-06-19 12:43:09 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-06-19 05:38:07 +0200 |
commit | 8fdd20b22f6b27b616b5b3a2285a267ffae0a262 (patch) | |
tree | 20bea1533df2bc2df1f854fded4f7770110eecda /lib/ntdb | |
parent | a941b19e5d747a5468b3c10d4a1c95f539c476ac (diff) | |
download | samba-8fdd20b22f6b27b616b5b3a2285a267ffae0a262.tar.gz samba-8fdd20b22f6b27b616b5b3a2285a267ffae0a262.tar.bz2 samba-8fdd20b22f6b27b616b5b3a2285a267ffae0a262.zip |
ntdb: add -h arg to ntdbrestore
Since our default hashsize is 8192 not 131, we look fat when we convert
near-empty TDBs.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'lib/ntdb')
-rw-r--r-- | lib/ntdb/tools/ntdbrestore.c | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/lib/ntdb/tools/ntdbrestore.c b/lib/ntdb/tools/ntdbrestore.c index dad591d562..1df9322e64 100644 --- a/lib/ntdb/tools/ntdbrestore.c +++ b/lib/ntdb/tools/ntdbrestore.c @@ -1,5 +1,6 @@ /* - ntdbrestore -- construct a ntdb from tdbdump output. + ntdbrestore -- construct a ntdb from (n)tdbdump output. + Copyright (C) Rusty Russell 2012 Copyright (C) Volker Lendecke 2010 Copyright (C) Simon McVittie 2005 @@ -188,11 +189,17 @@ fail: return ret; } -static int restore_ntdb(const char *fname) +static int restore_ntdb(const char *fname, unsigned int hsize) { struct ntdb_context *ntdb; + union ntdb_attribute hashsize; - ntdb = ntdb_open(fname, 0, O_RDWR|O_CREAT|O_EXCL, 0666, NULL); + hashsize.base.attr = NTDB_ATTRIBUTE_HASHSIZE; + hashsize.base.next = NULL; + hashsize.hashsize.size = hsize; + + ntdb = ntdb_open(fname, 0, O_RDWR|O_CREAT|O_EXCL, 0666, + hsize ? &hashsize : NULL); if (!ntdb) { perror("ntdb_open"); fprintf(stderr, "Failed to open %s\n", fname); @@ -218,14 +225,27 @@ static int restore_ntdb(const char *fname) int main(int argc, char *argv[]) { - char *fname; + unsigned int hsize = 0; + const char *execname = argv[0]; - if (argc < 2) { - printf("Usage: %s dbname < tdbdump_output\n", argv[0]); + if (argv[1] && strcmp(argv[1], "-h") == 0) { + if (argv[2]) { + hsize = atoi(argv[2]); + } + if (hsize == 0) { + fprintf(stderr, "-h requires a integer value" + " (eg. 128 or 131072)\n"); + exit(1); + } + argv += 2; + argc -= 2; + } + if (argc != 2) { + printf("Usage: %s [-h <hashsize>] dbname < tdbdump_output\n", + execname); exit(1); } - fname = argv[1]; - return restore_ntdb(fname); + return restore_ntdb(argv[1], hsize); } |