#include <stdlib.h>
#include <stdarg.h>
+static int commandsregistered;
+
void _init(void) {
registerhook(HOOK_TRUSTS_DBLOADED, trusts_cmdinit);
void _fini(void) {
deregisterhook(HOOK_TRUSTS_DBLOADED, trusts_cmdinit);
- trusts_cmdfini();
+ trusts_cmdfini(0, NULL);
}
void trusts_cmdinit(int hooknum, void *arg) {
+ if(commandsregistered)
+ return;
registercontrolcmd("trustgroupadd",10,7,trust_groupadd);
registercontrolcmd("trustgroupmodify",10,4,trust_groupmodify);
registercontrolcmd("trustgroupdel",10,2,trust_groupdel);
registercontrolcmd("truststats",10,2,trust_stats);
registercontrolcmd("trustdump",10,2,trust_dump);
+ registercontrolcmd("trustlog", 10,2, trust_dotrustlog);
+
+ commandsregistered = 1;
removeusers = 0;
}
void trusts_cmdfini() {
+ if(!commandsregistered)
+ return;
+
deregistercontrolcmd("trustgroupadd",trust_groupadd);
deregistercontrolcmd("trustgroupmodify",trust_groupmodify);
deregistercontrolcmd("trustgroupdel",trust_groupdel);
deregistercontrolcmd("truststats",trust_stats);
deregistercontrolcmd("trustdump",trust_dump);
+ deregistercontrolcmd("trustlog", trust_dotrustlog);
+
+ commandsregistered = 0;
removeusers = 0;
}
}
expiry = durationtolong(cargv[1]);
if (expiry > (365 * 86400) ) {
- controlreply(sender,"ERROR: Invalid duration given - temporary trusts can not be longer then 1 year");
+ controlreply(sender,"ERROR: Invalid duration given - temporary trusts must be less than 1 year");
return CMD_ERROR;
}
ownerid = strtoul(cargv[6],NULL,10);
return CMD_ERROR;
}
+ if (!is_normalized_ipmask(&sin,bits)) {
+ controlreply(sender, "ERROR: non-normalized mask.");
+ return CMD_ERROR;
+ }
+
node = refnode(iptree, &sin, bits);
if(!node->exts[tgh_ext]) {
controlreply(sender,"ERROR: That CIDR was not trusted.");
return CMD_ERROR;
}
+ if (!is_normalized_ipmask(&sin,bits)) {
+ controlreply(sender, "ERROR: non-normalized mask.");
+ return CMD_ERROR;
+ }
+
if ( irc_in_addr_is_ipv4(&sin) ) {
if (bits>128 || bits<112) {
controlreply(sender,"ERROR: Not a valid netmask (needs to be between 16 and 32)");
th = trusthostadd(node, tg, expiry );
if ( !th ) {
controlreply(sender,"ERROR: Unable to add trusted host");
+ return CMD_ERROR;
}
trustsdb_addtrusthost(th);
return CMD_ERROR;
}
+ if (!is_normalized_ipmask(&sin,bits)) {
+ controlreply(sender, "ERROR: non-normalized mask.");
+ return CMD_ERROR;
+ }
+
if ( irc_in_addr_is_ipv4(&sin) ) {
if (bits>128 || bits<112) {
controlreply(sender,"ERROR: Not a valid netmask (needs to be between 8 and 32)");
return CMD_ERROR;
}
+ if (!is_normalized_ipmask(&sin,bits)) {
+ controlreply(sender, "ERROR: non-normalized mask.");
+ return CMD_ERROR;
+ }
+
if ( irc_in_addr_is_ipv4(&sin) ) {
if (bits>128 || bits<112) {
controlreply(sender,"ERROR: Not a valid netmask (needs to be between 8 and 32)");
controlreply(sender, "ERROR: Invalid mask.");
return CMD_ERROR;
}
+
+ if (!is_normalized_ipmask(&sin,bits)) {
+ controlreply(sender, "ERROR: non-normalized mask.");
+ return CMD_ERROR;
+ }
node = refnode(iptree, &sin, bits);
if(!node->exts[tgb_ext]) {
maxthmask4 = (((patricia_node_t *)thptr->node)->prefix->bitlen-96);
}
} else {
+ controlreply(sender, "%s", IPtostr(((patricia_node_t *)thptr->node)->prefix->sin));
netcount6[((patricia_node_t *)thptr->node)->prefix->bitlen]++;
netucount6[((patricia_node_t *)thptr->node)->prefix->bitlen]+=thptr->node->usercount;
netmcount6[((patricia_node_t *)thptr->node)->prefix->bitlen]+=thptr->maxused;
controlwall(NO_OPER, NL_TRUSTS, "Comment: %s for trustgroup %lu", cargv[1], tg->id);
return CMD_OK;
-
}
+int trust_dotrustlog(void *source, int cargc, char **cargv) {
+ nick *np=source;
+ unsigned long interval;
+ int trustid;
+
+ if (cargc < 1) {
+ controlreply(np,"Syntax: trustlog <#groupid> [duration]");
+ return CMD_ERROR;
+ }
+
+ if(cargv[0][0]== '#'){
+ trustid = strtol(&cargv[0][1],NULL,10);
+ } else {
+ trustid = strtol(cargv[0],NULL,10);
+ }
+
+ if (cargc > 1)
+ interval=getnettime() - durationtolong(cargv[1]);
+ else
+ interval=0;
+
+ trustsdb_retrievetrustlog(np, trustid, interval);
+ return CMD_OK;
+}