From 1f7167e1b1a4abcee8a26a543c7c1e7106361b07 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 11 Jul 2023 17:04:26 -0900 Subject: [PATCH] ctdldump: export usersbynumber (secondary index) --- citadel/utils/ctdldump.c | 55 ++++++++++++---------------------------- 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/citadel/utils/ctdldump.c b/citadel/utils/ctdldump.c index 4a548c410..ae884a1e5 100644 --- a/citadel/utils/ctdldump.c +++ b/citadel/utils/ctdldump.c @@ -142,17 +142,12 @@ void close_dbenv(DB_ENV *dbenv) { void export_msgmain(int which_cdb, DBT *in_key, DBT *in_data) { long in_msgnum; - if (in_key->size != sizeof(long)) { - fprintf(stderr, "\033[31m\033[1m *** BAD DATA *** ABORTING *** \033[0m\n"); - abort(); - } - memcpy(&in_msgnum, in_key->data, sizeof(in_msgnum)); // If the msgnum is negative, we are looking at METADATA if (in_msgnum < 0) { struct MetaData *meta = (struct MetaData *)in_data->data; - printf("msgmeta|%ld|%d|%s|%ld\n", + printf("msgmeta|%ld|%d|%s|%ld|\n", meta->meta_msgnum, meta->meta_refcount, meta->meta_content_type, @@ -162,7 +157,7 @@ void export_msgmain(int which_cdb, DBT *in_key, DBT *in_data) { // If the msgnum is positive, we are looking at a MESSAGE else if (in_msgnum > 0) { - printf("msgtext|%ld|%s\n", in_msgnum, hexout(in_data->data, in_data->size)); + printf("msgtext|%ld|%s|\n", in_msgnum, hexout(in_data->data, in_data->size)); } // If the msgnum is 0 it's probably not a valid record. @@ -174,7 +169,7 @@ void export_user(int which_cdb, DBT *in_key, DBT *in_data) { struct ctdluser *user = (struct ctdluser *)in_data->data; - printf("user|%d|%d|%s|%u|%d|%ld|%ld|%d|%s|%ld|%ld|%s|%ld|%ld\n", + printf("user|%d|%d|%s|%u|%d|%ld|%ld|%d|%s|%ld|%ld|%s|%ld|%ld|\n", user->version, user->uid, user->password, @@ -198,7 +193,7 @@ void export_room(int which_cdb, DBT *in_key, DBT *in_data) { struct ctdlroom *room = (struct ctdlroom *)in_data->data; - printf("room|%s|%s|%ld|%ld|%ld|%u|%s|%ld|%d|%ld|%d|%d|%ld|%d|%u|%d|%ld\n", + printf("room|%s|%s|%ld|%ld|%ld|%u|%s|%ld|%d|%ld|%d|%d|%ld|%d|%u|%d|%ld|\n", room->QRname, room->QRpasswd, room->QRroomaide, @@ -228,7 +223,7 @@ void export_floor(int which_cdb, DBT *in_key, DBT *in_data) { struct floor *floor = (struct floor *)in_data->data; - printf("floor|%d|%u|%s|%d|%d|%d\n", + printf("floor|%d|%u|%s|%d|%d|%d|\n", floor_num, floor->f_flags, floor->f_name, @@ -262,14 +257,14 @@ void export_msglist(int which_cdb, DBT *in_key, DBT *in_data) { printf("%ld", msg); } } - printf("\n"); + printf("|\n"); } // export function for a visit record void export_visit(int which_cdb, DBT *in_key, DBT *in_data) { struct visit *visit = (struct visit *)in_data->data; - printf("visit|%ld|%ld|%ld|%ld|%u|%s|%s|%d\n", + printf("visit|%ld|%ld|%ld|%ld|%u|%s|%s|%d|\n", visit->v_roomnum, visit->v_roomgen, visit->v_usernum, @@ -287,14 +282,14 @@ void export_visit(int which_cdb, DBT *in_key, DBT *in_data) { void export_dir(int which_cdb, DBT *in_key, DBT *in_data) { printf("dir|"); fwrite(in_key->data, in_key->size, 1, stdout); - printf("|%s\n", (char *)in_data->data); + printf("|%s|\n", (char *)in_data->data); } // export function for a use table record void export_usetable(int which_cdb, DBT *in_key, DBT *in_data) { struct UseTable *u = (struct UseTable *)in_data->data; - printf("use|%d|%ld\n", u->hash, u->timestamp); + printf("use|%d|%ld|\n", u->hash, u->timestamp); } @@ -303,7 +298,7 @@ void export_bigmsg(int which_cdb, DBT *in_key, DBT *in_data) { long msgnum; memcpy(&msgnum, in_key->data, sizeof(msgnum)); - printf("bigmsg|%ld|%s\n", msgnum, hexout(in_data->data, in_data->size)); + printf("bigmsg|%ld|%s|\n", msgnum, hexout(in_data->data, in_data->size)); } @@ -325,39 +320,21 @@ void export_euidindex(int which_cdb, DBT *in_key, DBT *in_data) { memcpy(&roomnum, in_data->data+sizeof(long), sizeof(msgnum)); euid = in_data->data+(sizeof(long)*2); - printf("euidindex|%ld|%ld|%s\n", msgnum, roomnum, euid); + printf("euidindex|%ld|%ld|%s|\n", msgnum, roomnum, euid); } -#if 0 // export users-by-number records // (This is a secondary index -- should we just regenerate the data after import?) -void export_usersbynumber(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { +void export_usersbynumber(int which_cdb, DBT *in_key, DBT *in_data) { // key is a long - // and remember ... "long" is int32_t on the source system - int32_t in_usernum; - long out_usernum; - memcpy(&in_usernum, in_key->data, sizeof(in_usernum)); - out_usernum = (long) in_usernum; - - if (in_key->size != 4) { - fprintf(stderr, "\033[31m\033[1m *** SOURCE DATABASE IS NOT 32-BIT *** ABORTING *** \033[0m\n"); - abort(); - } - - out_key->size = sizeof(out_usernum); - out_key->data = realloc(out_key->data, out_key->size); - memcpy(out_key->data, &out_usernum, sizeof(out_usernum)); + long usernum; + memcpy(&usernum, in_key->data, sizeof(usernum)); // value is a string - out_data->size = in_data->size; - out_data->data = realloc(out_data->data, out_data->size); - memcpy(out_data->data, in_data->data, in_data->size); - - // printf("usersbynumber: %ld --> %s\n", out_usernum, (char *)out_data->data); + printf("usersbynumber|%ld|%s|\n", usernum, (char *)in_data->data); } -#endif #if 0 @@ -402,7 +379,7 @@ void (*export_functions[])(int which_cdb, DBT *in_key, DBT *in_data) = { export_bigmsg, // CDB_BIGMSGS zero_function, // CDB_FULLTEXT (regenerate this on the server) export_euidindex, // CDB_EUIDINDEX - zero_function, // CDB_USERSBYNUMBER + export_usersbynumber, // CDB_USERSBYNUMBER zero_function, // CDB_UNUSED1 (obsolete) zero_function // CDB_CONFIG }; -- 2.39.2