From 94b189e30c49055fd1d5f15fc38b7550e6c13585 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 11 Jul 2023 16:59:55 -0900 Subject: [PATCH] ctdldump: export euidindex --- citadel/utils/ctdldump.c | 72 +++++++++------------------------------- 1 file changed, 16 insertions(+), 56 deletions(-) diff --git a/citadel/utils/ctdldump.c b/citadel/utils/ctdldump.c index 962081c5d..4a548c410 100644 --- a/citadel/utils/ctdldump.c +++ b/citadel/utils/ctdldump.c @@ -162,7 +162,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|%s\n", 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. @@ -287,9 +287,7 @@ 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("|"); - fwrite(in_data->data, in_data->size, 1, stdout); - printf("\n"); + printf("|%s\n", (char *)in_data->data); } @@ -300,38 +298,17 @@ void export_usetable(int which_cdb, DBT *in_key, DBT *in_data) { } -#if 0 // export function for large message texts -void export_bigmsgs(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { - - // The key is a packed long - int32_t in_msgnum; - long out_msgnum; - memcpy(&in_msgnum, in_key->data, sizeof(in_msgnum)); - out_msgnum = (long)in_msgnum; - - 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(long); - out_key->data = realloc(out_key->data, out_key->size); - memcpy(out_key->data, &out_msgnum, sizeof(long)); +void export_bigmsg(int which_cdb, DBT *in_key, DBT *in_data) { + long msgnum; - // the data is binary-ish but has no packed integers - 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("\033[32m\033[1mBigmsg %ld , length %d\033[0m\n", out_msgnum, out_data->size); + memcpy(&msgnum, in_key->data, sizeof(msgnum)); + printf("bigmsg|%ld|%s\n", msgnum, hexout(in_data->data, in_data->size)); } -#endif -#if 0 // export function for EUID Index records -void export_euidindex(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) { +void export_euidindex(int which_cdb, DBT *in_key, DBT *in_data) { // The structure of an euidindex record *key* is: // |----room_number----|----------EUID-------------| @@ -341,32 +318,15 @@ void export_euidindex(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DB // |-----msg_number----|----room_number----|----------EUID-------------| // (sizeof long) (sizeof long) (actual length of euid) - int32_t in_msgnum = 0; - int32_t in_roomnum = 0; - char euid[SIZ]; - long out_msgnum = 0; - long out_roomnum = 0; + long msgnum, roomnum; + char *euid; - memcpy(&in_msgnum, in_data->data, sizeof(in_msgnum)); - memcpy(&in_roomnum, in_data->data+sizeof(int32_t), sizeof(in_msgnum)); - strcpy(euid, in_data->data+(sizeof(int32_t)*2)); + memcpy(&msgnum, in_data->data, sizeof(long)); + memcpy(&roomnum, in_data->data+sizeof(long), sizeof(msgnum)); + euid = in_data->data+(sizeof(long)*2); - out_msgnum = (long) in_msgnum; - out_roomnum = (long) in_roomnum; - // printf("euidindex: msgnum=%ld, roomnum=%ld, euid=\"%s\"\n", out_msgnum, out_roomnum, euid); - - out_key->size = sizeof(long) + strlen(euid) + 1; - out_key->data = realloc(out_key->data, out_key->size); - memcpy(out_key->data, &out_roomnum, sizeof(out_roomnum)); - strcpy(out_key->data+sizeof(out_roomnum), euid); - - out_data->size = sizeof(long) + sizeof(long) + strlen(euid) + 1; - out_data->data = realloc(out_data->data, out_data->size); - memcpy(out_data->data, &out_msgnum, sizeof(out_msgnum)); - memcpy(out_data->data+sizeof(out_msgnum), &out_roomnum, sizeof(out_roomnum)); - strcpy(out_data->data+sizeof(out_msgnum)+sizeof(out_roomnum), euid); + printf("euidindex|%ld|%ld|%s\n", msgnum, roomnum, euid); } -#endif #if 0 @@ -439,9 +399,9 @@ void (*export_functions[])(int which_cdb, DBT *in_key, DBT *in_data) = { export_visit, // CDB_VISIT export_dir, // CDB_DIRECTORY export_usetable, // CDB_USETABLE - zero_function, // CDB_BIGMSGS - zero_function, // CDB_FULLTEXT - zero_function, // CDB_EUIDINDEX + export_bigmsg, // CDB_BIGMSGS + zero_function, // CDB_FULLTEXT (regenerate this on the server) + export_euidindex, // CDB_EUIDINDEX zero_function, // CDB_USERSBYNUMBER zero_function, // CDB_UNUSED1 (obsolete) zero_function // CDB_CONFIG -- 2.39.2