void trusts_reloaddb(void);
void createtrusttables(int migration);
-int trusts_loaddb(void) {
- trustsdb = dbapi2open(NULL, "trusts");
- if(!trustsdb) {
- Error("trusts", ERR_WARNING, "Unable to connect to db -- not loaded.");
- return 0;
- }
-
- createtrusttables(0);
-
- trusts_reloaddb();
- return 1;
-}
-
void createtrusttables(int migration) {
char *groups, *hosts;
trustsdb->createtable(trustsdb, NULL, NULL, "CREATE TABLE ? (groupid INT, host VARCHAR(?), max INT, lastseen INT, PRIMARY KEY (groupid, host))", "Td", hosts, TRUSTHOSTLEN);
}
-static void trusts_freedb(void) {
- trusts_freeall();
+static void loadcomplete(void ) {
+ /* error has already been shown */
+ if(loaderror)
+ return;
- trustsdbloaded = 0;
- tgmaxid = 0;
+ trustsdbloaded = 1;
+ triggerhook(HOOK_TRUSTS_DB_LOADED, NULL);
}
static void loadhosts_data(const DBAPIResult *result, void *tag) {
result->clear(result);
- if(!loaderror) {
- trustsdbloaded = 1;
- triggerhook(HOOK_TRUSTS_DB_LOADED, NULL);
- }
+ loadcomplete();
}
static void loadhosts_fini(const DBAPIResult *result, void *tag) {
Error("trusts", ERR_INFO, "Finished loading groups, maximum id: %d.", tgmaxid);
}
-void trusts_reloaddb(void) {
- trusts_freedb();
+int trusts_loaddb(void) {
+ trustsdb = dbapi2open(NULL, "trusts");
+ if(!trustsdb) {
+ Error("trusts", ERR_WARNING, "Unable to connect to db -- not loaded.");
+ return 0;
+ }
+
+ createtrusttables(0);
loaderror = 0;
trustsdb->loadtable(trustsdb, NULL, loadgroups_data, loadgroups_fini, NULL, "groups");
trustsdb->loadtable(trustsdb, NULL, loadhosts_data, loadhosts_fini, NULL, "hosts");
+
+ return 1;
}
void trusts_closedb(void) {
if(!trustsdb)
return;
+ trusts_freeall();
+ trustsdbloaded = 0;
+ tgmaxid = 0;
+
trustsdb->close(trustsdb);
trustsdb = NULL;
}
#include "../core/hooks.h"
#include "trusts.h"
-static int eventsregistered;
-
static void __newnick(int hooknum, void *arg) {
nick *sender = arg;
uint32_t host;
int i;
nick *np;
- eventsregistered = 1;
-
registerhook(HOOK_NICK_NEWNICK, __newnick);
registerhook(HOOK_NICK_LOSTNICK, __lostnick);
}
void trusts_deregisterevents(void) {
- if(eventsregistered) {
+ if(trustsdbloaded) {
deregisterhook(HOOK_NICK_NEWNICK, __newnick);
deregisterhook(HOOK_NICK_LOSTNICK, __lostnick);
static void statusfn(int hooknum, void *arg) {
if((long)arg > 10) {
char message[100];
- int groupcount = 0, hostcount = 0;
+ int groupcount = 0, hostcount = 0, usercount = 0;
trustgroup *tg;
trusthost *th;
for(tg=tglist;tg;tg=tg->next) {
+ usercount+=tg->count;
groupcount++;
for(th=tg->hosts;th;th=th->next)
hostcount++;
}
- snprintf(message, sizeof(message), "Trusts : %d trust groups, %d hosts", groupcount, hostcount);
+ snprintf(message, sizeof(message), "Trusts :%7d groups, %7d hosts, %7d users", groupcount, hostcount, usercount);
triggerhook(HOOK_CORE_STATSREPLY, message);
}
}
static void registercommands(void);
static void deregistercommands(void);
-static int commandsregistered;
-
static void migrate_status(int errcode, void *tag) {
long sender = (long)tag;
nick *np = getnickbynumeric(sender);
return;
if(!errcode) {
- controlreply(np, "Migration complete.");
- trusts_reloaddb();
+ controlreply(np, "Migration complete, you must reload the module.");
} else {
- controlreply(np, "Error %d occured during migration.", errcode);
+ controlreply(np, "Error %d occured during migration, commands reregistered.", errcode);
registercommands();
}
}
/* iffy but temporary */
ret = trusts_migration_start(migrate_status, (void *)(sender->numeric));
if(!ret) {
- controlreply(sender, "Migration started.");
+ controlreply(sender, "Migration started, commands deregistered.");
deregistercommands();
} else {
controlreply(sender, "Error %d starting migration.", ret);
}
static void registercommands(void) {
- if(!trustsdbloaded || commandsregistered)
- return;
-
- commandsregistered = 1;
-
registercontrolhelpcmd("trustmigrate", NO_OPER, 0, trusts_cmdmigrate, "Usage: trustmigrate\nCopies trust data from O and reloads the database.");
registercontrolhelpcmd("trustlist", NO_OPER, 1, trusts_cmdtrustlist, "Usage: trustlist <#id|name|id>\nShows trust data for the specified trust group.");
}
static void deregistercommands(void) {
- if(!commandsregistered)
+ if(!trustsdbloaded)
return;
deregistercontrolcmd("trustmigrate", trusts_cmdmigrate);
deregistercontrolcmd("trustlist", trusts_cmdtrustlist);
- commandsregistered = 0;
}