X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_mode.c;h=e85398d26646e57790efc55f261ebbaaeeb5e04f;hb=refs%2Fheads%2Fupstream;hp=cb27ee5fb4dd37c9a53c291165a5b47f6681a67b;hpb=129fc4f6d5f88a86544bf3ad1f9c3c312095ff98;p=ircu2.10.12-pk.git diff --git a/ircd/m_mode.c b/ircd/m_mode.c index cb27ee5..e85398d 100644 --- a/ircd/m_mode.c +++ b/ircd/m_mode.c @@ -113,7 +113,22 @@ m_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) return need_more_params(sptr, "MODE"); if (!IsChannelName(parv[1]) || !(chptr = FindChannel(parv[1]))) - return set_user_mode(cptr, sptr, parc, parv); + { + struct Client *acptr; + + acptr = FindUser(parv[1]); + if (!acptr) + { + send_reply(sptr, ERR_NOSUCHCHANNEL, parv[1]); + return 0; + } + else if (sptr != acptr) + { + send_reply(sptr, ERR_USERSDONTMATCH); + return 0; + } + return set_user_mode(cptr, sptr, parc, parv, ALLOWMODES_ANY); + } ClrFlag(sptr, FLAG_TS8); @@ -168,7 +183,23 @@ ms_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) return 0; if (!(chptr = FindChannel(parv[1]))) - return set_user_mode(cptr, sptr, parc, parv); + { + struct Client *acptr; + + acptr = FindUser(parv[1]); + if (!acptr) + { + return 0; + } + else if (sptr != acptr) + { + sendwallto_group_butone(&me, WALL_WALLOPS, 0, + "MODE for User %s from %s!%s", parv[1], + cli_name(cptr), cli_name(sptr)); + return 0; + } + return set_user_mode(cptr, sptr, parc, parv, ALLOWMODES_ANY); + } ClrFlag(sptr, FLAG_TS8);