ctdldump: export euidindex
authorArt Cancro <ajc@citadel.org>
Wed, 12 Jul 2023 01:59:55 +0000 (16:59 -0900)
committerArt Cancro <ajc@citadel.org>
Wed, 12 Jul 2023 01:59:55 +0000 (16:59 -0900)
citadel/utils/ctdldump.c

index 962081c5d6d636b5a5482b362f93cb5a050d6d66..4a548c41019370556c52653fe9584d4685f8218b 100644 (file)
@@ -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