mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
adding command for moving a record from one tdb to another
(This used to be commit d0d85dd49c
)
This commit is contained in:
parent
2da3330555
commit
4c8863ab08
@ -118,6 +118,7 @@ static void help(void)
|
||||
" erase : erase the database\n"
|
||||
" dump : dump the database as strings\n"
|
||||
" insert key data : insert a record\n"
|
||||
" move key file : move a record to a destination tdb\n"
|
||||
" store key data : store a record (replace)\n"
|
||||
" show key : show a record by key\n"
|
||||
" delete key : delete a record by key\n"
|
||||
@ -291,6 +292,57 @@ static void delete_tdb(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void move_rec(void)
|
||||
{
|
||||
char *k = get_token(1);
|
||||
char *file = get_token(0);
|
||||
TDB_DATA key, dbuf;
|
||||
TDB_CONTEXT *dst_tdb;
|
||||
|
||||
if (!k) {
|
||||
help();
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !file ) {
|
||||
terror("need destination tdb name");
|
||||
return;
|
||||
}
|
||||
|
||||
key.dptr = k;
|
||||
key.dsize = strlen(k)+1;
|
||||
|
||||
dbuf = tdb_fetch(tdb, key);
|
||||
if (!dbuf.dptr) {
|
||||
/* maybe it is non-NULL terminated key? */
|
||||
key.dsize = strlen(k);
|
||||
dbuf = tdb_fetch(tdb, key);
|
||||
|
||||
if ( !dbuf.dptr ) {
|
||||
terror("fetch failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
print_rec(tdb, key, dbuf, NULL);
|
||||
|
||||
dst_tdb = tdb_open(file, 0, 0, O_RDWR, 0600);
|
||||
if ( !dst_tdb ) {
|
||||
terror("unable to open destination tdb");
|
||||
return;
|
||||
}
|
||||
|
||||
if ( tdb_store( dst_tdb, key, dbuf, TDB_REPLACE ) == -1 ) {
|
||||
terror("failed to move record");
|
||||
}
|
||||
else
|
||||
printf("record moved\n");
|
||||
|
||||
tdb_close( dst_tdb );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int print_conn_key(TDB_DATA key)
|
||||
{
|
||||
@ -465,6 +517,9 @@ int main(int argc, char *argv[])
|
||||
} else if (strcmp(tok,"dump") == 0) {
|
||||
bIterate = 0;
|
||||
tdb_traverse(tdb, print_rec, NULL);
|
||||
} else if (strcmp(tok,"move") == 0) {
|
||||
bIterate = 0;
|
||||
move_rec();
|
||||
} else if (strcmp(tok,"list") == 0) {
|
||||
tdb_dump_all(tdb);
|
||||
} else if (strcmp(tok, "free") == 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user