Fix DNR searching for globs.
[srvx.git] / src / chanserv.c
index 8be8a276c5b534fb6de81f6b943d3957a0848676..4859debc789b8760bdc6c1d46ca0559699b76507 100644 (file)
@@ -1737,11 +1737,11 @@ dnr_search_matches(const struct do_not_register *dnr, const struct dnr_search *s
              || (dnr->expires && ((dnr->expires < search->min_expires)
                                   || (dnr->expires > search->max_expires)))
              || (search->chan_mask
-                 && !match_ircglob(search->chan_mask, dnr->chan_name))
+                 && !match_ircglob(dnr->chan_name, search->chan_mask))
              || (search->setter_mask
-                 && !match_ircglob(search->setter_mask, dnr->setter))
+                 && !match_ircglob(dnr->setter, search->setter_mask))
              || (search->reason_mask
-                 && !match_ircglob(search->reason_mask, dnr->reason)));
+                 && !match_ircglob(dnr->reason, search->reason_mask)));
 }
 
 static struct dnr_search *
@@ -1918,6 +1918,12 @@ dnr_remove_func(struct do_not_register *match, void *extra)
     return 0;
 }
 
+static int
+dnr_count_func(struct do_not_register *match, void *extra)
+{
+    return 0; (void)match; (void)extra;
+}
+
 static MODCMD_FUNC(cmd_dnrsearch)
 {
     struct dnr_search *discrim;
@@ -1939,6 +1945,8 @@ static MODCMD_FUNC(cmd_dnrsearch)
         action = dnr_print_func;
     else if(!irccasecmp(argv[1], "remove"))
         action = dnr_remove_func;
+    else if(!irccasecmp(argv[1], "count"))
+        action = dnr_count_func;
     else
     {
         reply("CSMSG_DNR_BAD_ACTION", argv[1]);
@@ -5949,7 +5957,7 @@ static CHANSERV_FUNC(cmd_giveownership)
     {
         if(force)
         {
-            new_owner = add_channel_user(cData, new_owner_hi, UL_COOWNER, 0, NULL);
+            new_owner = add_channel_user(cData, new_owner_hi, UL_OWNER - 1, 0, NULL);
         }
         else
         {
@@ -7669,6 +7677,7 @@ init_chanserv(const char *nick)
     DEFINE_COMMAND(dnrsearch, 3, 0, "template", "noregister", NULL);
     modcmd_register(chanserv_module, "dnrsearch print", NULL, 0, 0, NULL);
     modcmd_register(chanserv_module, "dnrsearch remove", NULL, 0, 0, NULL);
+    modcmd_register(chanserv_module, "dnrsearch count", NULL, 0, 0, NULL);
     DEFINE_COMMAND(move, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_REGCHAN, "template", "register", NULL);
     DEFINE_COMMAND(csuspend, 2, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_REGCHAN, "flags", "+helping", NULL);
     DEFINE_COMMAND(cunsuspend, 1, MODCMD_REQUIRE_AUTHED|MODCMD_REQUIRE_REGCHAN, "flags", "+helping", NULL);