X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-mode.c;h=6984409fd9c7e9329e25d7ede8b768f531d26055;hp=f018b0e3137fc8b244237c57d601eabe80fe687e;hb=2694017426057423dd3b7f1acc25c78a593ccd52;hpb=f3c0c7c0b3c12101675f09679785e6e603f555b0 diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c index f018b0e3..6984409f 100644 --- a/src/ngircd/irc-mode.c +++ b/src/ngircd/irc-mode.c @@ -2,21 +2,20 @@ * ngIRCd -- The Next Generation IRC Daemon * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) * - * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen - * der GNU General Public License (GPL), wie von der Free Software Foundation - * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 - * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version. - * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste - * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: irc-mode.c,v 1.14 2002/09/08 17:07:14 alex Exp $ - * - * irc-mode.c: IRC-Befehle zur Mode-Aenderung (MODE, AWAY, ...) + * IRC commands for mode changes (MODE, AWAY, ...) */ #include "portab.h" +static char UNUSED id[] = "$Id: irc-mode.c,v 1.18 2002/12/14 13:24:09 alex Exp $"; + #include "imp.h" #include #include @@ -60,9 +59,6 @@ IRC_MODE( CLIENT *Client, REQUEST *Req ) cl = chan_cl = prefix = NULL; chan = NULL; - /* Valider Client? */ - if(( Client_Type( Client ) != CLIENT_USER ) && ( Client_Type( Client ) != CLIENT_SERVER )) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client )); - /* Keine Parameter? */ if( Req->argc < 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); @@ -212,7 +208,7 @@ IRC_MODE( CLIENT *Client, REQUEST *Req ) Client_SetOperByMe( Client, FALSE ); x[0] = 'o'; } - else ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client )); + else ok = IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client )); break; case 'r': /* restricted (kann nur gesetzt werden) */ @@ -289,8 +285,13 @@ IRC_MODE( CLIENT *Client, REQUEST *Req ) x[0] = 't'; break; case 'P': - /* Persistent */ - x[0] = 'P'; + /* Persistent channel */ + if( set && ( Conf_MaxPChannels > 0 ) && ( Channel_PCount( ) >= Conf_MaxPChannels )) + { + /* there are too many persistent channels in the network! */ + ok = IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client )); + } + else x[0] = 'P'; break; default: Log( LOG_DEBUG, "Unknown channel-mode \"%c%c\" from \"%s\" at %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ), Channel_Name( chan )); @@ -434,8 +435,6 @@ IRC_AWAY( CLIENT *Client, REQUEST *Req ) assert( Client != NULL ); assert( Req != NULL ); - if( Client_Type( Client ) != CLIENT_USER ) return IRC_WriteStrClient( Client, ERR_NOTREGISTERED_MSG, Client_ID( Client )); - /* Falsche Anzahl Parameter? */ if( Req->argc > 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );