1
0
mirror of https://github.com/anope/anope.git synced 2026-07-05 07:13:13 +02:00

# BUILD : 1.7.14 (1096) # BUGS : 536 # NOTES : Fixed win32 versions of db-merger.c and epona2anope.c

git-svn-id: svn://svn.anope.org/anope/trunk@1096 31f1291d-b8d6-0310-a050-a5561fc1590b


git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@820 5417fbe8-f217-4b02-8779-1006273d7864
This commit is contained in:
certus certus@31f1291d-b8d6-0310-a050-a5561fc1590b
2006-07-20 18:31:23 +00:00
parent 2e91131c2a
commit d1f69f78ac
4 changed files with 114 additions and 87 deletions
+1
View File
@@ -46,6 +46,7 @@ Provided by Anope Dev. <dev@anope.org> - 2006
07/13 F Fixed socket buffering, hopefully should make inspircd play nice. [ #00]
07/14 F Removed old HAS_RTLD_LOCAL check. [#541]
07/20 F Removed bold chars from botserv langauge files. [#530]
07/20 F Fixed win32 versions of db-merger.c and epona2anope.c. [#536]
Provided by ThaPrince <jon@vile.com> - 2006
05/19 A Plexus 3 support. [ #00]
+94 -82
View File
@@ -1,3 +1,41 @@
/*
* IRC - Internet Relay Chat, db-merger.c
* (C) Copyright 2005, Florian Schulze (Certus)
*
* Based on the original code of Anope, (C) 2003 Anope Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (see it online
* at http://www.gnu.org/copyleft/gpl.html) as published by the Free
* Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This program tries to merge two standard anope-1.7.7+ database sets,
* that includes chanserv, nickserv, botserv and memoserv databases.
*
* - Certus
* February 11, 2005
*
*
* 0.2 beta:
* Fixed some overflows in the ->flags and the ->status fields. Use db-fix
* to fix your broken nick dbs.
*
* - Certus
* August 04, 2005
*
*
* 0.3 beta:
* Fixed win32 stuff. Merging should now work fine under windows.
*
* - Certus
* July 20, 2006
*/
#include <stdlib.h>
#include <string.h>
@@ -10,6 +48,7 @@
#include <unistd.h>
#else
#include "sysconf.h"
#include <windows.h>
#endif
/* Some SUN fixs */
@@ -247,9 +286,7 @@ int delnick(NickAlias *na, int donttouchthelist);
int write_string(const char *s, dbFILE * f);
int write_ptr(const void *ptr, dbFILE * f);
int read_int16(int16 * ret, dbFILE * f);
int read_uint16(uint16 * ret, dbFILE * f);
int read_int32(int32 * ret, dbFILE * f);
int read_uint32(uint32 * ret, dbFILE * f);
int read_string(char **ret, dbFILE * f);
int write_int16(uint16 val, dbFILE * f);
int write_int32(uint32 val, dbFILE * f);
@@ -274,7 +311,7 @@ int main(int argc, char *argv[])
NickCore *nc, *ncnext;
HostCore *firsthc = NULL;
printf("\n"C_LBLUE"DB Merger v0.2 beta for Anope IRC Services by Certus"C_NONE"\n\n");
printf("\n"C_LBLUE"DB Merger v0.3 beta for Anope IRC Services by Certus"C_NONE"\n\n");
if (argc >= 2) {
if (!mystricmp(argv[1], "--PREFEROLDEST")) {
@@ -300,7 +337,7 @@ int main(int argc, char *argv[])
NickCore *nc, **nclast, *ncprev;
int16 tmp16;
int32 tmp32;
int i, j, c, mycount = 0;
int i, j, c;
printf("Trying to merge nicks...\n");
@@ -325,15 +362,14 @@ int main(int argc, char *argv[])
ncprev = nc;
READ(read_string(&nc->display, f));
mycount++;
READ(read_string(&nc->pass, f));
READ(read_string(&nc->email, f));
READ(read_string(&nc->greet, f));
READ(read_uint32(&nc->icq, f));
READ(read_int32(&nc->icq, f));
READ(read_string(&nc->url, f));
READ(read_uint32(&nc->flags, f));
READ(read_uint16(&nc->language, f));
READ(read_uint16(&nc->accesscount, f));
READ(read_int32(&nc->flags, f));
READ(read_int16(&nc->language, f));
READ(read_int16(&nc->accesscount, f));
if (nc->accesscount) {
char **access;
access = calloc(sizeof(char *) * nc->accesscount, 1);
@@ -348,20 +384,19 @@ int main(int argc, char *argv[])
memos = calloc(sizeof(Memo) * nc->memos.memocount, 1);
nc->memos.memos = memos;
for (j = 0; j < nc->memos.memocount; j++, memos++) {
READ(read_uint32(&memos->number, f));
READ(read_uint16(&memos->flags, f));
READ(read_int32(&memos->number, f));
READ(read_int16(&memos->flags, f));
READ(read_int32(&tmp32, f));
memos->time = tmp32;
READ(read_buffer(memos->sender, f));
READ(read_string(&memos->text, f));
}
}
READ(read_uint16(&nc->channelcount, f));
READ(read_int16(&nc->channelcount, f));
READ(read_int16(&tmp16, f));
} /* getc_db() */
*nclast = NULL;
} /* for() loop */
printf("mycount is %d\n", mycount);
/* Nick aliases */
for (i = 0; i < 1024; i++) {
@@ -387,7 +422,7 @@ int main(int argc, char *argv[])
na->time_registered = tmp32;
READ(read_int32(&tmp32, f));
na->last_seen = tmp32;
READ(read_uint16(&na->status, f));
READ(read_int16(&na->status, f));
READ(read_string(&s, f));
na->nc = findcore(s, 0);
na->nc->aliascount++;
@@ -444,11 +479,11 @@ int main(int argc, char *argv[])
nclists[index] = nc;
READ(read_string(&nc->greet, f));
READ(read_uint32(&nc->icq, f));
READ(read_int32(&nc->icq, f));
READ(read_string(&nc->url, f));
READ(read_uint32(&nc->flags, f));
READ(read_uint16(&nc->language, f));
READ(read_uint16(&nc->accesscount, f));
READ(read_int32(&nc->flags, f));
READ(read_int16(&nc->language, f));
READ(read_int16(&nc->accesscount, f));
if (nc->accesscount) {
char **access;
access = calloc(sizeof(char *) * nc->accesscount, 1);
@@ -463,15 +498,15 @@ int main(int argc, char *argv[])
memos = calloc(sizeof(Memo) * nc->memos.memocount, 1);
nc->memos.memos = memos;
for (j = 0; j < nc->memos.memocount; j++, memos++) {
READ(read_uint32(&memos->number, f));
READ(read_uint16(&memos->flags, f));
READ(read_int32(&memos->number, f));
READ(read_int16(&memos->flags, f));
READ(read_int32(&tmp32, f));
memos->time = tmp32;
READ(read_buffer(memos->sender, f));
READ(read_string(&memos->text, f));
}
}
READ(read_uint16(&nc->channelcount, f));
READ(read_int16(&nc->channelcount, f));
READ(read_int16(&tmp16, f));
} /* getc_db() */
} /* for() loop */
@@ -497,7 +532,7 @@ int main(int argc, char *argv[])
na->time_registered = tmp32;
READ(read_int32(&tmp32, f));
na->last_seen = tmp32;
READ(read_uint16(&na->status, f));
READ(read_int16(&na->status, f));
READ(read_string(&s, f));
naptr = findnick(na->nick);
@@ -601,15 +636,13 @@ int main(int argc, char *argv[])
NickCore *nc;
char **access;
Memo *memos;
int i, j, mycount = 0;
int i, j;
/* Nick cores */
for (i = 0; i < 1024; i++) {
for (nc = nclists[i]; nc; nc = nc->next) {
SAFE(write_int8(1, f));
mycount++;
SAFE(write_string(nc->display, f));
printf("Writing entry for nick %s\n", nc->display);
SAFE(write_string(nc->pass, f));
SAFE(write_string(nc->email, f));
SAFE(write_string(nc->greet, f));
@@ -636,7 +669,6 @@ int main(int argc, char *argv[])
} /* for (nc) */
SAFE(write_int8(0, f));
} /* for (i) */
printf("%d nicks merged\n", mycount);
/* Nick aliases */
for (i = 0; i < 1024; i++) {
@@ -708,7 +740,7 @@ int main(int argc, char *argv[])
READ(read_buffer(ci->last_topic_setter, f));
READ(read_int32(&tmp32, f));
ci->last_topic_time = tmp32;
READ(read_uint32(&ci->flags, f));
READ(read_int32(&ci->flags, f));
/* Temporary flags cleanup */
ci->flags &= ~0x80000000;
READ(read_string(&ci->forbidby, f));
@@ -724,11 +756,11 @@ int main(int argc, char *argv[])
else
READ(read_int16(&tmp16, f));
}
READ(read_uint16(&ci->accesscount, f));
READ(read_int16(&ci->accesscount, f));
if (ci->accesscount) {
ci->access = calloc(ci->accesscount, sizeof(ChanAccess));
for (j = 0; j < ci->accesscount; j++) {
READ(read_uint16(&ci->access[j].in_use, f));
READ(read_int16(&ci->access[j].in_use, f));
if (ci->access[j].in_use) {
READ(read_int16(&ci->access[j].level, f));
READ(read_string(&s, f));
@@ -745,11 +777,11 @@ int main(int argc, char *argv[])
} else {
ci->access = NULL;
}
READ(read_uint16(&ci->akickcount, f));
READ(read_int16(&ci->akickcount, f));
if (ci->akickcount) {
ci->akick = calloc(ci->akickcount, sizeof(AutoKick));
for (j = 0; j < ci->akickcount; j++) {
SAFE(read_uint16(&ci->akick[j].flags, f));
SAFE(read_int16(&ci->akick[j].flags, f));
if (ci->akick[j].flags & 0x0001) {
SAFE(read_string(&s, f));
if (ci->akick[j].flags & 0x0002) {
@@ -779,9 +811,9 @@ int main(int argc, char *argv[])
} else {
ci->akick = NULL;
}
READ(read_uint32(&ci->mlock_on, f));
READ(read_uint32(&ci->mlock_off, f));
READ(read_uint32(&ci->mlock_limit, f));
READ(read_int32(&ci->mlock_on, f));
READ(read_int32(&ci->mlock_off, f));
READ(read_int32(&ci->mlock_limit, f));
READ(read_string(&ci->mlock_key, f));
READ(read_string(&ci->mlock_flood, f));
READ(read_string(&ci->mlock_redirect, f));
@@ -792,8 +824,8 @@ int main(int argc, char *argv[])
memos = calloc(sizeof(Memo) * ci->memos.memocount, 1);
ci->memos.memos = memos;
for (j = 0; j < ci->memos.memocount; j++, memos++) {
READ(read_uint32(&memos->number, f));
READ(read_uint16(&memos->flags, f));
READ(read_int32(&memos->number, f));
READ(read_int16(&memos->flags, f));
READ(read_int32(&tmp32, f));
memos->time = tmp32;
READ(read_buffer(memos->sender, f));
@@ -828,14 +860,14 @@ int main(int argc, char *argv[])
READ(read_int16(&tmp16, f));
ci->repeattimes = tmp16;
READ(read_uint16(&ci->bwcount, f));
READ(read_int16(&ci->bwcount, f));
if (ci->bwcount) {
ci->badwords = calloc(ci->bwcount, sizeof(BadWord));
for (j = 0; j < ci->bwcount; j++) {
SAFE(read_uint16(&ci->badwords[j].in_use, f));
SAFE(read_int16(&ci->badwords[j].in_use, f));
if (ci->badwords[j].in_use) {
SAFE(read_string(&ci->badwords[j].word, f));
SAFE(read_uint16(&ci->badwords[j].type, f));
SAFE(read_int16(&ci->badwords[j].type, f));
}
}
} else {
@@ -890,7 +922,7 @@ int main(int argc, char *argv[])
READ(read_buffer(ci->last_topic_setter, f));
READ(read_int32(&tmp32, f));
ci->last_topic_time = tmp32;
READ(read_uint32(&ci->flags, f));
READ(read_int32(&ci->flags, f));
/* Temporary flags cleanup */
ci->flags &= ~0x80000000;
READ(read_string(&ci->forbidby, f));
@@ -906,11 +938,11 @@ int main(int argc, char *argv[])
else
READ(read_int16(&tmp16, f));
}
READ(read_uint16(&ci->accesscount, f));
READ(read_int16(&ci->accesscount, f));
if (ci->accesscount) {
ci->access = calloc(ci->accesscount, sizeof(ChanAccess));
for (j = 0; j < ci->accesscount; j++) {
READ(read_uint16(&ci->access[j].in_use, f));
READ(read_int16(&ci->access[j].in_use, f));
if (ci->access[j].in_use) {
READ(read_int16(&ci->access[j].level, f));
READ(read_string(&s, f));
@@ -927,11 +959,11 @@ int main(int argc, char *argv[])
} else {
ci->access = NULL;
}
READ(read_uint16(&ci->akickcount, f));
READ(read_int16(&ci->akickcount, f));
if (ci->akickcount) {
ci->akick = calloc(ci->akickcount, sizeof(AutoKick));
for (j = 0; j < ci->akickcount; j++) {
SAFE(read_uint16(&ci->akick[j].flags, f));
SAFE(read_int16(&ci->akick[j].flags, f));
if (ci->akick[j].flags & 0x0001) {
SAFE(read_string(&s, f));
if (ci->akick[j].flags & 0x0002) {
@@ -961,9 +993,9 @@ int main(int argc, char *argv[])
} else {
ci->akick = NULL;
}
READ(read_uint32(&ci->mlock_on, f));
READ(read_uint32(&ci->mlock_off, f));
READ(read_uint32(&ci->mlock_limit, f));
READ(read_int32(&ci->mlock_on, f));
READ(read_int32(&ci->mlock_off, f));
READ(read_int32(&ci->mlock_limit, f));
READ(read_string(&ci->mlock_key, f));
READ(read_string(&ci->mlock_flood, f));
READ(read_string(&ci->mlock_redirect, f));
@@ -974,8 +1006,8 @@ int main(int argc, char *argv[])
memos = calloc(sizeof(Memo) * ci->memos.memocount, 1);
ci->memos.memos = memos;
for (j = 0; j < ci->memos.memocount; j++, memos++) {
READ(read_uint32(&memos->number, f));
READ(read_uint16(&memos->flags, f));
READ(read_int32(&memos->number, f));
READ(read_int16(&memos->flags, f));
READ(read_int32(&tmp32, f));
memos->time = tmp32;
READ(read_buffer(memos->sender, f));
@@ -1010,14 +1042,14 @@ int main(int argc, char *argv[])
READ(read_int16(&tmp16, f));
ci->repeattimes = tmp16;
READ(read_uint16(&ci->bwcount, f));
READ(read_int16(&ci->bwcount, f));
if (ci->bwcount) {
ci->badwords = calloc(ci->bwcount, sizeof(BadWord));
for (j = 0; j < ci->bwcount; j++) {
SAFE(read_uint16(&ci->badwords[j].in_use, f));
SAFE(read_int16(&ci->badwords[j].in_use, f));
if (ci->badwords[j].in_use) {
SAFE(read_string(&ci->badwords[j].word, f));
SAFE(read_uint16(&ci->badwords[j].type, f));
SAFE(read_int16(&ci->badwords[j].type, f));
}
}
} else {
@@ -1630,7 +1662,7 @@ dbFILE *open_db_read(const char *service, const char *filename, int version)
}
/* Open a database file for reading and check for the version */
dbFILE *open_db_write(const char *service, const char *filename, int version)
dbFILE *open_db_write(const char *service, const char *filename, uint32 version)
{
dbFILE *f;
int fd;
@@ -1643,14 +1675,21 @@ dbFILE *open_db_write(const char *service, const char *filename, int version)
strscpy(f->filename, filename, sizeof(f->filename));
filename = f->filename;
f->mode = 'w';
/* Use open() to avoid people sneaking a new file in under us */
#ifndef _WIN32
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
#else
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL | _O_BINARY, 0666);
#endif
f->fp = fdopen(fd, "wb"); /* will fail and return NULL if fd < 0 */
if (!f->fp || !write_file_version(f, version)) {
printf("Can't write to %s database %s.\n", service, filename);
if (f->fp) {
fclose(f->fp);
#ifndef _WIN32
unlink(filename);
#else
DeleteFile(filename);
#endif
}
free(f);
return NULL;
@@ -1677,18 +1716,6 @@ int read_int16(int16 * ret, dbFILE * f)
return 0;
}
int read_uint16(uint16 * ret, dbFILE * f)
{
int c1, c2;
c1 = fgetc(f->fp);
c2 = fgetc(f->fp);
if (c1 == EOF || c2 == EOF)
return -1;
*ret = c1 << 8 | c2;
return 0;
}
int write_int16(uint16 val, dbFILE * f)
{
if (fputc((val >> 8) & 0xFF, f->fp) == EOF
@@ -1697,7 +1724,6 @@ int write_int16(uint16 val, dbFILE * f)
return 0;
}
int read_int32(int32 * ret, dbFILE * f)
{
int c1, c2, c3, c4;
@@ -1712,20 +1738,6 @@ int read_int32(int32 * ret, dbFILE * f)
return 0;
}
int read_uint32(uint32 * ret, dbFILE * f)
{
int c1, c2, c3, c4;
c1 = fgetc(f->fp);
c2 = fgetc(f->fp);
c3 = fgetc(f->fp);
c4 = fgetc(f->fp);
if (c1 == EOF || c2 == EOF || c3 == EOF || c4 == EOF)
return -1;
*ret = c1 << 24 | c2 << 16 | c3 << 8 | c4;
return 0;
}
int write_int32(uint32 val, dbFILE * f)
{
if (fputc((val >> 24) & 0xFF, f->fp) == EOF)
@@ -1764,7 +1776,7 @@ int read_string(char **ret, dbFILE * f)
char *s;
uint16 len;
if (read_uint16(&len, f) < 0)
if (read_int16(&len, f) < 0)
return -1;
if (len == 0) {
*ret = NULL;
+13 -1
View File
@@ -19,6 +19,10 @@
*
* - Certus
* February 26, 2005
*
* Added win32 fix. Who needs that anyways? :P
* - Certus
* July 20, 2006
*/
@@ -33,6 +37,7 @@
#include <unistd.h>
#else
#include "sysconf.h"
#include <windows.h>
#endif
/* Some SUN fixs */
@@ -593,14 +598,21 @@ dbFILE *open_db_write(const char *service, const char *filename, int version)
strscpy(f->filename, filename, sizeof(f->filename));
filename = f->filename;
f->mode = 'w';
/* Use open() to avoid people sneaking a new file in under us */
#ifndef _WIN32
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
#else
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL | _O_BINARY, 0666);
#endif
f->fp = fdopen(fd, "wb"); /* will fail and return NULL if fd < 0 */
if (!f->fp || !write_file_version(f, version)) {
printf("Can't write to %s database %s.\n", service, filename);
if (f->fp) {
fclose(f->fp);
#ifndef _WIN32
unlink(filename);
#else
DeleteFile(filename);
#endif
}
free(f);
return NULL;
+6 -4
View File
@@ -9,19 +9,21 @@ VERSION_MAJOR="1"
VERSION_MINOR="7"
VERSION_PATCH="14"
VERSION_EXTRA=""
VERSION_BUILD="1095"
VERSION_BUILD="1096"
# $Log$
#
# BUILD : 1.7.14 (1096)
# BUGS : 536
# NOTES : Fixed win32 versions of db-merger.c and epona2anope.c
#
# BUILD : 1.7.14 (1095)
# BUGS : 554
# NOTES : Applied heinzs manifest patch
#
#
# BUILD : 1.7.14 (1094)
# BUGS : 530
# NOTES : Applied marks botserv bold striping patch
#
# NOTES : Applied marks botserv bold striping patch
#
# BUILD : 1.7.14 (1093)
# BUGS :