1
0
mirror of https://github.com/anope/anope.git synced 2026-06-25 03:46:36 +02:00
Files
anope/converter.c
T
dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b 811ce26663 BUILD : 1.6.0 (4) BUGS : none NOTES : File cleanup and new AnopeManager script (bin/am) to work with Anope source control. Version schema change with no impact on cpp directives.
git-svn-id: svn://svn.anope.org/anope/trunk@4 31f1291d-b8d6-0310-a050-a5561fc1590b


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2 5417fbe8-f217-4b02-8779-1006273d7864
2004-03-28 23:00:59 +00:00

399 lines
12 KiB
C

/* Database converters.
*
* (C) 2003 Anope Team
* Contact us at info@anope.org
*
* Please read COPYING and README for furhter details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*
* $Id$
*
*/
#include "services.h"
#include "datafiles.h"
/* Each converter will try to convert the databases to the format used
* by ircservices-4.3 (that is compatible with Epona).
*/
#ifdef USE_CONVERTER
/*************************************************************************/
#define IS43_VERSION 7
#define SAFER(x) do { \
if ((x) < 0) { \
fatal("Read error on %s", rdb); \
return 0; \
} \
} while (0)
#define SAFEW(x) do { \
if ((x) < 0) { \
fatal("Write error on %s", wdb); \
return 0; \
} \
} while (0)
/*************************************************************************/
/*****************************ircservices-4.4*****************************/
/*************************************************************************/
#ifdef IS44_CONVERTER
#define IS44_VERSION 8
#define IS44_CA_SIZE 13
int convert_ircservices_44(void)
{
dbFILE *f, *g; /* f for reading, g for writing */
int c, i, j;
char *rdb, *wdb;
char *tmp;
int16 tmp16;
int32 tmp32;
char nick[NICKMAX];
char pass[PASSMAX];
char chan[CHANMAX];
/* NickServ database */
if (rename("nick.db", "nick.db.old") == -1) {
fatal("Converter: unable to rename nick.db to nick.db.old: %s",
strerror(errno));
return 0;
}
if (!(f = open_db(s_NickServ, "nick.db.old", "r", IS44_VERSION))) {
fatal("Converter: unable to open nick.db.old in read access: %s",
strerror(errno));
return 0;
}
if (!(g = open_db(s_NickServ, NickDBName, "w", IS43_VERSION))) {
fatal("Converter: unable to open %s in write access: %s",
NickDBName, strerror(errno));
return 0;
}
rdb = sstrdup("nick.db.old");
wdb = sstrdup(NickDBName);
get_file_version(f);
for (i = 0; i < 256; i++) {
while ((c = getc_db(f)) == 1) {
if (c != 1)
fatal("Invalid format in %s", wdb);
SAFEW(write_int8(1, g));
SAFER(read_buffer(nick, f));
SAFEW(write_buffer(nick, g));
SAFER(read_buffer(pass, f));
SAFEW(write_buffer(pass, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
if (tmp) {
if (tmp)
free(tmp);
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
} else {
int32 flags;
int16 memocount, accesscount;
SAFER(read_int32(&flags, f));
tmp32 = (flags & ~0x10000000);
SAFEW(write_int32(tmp32, g));
/* Suspend stuff that we don't convert */
if (flags & 0x10000000) {
SAFER(read_buffer(nick, f));
SAFER(read_string(&tmp, f));
if (tmp)
free(tmp);
SAFER(read_int32(&tmp32, f));
SAFER(read_int32(&tmp32, f));
}
SAFER(read_int16(&tmp16, f));
accesscount = tmp16;
SAFEW(write_int16(tmp16, g));
if (accesscount) {
for (j = 0; j < accesscount; j++) {
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
}
}
SAFER(read_int16(&memocount, f));
SAFEW(write_int16(memocount, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
if (memocount) {
for (j = 0; j < memocount; j++) {
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_buffer(nick, f));
SAFEW(write_buffer(nick, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
}
}
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
}
} /* while (getc_db(f) != 0) */
SAFEW(write_int8(0, g));
} /* for (i) */
close_db(f);
close_db(g);
free(rdb);
free(wdb);
/* ChanServ */
rdb = sstrdup("chan.db.old");
wdb = sstrdup(ChanDBName);
if (rename("chan.db", rdb) == -1) {
fatal("Converter: unable to rename chan.db to %s: %s", rdb,
strerror(errno));
return 0;
}
if (!(f = open_db(s_ChanServ, rdb, "r", IS44_VERSION))) {
fatal("Converter: unable to open %s in read access: %s", rdb,
strerror(errno));
return 0;
}
if (!(g = open_db(s_ChanServ, wdb, "w", IS43_VERSION))) {
fatal("Converter: unable to open %s in write access: %s", wdb,
strerror(errno));
return 0;
}
get_file_version(f);
for (i = 0; i < 256; i++) {
while ((c = getc_db(f)) != 0) {
int16 n_levels, accesscount, akickcount, memocount;
if (c != 1)
fatal("Invalid format in %s", wdb);
SAFEW(write_int8(1, g));
SAFER(read_buffer(chan, f));
SAFEW(write_buffer(chan, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_buffer(pass, f));
SAFEW(write_buffer(pass, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_buffer(nick, f));
SAFEW(write_buffer(nick, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int16(&n_levels, f));
SAFEW(write_int16(n_levels, g));
for (j = 0; j < n_levels; j++) {
SAFER(read_int16(&tmp16, f));
if (j < IS44_CA_SIZE)
SAFEW(write_int16(tmp16, g));
}
SAFER(read_int16(&accesscount, f));
SAFEW(write_int16(accesscount, g));
if (accesscount) {
for (j = 0; j < accesscount; j++) {
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
if (tmp16) {
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
}
}
}
SAFER(read_int16(&akickcount, f));
SAFEW(write_int16(akickcount, g));
if (akickcount) {
for (j = 0; j < akickcount; j++) {
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
if (tmp16) {
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_buffer(nick, f));
}
}
}
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
SAFER(read_int16(&memocount, f));
SAFEW(write_int16(memocount, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
if (memocount) {
for (j = 0; j < memocount; j++) {
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_int16(&tmp16, f));
SAFEW(write_int16(tmp16, g));
SAFER(read_int32(&tmp32, f));
SAFEW(write_int32(tmp32, g));
SAFER(read_buffer(nick, f));
SAFER(write_buffer(nick, g));
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
}
}
SAFER(read_string(&tmp, f));
SAFEW(write_string(tmp, g));
if (tmp)
free(tmp);
} /* while (getc_db(f) != 0) */
SAFEW(write_int8(0, g));
} /* for (i) */
close_db(f);
close_db(g);
free(rdb);
free(wdb);
return 1;
}
#endif
/*************************************************************************/
#endif
/*************************************************************************/