mirror of
https://github.com/osmarks/ngircd.git
synced 2025-06-27 15:42:54 +00:00
Merge branch 'bug141-ModesQq'
This closes bug #141. * bug141-ModesQq: KICK-protect IRC services Implement channel mode "Q" and user mode "q" Conflicts: src/ngircd/defines.h src/ngircd/messages.h
This commit is contained in:
commit
c9d166747d
@ -27,6 +27,7 @@ channels he is using at the moment.
|
|||||||
C 19 Only users that share a channel are allowed to send messages.
|
C 19 Only users that share a channel are allowed to send messages.
|
||||||
i 0.0.1 User is "invisible".
|
i 0.0.1 User is "invisible".
|
||||||
o 0.0.1 User is IRC operator.
|
o 0.0.1 User is IRC operator.
|
||||||
|
q 20 User is protected, can not be kicked from a channel.
|
||||||
r 0.0.1 User is restricted.
|
r 0.0.1 User is restricted.
|
||||||
R (1) 19 User is registered (e.g. by NickServ).
|
R (1) 19 User is registered (e.g. by NickServ).
|
||||||
s 0.4.0 User wants to receive server notices.
|
s 0.4.0 User wants to receive server notices.
|
||||||
@ -54,6 +55,7 @@ users to lists (e.g. "invite list", "ban list"), others have parameters
|
|||||||
n 0.3.0 Channel doesn't allow messages of users not being members.
|
n 0.3.0 Channel doesn't allow messages of users not being members.
|
||||||
O 18 Only IRC operators are allowed to join this channel.
|
O 18 Only IRC operators are allowed to join this channel.
|
||||||
P 0.5.0 Channel is "persistent".
|
P 0.5.0 Channel is "persistent".
|
||||||
|
Q 20 Nobody can be kicked from the channel.
|
||||||
r (1) 19 Channel is "registered" (e.g. by ChanServ).
|
r (1) 19 Channel is "registered" (e.g. by ChanServ).
|
||||||
R 19 Only registered users are allowed to join this channel.
|
R 19 Only registered users are allowed to join this channel.
|
||||||
s 0.9.0 Channel is "secret".
|
s 0.9.0 Channel is "secret".
|
||||||
|
@ -327,6 +327,18 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(Client_Type(Peer) == CLIENT_USER) {
|
if(Client_Type(Peer) == CLIENT_USER) {
|
||||||
|
/* Channel mode 'Q' and user mode 'q' on target: nobody but
|
||||||
|
* IRC Operators and servers can kick the target user */
|
||||||
|
if ((strchr(Channel_Modes(chan), 'Q')
|
||||||
|
|| Client_HasMode(Target, 'q')
|
||||||
|
|| Client_Type(Target) == CLIENT_SERVICE)
|
||||||
|
&& !Client_HasMode(Origin, 'o')) {
|
||||||
|
IRC_WriteStrClient(Origin, ERR_KICKDENY_MSG,
|
||||||
|
Client_ID(Origin), Name,
|
||||||
|
Client_ID(Target));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if client has the rights to kick target */
|
/* Check if client has the rights to kick target */
|
||||||
ptr = Channel_UserModes(chan, Peer);
|
ptr = Channel_UserModes(chan, Peer);
|
||||||
target_modes = Channel_UserModes(chan, Target);
|
target_modes = Channel_UserModes(chan, Target);
|
||||||
|
@ -161,10 +161,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Supported user modes. */
|
/** Supported user modes. */
|
||||||
#define USERMODES "aBcCiorRswx"
|
#define USERMODES "aBcCioqrRswx"
|
||||||
|
|
||||||
/** Supported channel modes. */
|
/** Supported channel modes. */
|
||||||
#define CHANMODES "abehiIklmMnoOPqrRstvVz"
|
#define CHANMODES "abehiIklmMnoOPqQrRstvVz"
|
||||||
|
|
||||||
/** Away message for users connected to linked servers. */
|
/** Away message for users connected to linked servers. */
|
||||||
#define DEFAULT_AWAY_MSG "Away"
|
#define DEFAULT_AWAY_MSG "Away"
|
||||||
|
@ -257,6 +257,15 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
|||||||
ERR_NOPRIVILEGES_MSG,
|
ERR_NOPRIVILEGES_MSG,
|
||||||
Client_ID(Origin));
|
Client_ID(Origin));
|
||||||
break;
|
break;
|
||||||
|
case 'q': /* KICK-protected user */
|
||||||
|
if (!set || Client_Type(Client) == CLIENT_SERVER
|
||||||
|
|| Client_OperByMe(Origin))
|
||||||
|
x[0] = 'q';
|
||||||
|
else
|
||||||
|
ok = IRC_WriteStrClient(Origin,
|
||||||
|
ERR_NOPRIVILEGES_MSG,
|
||||||
|
Client_ID(Origin));
|
||||||
|
break;
|
||||||
case 'r': /* Restricted (only settable) */
|
case 'r': /* Restricted (only settable) */
|
||||||
if (set || Client_Type(Client) == CLIENT_SERVER)
|
if (set || Client_Type(Client) == CLIENT_SERVER)
|
||||||
x[0] = 'r';
|
x[0] = 'r';
|
||||||
@ -570,6 +579,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
|||||||
case 'M': /* Only identified nicks can write */
|
case 'M': /* Only identified nicks can write */
|
||||||
case 'm': /* Moderated */
|
case 'm': /* Moderated */
|
||||||
case 'n': /* Only members can write */
|
case 'n': /* Only members can write */
|
||||||
|
case 'Q': /* No kicks */
|
||||||
case 't': /* Topic locked */
|
case 't': /* Topic locked */
|
||||||
if(is_oper || is_machine || is_owner ||
|
if(is_oper || is_machine || is_owner ||
|
||||||
is_admin || is_op || is_halfop)
|
is_admin || is_op || is_halfop)
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#define RPL_YOURHOST_MSG "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
|
#define RPL_YOURHOST_MSG "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
|
||||||
#define RPL_CREATED_MSG "003 %s :This server has been started %s"
|
#define RPL_CREATED_MSG "003 %s :This server has been started %s"
|
||||||
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %s %s"
|
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %s %s"
|
||||||
#define RPL_ISUPPORT1_MSG "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPRstVz CHANLIMIT=#&+:%d :are supported on this server"
|
#define RPL_ISUPPORT1_MSG "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=#&+ CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=#&+:%d :are supported on this server"
|
||||||
#define RPL_ISUPPORT2_MSG "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
|
#define RPL_ISUPPORT2_MSG "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
|
||||||
|
|
||||||
#define RPL_TRACELINK_MSG "200 %s Link %s-%s %s %s V%s %ld %d %d"
|
#define RPL_TRACELINK_MSG "200 %s Link %s-%s %s %s V%s %ld %d %d"
|
||||||
@ -140,6 +140,7 @@
|
|||||||
#define ERR_NOPRIVILEGES_MSG "481 %s :Permission denied"
|
#define ERR_NOPRIVILEGES_MSG "481 %s :Permission denied"
|
||||||
#define ERR_CHANOPRIVSNEEDED_MSG "482 %s %s :You are not channel operator"
|
#define ERR_CHANOPRIVSNEEDED_MSG "482 %s %s :You are not channel operator"
|
||||||
#define ERR_CHANOPPRIVTOOLOW_MSG "482 %s %s :Your privileges are too low"
|
#define ERR_CHANOPPRIVTOOLOW_MSG "482 %s %s :Your privileges are too low"
|
||||||
|
#define ERR_KICKDENY_MSG "482 %s %s :Cannot kick, %s is protected"
|
||||||
#define ERR_CANTKILLSERVER_MSG "483 %s :You can't kill a server!"
|
#define ERR_CANTKILLSERVER_MSG "483 %s :You can't kill a server!"
|
||||||
#define ERR_RESTRICTED_MSG "484 %s :Your connection is restricted"
|
#define ERR_RESTRICTED_MSG "484 %s :Your connection is restricted"
|
||||||
#define ERR_NICKREGISTER_MSG "484 %s :Cannot modify user mode (+R) -- Use IRC services"
|
#define ERR_NICKREGISTER_MSG "484 %s :Cannot modify user mode (+R) -- Use IRC services"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user