]> jfr.im git - irc/evilnet/x3.git/commitdiff
Added NickServ search title criteria
authorMatthew Beeching <redacted>
Thu, 6 May 2010 05:37:32 +0000 (06:37 +0100)
committerMatthew Beeching <redacted>
Thu, 6 May 2010 05:37:32 +0000 (06:37 +0100)
ChangeLog
src/nickserv.c
src/nickserv.help

index 6f0ff8d261072570bd42e25ed743616aac119c22..38fc6a3d4768ffd254180729b9c08b0fe49579b5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
 /***********************************************************************
 X3 ChangeLog
 
+2010-05-06  Matthew Beeching  <jobe@mdbnet.co.uk>
+
+       * src/nickserv.c: Added NickServ search title criteria.
+
+       * src/nickserv.help: Added NickServ search title criteria.
+
 2010-04-29  Matthew Beeching  <jobe@mdbnet.co.uk>
 
        * src/opserv.c: Minor typo in previous commit where returning 0
index 25d3b7ba2c92394ad7dfb777afd4de3e0a81f57e..4b4e013acf4caf85775833832161a5d735ea9bb9 100644 (file)
@@ -4193,6 +4193,7 @@ struct nickserv_discrim {
     const char *hostmask;
     const char *handlemask;
     const char *emailmask;
+    const char *titlemask;
 #ifdef WITH_LDAP
     unsigned int inldap;
 #endif
@@ -4305,6 +4306,12 @@ nickserv_discrim_create(struct svccmd *cmd, struct userNode *user, unsigned int
             } else {
                 discrim->emailmask = argv[i];
             }
+        } else if (!irccasecmp(argv[i], "title")) {
+            if (!irccasecmp(argv[++i], "*")) {
+                discrim->titlemask = 0;
+            } else {
+                discrim->titlemask = argv[i];
+            }
         } else if (!irccasecmp(argv[i], "access")) {
             const char *cmp = argv[++i];
             if (cmp[0] == '<') {
@@ -4371,6 +4378,11 @@ nickserv_discrim_create(struct svccmd *cmd, struct userNode *user, unsigned int
 static int
 nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi)
 {
+    char *title = NULL;
+
+    if (hi->fakehost && (hi->fakehost[0] == '.'))
+      title = hi->fakehost + 1;
+
     if (((discrim->flags_on & hi->flags) != discrim->flags_on)
         || (discrim->flags_off & hi->flags)
         || (discrim->min_registered > hi->registered)
@@ -4378,6 +4390,7 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi)
         || (discrim->lastseen < (hi->users?now:hi->lastseen))
         || (discrim->handlemask && !match_ircglob(hi->handle, discrim->handlemask))
         || (discrim->emailmask && (!hi->email_addr || !match_ircglob(hi->email_addr, discrim->emailmask)))
+        || (discrim->titlemask && (!title || !match_ircglob(title, discrim->titlemask)))
         || (discrim->min_level > hi->opserv_level)
         || (discrim->max_level < hi->opserv_level)
         || (discrim->min_karma > hi->karma)
index e4d2cee0077afe1e511589c91b08f25c75fa693d..a44308a2c7889dff81223ea4c08c9b5de23a1a16 100644 (file)
         "  SEEN       - Accounts not seen for at least this long",
         "  ACCOUNTMASK - A glob that must match the account name",
         "  EMAIL      - A glob that must match the account's email address",
+        "  TITLE      - A glob that must match the account's title",
         "  HOSTMASK SUPERSET - Account matches if someone with this hostmask can auth to the account",
         "  HOSTMASK EXACT - Account matches if this exact hostmask is in list",
         "  HOSTMASK SUBSET - Account matches if this mask \"covers\" one in their userlist",
         "  SEEN       - Accounts not seen for at least this long",
         "  ACCOUNTMASK - A glob that must match the account name",
         "  EMAIL      - A glob that must match the account's email address",
+        "  TITLE      - A glob that must match the account's title",
         "  NICKMASK   - A glob that must match a nick registered to the account",
         "  HOSTMASK SUPERSET - Account matches if someone with this hostmask can auth to the account",
         "  HOSTMASK EXACT - Account matches if this exact hostmask is in list",