mirror of
https://github.com/samba-team/samba.git
synced 2025-02-09 09:57:48 +03:00
s3:dbwrap_tool: add "erase" opearation
Michael
This commit is contained in:
parent
fb262f79fa
commit
dfe06d21bd
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
extern bool AllowDebugChange;
|
extern bool AllowDebugChange;
|
||||||
|
|
||||||
typedef enum { OP_FETCH, OP_STORE, OP_DELETE } dbwrap_op;
|
typedef enum { OP_FETCH, OP_STORE, OP_DELETE, OP_ERASE } dbwrap_op;
|
||||||
|
|
||||||
typedef enum { TYPE_INT32, TYPE_UINT32 } dbwrap_type;
|
typedef enum { TYPE_INT32, TYPE_UINT32 } dbwrap_type;
|
||||||
|
|
||||||
@ -111,6 +111,32 @@ static int dbwrap_tool_delete(struct db_context *db,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int delete_fn(struct db_record *rec, void *priv)
|
||||||
|
{
|
||||||
|
rec->delete_rec(rec);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dbwrap_tool_erase: erase the whole data base
|
||||||
|
* the keyname argument is not used.
|
||||||
|
*/
|
||||||
|
static int dbwrap_tool_erase(struct db_context *db,
|
||||||
|
const char *keyname,
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = db->traverse(db, delete_fn, NULL);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
d_fprintf(stderr, "ERROR erasing the database\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct dbwrap_op_dispatch_table {
|
struct dbwrap_op_dispatch_table {
|
||||||
dbwrap_op op;
|
dbwrap_op op;
|
||||||
dbwrap_type type;
|
dbwrap_type type;
|
||||||
@ -126,6 +152,7 @@ struct dbwrap_op_dispatch_table dispatch_table[] = {
|
|||||||
{ OP_STORE, TYPE_UINT32, dbwrap_tool_store_uint32 },
|
{ OP_STORE, TYPE_UINT32, dbwrap_tool_store_uint32 },
|
||||||
{ OP_DELETE, TYPE_INT32, dbwrap_tool_delete },
|
{ OP_DELETE, TYPE_INT32, dbwrap_tool_delete },
|
||||||
{ OP_DELETE, TYPE_UINT32, dbwrap_tool_delete },
|
{ OP_DELETE, TYPE_UINT32, dbwrap_tool_delete },
|
||||||
|
{ OP_ERASE, TYPE_INT32, dbwrap_tool_erase },
|
||||||
{ 0, 0, NULL },
|
{ 0, 0, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,7 +167,7 @@ int main(int argc, const char **argv)
|
|||||||
const char *dbname;
|
const char *dbname;
|
||||||
const char *opname;
|
const char *opname;
|
||||||
dbwrap_op op;
|
dbwrap_op op;
|
||||||
const char *keyname;
|
const char *keyname = "";
|
||||||
const char *keytype = "int32";
|
const char *keytype = "int32";
|
||||||
dbwrap_type type;
|
dbwrap_type type;
|
||||||
const char *valuestr = "0";
|
const char *valuestr = "0";
|
||||||
@ -156,10 +183,10 @@ int main(int argc, const char **argv)
|
|||||||
AllowDebugChange = false;
|
AllowDebugChange = false;
|
||||||
lp_load(get_dyn_CONFIGFILE(), true, false, false, true);
|
lp_load(get_dyn_CONFIGFILE(), true, false, false, true);
|
||||||
|
|
||||||
if ((argc != 4) && (argc != 5) && (argc != 6)) {
|
if ((argc < 3) || (argc > 6)) {
|
||||||
d_fprintf(stderr,
|
d_fprintf(stderr,
|
||||||
"USAGE: %s <database> <op> <key> [<type> [<value>]]\n"
|
"USAGE: %s <database> <op> [<key> [<type> [<value>]]]\n"
|
||||||
" ops: fetch, store, delete\n"
|
" ops: fetch, store, delete, erase\n"
|
||||||
" types: int32, uint32\n",
|
" types: int32, uint32\n",
|
||||||
argv[0]);
|
argv[0]);
|
||||||
goto done;
|
goto done;
|
||||||
@ -167,7 +194,6 @@ int main(int argc, const char **argv)
|
|||||||
|
|
||||||
dbname = argv[1];
|
dbname = argv[1];
|
||||||
opname = argv[2];
|
opname = argv[2];
|
||||||
keyname = argv[3];
|
|
||||||
|
|
||||||
if (strcmp(opname, "store") == 0) {
|
if (strcmp(opname, "store") == 0) {
|
||||||
if (argc != 6) {
|
if (argc != 6) {
|
||||||
@ -177,6 +203,7 @@ int main(int argc, const char **argv)
|
|||||||
}
|
}
|
||||||
valuestr = argv[5];
|
valuestr = argv[5];
|
||||||
keytype = argv[4];
|
keytype = argv[4];
|
||||||
|
keyname = argv[3];
|
||||||
op = OP_STORE;
|
op = OP_STORE;
|
||||||
} else if (strcmp(opname, "fetch") == 0) {
|
} else if (strcmp(opname, "fetch") == 0) {
|
||||||
if (argc != 5) {
|
if (argc != 5) {
|
||||||
@ -186,13 +213,22 @@ int main(int argc, const char **argv)
|
|||||||
}
|
}
|
||||||
op = OP_FETCH;
|
op = OP_FETCH;
|
||||||
keytype = argv[4];
|
keytype = argv[4];
|
||||||
|
keyname = argv[3];
|
||||||
} else if (strcmp(opname, "delete") == 0) {
|
} else if (strcmp(opname, "delete") == 0) {
|
||||||
if (argc != 4) {
|
if (argc != 4) {
|
||||||
d_fprintf(stderr, "ERROR: operation 'delete' does "
|
d_fprintf(stderr, "ERROR: operation 'delete' does "
|
||||||
"not allow type nor value argument\n");
|
"not allow type nor value argument\n");
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
keyname = argv[3];
|
||||||
op = OP_DELETE;
|
op = OP_DELETE;
|
||||||
|
} else if (strcmp(opname, "erase") == 0) {
|
||||||
|
if (argc != 3) {
|
||||||
|
d_fprintf(stderr, "ERROR: operation 'erase' does "
|
||||||
|
"not take a key argument\n");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
op = OP_ERASE;
|
||||||
} else {
|
} else {
|
||||||
d_fprintf(stderr,
|
d_fprintf(stderr,
|
||||||
"ERROR: invalid op '%s' specified\n"
|
"ERROR: invalid op '%s' specified\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user