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 */