]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-mode.c
Remove unneded IRC_SetPenalty() calls
[ngircd-alex.git] / src / ngircd / irc-mode.c
index 0df848f3943ee1a18c685f403898e353784014b2..8e76db17084461f8c6c971bbd79b9858cd0c8c3e 100644 (file)
@@ -69,7 +69,6 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
        assert(Client != NULL);
        assert(Req != NULL);
 
-       _IRC_ARGC_GE_OR_RETURN_(Client, Req, 1)
        _IRC_GET_SENDER_OR_RETURN_(origin, Req, Client)
 
        /* Channel or user mode? */
@@ -85,7 +84,7 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
                return Channel_Mode(Client, Req, origin, chan);
 
        /* No target found! */
-       return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG,
+       return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
                        Client_ID(Client), Req->argv[0]);
 } /* IRC_MODE */
 
@@ -131,7 +130,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
        if (Client_Type(Client) == CLIENT_USER) {
                /* Users are only allowed to manipulate their own modes! */
                if (Target != Client)
-                       return IRC_WriteStrClient(Client,
+                       return IRC_WriteErrClient(Client,
                                                  ERR_USERSDONTMATCH_MSG,
                                                  Client_ID(Client));
        }
@@ -153,7 +152,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                set = false;
                strcpy(the_modes, "-");
        } else
-               return IRC_WriteStrClient(Origin, ERR_UMODEUNKNOWNFLAG_MSG,
+               return IRC_WriteErrClient(Origin, ERR_UMODEUNKNOWNFLAG_MSG,
                                          Client_ID(Origin));
 
        x[1] = '\0';
@@ -212,43 +211,34 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                                x[0] = 'a';
                                Client_SetAway(Origin, DEFAULT_AWAY_MSG);
                        } else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_NOPRIVILEGES_MSG,
                                                        Client_ID(Origin));
                        break;
                case 'B': /* Bot */
                        if (Client_HasMode(Client, 'r'))
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_RESTRICTED_MSG,
                                                        Client_ID(Origin));
                        else
                                x[0] = 'B';
                        break;
-               case 'c': /* Receive connect notices
-                          * (only settable by IRC operators!) */
+               case 'c': /* Receive connect notices */
+               case 'q': /* KICK-protected user */
+                         /* (only settable by IRC operators!) */
                        if (!set || Client_Type(Client) == CLIENT_SERVER
-                           || Client_OperByMe(Origin))
-                               x[0] = 'c';
+                           || Client_HasMode(Origin, 'o'))
+                               x[0] = *mode_ptr;
                        else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_NOPRIVILEGES_MSG,
                                                        Client_ID(Origin));
                        break;
                case 'o': /* IRC operator (only unsettable!) */
                        if (!set || Client_Type(Client) == CLIENT_SERVER) {
-                               Client_SetOperByMe(Target, false);
                                x[0] = 'o';
                        } else
-                               ok = IRC_WriteStrClient(Origin,
-                                                       ERR_NOPRIVILEGES_MSG,
-                                                       Client_ID(Origin));
-                       break;
-               case 'q': /* KICK-protected user */
-                       if (!set || Client_Type(Client) == CLIENT_SERVER
-                           || Client_OperByMe(Origin))
-                               x[0] = 'q';
-                       else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_NOPRIVILEGES_MSG,
                                                        Client_ID(Origin));
                        break;
@@ -256,7 +246,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                        if (set || Client_Type(Client) == CLIENT_SERVER)
                                x[0] = 'r';
                        else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_RESTRICTED_MSG,
                                                        Client_ID(Origin));
                        break;
@@ -264,22 +254,22 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                        if (Client_Type(Client) == CLIENT_SERVER)
                                x[0] = 'R';
                        else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_NICKREGISTER_MSG,
                                                        Client_ID(Origin));
                        break;
                case 'x': /* Cloak hostname */
                        if (Client_HasMode(Client, 'r'))
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_RESTRICTED_MSG,
                                                        Client_ID(Origin));
                        else if (!set || Conf_CloakHostModeX[0]
                                 || Client_Type(Client) == CLIENT_SERVER
-                                || Client_OperByMe(Client)) {
+                                || Client_HasMode(Origin, 'o')) {
                                x[0] = 'x';
                                send_RPL_HOSTHIDDEN_MSG = true;
                        } else
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_NOPRIVILEGES_MSG,
                                                        Client_ID(Origin));
                        break;
@@ -289,7 +279,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                                    "Unknown mode \"%c%c\" from \"%s\"!?",
                                    set ? '+' : '-', *mode_ptr,
                                    Client_ID(Origin));
-                               ok = IRC_WriteStrClient(Origin,
+                               ok = IRC_WriteErrClient(Origin,
                                                        ERR_UMODEUNKNOWNFLAG2_MSG,
                                                        Client_ID(Origin),
                                                        set ? '+' : '-',
@@ -447,7 +437,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
        is_halfop = is_op = is_admin = is_owner = is_machine = is_oper = false;
 
        if (Channel_IsModeless(Channel))
-               return IRC_WriteStrClient(Client, ERR_NOCHANMODES_MSG,
+               return IRC_WriteErrClient(Client, ERR_NOCHANMODES_MSG,
                                Client_ID(Client), Channel_Name(Channel));
 
        /* Mode request: let's answer it :-) */
@@ -456,7 +446,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
 
        /* Check if origin is oper and opers can use mode */
        use_servermode = Conf_OperServerMode;
-       if(Client_OperByMe(Client) && Conf_OperCanMode) {
+       if(Client_HasMode(Client, 'o') && Conf_OperCanMode) {
                is_oper = true;
        }
 
@@ -468,7 +458,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
 
        /* Check if client is member of channel or an oper or an server/service */
        if(!Channel_IsMemberOf(Channel, Client) && !is_oper && !is_machine)
-               return IRC_WriteStrClient(Origin, ERR_NOTONCHANNEL_MSG,
+               return IRC_WriteErrClient(Origin, ERR_NOTONCHANNEL_MSG,
                                          Client_ID(Origin),
                                          Channel_Name(Channel));
 
@@ -568,7 +558,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                case 'z': /* Secure connections only */
                        if(!is_oper && !is_machine && !is_owner &&
                           !is_admin && !is_op) {
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin), Channel_Name(Channel));
                                goto chan_exit;
@@ -584,7 +574,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                           is_admin || is_op || is_halfop)
                                x[0] = *mode_ptr;
                        else
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin), Channel_Name(Channel));
                        break;
@@ -596,7 +586,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                    is_admin || is_op || is_halfop)
                                        x[0] = *mode_ptr;
                                else
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -612,7 +602,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                                sizeof(argadd));
                                        x[0] = *mode_ptr;
                                } else {
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -623,7 +613,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
 #ifdef STRICT_RFC
                                /* Only send error message in "strict" mode,
                                 * this is how ircd2.11 and others behave ... */
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_NEEDMOREPARAMS_MSG,
                                        Client_ID(Origin), Req->command);
 #endif
@@ -638,7 +628,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                    is_admin || is_op || is_halfop)
                                        x[0] = *mode_ptr;
                                else
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -656,7 +646,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                                x[0] = *mode_ptr;
                                        }
                                } else {
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -667,7 +657,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
 #ifdef STRICT_RFC
                                /* Only send error message in "strict" mode,
                                 * this is how ircd2.11 and others behave ... */
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_NEEDMOREPARAMS_MSG,
                                        Client_ID(Origin), Req->command);
 #endif
@@ -681,14 +671,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                if(is_oper || is_machine)
                                        x[0] = 'O';
                                else
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_NOPRIVILEGES_MSG,
                                                Client_ID(Origin));
                        } else if(is_oper || is_machine || is_owner ||
                                  is_admin || is_op)
                                x[0] = 'O';
                        else
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin),
                                        Channel_Name(Channel));
@@ -700,14 +690,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                if(is_oper || is_machine)
                                        x[0] = 'P';
                                else
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_NOPRIVILEGES_MSG,
                                                Client_ID(Origin));
                        } else if(is_oper || is_machine || is_owner ||
                                  is_admin || is_op)
                                x[0] = 'P';
                        else
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin),
                                        Channel_Name(Channel));
@@ -716,7 +706,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                case 'q': /* Owner */
                case 'a': /* Channel admin */
                        if(!is_oper && !is_machine && !is_owner && !is_admin) {
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPPRIVTOOLOW_MSG,
                                        Client_ID(Origin),
                                        Channel_Name(Channel));
@@ -725,7 +715,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                case 'o': /* Channel operator */
                        if(!is_oper && !is_machine && !is_owner &&
                           !is_admin && !is_op) {
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin),
                                        Channel_Name(Channel));
@@ -734,7 +724,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                case 'h': /* Half Op */
                        if(!is_oper && !is_machine && !is_owner &&
                           !is_admin && !is_op) {
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_CHANOPRIVSNEEDED_MSG,
                                        Client_ID(Origin),
                                        Channel_Name(Channel));
@@ -748,12 +738,12 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        if (client)
                                                x[0] = *mode_ptr;
                                        else
-                                               connected = IRC_WriteStrClient(Origin,
+                                               connected = IRC_WriteErrClient(Origin,
                                                        ERR_NOSUCHNICK_MSG,
                                                        Client_ID(Origin),
                                                        Req->argv[arg_arg]);
                                } else {
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -768,7 +758,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                 * mode, because most other servers don't do
                                 * it as well and some clients send "wired"
                                 * MODE commands like "MODE #chan -ooo nick". */
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_NEEDMOREPARAMS_MSG,
                                        Client_ID(Origin), Req->command);
 #endif
@@ -793,7 +783,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                                Client, Channel,
                                                Req->argv[arg_arg]);
                                } else {
-                                       connected = IRC_WriteStrClient(Origin,
+                                       connected = IRC_WriteErrClient(Origin,
                                                ERR_CHANOPRIVSNEEDED_MSG,
                                                Client_ID(Origin),
                                                Channel_Name(Channel));
@@ -820,7 +810,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                    "Unknown mode \"%c%c\" from \"%s\" on %s!?",
                                    set ? '+' : '-', *mode_ptr,
                                    Client_ID(Origin), Channel_Name(Channel));
-                               connected = IRC_WriteStrClient(Origin,
+                               connected = IRC_WriteErrClient(Origin,
                                        ERR_UNKNOWNMODE_MSG,
                                        Client_ID(Origin), *mode_ptr,
                                        Channel_Name(Channel));
@@ -843,12 +833,11 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
 
                /* Validate target client */
                if (client && (!Channel_IsMemberOf(Channel, client))) {
-                       if (!IRC_WriteStrClient
-                           (Origin, ERR_USERNOTINCHANNEL_MSG,
-                            Client_ID(Origin), Client_ID(client),
-                            Channel_Name(Channel)))
+                       if (!IRC_WriteErrClient(Origin, ERR_USERNOTINCHANNEL_MSG,
+                                               Client_ID(Origin),
+                                               Client_ID(client),
+                                               Channel_Name(Channel)))
                                break;
-
                        continue;
                }
 
@@ -946,8 +935,6 @@ IRC_AWAY( CLIENT *Client, REQUEST *Req )
        assert (Client != NULL);
        assert (Req != NULL);
 
-       _IRC_ARGC_LE_OR_RETURN_(Client, Req, 1)
-
        if (Req->argc == 1 && Req->argv[0][0]) {
                Client_SetAway(Client, Req->argv[0]);
                Client_ModeAdd(Client, 'a');
@@ -1008,7 +995,7 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
                return CONNECTED;
        if (Client_Type(Client) == CLIENT_USER &&
            current_count >= MAX_HNDL_CHANNEL_LISTS)
-               return IRC_WriteStrClient(Client, ERR_LISTFULL_MSG,
+               return IRC_WriteErrClient(Client, ERR_LISTFULL_MSG,
                                          Client_ID(Client),
                                          Channel_Name(Channel), mask,
                                          MAX_HNDL_CHANNEL_LISTS);