]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
Same again
[user/henk/code/inspircd.git] / src / mode.cpp
index dc4de12612abcd9ab535aa503cf78c781f2c126b..ea51ce71dec18367e64bb103726d4ce02a0a010f 100644 (file)
@@ -249,11 +249,18 @@ void ModeParser::DisplayCurrentModes(userrec *user, userrec* targetuser, chanrec
        }
        else if (targetuser)
        {
-               /* Display user's current mode string */
-               user->WriteServ("221 %s :+%s",targetuser->nick,targetuser->FormatModes());
-               if (*targetuser->oper)
-                       user->WriteServ("008 %s +%s :Server notice mask", targetuser->nick, targetuser->FormatNoticeMasks());
-               return;
+               if ((targetuser == user) || (*user->oper))
+               {
+                       /* Display user's current mode string */
+                       user->WriteServ("221 %s :+%s",targetuser->nick,targetuser->FormatModes());
+                       if (*targetuser->oper)
+                               user->WriteServ("008 %s +%s :Server notice mask", targetuser->nick, targetuser->FormatNoticeMasks());
+                       return;
+               }
+               else
+               {
+                       user->WriteServ("502 %s :Can't change mode for other users", user->nick);
+               }
        }
 
        /* No such nick/channel */
@@ -340,6 +347,11 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
                {
                        type = MODETYPE_USER;
                        mask = MASK_USER;
+                       if ((user != targetuser) && (!ServerInstance->ULine(user->server)))
+                       {
+                               user->WriteServ("502 %s :Can't change mode for other users", user->nick);
+                               return;
+                       }
                }
                else
                {
@@ -598,8 +610,9 @@ bool ModeParser::AddMode(ModeHandler* mh, unsigned const char modeletter)
 
        /* A mode prefix of ',' is not acceptable, it would fuck up server to server.
         * A mode prefix of ':' will fuck up both server to server, and client to server.
+        * A mode prefix of '#' will mess up /whois and /privmsg
         */
-       if ((mh->GetPrefix() == ',') || (mh->GetPrefix() == ':'))
+       if ((mh->GetPrefix() == ',') || (mh->GetPrefix() == ':') || (mh->GetPrefix() == '#'))
                return false;
 
        mh->GetModeType() == MODETYPE_USER ? mask = MASK_USER : mask = MASK_CHANNEL;