]> git.sur5r.net Git - openldap/blob - servers/slapd/tools/ldbmcat.c
Okay, this really works.
[openldap] / servers / slapd / tools / ldbmcat.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <ctype.h>
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include "ldbm.h"
7 #include "../slap.h"
8
9 usage( name )
10 char    *name;
11 {
12         fprintf( stderr, "usage: %s [-n] <filename>\n", name );
13         exit( 1 );
14 }
15
16 main( argc, argv )
17     int         argc;
18     char        **argv;
19 {
20         Datum           key, last, data;
21         LDBM            dbp;
22         int             rc, type;
23         long            id;
24         char            *file, *s;
25         int             printid = 1;
26
27 #ifdef LDBM_USE_DB2
28         DBC     *cursorp;
29 #endif
30
31         if ( argc < 2 || argc > 3 || ( argc == 3 && strcmp( argv[1], "-n" )
32             != 0 )) {
33                 usage( argv[0] );
34         }
35         if ( argc == 3 && strcmp( argv[1], "-n" ) == 0 ) {
36                 printid = 0;
37                 file = argv[2];
38         } else {
39                 file = argv[1];
40         }
41
42         if ( (dbp = ldbm_open( file, LDBM_READER, 0, 0 )) == NULL ) {
43                 perror( file );
44                 exit ( 1 );
45         }
46
47         last.dptr = NULL;
48
49 #ifdef LDBM_USE_DB2
50         for ( key = ldbm_firstkey( dbp, &cursorp ); key.dptr != NULL;
51             key = ldbm_nextkey( dbp, last, cursorp ) )
52 #else
53         for ( key = ldbm_firstkey( dbp ); key.dptr != NULL;
54             key = ldbm_nextkey( dbp, last ) )
55 #endif
56         {
57                 if ( last.dptr != NULL )
58                         ldbm_datum_free( dbp, last );
59                 data = ldbm_fetch( dbp, key );
60                 s = data.dptr;
61                 if ( !printid && isdigit( *s )) {
62                         if (( s = strchr( s, '\n' )) != NULL ) {
63                                 ++s;
64                         }
65                 }
66                 if ( s != NULL ) {
67                         puts( s );
68                 }
69                 ldbm_datum_free( dbp, data );
70                 last = key;
71         }
72         if ( last.dptr != NULL )
73                 ldbm_datum_free( dbp, last );
74         ldbm_close( dbp );
75
76         exit( 0 );
77 }