- if( chan )
- {
- /* Channel-Modes oder Channel-User-Mode */
- if( chan_cl )
- {
- /* Channel-User-Mode */
- if( Client_Type( Client ) == CLIENT_SERVER )
- {
- /* Modes an andere Server und Channel-User forwarden */
- IRC_WriteStrServersPrefix( Client, prefix, "MODE %s %s :%s", Channel_Name( chan ), the_modes, Client_ID( chan_cl));
- IRC_WriteStrChannelPrefix( Client, chan, prefix, FALSE, "MODE %s %s %s", Channel_Name( chan ), the_modes, Client_ID( chan_cl));
- }
- else
- {
- /* Bestaetigung an Client schicken & andere Server sowie Channel-User informieren */
- ok = IRC_WriteStrClientPrefix( Client, prefix, "MODE %s %s %s", Channel_Name( chan ), the_modes, Client_ID( chan_cl));
- IRC_WriteStrServersPrefix( Client, prefix, "MODE %s %s :%s", Channel_Name( chan ), the_modes, Client_ID( chan_cl));
- IRC_WriteStrChannelPrefix( Client, chan, prefix, FALSE, "MODE %s %s %s", Channel_Name( chan ), the_modes, Client_ID( chan_cl));
- }
- Log( LOG_DEBUG, "User \"%s\" on %s: Mode change, now \"%s\".", Client_Mask( chan_cl), Channel_Name( chan ), Channel_UserModes( chan, chan_cl ));
- }
- else
- {
- /* Channel-Mode */
- if( Client_Type( Client ) == CLIENT_SERVER )
- {
- /* Modes an andere Server und Channel-User forwarden */
- IRC_WriteStrServersPrefix( Client, prefix, "MODE %s :%s", Channel_Name( chan ), the_modes );
- IRC_WriteStrChannelPrefix( Client, chan, prefix, FALSE, "MODE %s %s", Channel_Name( chan ), the_modes );
- }
- else
- {
- /* Bestaetigung an Client schicken & andere Server sowie Channel-User informieren */
- ok = IRC_WriteStrClientPrefix( Client, prefix, "MODE %s %s", Channel_Name( chan ), the_modes );
- IRC_WriteStrServersPrefix( Client, prefix, "MODE %s :%s", Channel_Name( chan ), the_modes );
- IRC_WriteStrChannelPrefix( Client, chan, prefix, FALSE, "MODE %s %s", Channel_Name( chan ), the_modes );
- }
- Log( LOG_DEBUG, "Channel \"%s\": Mode change, now \"%s\".", Channel_Name( chan ), Channel_Modes( chan ));
+
+ /* Are there additional arguments to add? */
+ if (argadd[0]) {
+ strlcat(the_args, " ", sizeof(the_args));
+ strlcat(the_args, argadd, sizeof(the_args));
+ }
+ }
+
+ chan_exit:
+ /* Are there changed modes? */
+ if (the_modes[1]) {
+ /* Clean up mode string */
+ len = strlen(the_modes) - 1;
+ if ((the_modes[len] == '+') || (the_modes[len] == '-'))
+ the_modes[len] = '\0';
+
+ if (Client_Type(Client) == CLIENT_SERVER) {
+ /* MODE requests for local channels from other servers
+ * are definitely invalid! */
+ if (Channel_IsLocal(Channel)) {
+ Log(LOG_ALERT, "Got remote MODE command for local channel!? Ignored.");
+ return CONNECTED;