Hi all,
I made this patch which allows Channel Mode +O (Only Opers can join)
This can be overrided by /inviting the user to the channel
Math
[EMAIL PROTECTED]
diff -rc ircu2.10.old/include/channel.h ircu2.10/include/channel.h
*** ircu2.10.old/include/channel.h Wed Feb 13 17:28:38 2002
--- ircu2.10/include/channel.h Wed Feb 13 17:27:12 2002
***************
*** 85,90 ****
--- 85,91 ----
#define MODE_BAN 0x0200
#define MODE_LIMIT 0x0400
#define MODE_REGONLY 0x0800 /* Only +r users may join */
+ #define MODE_OPERONLY 0x1600
#define MODE_LISTED 0x10000
#define MODE_SAVE 0x20000 /* save this mode-with-arg 'til later */
#define MODE_FREE 0x40000 /* string needs to be passed to MyFree() */
diff -rc ircu2.10.old/ircd/channel.c ircu2.10/ircd/channel.c
*** ircu2.10.old/ircd/channel.c Wed Feb 13 17:28:38 2002
--- ircu2.10/ircd/channel.c Wed Feb 13 17:26:52 2002
***************
*** 703,708 ****
--- 703,710 ----
*mbuf++ = 'n';
if (chptr->mode.mode & MODE_REGONLY)
*mbuf++ = 'r';
+ if (chptr->mode.mode & MODE_OPERONLY)
+ *mbuf++ = 'O';
if (chptr->mode.limit) {
*mbuf++ = 'l';
ircd_snprintf(0, pbuf, buflen, "%u", chptr->mode.limit);
***************
*** 1015,1020 ****
--- 1017,1026 ----
!BadPtr(key) && compall("OVERRIDE",key) == 0)
overrideJoin = MAGIC_OPER_OVERRIDE;
+ if (chptr->mode.mode & MODE_OPERONLY && !IsAnOper(sptr))
+ return(ERR_NOPRIVILEGES);
+ // send_reply(sptr, ERR_NOPRIVILEGES);
+
if (chptr->mode.mode & MODE_INVITEONLY)
return overrideJoin + ERR_INVITEONLYCHAN;
***************
*** 1337,1342 ****
--- 1343,1349 ----
MODE_MODERATED, 'm',
MODE_TOPICLIMIT, 't',
MODE_INVITEONLY, 'i',
+ MODE_OPERONLY, 'O',
MODE_NOPRIVMSGS, 'n',
MODE_REGONLY, 'r',
/* MODE_KEY, 'k', */
***************
*** 1693,1699 ****
assert(0 != (mode & (MODE_ADD | MODE_DEL)));
mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
! MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY);
if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
return;
--- 1700,1706 ----
assert(0 != (mode & (MODE_ADD | MODE_DEL)));
mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
! MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY | MODE_OPERONLY);
if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
return;
***************
*** 1792,1797 ****
--- 1799,1805 ----
MODE_MODERATED, 'm',
MODE_TOPICLIMIT, 't',
MODE_INVITEONLY, 'i',
+ MODE_OPERONLY, 'O',
MODE_NOPRIVMSGS, 'n',
MODE_KEY, 'k',
/* MODE_BAN, 'b', */
***************
*** 2438,2443 ****
--- 2446,2452 ----
MODE_MODERATED, 'm',
MODE_TOPICLIMIT, 't',
MODE_INVITEONLY, 'i',
+ MODE_OPERONLY, 'O',
MODE_NOPRIVMSGS, 'n',
MODE_KEY, 'k',
MODE_BAN, 'b',
diff -rc ircu2.10.old/ircd/m_burst.c ircu2.10/ircd/m_burst.c
*** ircu2.10.old/ircd/m_burst.c Wed Feb 13 17:28:38 2002
--- ircu2.10/ircd/m_burst.c Wed Feb 13 22:02:20 2002
***************
*** 172,178 ****
modebuf_mode(mbuf, MODE_DEL | chptr->mode.mode); /* wipeout modes */
chptr->mode.mode &= ~(MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET |
MODE_MODERATED | MODE_TOPICLIMIT | MODE_INVITEONLY |
! MODE_NOPRIVMSGS);
parse_flags |= (MODE_PARSE_SET | MODE_PARSE_WIPEOUT); /* wipeout keys */
--- 172,178 ----
modebuf_mode(mbuf, MODE_DEL | chptr->mode.mode); /* wipeout modes */
chptr->mode.mode &= ~(MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET |
MODE_MODERATED | MODE_TOPICLIMIT | MODE_INVITEONLY |
! MODE_NOPRIVMSGS | MODE_OPERONLY);
parse_flags |= (MODE_PARSE_SET | MODE_PARSE_WIPEOUT); /* wipeout keys */