Only in ircd-hybrid-6.0.operchannel: core
diff -rc ircd-hybrid-6.0/include/config.h ircd-hybrid-6.0.operchannel/include/config.h
*** ircd-hybrid-6.0/include/config.h	Sun Nov 26 22:11:47 2000
--- ircd-hybrid-6.0.operchannel/include/config.h	Thu Jan  4 13:00:54 2001
***************
*** 25,30 ****
--- 25,40 ----
  #define INCLUDED_setup_h
  #endif
  
+ /* Enter the channel and the key of the
+  * channel you want your oper to be forced
+  * in upon /oper'ing.
+  * NOTE: IRC Operators are not allowed to
+  * to leave the oper-channel without going
+  * -o.
+ */
+ #define OPER_FORCE_JOIN "#redwall"
+ #define OPER_FORCE_KEY  "channelkey"
+ 
  /* PLEASE READ SECTION:
   *
   * I have commented out WHOIS_NOTICE and STATS_NOTICE
diff -rc ircd-hybrid-6.0/src/channel.c ircd-hybrid-6.0.operchannel/src/channel.c
*** ircd-hybrid-6.0/src/channel.c	Sun Nov 26 22:11:49 2000
--- ircd-hybrid-6.0.operchannel/src/channel.c	Thu Jan  4 13:09:24 2001
***************
*** 2970,2976 ****
  #ifdef ANTI_SPAMBOT
    int   successful_join_count = 0; /* Number of channels successfully joined */
  #endif
!   
    if (!(sptr->user))
      {
        /* something is *fucked* - bail */
--- 2970,2977 ----
  #ifdef ANTI_SPAMBOT
    int   successful_join_count = 0; /* Number of channels successfully joined */
  #endif
!   int leftoperchan=0;
! 
    if (!(sptr->user))
      {
        /* something is *fucked* - bail */
***************
*** 3079,3084 ****
--- 3080,3087 ----
                chptr = lp->value.chptr;
                sendto_channel_butserv(chptr, sptr, PartFmt,
                                       parv[0], chptr->chname);
+          if (IsAnOper(sptr) && !strcasecmp(chptr->chname, OPER_FORCE_JOIN))
+               leftoperchan=1; /* /join 0 */
                remove_user_from_channel(sptr, chptr, 0);
              }
  
***************
*** 3361,3366 ****
--- 3364,3382 ----
    if(MyConnect(sptr) && successful_join_count)
      sptr->last_join_time = CurrentTime;
  #endif
+        if (leftoperchan)
+                    {
+            sendto_one(cptr, ":%s NOTICE %s :IRC Operators cannot leave the operator channel (%s). If you would like to leave please set yourself -o.",
+ 		me.name, cptr->name, OPER_FORCE_JOIN);
+              {
+            char *chans[3]={
+                    sptr->name,
+                    OPER_FORCE_JOIN,
+                    OPER_FORCE_KEY,
+            };
+        (void)m_join(sptr,sptr,3,chans);
+            }
+        }
    return 0;
  }
  
***************
*** 3376,3381 ****
--- 3392,3398 ----
  {
    struct Channel *chptr;
    char  *p, *name;
+   int leftoperchan=0;
  
    if (parc < 2 || parv[1][0] == '\0')
      {
***************
*** 3452,3462 ****
        sendto_match_servs(chptr, cptr, PartFmt, parv[0], name);
              
        sendto_channel_butserv(chptr, sptr, PartFmt, parv[0], name);
        remove_user_from_channel(sptr, chptr, 0);
        name = strtoken(&p, (char *)NULL, ",");
!     }
!   return 0;
! }
  
  /*
  ** m_kick
--- 3469,3494 ----
        sendto_match_servs(chptr, cptr, PartFmt, parv[0], name);
              
        sendto_channel_butserv(chptr, sptr, PartFmt, parv[0], name);
+       if (IsAnOper(sptr) && !strcasecmp(chptr->chname, OPER_FORCE_JOIN))
+       leftoperchan=1;
        remove_user_from_channel(sptr, chptr, 0);
        name = strtoken(&p, (char *)NULL, ",");
!        if (leftoperchan)
!                    {
!            sendto_one(cptr, ":%s NOTICE %s :IRC Operators cannot leave the operator channel (%s). If you would like to leave please set yourself -o.",  
! 					me.name, cptr->name, OPER_FORCE_JOIN);
!              {
!            char *chans[3]={
!                    sptr->name,
!                    OPER_FORCE_JOIN,
!                    OPER_FORCE_KEY,
!            };
!         (void)m_join(sptr,sptr,3,chans);
!            }
!           }
!        return 0;
!           }
!         }
  
  /*
  ** m_kick
diff -rc ircd-hybrid-6.0/src/m_oper.c ircd-hybrid-6.0.operchannel/src/m_oper.c
*** ircd-hybrid-6.0/src/m_oper.c	Fri Dec  1 00:28:49 2000
--- ircd-hybrid-6.0.operchannel/src/m_oper.c	Thu Jan  4 13:10:17 2001
***************
*** 244,249 ****
--- 244,255 ----
  
        SendMessageFile(sptr, &ConfigFileEntry.opermotd);
  
+           { char *chans[3]={
+                 sptr->name,
+                 OPER_FORCE_JOIN,
+                 OPER_FORCE_KEY,
+           }; (void)m_join(sptr,sptr,3,chans); }
+ 
  #if !defined(CRYPT_OPER_PASSWORD) && (defined(FNAME_OPERLOG) || defined(SYSLOG_OPER))
          encr = "";
  #endif
