#include "../server/sysdep.h"
#include "../server/citadel_defs.h"
#include "../server/server.h"
+#include "../server/makeuserkey.h"
#include "../server/citadel_dirs.h"
}
+// Convert a "user" record to a record on disk. NOT THREADSAFE
+int convert_user(char *line, DBT *out_key, DBT *out_data) {
+ char userkey[USERNAME_SIZE];
+ char *token;
+ struct ctdluser *u = malloc(sizeof(struct ctdluser));
+
+ memset(u, 0, sizeof(struct ctdluser));
+ char *p = line;
+
+ for (int i=0; (token = strsep(&p, "|")); ++i) {
+ switch(i) {
+ case 1:
+ u->version = atoi(token);
+ break;
+ case 2:
+ u->uid = atoi(token);
+ break;
+ case 3:
+ strncpy(u->password, token, sizeof(u->password));
+ break;
+ case 4:
+ u->flags = atoi(token);
+ break;
+ case 5:
+ u->axlevel = atoi(token);
+ break;
+ case 6:
+ u->usernum = atol(token);
+ break;
+ case 7:
+ u->lastcall = atol(token);
+ break;
+ case 8:
+ u->USuserpurge = atoi(token);
+ break;
+ case 9:
+ strncpy(u->fullname, token, sizeof(u->fullname));
+ break;
+ case 10:
+ u->msgnum_bio = atol(token);
+ break;
+ case 11:
+ u->msgnum_pic = atol(token);
+ break;
+ case 12:
+ CtdlDecodeBase64(u->emailaddrs, token, strlen(token));
+ break;
+ case 13:
+ u->msgnum_inboxrules = atol(token);
+ break;
+ case 14:
+ u->lastproc_inboxrules = atol(token);
+ break;
+ }
+ }
+
+ makeuserkey(userkey, u->fullname);
+ out_key->size = strlen(userkey);
+ out_key->data = strdup(userkey);
+ out_data->size = sizeof(struct ctdluser);
+ out_data->data = u;
+ return(1);
+}
+
+
// Ingest one line of dump data. NOT REENTRANT
void ingest_one(char *line, DB_ENV *dst_dbenv) {
if (current_cdb != previous_cdb) {
if (previous_cdb >= 0) {
- fprintf(stderr, "Close %d\n", previous_cdb);
ret = dst_dbp->close(dst_dbp, 0);
if (ret) {
fprintf(stderr, "db: db_close: %s\n", db_strerror(ret));
}
if (current_cdb >= 0) {
- fprintf(stderr, " Open %d\n", current_cdb);
snprintf(dbfilename, sizeof dbfilename, "cdb.%02x", current_cdb);
// create a database handle for the destination table
row_was_good = 0;
if (!strcasecmp(record_type, "msgtext")) row_was_good = convert_msgtext(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "msgmeta")) row_was_good = convert_msgmeta(line, &out_key, &out_data);
- else if (!strcasecmp(record_type, "user")) row_was_good = convert_foo(line, &out_key, &out_data);
+ else if (!strcasecmp(record_type, "user")) row_was_good = convert_user(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "room")) row_was_good = convert_foo(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "floor")) row_was_good = convert_foo(line, &out_key, &out_data);
else if (!strcasecmp(record_type, "msglist")) row_was_good = convert_foo(line, &out_key, &out_data);