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

Reply via email to