mirror of
https://github.com/osmarks/ngircd.git
synced 2024-12-12 09:50:29 +00:00
Implement channel mode 'O': "IRC operators only"
This channel mode is used on DALnet (bahamut), for example.
This commit is contained in:
parent
6600ce3445
commit
a57748e1a1
@ -81,7 +81,7 @@
|
||||
in seconds. */
|
||||
|
||||
#define USERMODES "aciorswx" /* Supported user modes. */
|
||||
#define CHANMODES "biIklmnoPstvz" /* Supported channel modes. */
|
||||
#define CHANMODES "biIklmnoOPstvz" /* Supported channel modes. */
|
||||
|
||||
#define CONNECTED true /* Internal status codes. */
|
||||
#define DISCONNECTED false
|
||||
|
@ -122,6 +122,13 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strchr(channel_modes, 'O') && !Client_OperByMe(Client)) {
|
||||
/* Only IRC operators are allowed! */
|
||||
IRC_WriteStrClient(Client, ERR_OPONLYCHANNEL_MSG,
|
||||
Client_ID(Client), channame);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -499,6 +499,23 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
goto chan_exit;
|
||||
}
|
||||
break;
|
||||
case 'O': /* IRC operators only */
|
||||
if (modeok) {
|
||||
/* Only IRC operators are allowed to
|
||||
* set the 'O' channel mode! */
|
||||
if (set && !(Client_OperByMe(Client)
|
||||
|| Client_Type(Client) == CLIENT_SERVER))
|
||||
connected = IRC_WriteStrClient(Origin,
|
||||
ERR_NOPRIVILEGES_MSG,
|
||||
Client_ID(Origin));
|
||||
else
|
||||
x[0] = 'O';
|
||||
} else
|
||||
connected = IRC_WriteStrClient(Origin,
|
||||
ERR_CHANOPRIVSNEEDED_MSG,
|
||||
Client_ID(Origin),
|
||||
Channel_Name(Channel));
|
||||
break;
|
||||
case 'P': /* Persistent channel */
|
||||
if (modeok) {
|
||||
/* Only IRC operators are allowed to
|
||||
|
@ -117,6 +117,7 @@
|
||||
#define ERR_PASSWDMISMATCH_MSG "464 %s :Invalid password"
|
||||
#define ERR_CHANNELISFULL_MSG "471 %s %s :Cannot join channel (+l)"
|
||||
#define ERR_SECURECHANNEL_MSG "471 %s %s :Cannot join channel (+z)"
|
||||
#define ERR_OPONLYCHANNEL_MSG "471 %s %s :Cannot join channel (+O)"
|
||||
#define ERR_UNKNOWNMODE_MSG "472 %s: %c :is unknown mode char for %s"
|
||||
#define ERR_INVITEONLYCHAN_MSG "473 %s %s :Cannot join channel (+i)"
|
||||
#define ERR_BANNEDFROMCHAN_MSG "474 %s %s :Cannot join channel (+b)"
|
||||
|
Loading…
Reference in New Issue
Block a user