]> arthur.barton.de Git - ngircd-alex.git/commitdiff
irc.c: Fix handling of channels containing dots
authorFlorian Westphal <fw@strlen.de>
Sat, 17 Jan 2009 23:12:28 +0000 (00:12 +0100)
committerFlorian Westphal <fw@strlen.de>
Sat, 17 Jan 2009 23:20:38 +0000 (00:20 +0100)
commit 2546a13ad2949192eb70bf21e114ec60af287ee4
('Cumulative Message Patch') broke PRIVMSG to channels
containing dots.

Fix this by switching evaluation order:
Check first if the target matches a existing channel and only do a check
for target masks if that failed.

PRIVMSG with host/server masks is described in RFC 2812, section 3.3.1.

Makes one wonder how a server is _really_ supposed to tell the difference
between hostmasks and channel names.

Sigh.

src/ngircd/irc.c

index 47f86528004d24a009504076108ded7fc7b2f8c6..e5f5bbd5ddeab864b153533fa36336f5cb5d009d 100644 (file)
@@ -466,6 +466,12 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                                      Req->command, Client_ID(cl),
                                                      Req->argv[1]))
                                return DISCONNECTED;
+               } else if (ForceType != CLIENT_SERVICE
+                          && (chan = Channel_Search(currentTarget))) {
+                       /* channel */
+                       if (!Channel_Write(chan, from, Client, Req->command,
+                                          SendErrors, Req->argv[1]))
+                                       return DISCONNECTED;
                } else if (ForceType != CLIENT_SERVICE
                           && strchr("$#", currentTarget[0])
                           && strchr(currentTarget, '.')) {
@@ -473,12 +479,6 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                        if (!Send_Message_Mask(from, Req->command, currentTarget,
                                               Req->argv[1], SendErrors))
                                return DISCONNECTED;
-               } else if (ForceType != CLIENT_SERVICE
-                          && (chan = Channel_Search(currentTarget))) {
-                       /* channel */
-                       if (!Channel_Write(chan, from, Client, Req->command,
-                                          SendErrors, Req->argv[1]))
-                                       return DISCONNECTED;
                } else {
                        if (!SendErrors)
                                return CONNECTED;