*** ../ircu2.10.01/doc/Configure.help  Tue Feb  3 11:45:05 1998
--- ../ircu2.10.01+/doc/Configure.help      Mon Feb  2 15:47:17 1998
***************
*** 748,753 ****
--- 748,769 ----
    the server in order to gain oper privleges.  If your not sure, just
    select 'y'.
  
+ Allow Opers to join channels using a master key - ESNET
+ OPER_JOIN_GOD_ESNET
+   If you choose "yes", an OPER can join any channel writing
+   a master key "GOD". She can join through keys, invite, bans, and so on.
+   Useful to run local Channel Services.
+ 
+ Allow Opers to join channels using a master key - ESNET
+ OPER_CHANNEL_SERVICE_ESNET
+   If you choose "yes", an OPER can set mode "+k" on himself. That is,
+   nobody will can kick or deop him. Useful to run local Channel Services.
+ 
+ Local Channel Services has no Flood Control - ESNET
+ CS_NO_FLOOD_ESNET
+   If you choose "yes", a local channel service (user with mode +k) won't
+   have flood control. Useful if you are running local bots as ChServ.
+ 
  Allow local opers to use the REHASH command
  LOCOP_REHASH
    Allows a local operator (defined by a lowercase o:line in ircd.conf)


*** ../ircu2.10.01/config/config-sh.in    Mon Feb  2 14:59:07 1998
--- ../ircu2.10.01+/config/config-sh.in        Mon Feb  2 15:13:41 1998
***************
*** 297,302 ****
--- 297,305 ----
    bool 'Allow Opers to use the DIE command' OPER_DIE y
    bool 'Allow Opers to add local G-lines' OPER_LGLINE y
    bool 'Allow Opers to connect from a remote site' OPER_REMOTE y
+   bool 'Allow Opers to join channels using a master key - ESNET' OPER_JOIN_GOD_ESNET y
+   bool 'Allow Opers to became channel service - ESNET' OPER_CHANNEL_SERVICE_ESNET y
+   bool 'Local Channel Services has no Flood Control - ESNET' CS_NO_FLOOD_ESNET y
    bool 'Allow local opers to use the REHASH command' LOCOP_REHASH y
    bool 'Allow local opers to use the RESTART command' LOCOP_RESTART
    bool 'Allow local opers to use the DIE command' LOCOP_DIE


*** ../ircu2.10.01/ircd/s_debug.c       Tue Feb  3 10:19:18 1998
--- ../ircu2.10.01+/ircd/s_debug.c   Tue Feb  3 10:26:41 1998
***************
*** 167,172 ****
--- 167,191 ----
  #ifdef        USE_SYSLOG
      'Y',
  #endif
+     '.','E','S','N','E','T','.', 
+     'J','G',
+ #ifdef OPER_JOIN_GOD_ESNET
+     '+',
+ #else
+     '-',
+ #endif
+     'C','S',
+ #ifdef OPER_CHANNEL_SERVICE_ESNET
+     '+',
+ #else
+     '-',
+ #endif
+     'C','S','F',
+ #ifdef CS_NO_FLOOD_ESNET
+     '+',
+ #else
+     '-',
+ #endif
      '\0'
  };
  


*** ../ircu2.10.01/ircd/channel.c       Tue Feb  3 10:27:03 1998
--- ../ircu2.10.01+/ircd/channel.c   Tue Feb  3 10:29:17 1998
***************
*** 1927,1934 ****
--- 1927,1936 ----
  ** jcea@argo.es - 26/03/97
  */
  
+ #ifdef OPER_JOIN_GOD_ESNET
          if((IsOper(sptr)) && (!BadPtr(key)) && (!compall("GOD", key)))
                  return 0;
+ #endif
  /*
  */
  


*** ../ircu2.10.01/ircd/s_user.c        Tue Feb  3 10:36:34 1998
--- ../ircu2.10.01+/ircd/s_user.c    Tue Feb  3 10:41:11 1998
***************
*** 3306,3312 ****
  ** Si somos IRCOPs y hemos puesto el flag K, lo acepta.
  ** jcea@argo.es - 16/Dic/97
  */
!   if (!(setflags & FLAGS_CHSERV) && !IsServer(cptr) && !IsOper(sptr))
      sptr->flags &= ~FLAGS_CHSERV;
    /*
     * Compare new flags with old flags and send string which
--- 3306,3316 ----
  ** Si somos IRCOPs y hemos puesto el flag K, lo acepta.
  ** jcea@argo.es - 16/Dic/97
  */
!   if (!(setflags & FLAGS_CHSERV) && !IsServer(cptr)
! #ifdef OPER_CHANNEL_SERVICE_ESNET
!     && !IsOper(sptr)
! #endif
!     )
      sptr->flags &= ~FLAGS_CHSERV;
    /*
     * Compare new flags with old flags and send string which


*** ../ircu2.10.01/ircd/s_bsd.c Tue Feb  3 10:59:14 1998
--- ../ircu2.10.01+/ircd/s_bsd.c     Tue Feb  3 10:58:11 1998
***************
*** 1550,1556 ****
      if (dbuf_put(&cptr->recvQ, readbuf, length) < 0)
        return exit_client(cptr, cptr, &me, "dbuf_put fail");
  
!     if (IsPerson(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD)
        return exit_client(cptr, cptr, &me, "Excess Flood");
  
      while (DBufLength(&cptr->recvQ) && !NoNewLine(cptr) &&
--- 1550,1560 ----
      if (dbuf_put(&cptr->recvQ, readbuf, length) < 0)
        return exit_client(cptr, cptr, &me, "dbuf_put fail");
  
!     if (IsPerson(cptr) && DBufLength(&cptr->recvQ) > CLIENT_FLOOD
! #ifdef CS_NO_FLOOD_ESNET
!       && !IsChannelService(cptr)
! #endif
!       )
        return exit_client(cptr, cptr, &me, "Excess Flood");
  
      while (DBufLength(&cptr->recvQ) && !NoNewLine(cptr) &&