]> jfr.im git - irc/quakenet/newserv.git/blobdiff - patricianick/patricianick.c
sync http://hg.quakenet.org/snircd/diff/6a655306abe8/ircd/ircd_string.c
[irc/quakenet/newserv.git] / patricianick / patricianick.c
index 2fe7c34be970409e74bdf68c0fca5e64b94f2ce8..911041d90f8bb8c5f1f7d60e569154ad04a0f8a5 100644 (file)
@@ -17,7 +17,7 @@ patricianick_t *freepatricianicks;
 int pnode_ext;
 int pnick_ext;
 
-int pn_cmd_dumpnodenicks(void *source, int cargc, char **cargv);
+int pn_cmd_nodeuserlist(void *source, int cargc, char **cargv);
 
 void _init() {
   nick *np, *nnp;
@@ -44,7 +44,7 @@ void _init() {
   registerhook(HOOK_NICK_NEWNICK, &pn_hook_newuser);
   registerhook(HOOK_NICK_LOSTNICK, &pn_hook_lostuser);
 
-  registercontrolcmd("dumpnodenicks", NO_DEVELOPER, 1, &pn_cmd_dumpnodenicks);
+  registercontrolhelpcmd("nodeuserlist", NO_OPER, 1, &pn_cmd_nodeuserlist, "Usage: nodeuserlist <ipv4|ipv6|cidr4|cidr6>\nLists all users on a given IP address or CIDR range.");
 }
 
 void _fini() {
@@ -61,7 +61,7 @@ void _fini() {
   deregisterhook(HOOK_NICK_NEWNICK, &pn_hook_newuser);
   deregisterhook(HOOK_NICK_LOSTNICK, &pn_hook_lostuser);
 
-  deregistercontrolcmd("dumpnodenicks", &pn_cmd_dumpnodenicks);
+  deregistercontrolcmd("nodeuserlist", &pn_cmd_nodeuserlist);
 }
 
 patricianick_t *getpatricianick() {
@@ -86,6 +86,8 @@ patricianick_t *getpatricianick() {
 void addnicktonode(patricia_node_t *node, nick *np) {
   unsigned long hash;
 
+  patricia_ref_prefix(node->prefix);
+
   if (!(node->exts[pnode_ext])) {
     node->exts[pnode_ext] = getpatricianick();
   }
@@ -141,7 +143,7 @@ void pn_hook_lostuser(int hook, void *arg) {
   deletenickfromnode(np->ipnode, np);
 }
 
-int pn_cmd_dumpnodenicks(void *source, int cargc, char **cargv) {
+int pn_cmd_nodeuserlist(void *source, int cargc, char **cargv) {
   nick *np=(nick *)source;
   struct irc_in_addr sin;
   unsigned char bits;
@@ -151,13 +153,12 @@ int pn_cmd_dumpnodenicks(void *source, int cargc, char **cargv) {
   nick *npp;
 
   if (cargc < 1) {
-    controlreply(np, "Syntax: dumpnodenicks <ipv4|ipv6|cidr4|cidr6>");
-    return CMD_OK;
+    return CMD_USAGE;
   }
 
   if (ipmask_parse(cargv[0], &sin, &bits) == 0) {
     controlreply(np, "Invalid mask.");
-    return CMD_OK;
+    return CMD_ERROR;
   }
 
   head = refnode(iptree, &sin, bits);
@@ -185,6 +186,7 @@ int pn_cmd_dumpnodenicks(void *source, int cargc, char **cargv) {
     }
   }
   PATRICIA_WALK_END;
+  derefnode(iptree, head);
 
   controlreply(np, "Total users on %s: %d", cargv[0], count);
   return CMD_OK;