X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fmigrate%2Fserv_migrate.c;h=7c62d34652754747a03a03ab6e433f6e67965d1e;hb=9ffea7c3315046ddcea2589656c13da5f5e0c076;hp=9fc771ec02f59a1a2d98231b27536f12b970a958;hpb=f497f052e1b5d08e98bd539de162a2441436df8e;p=citadel.git
diff --git a/citadel/modules/migrate/serv_migrate.c b/citadel/modules/migrate/serv_migrate.c
index 9fc771ec0..7c62d3465 100644
--- a/citadel/modules/migrate/serv_migrate.c
+++ b/citadel/modules/migrate/serv_migrate.c
@@ -1,7 +1,7 @@
/*
* This module dumps and/or loads the Citadel database in XML format.
*
- * Copyright (c) 1987-2016 by the citadel.org team
+ * Copyright (c) 1987-2019 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3.
@@ -114,21 +114,27 @@ void xml_strout(char *str) {
/*
* Export a user record as XML
*/
-void migr_export_users_backend(struct ctdluser *buf, void *data) {
+void migr_export_users_backend(char *username, void *data) {
+
+ struct ctdluser u;
+ if (CtdlGetUser(&u, username) != 0) {
+ return;
+ }
+
client_write(HKEY("\n"));
- cprintf("%d\n", buf->version);
- cprintf("%ld\n", (long)buf->uid);
- client_write(HKEY("")); xml_strout(buf->password); client_write(HKEY("\n"));
- cprintf("%u\n", buf->flags);
- cprintf("%ld\n", buf->timescalled);
- cprintf("%ld\n", buf->posted);
- cprintf("%d\n", buf->axlevel);
- cprintf("%ld\n", buf->usernum);
- cprintf("%ld\n", (long)buf->lastcall);
- cprintf("%d\n", buf->USuserpurge);
- client_write(HKEY("")); xml_strout(buf->fullname); client_write(HKEY("\n"));
- cprintf("%ld\n", buf->msgnum_bio);
- cprintf("%ld\n", buf->msgnum_pic);
+ cprintf("%d\n", u.version);
+ cprintf("%ld\n", (long)u.uid);
+ client_write(HKEY("")); xml_strout(u.password); client_write(HKEY("\n"));
+ cprintf("%u\n", u.flags);
+ cprintf("%ld\n", u.timescalled);
+ cprintf("%ld\n", u.posted);
+ cprintf("%d\n", u.axlevel);
+ cprintf("%ld\n", u.usernum);
+ cprintf("%ld\n", (long)u.lastcall);
+ cprintf("%d\n", u.USuserpurge);
+ client_write(HKEY("")); xml_strout(u.fullname); client_write(HKEY("\n"));
+ cprintf("%ld\n", u.msgnum_bio);
+ cprintf("%ld\n", u.msgnum_pic);
client_write(HKEY("\n"));
}
@@ -253,7 +259,6 @@ int is_sequence_set(char *s) {
}
-
/*
* Traverse the visits file...
*/
@@ -330,7 +335,6 @@ void migr_export_message(long msgnum) {
cprintf("%d\n", smi.meta_refcount);
cprintf("%ld\n", smi.meta_rfc822_length);
client_write(HKEY("")); xml_strout(smi.meta_content_type); client_write(HKEY("\n"));
- client_write(HKEY("")); xml_strout(smi.mimetype); client_write(HKEY("\n"));
client_write(HKEY(""));
CtdlSerializeMessage(&smr, msg);
@@ -360,14 +364,13 @@ void migr_export_message(long msgnum) {
}
-
void migr_export_openids(void) {
struct cdbdata *cdboi;
long usernum;
char url[512];
- cdb_rewind(CDB_OPENID);
- while (cdboi = cdb_next_item(CDB_OPENID), cdboi != NULL) {
+ cdb_rewind(CDB_EXTAUTH);
+ while (cdboi = cdb_next_item(CDB_EXTAUTH), cdboi != NULL) {
if (cdboi->len > sizeof(long)) {
client_write(HKEY("\n"));
memcpy(&usernum, cdboi->ptr, sizeof(long));
@@ -406,8 +409,6 @@ void migr_export_configs(void) {
}
-
-
void migr_export_messages(void) {
char buf[SIZ];
long msgnum;
@@ -435,16 +436,17 @@ void migr_export_messages(void) {
}
fclose(migr_global_message_list);
}
- if (Ctx->kill_me == 0)
+ if (Ctx->kill_me == 0) {
syslog(LOG_INFO, "Exported %d messages.", count);
- else
+ }
+ else {
syslog(LOG_ERR, "Export aborted due to client disconnect!");
+ }
migr_export_message(-1L); /* This frees the encoding buffer */
}
-
void migr_do_export(void) {
CitContext *Ctx;
@@ -479,8 +481,6 @@ void migr_do_export(void) {
}
-
-
/******************************************************************************
* Import code *
* Here's the code that implements the import side. It's going to end up *
@@ -614,9 +614,10 @@ int migr_roomrecord(void *data, const char *el)
return 1;
}
+
int migr_floorrecord(void *data, const char *el)
{
- if (!strcasecmp(el, "f_num")) floornum = atoi(ChrPtr(migr_chardata));
+ if (!strcasecmp(el, "f_num")) floornum = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "f_flags")) flbuf.f_flags = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "f_name")) safestrncpy(flbuf.f_name, ChrPtr(migr_chardata), sizeof flbuf.f_name);
else if (!strcasecmp(el, "f_ref_count")) flbuf.f_ref_count = atoi(ChrPtr(migr_chardata));
@@ -626,6 +627,7 @@ int migr_floorrecord(void *data, const char *el)
return 1;
}
+
int migr_visitrecord(void *data, const char *el)
{
if (!strcasecmp(el, "v_roomnum")) vbuf.v_roomnum = atol(ChrPtr(migr_chardata));
@@ -712,7 +714,7 @@ void migr_xml_end(void *data, const char *el)
oid_data = malloc(oid_data_len);
memcpy(oid_data, &openid_usernum, sizeof(long));
memcpy(&oid_data[sizeof(long)], openid_url, strlen(openid_url) + 1);
- cdb_store(CDB_OPENID, openid_url, strlen(openid_url), oid_data, oid_data_len);
+ cdb_store(CDB_EXTAUTH, openid_url, strlen(openid_url), oid_data, oid_data_len);
free(oid_data);
syslog(LOG_INFO, "Imported OpenID: %s (%ld)", openid_url, openid_usernum);
}
@@ -781,9 +783,9 @@ void migr_xml_end(void *data, const char *el)
}
/*** VISITS ***/
- else if ((!strncasecmp(el, HKEY("v_"))) &&
- migr_visitrecord(data, el))
+ else if ((!strncasecmp(el, HKEY("v_"))) && migr_visitrecord(data, el)) {
; /* Nothing to do anymore */
+ }
else if (!strcasecmp(el, "visit")) {
put_visit(&vbuf);
syslog(LOG_INFO, "Imported visit: %ld/%ld/%ld", vbuf.v_roomnum, vbuf.v_roomgen, vbuf.v_usernum);
@@ -795,7 +797,6 @@ void migr_xml_end(void *data, const char *el)
else if (!strcasecmp(el, "msg_meta_refcount")) smi.meta_refcount = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "msg_meta_rfc822_length")) smi.meta_rfc822_length = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "msg_meta_content_type")) safestrncpy(smi.meta_content_type, ChrPtr(migr_chardata), sizeof smi.meta_content_type);
- else if (!strcasecmp(el, "msg_mimetype")) safestrncpy(smi.mimetype, ChrPtr(migr_chardata), sizeof smi.mimetype);
else if (!strcasecmp(el, "msg_text"))
{
@@ -820,14 +821,14 @@ void migr_xml_end(void *data, const char *el)
}
syslog(LOG_INFO,
- "%s message #%ld, size=%d, refcount=%d, bodylength=%ld, content-type: %s / %s",
+ "%s message #%ld, size=%d, refcount=%d, bodylength=%ld, content-type: %s",
(rc!= 0)?"failed to import ":"Imported ",
import_msgnum,
StrLength(migr_MsgData),
smi.meta_refcount,
smi.meta_rfc822_length,
- smi.meta_content_type,
- smi.mimetype);
+ smi.meta_content_type
+ );
memset(&smi, 0, sizeof(smi));
}
@@ -837,8 +838,6 @@ void migr_xml_end(void *data, const char *el)
}
-
-
/*
* Import begins here
*/
@@ -867,9 +866,7 @@ void migr_do_import(void) {
client_set_inbound_buf(SIZ * 10);
while (!Finished && client_read_random_blob(Buf, -1) >= 0) {
- if ((StrLength(Buf) > 4) &&
- !strcmp(ChrPtr(Buf) + StrLength(Buf) - 4, "000\n"))
- {
+ if ((StrLength(Buf) > 4) && !strcmp(ChrPtr(Buf) + StrLength(Buf) - 4, "000\n")) {
Finished = 1;
StrBufCutAt(Buf, StrLength(Buf) - 4, NULL);
}
@@ -980,14 +977,13 @@ int migr_restore_message_metadata(long msgnum, int refcount)
smi.meta_rfc822_length = StrLength(CCC->redirect_buffer);
CCC->redirect_buffer = NULL;
-
syslog(LOG_INFO,
- "Setting message #%ld meta data to: refcount=%d, bodylength=%ld, content-type: %s / %s",
+ "Setting message #%ld meta data to: refcount=%d, bodylength=%ld, content-type: %s",
smi.meta_msgnum,
smi.meta_refcount,
smi.meta_rfc822_length,
- smi.meta_content_type,
- smi.mimetype);
+ smi.meta_content_type
+ );
PutMetaData(&smi);
@@ -996,6 +992,7 @@ int migr_restore_message_metadata(long msgnum, int refcount)
return 0;
}
+
void migr_check_room_msg(long msgnum, void *userdata) {
fprintf(migr_global_message_list, "%ld %s\n", msgnum, CC->room.QRname);
}
@@ -1009,6 +1006,7 @@ void migr_check_rooms_backend(struct ctdlroom *buf, void *data) {
CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, NULL, migr_check_room_msg, NULL);
}
+
void RemoveMessagesFromRooms(StrBuf *RoomNameVec, long msgnum) {
struct MetaData smi;
const char *Pos = NULL;
@@ -1021,9 +1019,10 @@ void RemoveMessagesFromRooms(StrBuf *RoomNameVec, long msgnum) {
CtdlDeleteMessages(ChrPtr(oneRoom), &msgnum, 1, "");
};
GetMetaData(&smi, msgnum);
- TDAP_AdjRefCount(msgnum, -smi.meta_refcount);
+ AdjRefCount(msgnum, -smi.meta_refcount);
}
+
void migr_do_restore_meta(void) {
char buf[SIZ];
int failGetMessage;
@@ -1071,14 +1070,16 @@ void migr_do_restore_meta(void) {
}
refcount = 1;
lastnum = msgnum;
- if (prn != NULL)
+ if (prn != NULL) {
StrBufPlain(RoomNames, prn + 1, -1);
+ }
StrBufTrim(RoomNames);
}
else {
if (prn != NULL) {
- if (StrLength(RoomNames) > 0)
+ if (StrLength(RoomNames) > 0) {
StrBufAppendBufPlain(RoomNames, HKEY("|"), 0);
+ }
StrBufAppendBufPlain(RoomNames, prn, -1, 1);
StrBufTrim(RoomNames);
}
@@ -1099,8 +1100,6 @@ void migr_do_restore_meta(void) {
}
-
-
/******************************************************************************
* Dispatcher, Common code *
******************************************************************************/
@@ -1109,8 +1108,7 @@ void cmd_migr(char *cmdbuf) {
if (CtdlAccessCheck(ac_internal)) return;
- if (CtdlTrySingleUser())
- {
+ if (CtdlTrySingleUser()) {
CtdlDisableHouseKeeping();
CtdlMakeTempFileName(migr_tempfilename1, sizeof migr_tempfilename1);
CtdlMakeTempFileName(migr_tempfilename2, sizeof migr_tempfilename2);
@@ -1138,12 +1136,12 @@ void cmd_migr(char *cmdbuf) {
CtdlEnableHouseKeeping();
CtdlEndSingleUser();
}
- else
- {
+ else {
cprintf("%d The migrator is already running.\n", ERROR + RESOURCE_BUSY);
}
}
+
/******************************************************************************
* Module Hook *
******************************************************************************/