commit - 089ca21b3dcde8d12b140d418f00f6ed8d770444
commit + 8f162f4e1770940889cb1504b285e7ca9a61a485
blob - 383ac755a59a853b963ee8cd5195b01c41e9402e
blob + 9a59f286d090dcffd654588f60c92b952e58bb30
--- ChangeLog
+++ ChangeLog
ngIRCd HEAD
+ - Fixed propagation of channel mode 'P' on server links.
- Numeric 317: implemented "signon time" (displayed in WHOIS result).
- Fixed code that prevented GCC 2.95 to compile ngIRCd.
- Adjust path names in manual pages according to "./configure" settings.
--
-$Id: ChangeLog,v 1.323 2007/10/04 15:03:55 alex Exp $
+$Id: ChangeLog,v 1.324 2007/10/14 12:09:04 alex Exp $
blob - 4a6127ad95a0baa9e374fa3b36c3d764eb2fbeb1
blob + c26984d8208ec5eb0e4201bd2bebe694dd0b6097
--- src/ngircd/irc-mode.c
+++ src/ngircd/irc-mode.c
#include "portab.h"
-static char UNUSED id[] = "$Id: irc-mode.c,v 1.49 2007/08/02 10:14:26 fw Exp $";
+static char UNUSED id[] = "$Id: irc-mode.c,v 1.50 2007/10/14 12:08:57 alex Exp $";
#include "imp.h"
#include <assert.h>
break;
case 'P': /* Persistent channel */
- if( modeok )
- {
- if( set && ( ! Client_OperByMe( Client )))
- {
- /* Only IRC operators are allowed to set P mode */
- ok = IRC_WriteStrClient( Origin, ERR_NOPRIVILEGES_MSG, Client_ID( Origin ));
- }
- else x[0] = 'P';
- }
- else ok = IRC_WriteStrClient( Origin, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( Origin ), Channel_Name( Channel ));
+ if (modeok) {
+ /* Only IRC operators are allowed to
+ * set the 'P' channel mode! */
+ if (set && ! (Client_OperByMe(Client)
+ || Client_Type(Client) == CLIENT_SERVER)) {
+ ok = IRC_WriteStrClient(Origin,
+ ERR_NOPRIVILEGES_MSG,
+ Client_ID(Origin));
+ } else
+ x[0] = 'P';
+ } else
+ ok = IRC_WriteStrClient(Origin,
+ ERR_CHANOPRIVSNEEDED_MSG,
+ Client_ID(Origin),
+ Channel_Name(Channel));
break;
/* --- Channel user modes --- */