Committer : klmitch
CVSROOT : /cvsroot/undernet-ircu
Module : ircu2.10
Commit time: 2008-03-20 18:22:26 UTC
Modified files:
ChangeLog include/channel.h ircd/channel.c ircd/ircd_features.c
Log message:
Author: Kev <[EMAIL PROTECTED]>
Log message:
This very simple change adds a +R channel mode that can only be set or
reset by remote users (or servers) or with /opmode. This can be used by X
to indicate that a channel is registered, a sentinal that C can use to
decide when it is legal to reop a channel.
[pull up from u2_10_12_branch]
---------------------- diff included ----------------------
Index: ircu2.10/ChangeLog
diff -u ircu2.10/ChangeLog:1.850 ircu2.10/ChangeLog:1.851
--- ircu2.10/ChangeLog:1.850 Thu Mar 20 10:45:30 2008
+++ ircu2.10/ChangeLog Thu Mar 20 11:22:16 2008
@@ -1,5 +1,16 @@
2008-03-20 Kevin L. Mitchell <[EMAIL PROTECTED]>
+ * ircd/ircd_features.c: update CHANMODES ISUPPORT setting to
+ include 'R' channel mode
+
+ * ircd/channel.c: add MODE_REGISTERED, mapped to +R; arrange to
+ only have it settable or clearable by remote users or /opmode
+
+ * include/channel.h: add MODE_REGISTERED, update infochanmodes to
+ include 'R' channel mode
+
+2008-03-20 Kevin L. Mitchell <[EMAIL PROTECTED]>
+
* include/client.h: IsLocOp() now checks to see if its MyUser() as
well; IsAnOper() uses IsOper() and IsLocOp() instead of directly
testing the flags
Index: ircu2.10/include/channel.h
diff -u ircu2.10/include/channel.h:1.62 ircu2.10/include/channel.h:1.63
--- ircu2.10/include/channel.h:1.62 Tue Dec 4 20:13:59 2007
+++ ircu2.10/include/channel.h Thu Mar 20 11:22:16 2008
@@ -19,7 +19,7 @@
*/
/** @file
* @brief Channel management and maintenance.
- * @version $Id: channel.h,v 1.62 2007/12/05 04:13:59 entrope Exp $
+ * @version $Id: channel.h,v 1.63 2008/03/20 18:22:16 klmitch Exp $
*/
#ifndef INCLUDED_channel_h
#define INCLUDED_channel_h
@@ -99,6 +99,8 @@
#define MODE_LIMIT 0x0400 /**< +l Limit */
#define MODE_REGONLY 0x0800 /**< Only +r users may join */
#define MODE_DELJOINS 0x1000 /**< New join messages are delayed */
+#define MODE_REGISTERED 0x2000 /**< Channel marked as registered
+ * (for future semantic expansion) */
#define MODE_SAVE 0x20000 /**< save this mode-with-arg 'til
* later */
#define MODE_FREE 0x40000 /**< string needs to be passed to
@@ -113,7 +115,7 @@
#define MODE_WPARAS
(MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS)
/** Available Channel modes */
-#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrD" :
"biklmnopstvrD"
+#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDR" :
"biklmnopstvrDR"
/** Available Channel modes that take parameters */
#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUv" :
"bklov"
Index: ircu2.10/ircd/channel.c
diff -u ircu2.10/ircd/channel.c:1.179 ircu2.10/ircd/channel.c:1.180
--- ircu2.10/ircd/channel.c:1.179 Wed Dec 5 21:07:31 2007
+++ ircu2.10/ircd/channel.c Thu Mar 20 11:22:16 2008
@@ -19,7 +19,7 @@
*/
/** @file
* @brief Channel management and maintenance
- * @version $Id: channel.c,v 1.179 2007/12/06 05:07:31 entrope Exp $
+ * @version $Id: channel.c,v 1.180 2008/03/20 18:22:16 klmitch Exp $
*/
#include "config.h"
@@ -809,6 +809,8 @@
*mbuf++ = 'D';
else if (MyUser(cptr) && (chptr->mode.mode & MODE_WASDELJOINS))
*mbuf++ = 'd';
+ if (chptr->mode.mode & MODE_REGISTERED)
+ *mbuf++ = 'R';
if (chptr->mode.limit) {
*mbuf++ = 'l';
ircd_snprintf(0, pbuf, buflen, "%u", chptr->mode.limit);
@@ -1535,6 +1537,7 @@
MODE_NOPRIVMSGS, 'n',
MODE_REGONLY, 'r',
MODE_DELJOINS, 'D',
+ MODE_REGISTERED, 'R',
/* MODE_KEY, 'k', */
/* MODE_BAN, 'b', */
MODE_LIMIT, 'l',
@@ -1946,7 +1949,7 @@
mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY |
- MODE_DELJOINS | MODE_WASDELJOINS);
+ MODE_DELJOINS | MODE_WASDELJOINS | MODE_REGISTERED);
if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
return;
@@ -2092,6 +2095,7 @@
MODE_KEY, 'k',
MODE_APASS, 'A',
MODE_UPASS, 'U',
+ MODE_REGISTERED, 'R',
/* MODE_BAN, 'b', */
MODE_LIMIT, 'l',
MODE_REGONLY, 'r',
@@ -3155,6 +3159,11 @@
if (!state->mbuf)
return;
+ /* Local users are not permitted to change registration status */
+ if (flag_p[0] == MODE_REGISTERED && !(state->flags & MODE_PARSE_FORCE) &&
+ MyUser(state->sptr))
+ return;
+
if (state->dir == MODE_ADD) {
state->add |= flag_p[0];
state->del &= ~flag_p[0];
@@ -3198,6 +3207,7 @@
MODE_KEY, 'k',
MODE_APASS, 'A',
MODE_UPASS, 'U',
+ MODE_REGISTERED, 'R',
MODE_BAN, 'b',
MODE_LIMIT, 'l',
MODE_REGONLY, 'r',
Index: ircu2.10/ircd/ircd_features.c
diff -u ircu2.10/ircd/ircd_features.c:1.65 ircu2.10/ircd/ircd_features.c:1.66
--- ircu2.10/ircd/ircd_features.c:1.65 Sat Mar 15 18:52:58 2008
+++ ircu2.10/ircd/ircd_features.c Thu Mar 20 11:22:16 2008
@@ -18,7 +18,7 @@
*/
/** @file
* @brief Implementation of configurable feature support.
- * @version $Id: ircd_features.c,v 1.65 2008/03/16 01:52:58 klmitch Exp $
+ * @version $Id: ircd_features.c,v 1.66 2008/03/20 18:22:16 klmitch Exp $
*/
#include "config.h"
@@ -246,7 +246,7 @@
static void
set_isupport_chanmodes(void)
{
- add_isupport_s("CHANMODES", feature_bool(FEAT_OPLEVELS) ?
"b,AkU,l,imnpstrDd" : "b,k,l,imnpstrDd");
+ add_isupport_s("CHANMODES", feature_bool(FEAT_OPLEVELS) ?
"b,AkU,l,imnpstrDdR" : "b,k,l,imnpstrDdR");
}
static void
----------------------- End of diff -----------------------
_______________________________________________
Patches mailing list
[email protected]
http://undernet.sbg.org/mailman/listinfo/patches