]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modes/umode_n.cpp
Dont allow keys of length >= 32
[user/henk/code/inspircd.git] / src / modes / umode_n.cpp
1 #include "inspircd.h"
2 #include "mode.h"
3 #include "channels.h"
4 #include "users.h"
5 #include "modes/umode_n.h"
6
7 ModeUserServerNoticeMask::ModeUserServerNoticeMask(InspIRCd* Instance) : ModeHandler(Instance, 'n', 1, 0, false, MODETYPE_USER, true)
8 {
9 }
10
11 ModeAction ModeUserServerNoticeMask::OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding)
12 {
13         /* Only opers can change other users modes */
14         if ((source != dest) && (!*source->oper))
15                 return MODEACTION_DENY;
16
17         /* Set the bitfields */
18         if (adding)
19         {
20                 parameter = dest->ProcessNoticeMasks(parameter.c_str());
21                 dest->modes[UM_SNOMASK] = true;
22                 if (!dest->modes[UM_SERVERNOTICE])
23                 {
24                         const char* newmodes[] = { dest->nick, "+s" };
25                         ServerInstance->Modes->Process(newmodes, 2, source, true);
26                 }
27                 return MODEACTION_ALLOW;
28         }
29         else if (dest->modes[UM_SNOMASK] != false)
30         {
31                 dest->modes[UM_SNOMASK] = false;
32                 return MODEACTION_ALLOW;
33         }
34
35         /* Allow the change */
36         return MODEACTION_DENY;
37 }
38