]> jfr.im git - irc/quakenet/newserv.git/blob - trusts/trusts_commands.c
Merge.
[irc/quakenet/newserv.git] / trusts / trusts_commands.c
1 #include "../control/control.h"
2 #include "../lib/irc_string.h"
3 #include "trusts.h"
4
5 int trusts_migration_start(TrustDBMigrationCallback, void *);
6 void trusts_migration_stop(void);
7 static void registercommands(int, void *);
8 static void deregistercommands(int, void *);
9
10 static void migrate_status(int errcode, void *tag) {
11 long sender = (long)tag;
12 nick *np = getnickbynumeric(sender);
13
14 if(!np)
15 return;
16
17 if(!errcode || errcode == MIGRATION_LASTERROR) {
18 if(!errcode) {
19 controlreply(np, "Migration complete.");
20 controlreply(np, "Attempting to reload database. . .");
21 } else {
22 controlreply(np, "An error occured after the database was unloaded, attempting reload. . .");
23 }
24 if(trusts_loaddb()) {
25 controlreply(np, "Database reloaded successfully.");
26 } else {
27 controlreply(np, "An error occured, please reload the module manually.");
28 }
29 } else {
30 controlreply(np, "Error %d occured during migration, commands reregistered.", errcode);
31 registercommands(0, NULL);
32 }
33 }
34
35 static int trusts_cmdmigrate(void *source, int cargc, char **cargv) {
36 nick *sender = source;
37 int ret;
38
39 /* iffy but temporary */
40 ret = trusts_migration_start(migrate_status, (void *)(sender->numeric));
41 if(!ret) {
42 controlreply(sender, "Migration started, commands deregistered.");
43 deregistercommands(0, NULL);
44 } else {
45 controlreply(sender, "Error %d starting migration.", ret);
46 }
47
48 return CMD_OK;
49 }
50
51 static int trusts_cmdtrustlist(void *source, int cargc, char **cargv) {
52 nick *sender = source;
53 trustgroup *tg;
54 trusthost *th;
55 time_t t;
56
57 if(cargc < 1)
58 return CMD_USAGE;
59
60 tg = tg_strtotg(cargv[0]);
61 if(!tg) {
62 controlreply(sender, "Couldn't find a trustgroup with that id.");
63 return CMD_ERROR;
64 }
65
66 t = time(NULL);
67
68 controlreply(sender, "Name: : %s", tg->name->content);
69 controlreply(sender, "Trusted for : %d", tg->trustedfor);
70 controlreply(sender, "Currently using : %d", tg->count);
71 controlreply(sender, "Clients per user : %d (%senforcing ident)", tg->maxperident, tg->mode?"":"not ");
72 controlreply(sender, "Contact: : %s", tg->contact->content);
73 controlreply(sender, "Expires in : %s", (tg->expires>t)?longtoduration(tg->expires - t, 2):"(in the past)");
74 controlreply(sender, "Last changed by : %s", tg->createdby->content);
75 controlreply(sender, "Comment: : %s", tg->comment->content);
76 controlreply(sender, "ID: : %u", tg->id);
77 controlreply(sender, "Last used : %s", (tg->count>0)?"(now)":trusts_timetostr(tg->lastseen));
78 controlreply(sender, "Max usage : %d", tg->maxusage);
79 controlreply(sender, "Last max reset : %s", tg->lastmaxuserreset?trusts_timetostr(tg->lastmaxuserreset):"(never)");
80
81 controlreply(sender, "Host Current Max Last seen");
82
83 for(th=tg->hosts;th;th=th->next)
84 controlreply(sender, " %-20s %-10d %-10d %s", trusts_cidr2str(th->ip, th->mask), th->count, th->maxusage, (th->count>0)?"(now)":trusts_timetostr(th->lastseen));
85
86 controlreply(sender, "End of list.");
87
88 return CMD_OK;
89 }
90
91 static int commandsregistered;
92
93 static void registercommands(int hooknum, void *arg) {
94 if(commandsregistered)
95 return;
96 commandsregistered = 1;
97
98 registercontrolhelpcmd("trustmigrate", NO_DEVELOPER, 0, trusts_cmdmigrate, "Usage: trustmigrate\nCopies trust data from O and reloads the database.");
99 registercontrolhelpcmd("trustlist", NO_OPER, 1, trusts_cmdtrustlist, "Usage: trustlist <#id|name|id>\nShows trust data for the specified trust group.");
100 }
101
102 static void deregistercommands(int hooknum, void *arg) {
103 if(!commandsregistered)
104 return;
105 commandsregistered = 0;
106
107 deregistercontrolcmd("trustmigrate", trusts_cmdmigrate);
108 deregistercontrolcmd("trustlist", trusts_cmdtrustlist);
109 }
110
111 void _init(void) {
112 registerhook(HOOK_TRUSTS_DB_LOADED, registercommands);
113 registerhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
114
115 if(trustsdbloaded)
116 registercommands(0, NULL);
117 }
118
119 void _fini(void) {
120 deregisterhook(HOOK_TRUSTS_DB_LOADED, registercommands);
121 deregisterhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
122
123 trusts_migration_stop();
124
125 deregistercommands(0, NULL);
126 }