X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc.c;h=47f86528004d24a009504076108ded7fc7b2f8c6;hb=9308541e6df05d141ea51125877239e01ee5a1f5;hp=8d2291fe20a0dabdbfe0e0ac109bf1cc18c346a5;hpb=3913de3cffaa4a3641075d4b4df4aea388bc3717;p=ngircd-alex.git diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c index 8d2291fe..47f86528 100644 --- a/src/ngircd/irc.c +++ b/src/ngircd/irc.c @@ -400,7 +400,8 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) } for (cl = Client_First(); cl != NULL; cl = Client_Next(cl)) { - if (Client_Type(cl) != CLIENT_USER) + if (Client_Type(cl) != CLIENT_USER && + Client_Type(cl) != CLIENT_SERVICE) continue; if (nick != NULL && host != NULL) { if (strcmp(nick, Client_ID(cl)) == 0 && @@ -438,6 +439,17 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) Client_ID(from), currentTarget); } + +#ifndef STRICT_RFC + if (ForceType == CLIENT_SERVICE && + (Conn_Options(Client_Conn(Client_NextHop(cl))) + & CONN_RFC1459)) { + /* SQUERY command but RFC 1459 link: convert + * request to PRIVMSG command */ + Req->command = "PRIVMSG"; + } +#endif + if (SendErrors && (Client_Type(Client) != CLIENT_SERVER) && strchr(Client_Modes(cl), 'a')) { /* Target is away */ @@ -454,13 +466,15 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors) Req->command, Client_ID(cl), Req->argv[1])) return DISCONNECTED; - } else if (strchr("$#", currentTarget[0]) + } else if (ForceType != CLIENT_SERVICE + && strchr("$#", currentTarget[0]) && strchr(currentTarget, '.')) { /* targetmask */ if (!Send_Message_Mask(from, Req->command, currentTarget, Req->argv[1], SendErrors)) return DISCONNECTED; - } else if ((chan = Channel_Search(currentTarget))) { + } else if (ForceType != CLIENT_SERVICE + && (chan = Channel_Search(currentTarget))) { /* channel */ if (!Channel_Write(chan, from, Client, Req->command, SendErrors, Req->argv[1]))