]> jfr.im git - irc/evilnet/x3.git/commitdiff
Author:
authorrubin <redacted>
Wed, 25 Aug 2004 02:16:18 +0000 (02:16 +0000)
committerrubin <redacted>
Wed, 25 Aug 2004 02:16:18 +0000 (02:16 +0000)
Log message:
Fixing glob matching stuff to remove false positive matches (the matching
code was very broken)

.cvsignore
src/opserv.c
src/tools.c

index 036cd8dfb265f34491258ea422b20c2a5df704f1..669dd2438679109ed0468f3f0286171058bed87d 100644 (file)
@@ -10,3 +10,27 @@ p10
 stamp-h2.in
 {arch}
 src/modules-list.h
+Makefile
+chanserv.help
+config.status
+global.help
+mod-helpserv.help
+mod-memoserv.help
+mod-sockcheck.help
+modcmd.help
+nickserv.help
+opserv.help
+saxdb.help
+sendmail.help
+srvx
+tmp
+todo.txt
+rx/.deps
+rx/Makefile
+src/.deps
+src/Makefile
+src/config.h
+src/modules-list.h
+src/srvx
+src/stamp-h1
+
index 49c2819818cb6249e86cb425ff2e5c766efce53d..d5779b62a93fc6dd70b49ef784f90d99b17a9e73 100644 (file)
@@ -606,7 +606,7 @@ static MODCMD_FUNC(cmd_dehop)
             || !(mn->modes & MODE_HALFOP))
             continue;
         change->args[count].mode = MODE_REMOVE | MODE_HALFOP;
-        change->args[count++].member = mn;
+        change->args[count++].u.member = mn;
     }
     if (count) {
         change->argc = count;
@@ -650,7 +650,7 @@ static MODCMD_FUNC(cmd_dehopall)
         if (IsService(mn->user) || !(mn->modes & MODE_HALFOP))
             continue;
         change->args[count].mode = MODE_REMOVE | MODE_HALFOP;
-        change->args[count++].member = mn;
+        change->args[count++].u.member = mn;
     }
     if (count) {
         change->argc = count;
@@ -1215,7 +1215,7 @@ static MODCMD_FUNC(cmd_hop)
         if (mn->modes & MODE_HALFOP)
             continue;
         change->args[count].mode = MODE_HALFOP;
-        change->args[count++].member = mn;
+        change->args[count++].u.member = mn;
     }
     if (count) {
         change->argc = count;
@@ -1259,7 +1259,7 @@ static MODCMD_FUNC(cmd_hopall)
         if (mn->modes & MODE_HALFOP)
             continue;
         change->args[count].mode = MODE_HALFOP;
-        change->args[count++].member = mn;
+        change->args[count++].u.member = mn;
     }
     if (count) {
         change->argc = count;
@@ -2428,8 +2428,8 @@ static MODCMD_FUNC(cmd_clone)
         mod_chanmode_init(&change);
         change.argc = 1;
         change.args[0].mode = MODE_HALFOP;
-        change.args[0].member = GetUserMode(channel, clone);
-        if (!change.args[0].member) {
+        change.args[0].u.member = GetUserMode(channel, clone);
+        if (!change.args[0].u.member) {
             reply("OSMSG_NOT_ON_CHANNEL", clone->nick, channel->name);
             return 0;
         }
index 21f3b8215547026c861f77b421ed7718852b3611..b7e45a9ea5470d906ae0d555f799f71eb69e6302 100644 (file)
@@ -307,8 +307,51 @@ match_ircglob(const char *text, const char *glob)
 
 extern const char *hidden_host_suffix;
 
+int user_matches_glob(struct userNode *user, const char *orig_glob, int include_nick)
+{
+    /* based on IsSetHost(user) and include_nick, build a nick!user@host string
+     * from user and save it in a variable. Compare with match_ircglob() and 
+     * return the results
+     */
+    char *matchstr_nick;
+    char *matchstr_user;
+    char *matchstr_host;
+    char *matchstr_full;
+
+    matchstr_nick = user->nick;
+
+    if(IsSetHost(user))
+    {
+        /* Grab host and user from sethost instead of real host */
+        char *buff;
+        buff = alloca(strlen(user->sethost) + 1);
+        strcpy(buff, user->sethost);
+        matchstr_user = mysep(&buff, "@");
+        matchstr_host = mysep(&buff, "@");
+    }
+    else if(IsFakeHost(user))
+    {
+        matchstr_user = user->ident;
+        matchstr_host = user->fakehost;
+    }
+    else if(hidden_host_suffix && user->handle_info) 
+    {
+        matchstr_host = alloca(strlen(user->handle_info->handle) + strlen(hidden_host_suffix) + 2);
+        sprintf(matchstr_host, "%s.%s", user->handle_info->handle, hidden_host_suffix);
+        matchstr_user = user->ident;
+    }
+    else
+    {
+        matchstr_user = user->ident;
+        matchstr_host = user->hostname;
+    }
+    matchstr_full = alloca(strlen(matchstr_nick) + strlen(matchstr_user) + strlen(matchstr_host) + 4);
+    sprintf(matchstr_full, "%s!%s@%s", matchstr_nick, matchstr_user, matchstr_host);
+    return match_ircglob(matchstr_full, orig_glob);
+}
+
 int
-user_matches_glob(struct userNode *user, const char *orig_glob, int include_nick)
+user_matches_glob_broken(struct userNode *user, const char *orig_glob, int include_nick)
 {
     char *glob, *marker;
     char *setident = NULL, *sethostname = NULL; // sethost - reed/apples