r13197: Add -k switch to dump the data of a single key.
authorLars Müller <lmuelle@samba.org>
Fri, 27 Jan 2006 21:49:01 +0000 (21:49 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:06:17 +0000 (11:06 -0500)
(This used to be commit 23503ff45f2a377728bc5ebb1e6db2755bb5ca2b)

source3/tdb/tdbdump.c

index 6cac0bc5ccd415a63286ec2aec71910926835430..b702fb073552c5de05d2e1f4b3df92431ec9415b 100644 (file)
@@ -59,9 +59,10 @@ static int traverse_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *stat
        return 0;
 }
 
-static int dump_tdb(const char *fname)
+static int dump_tdb(const char *fname, const char *keyname)
 {
        TDB_CONTEXT *tdb;
+       TDB_DATA key, value;
        
        tdb = tdb_open(fname, 0, 0, O_RDONLY, 0);
        if (!tdb) {
@@ -69,20 +70,55 @@ static int dump_tdb(const char *fname)
                return 1;
        }
 
-       tdb_traverse(tdb, traverse_fn, NULL);
+       if (!keyname) {
+               tdb_traverse(tdb, traverse_fn, NULL);
+       } else {
+               key.dptr = (char *)keyname;
+               key.dsize = strlen( keyname);
+               value = tdb_fetch(tdb, key);
+               if (!value.dptr) {
+                       return 1;
+               } else {
+                       print_data(value);
+                       free(value.dptr);
+               }
+       }
+
        return 0;
 }
 
+static void usage( void)
+{
+       printf( "Usage: tdbdump [options] <filename>\n\n");
+       printf( "   -h          this help message\n");
+       printf( "   -k keyname  dumps value of keyname\n");
+}
+
  int main(int argc, char *argv[])
 {
-       char *fname;
+       char *fname, *keyname=NULL;
+       int c;
 
        if (argc < 2) {
                printf("Usage: tdbdump <fname>\n");
                exit(1);
        }
 
-       fname = argv[1];
+       while ((c = getopt( argc, argv, "hk:")) != -1) {
+               switch (c) {
+               case 'h':
+                       usage();
+                       exit( 0);
+               case 'k':
+                       keyname = optarg;
+                       break;
+               default:
+                       usage();
+                       exit( 1);
+               }
+       }
+
+       fname = argv[optind];
 
-       return dump_tdb(fname);
+       return dump_tdb(fname, keyname);
 }