X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fmigrate%2Fserv_migrate.c;h=d55f8e9de1c9ad8f424318a93a72d6e299e75a4a;hb=e047988e5cb07d89edeec13afea5c25a52ef26c6;hp=779ff5bed7dd0675fc8d702cbc89fc1370c559ce;hpb=3148ead09dae3e163ef474f11ad34e7097d4839b;p=citadel.git
diff --git a/citadel/modules/migrate/serv_migrate.c b/citadel/modules/migrate/serv_migrate.c
index 779ff5bed..d55f8e9de 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-2018 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.
@@ -157,7 +157,6 @@ void migr_export_rooms_backend(struct ctdlroom *buf, void *data) {
xml_strout(buf->QRdirname);
client_write(HKEY("\n"));
}
- cprintf("%ld\n", buf->QRinfo);
cprintf("%d\n", buf->QRfloor);
cprintf("%ld\n", (long)buf->QRmtime);
cprintf("%d\n", buf->QRep.expire_mode);
@@ -166,6 +165,8 @@ void migr_export_rooms_backend(struct ctdlroom *buf, void *data) {
cprintf("%d\n", buf->QRorder);
cprintf("%u\n", buf->QRflags2);
cprintf("%d\n", buf->QRdefaultview);
+ cprintf("%ld\n", buf->msgnum_info);
+ cprintf("%ld\n", buf->msgnum_pic);
client_write(HKEY("\n"));
/* message list goes inside this tag */
@@ -252,7 +253,6 @@ int is_sequence_set(char *s) {
}
-
/*
* Traverse the visits file...
*/
@@ -329,7 +329,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);
@@ -359,14 +358,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));
@@ -405,8 +403,6 @@ void migr_export_configs(void) {
}
-
-
void migr_export_messages(void) {
char buf[SIZ];
long msgnum;
@@ -434,16 +430,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;
@@ -478,8 +475,6 @@ void migr_do_export(void) {
}
-
-
/******************************************************************************
* Import code *
* Here's the code that implements the import side. It's going to end up *
@@ -592,14 +587,13 @@ int migr_userrecord(void *data, const char *el)
int migr_roomrecord(void *data, const char *el)
{
- if (!strcasecmp(el, "QRname")) safestrncpy(qrbuf.QRname, ChrPtr(migr_chardata), sizeof qrbuf.QRname);
+ if (!strcasecmp(el, "QRname")) safestrncpy(qrbuf.QRname, ChrPtr(migr_chardata), sizeof qrbuf.QRname);
else if (!strcasecmp(el, "QRpasswd")) safestrncpy(qrbuf.QRpasswd, ChrPtr(migr_chardata), sizeof qrbuf.QRpasswd);
else if (!strcasecmp(el, "QRroomaide")) qrbuf.QRroomaide = atol(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRhighest")) qrbuf.QRhighest = atol(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRgen")) qrbuf.QRgen = atol(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRflags")) qrbuf.QRflags = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRdirname")) safestrncpy(qrbuf.QRdirname, ChrPtr(migr_chardata), sizeof qrbuf.QRdirname);
- else if (!strcasecmp(el, "QRinfo")) qrbuf.QRinfo = atol(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRfloor")) qrbuf.QRfloor = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRmtime")) qrbuf.QRmtime = atol(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRexpire_mode")) qrbuf.QRep.expire_mode = atoi(ChrPtr(migr_chardata));
@@ -608,13 +602,16 @@ int migr_roomrecord(void *data, const char *el)
else if (!strcasecmp(el, "QRorder")) qrbuf.QRorder = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRflags2")) qrbuf.QRflags2 = atoi(ChrPtr(migr_chardata));
else if (!strcasecmp(el, "QRdefaultview")) qrbuf.QRdefaultview = atoi(ChrPtr(migr_chardata));
+ else if (!strcasecmp(el, "msgnum_info")) qrbuf.msgnum_info = atol(ChrPtr(migr_chardata));
+ else if (!strcasecmp(el, "msgnum_pic")) qrbuf.msgnum_pic = atol(ChrPtr(migr_chardata));
else return 0;
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));
@@ -624,6 +621,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));
@@ -680,7 +678,7 @@ void migr_xml_end(void *data, const char *el)
syslog(LOG_DEBUG, "Imported config key=%s", ikey);
if (ikey != NULL) {
- CtdlSetConfigStr(ikey, ChrPtr(migr_chardata));
+ CtdlSetConfigStr(ikey, (char *)ChrPtr(migr_chardata));
free(ikey);
ikey = NULL;
}
@@ -710,7 +708,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);
}
@@ -779,9 +777,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);
@@ -793,7 +791,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"))
{
@@ -818,14 +815,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));
}
@@ -835,8 +832,6 @@ void migr_xml_end(void *data, const char *el)
}
-
-
/*
* Import begins here
*/
@@ -865,9 +860,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);
}
@@ -893,7 +886,6 @@ void migr_do_import(void) {
}
-
/******************************************************************************
* Dispatcher, Common code *
******************************************************************************/
@@ -903,14 +895,12 @@ void migr_do_import(void) {
void migr_do_listdirs(void) {
cprintf("%d Don't forget these:\n", LISTING_FOLLOWS);
cprintf("files|%s\n", ctdl_file_dir);
- cprintf("userpics|%s\n", ctdl_usrpic_dir);
cprintf("messages|%s\n", ctdl_message_dir);
cprintf("keys|%s\n", ctdl_key_dir);
- cprintf("images|%s\n", ctdl_image_dir);
- cprintf("info|%s\n", ctdl_info_dir);
cprintf("000\n");
}
+
/******************************************************************************
* Repair database integrity *
******************************************************************************/
@@ -981,14 +971,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);
@@ -997,6 +986,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);
}
@@ -1010,6 +1000,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;
@@ -1022,9 +1013,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;
@@ -1072,14 +1064,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);
}
@@ -1100,8 +1094,6 @@ void migr_do_restore_meta(void) {
}
-
-
/******************************************************************************
* Dispatcher, Common code *
******************************************************************************/
@@ -1110,8 +1102,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);
@@ -1139,12 +1130,12 @@ void cmd_migr(char *cmdbuf) {
CtdlEnableHouseKeeping();
CtdlEndSingleUser();
}
- else
- {
+ else {
cprintf("%d The migrator is already running.\n", ERROR + RESOURCE_BUSY);
}
}
+
/******************************************************************************
* Module Hook *
******************************************************************************/