X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Firc-mode.c;h=79ab2ebe94beaa41b904b01b1493a83d125e5e25;hb=7d7eb735f0c8b541e7809a68cb49174605147904;hp=a59f085d7f6d4fb9434a07dc7266368bee0240b7;hpb=8ae2cdfce9f8ba75fe72d65603d4c05c87f6d9c2;p=ngircd-alex.git diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c index a59f085d..79ab2ebe 100644 --- a/src/ngircd/irc-mode.c +++ b/src/ngircd/irc-mode.c @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors. + * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,13 +16,11 @@ * IRC commands for mode changes (like MODE, AWAY, etc.) */ -#include "imp.h" #include #include #include #include -#include "defines.h" #include "conn.h" #include "channel.h" #include "irc-macros.h" @@ -33,7 +31,6 @@ #include "messages.h" #include "conf.h" -#include "exp.h" #include "irc-mode.h" static bool Client_Mode PARAMS((CLIENT *Client, REQUEST *Req, CLIENT *Origin, @@ -71,6 +68,13 @@ IRC_MODE( CLIENT *Client, REQUEST *Req ) _IRC_GET_SENDER_OR_RETURN_(origin, Req, Client) + /* Test for "fake" MODE commands injected by this local instance, + * for example when handling the "DefaultUserModes" settings. + * This doesn't harm real commands, because prefixes of regular + * clients are checked in Validate_Prefix() and can't be faked. */ + if (Req->prefix && Client_Search(Req->prefix) == Client_ThisServer()) + Client = Client_Search(Req->prefix); + /* Channel or user mode? */ cl = NULL; chan = NULL; if (Client_IsValidNick(Req->argv[0])) @@ -225,6 +229,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target ) break; case 'c': /* Receive connect notices */ case 'q': /* KICK-protected user */ + case 'F': /* disable flood protection */ /* (only settable by IRC operators!) */ if (!set || Client_Type(Client) == CLIENT_SERVER || Client_HasMode(Origin, 'o'))