]> jfr.im git - irc/quakenet/newserv.git/blob - trusts/trusts_migration.c
CHANSERV: tell user when they can't attempts to auth any more, and drop max attempts...
[irc/quakenet/newserv.git] / trusts / trusts_migration.c
1 #include "../lib/version.h"
2 #include "../control/control.h"
3 #include "../lib/irc_string.h"
4 #include "../core/config.h"
5 #include "trusts.h"
6
7 MODULE_VERSION("");
8
9 int trusts_migration_start(TrustDBMigrationCallback, void *);
10 void trusts_migration_stop(void);
11 static void registercommands(int, void *);
12 static void deregistercommands(int, void *);
13
14 static void migrate_status(int errcode, void *tag) {
15 long sender = (long)tag;
16 nick *np = getnickbynumeric(sender);
17
18 if(!np)
19 return;
20
21 if(!errcode || errcode == MIGRATION_LASTERROR) {
22 if(!errcode) {
23 controlreply(np, "Migration complete.");
24 controlreply(np, "Attempting to reload database. . .");
25 } else {
26 controlreply(np, "An error occured after the database was unloaded, attempting reload. . .");
27 }
28 if(trusts_loaddb()) {
29 controlreply(np, "Database reloaded successfully.");
30 } else {
31 controlreply(np, "An error occured, please reload the module manually.");
32 }
33 } else {
34 controlreply(np, "Error %d occured during migration, commands reregistered.", errcode);
35 registercommands(0, NULL);
36 }
37 }
38
39 static int trusts_cmdmigrate(void *source, int cargc, char **cargv) {
40 nick *sender = source;
41 int ret;
42
43 /* iffy but temporary */
44 ret = trusts_migration_start(migrate_status, (void *)(sender->numeric));
45 if(!ret) {
46 controlreply(sender, "Migration started, commands deregistered.");
47 deregistercommands(0, NULL);
48 } else {
49 controlreply(sender, "Error %d starting migration.", ret);
50 }
51
52 return CMD_OK;
53 }
54
55 static int commandsregistered;
56
57 static void registercommands(int hooknum, void *arg) {
58 if(commandsregistered)
59 return;
60 commandsregistered = 1;
61
62 registercontrolhelpcmd("trustmigrate", NO_DEVELOPER, 0, trusts_cmdmigrate, "Usage: trustmigrate\nCopies trust data from O and reloads the database.");
63 }
64
65 static void deregistercommands(int hooknum, void *arg) {
66 if(!commandsregistered)
67 return;
68 commandsregistered = 0;
69
70 deregistercontrolcmd("trustmigrate", trusts_cmdmigrate);
71 }
72
73 static int loaded = 0;
74 void _init(void) {
75 sstring *m;
76
77 m = getconfigitem("trusts", "master");
78 if(!m || (atoi(m->content) != 1)) {
79 Error("trusts_migrationr", ERR_ERROR, "Not a master server, not loaded.");
80 return;
81 }
82
83 loaded = 1;
84
85 registerhook(HOOK_TRUSTS_DB_LOADED, registercommands);
86 registerhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
87
88 if(trustsdbloaded)
89 registercommands(0, NULL);
90 }
91
92 void _fini(void) {
93 if(!loaded)
94 return;
95
96 deregisterhook(HOOK_TRUSTS_DB_LOADED, registercommands);
97 deregisterhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
98
99 trusts_migration_stop();
100
101 deregistercommands(0, NULL);
102 }