Committer : entrope
CVSROOT : /cvsroot/undernet-ircu
Module : ircu2.10
Branch tags: u2_10_12_branch
Commit time: 2005-11-09 12:36:23 UTC
Modified files:
Tag: u2_10_12_branch
ChangeLog ircd/channel.c ircd/m_kick.c
Log message:
Allow oplevel 999 to kick and deop other oplevel 999, making Apass
channels behave the same as non-Apass channels.
---------------------- diff included ----------------------
Index: ircu2.10/ChangeLog
diff -u ircu2.10/ChangeLog:1.710.2.21 ircu2.10/ChangeLog:1.710.2.22
--- ircu2.10/ChangeLog:1.710.2.21 Mon Oct 31 15:33:36 2005
+++ ircu2.10/ChangeLog Wed Nov 9 04:36:09 2005
@@ -1,3 +1,11 @@
+2005-11-07 Michael Poole <[EMAIL PROTECTED]>
+
+ * ircd/channel.c (mode_parse_client): Allow clients to specify
+ oplevel in MODE #channel +o.
+ (mode_process_clients): Allow oplevel 999 to deop another 999.
+
+ * ircd/kick.c (m_kick): Allow oplevel 999 to kick another 999.
+
2005-10-31 Michael Poole <[EMAIL PROTECTED]>
(Based on a patch by Romain Bignon <[EMAIL PROTECTED]>)
Index: ircu2.10/ircd/channel.c
diff -u ircu2.10/ircd/channel.c:1.155.2.2 ircu2.10/ircd/channel.c:1.155.2.3
--- ircu2.10/ircd/channel.c:1.155.2.2 Mon Oct 31 15:33:36 2005
+++ ircu2.10/ircd/channel.c Wed Nov 9 04:36:12 2005
@@ -19,7 +19,7 @@
*/
/** @file
* @brief Channel management and maintenance
- * @version $Id: channel.c,v 1.155.2.2 2005/10/31 23:33:36 entrope Exp $
+ * @version $Id: channel.c,v 1.155.2.3 2005/11/09 12:36:12 entrope Exp $
*/
#include "config.h"
@@ -2889,9 +2889,11 @@
mode_parse_client(struct ParseState *state, int *flag_p)
{
char *t_str;
+ char *colon;
struct Client *acptr;
struct Membership *member;
int oplevel = MAXOPLEVEL + 1;
+ int req_oplevel;
int i;
if (MyUser(state->sptr) && state->max_args <= 0) /* drop if too many args */
@@ -2910,9 +2912,27 @@
return;
}
- if (MyUser(state->sptr)) /* find client we're manipulating */
+ if (MyUser(state->sptr)) {
+ colon = strchr(t_str, ':');
+ if (colon != NULL) {
+ *colon++ = '\0';
+ req_oplevel = atoi(colon);
+ if (!(state->flags & MODE_PARSE_FORCE)
+ && state->member
+ && (req_oplevel < OpLevel(state->member)
+ || (req_oplevel == OpLevel(state->member)
+ && OpLevel(state->member) < MAXOPLEVEL)
+ || req_oplevel > MAXOPLEVEL))
+ send_reply(state->sptr, ERR_NOTLOWEROPLEVEL,
+ t_str, state->chptr->chname,
+ OpLevel(state->member), req_oplevel, "op",
+ OpLevel(state->member) == req_oplevel ? "the same" : "a
higher");
+ else if (req_oplevel <= MAXOPLEVEL)
+ oplevel = req_oplevel;
+ }
+ /* find client we're manipulating */
acptr = find_chasing(state->sptr, t_str, NULL);
- else {
+ } else {
if (t_str[5] == ':') {
t_str[5] = '\0';
oplevel = atoi(t_str + 6);
@@ -3002,11 +3022,14 @@
continue;
}
- /* don't allow to deop members with an op level that is <= our own
level */
- if (state->sptr != state->cli_change[i].client /* but allow to
deop oneself */
- && state->chptr->mode.apass[0]
+ /* Forbid deopping other members with an oplevel less than
+ * one's own level, and other members with an oplevel the same
+ * as one's own unless both are at MAXOPLEVEL. */
+ if (state->sptr != state->cli_change[i].client
&& state->member
- && OpLevel(member) <= OpLevel(state->member)) {
+ && ((OpLevel(member) < OpLevel(state->member))
+ || (OpLevel(member) == OpLevel(state->member)
+ && OpLevel(member) < MAXOPLEVEL))) {
int equal = (OpLevel(member) == OpLevel(state->member));
send_reply(state->sptr, ERR_NOTLOWEROPLEVEL,
cli_name(state->cli_change[i].client),
Index: ircu2.10/ircd/m_kick.c
diff -u ircu2.10/ircd/m_kick.c:1.19.2.2 ircu2.10/ircd/m_kick.c:1.19.2.3
--- ircu2.10/ircd/m_kick.c:1.19.2.2 Fri Oct 28 00:27:19 2005
+++ ircu2.10/ircd/m_kick.c Wed Nov 9 04:36:12 2005
@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
- * $Id: m_kick.c,v 1.19.2.2 2005/10/28 07:27:19 decampos Exp $
+ * $Id: m_kick.c,v 1.19.2.3 2005/11/09 12:36:12 entrope Exp $
*/
/*
@@ -142,8 +142,12 @@
if (!(member = find_member_link(chptr, who)) || IsZombie(member))
return send_reply(sptr, ERR_USERNOTINCHANNEL, cli_name(who),
chptr->chname);
- /* Don't allow to kick member with a higher or equal op-level */
- if (chptr->mode.apass[0] && OpLevel(member) <= OpLevel(member2))
+ /* Don't allow to kick member with a higher op-level,
+ * or members with the same op-level unless both are MAXOPLEVEL.
+ */
+ if (OpLevel(member) < OpLevel(member2)
+ || (OpLevel(member) == OpLevel(member2)
+ && OpLevel(member) < MAXOPLEVEL))
return send_reply(sptr, ERR_NOTLOWEROPLEVEL, cli_name(who), chptr->chname,
OpLevel(member2), OpLevel(member), "kick",
OpLevel(member) == OpLevel(member2) ? "the same" : "a higher");
----------------------- End of diff -----------------------
_______________________________________________
Patches mailing list
[email protected]
http://undernet.sbg.org/mailman/listinfo/patches