From ee0e47cc59291034bf96bc27fa685afb0ecd9817 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Sun, 1 Apr 2007 02:14:59 +0000 Subject: [PATCH] Move some permission checks from set_user_mode() to its callers. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1795 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 8 ++++++++ ircd/m_mode.c | 31 +++++++++++++++++++++++++++++++ ircd/s_user.c | 22 ---------------------- 3 files changed, 39 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index d56740c..9a2ba7e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-03-31 Michael Poole + + * ircd/m_mode.c (m_mode): Check and report target/source + violations before calling set_user_mode(). + (ms_mode): Likewise. + + * ircd/s_user.c (set_user_mode): Remove those checks from here. + 2007-03-31 Michael Poole * include/ircd_events.h (struct Generators): Convert elements to diff --git a/ircd/m_mode.c b/ircd/m_mode.c index cb27ee5..8b91fd5 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]))) + { + 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); + } 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]))) + { + 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); + } ClrFlag(sptr, FLAG_TS8); diff --git a/ircd/s_user.c b/ircd/s_user.c index ecedb06..a21f5e2 100644 --- a/ircd/s_user.c +++ b/ircd/s_user.c @@ -984,7 +984,6 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv { char** p; char* m; - struct Client *acptr; int what; int i; struct Flags setflags; @@ -996,27 +995,6 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv what = MODE_ADD; - if (parc < 2) - return need_more_params(sptr, "MODE"); - - if (!(acptr = FindUser(parv[1]))) - { - if (MyConnect(sptr)) - send_reply(sptr, ERR_NOSUCHCHANNEL, parv[1]); - return 0; - } - - if (IsServer(sptr) || sptr != acptr) - { - if (IsServer(cptr)) - sendwallto_group_butone(&me, WALL_WALLOPS, 0, - "MODE for User %s from %s!%s", parv[1], - cli_name(cptr), cli_name(sptr)); - else - send_reply(sptr, ERR_USERSDONTMATCH); - return 0; - } - if (parc < 3) { m = buf; -- 2.20.1