diff -BrU 0 ./include/channel.h ../ircd-hybrid-6.3-opercheats/include/channel.h
--- ./include/channel.h	Thu Dec  6 21:56:08 2001
+++ ../ircd-hybrid-6.3-opercheats/include/channel.h	Wed Feb 27 17:19:32 2002
@@ -113 +113,5 @@
-extern void    channel_modes(struct Client *, char *, char *, struct Channel*);
+extern void    channel_modes(struct Client *, char *, char *, struct Channel*
+#ifdef USE_W_CHEAT
+				   , int
+#endif
+);
diff -BrU 0 ./include/client.h ../ircd-hybrid-6.3-opercheats/include/client.h
--- ./include/client.h	Sun Feb 17 06:58:09 2002
+++ ../ircd-hybrid-6.3-opercheats/include/client.h	Thu Mar  7 21:26:18 2002
@@ -360,0 +361,5 @@
+#ifdef USE_W_CHEAT
+#define FLAGS2_OPER_WHOIS       0x800000  /* oper can cheat with who/whois/mode */
+#endif
+
+#ifndef USE_W_CHEAT
@@ -368,0 +374,12 @@
+#else
+#define FLAGS2_OPER_FLAGS       (FLAGS2_OPER_GLOBAL_KILL | \
+                                 FLAGS2_OPER_REMOTE | \
+                                 FLAGS2_OPER_UNKLINE | \
+                                 FLAGS2_OPER_GLINE | \
+                                 FLAGS2_OPER_N | \
+                                 FLAGS2_OPER_K | \
+                                 FLAGS2_OPER_DIE | \
+                                 FLAGS2_OPER_REHASH | \
+                                 FLAGS2_OPER_WHOIS)
+#endif
+
@@ -507 +524,4 @@
-
+#ifdef USE_W_CHEAT
+#define IsSetOperWhois(x)       ((x)->flags2 & FLAGS2_OPER_WHOIS)
+#define SetOperWhois(x)         ((x)->flags2 |= FLAGS2_OPER_WHOIS)
+#endif
diff -BrU 0 ./include/config.h ../ircd-hybrid-6.3-opercheats/include/config.h
--- ./include/config.h	Sun Feb 17 06:58:09 2002
+++ ../ircd-hybrid-6.3-opercheats/include/config.h	Wed Feb 27 18:06:49 2002
@@ -19 +19 @@
- * $Id: config.h,v 1.153 2002/02/17 05:58:09 lusky Exp $
+ * $Id: config.h.dist,v 1.132 2002/02/17 05:58:09 lusky Exp $
@@ -1023,0 +1024,8 @@
+
+#define SHOW_REMOTE_WHOIS
+#define USE_W_CHEAT
+#undef HIDE_W_CHEAT
+
+#define WHO_PREFIX       '!'
+#define WHOIS_PREFIX     '!'
+#define MODE_PREFIX      '!'
diff -BrU 0 ./include/config.h.dist ../ircd-hybrid-6.3-opercheats/include/config.h.dist
--- ./include/config.h.dist	Sun Feb 17 06:58:09 2002
+++ ../ircd-hybrid-6.3-opercheats/include/config.h.dist	Wed Feb 27 18:05:17 2002
@@ -1024,0 +1025,8 @@
+#define SHOW_REMOTE_WHOIS
+#define USE_W_CHEAT
+#undef HIDE_W_CHEAT
+
+#define WHO_PREFIX       '!'
+#define WHOIS_PREFIX     '!'
+#define MODE_PREFIX      '!'
+
diff -BrU 0 ./include/s_conf.h ../ircd-hybrid-6.3-opercheats/include/s_conf.h
--- ./include/s_conf.h	Sat Dec 15 03:42:01 2001
+++ ../ircd-hybrid-6.3-opercheats/include/s_conf.h	Wed Feb 27 17:12:40 2002
@@ -163 +163,3 @@
-
+#ifdef USE_W_CHEAT
+#define CONF_OPER_WHOIS     256
+#endif
diff -BrU 0 ./src/channel.c ../ircd-hybrid-6.3-opercheats/src/channel.c
--- ./src/channel.c	Sun Feb 17 06:58:12 2002
+++ ../ircd-hybrid-6.3-opercheats/src/channel.c	Wed Feb 27 17:20:50 2002
@@ -652 +652,5 @@
-void channel_modes(struct Client *cptr, char *mbuf, char *pbuf, struct Channel *chptr)
+void channel_modes(struct Client *cptr, char *mbuf, char *pbuf, struct Channel *chptr
+#ifdef USE_W_CHEAT
+		   , int ModeCheat
+#endif
+)
@@ -672 +676,5 @@
-      if (IsMember(cptr, chptr) || IsServer(cptr))
+      if (IsMember(cptr, chptr) || IsServer(cptr)
+#ifdef USE_W_CHEAT
+	  || ModeCheat
+#endif
+)
@@ -678 +686,5 @@
-      if (IsMember(cptr, chptr) || IsServer(cptr))
+      if (IsMember(cptr, chptr) || IsServer(cptr)
+#ifdef USE_W_CHEAT
+	  || ModeCheat
+#endif
+)
@@ -753 +765,5 @@
-  channel_modes(cptr, modebuf, parabuf, chptr);
+  channel_modes(cptr, modebuf, parabuf, chptr
+#ifdef USE_W_CHEAT
+		, 0
+#endif
+);
@@ -4024 +4040,5 @@
-    channel_modes(sptr, modebuf, parabuf, chptr);
+    channel_modes(sptr, modebuf, parabuf, chptr
+#ifdef USE_W_CHEAT
+		  ,0
+#endif
+);
diff -BrU 0 ./src/m_mode.c ../ircd-hybrid-6.3-opercheats/src/m_mode.c
--- ./src/m_mode.c	Sat Jul 31 04:42:56 1999
+++ ../ircd-hybrid-6.3-opercheats/src/m_mode.c	Wed Feb 27 17:21:53 2002
@@ -102 +102,7 @@
-
+#ifdef USE_W_CHEAT
+  int ModeCheat = 0;
+  if ((parc > 1) && (parv[1][0] == MODE_PREFIX) && (IsChanPrefix(parv[1][1])) && (IsSetOperWhois(cptr))) {
+    ModeCheat = 1;
+    parv[1]++;
+  }
+#endif
@@ -140 +146,5 @@
-      channel_modes(sptr, modebuf, parabuf, chptr);
+      channel_modes(sptr, modebuf, parabuf, chptr
+#ifdef USE_W_CHEAT
+		    , ModeCheat
+#endif
+);
diff -BrU 0 ./src/m_who.c ../ircd-hybrid-6.3-opercheats/src/m_who.c
--- ./src/m_who.c	Fri Nov 24 18:36:30 2000
+++ ../ircd-hybrid-6.3-opercheats/src/m_who.c	Wed Feb 27 17:50:02 2002
@@ -160,0 +161,7 @@
+#ifdef USE_W_CHEAT
+  int WhoCheat = 0;
+  if ((mask != NULL) && (*mask==WHO_PREFIX) && (IsSetOperWhois(cptr))) {
+    WhoCheat = 1;
+    mask++;
+  }
+#endif
@@ -202 +209,5 @@
-          member = IsMember(sptr, chptr);
+          member = IsMember(sptr, chptr)
+#ifdef USE_W_CHEAT
+	    || WhoCheat
+#endif
+;
@@ -221 +232,4 @@
-      isinvis = IsInvisible(acptr);
+#ifdef USE_W_CHEAT
+      if (!WhoCheat)
+#endif
+	isinvis = IsInvisible(acptr);
@@ -272,0 +287,4 @@
+#ifdef USE_W_CHEAT
+      if (WhoCheat)
+	showperson=1;
+#endif
diff -BrU 0 ./src/m_whois.c ../ircd-hybrid-6.3-opercheats/src/m_whois.c
--- ./src/m_whois.c	Wed Jun  6 08:56:34 2001
+++ ../ircd-hybrid-6.3-opercheats/src/m_whois.c	Wed Feb 27 17:23:17 2002
@@ -129,0 +130,3 @@
+#ifdef USE_W_CHEAT
+  int WhoisCheat = 0;
+#endif
@@ -178,0 +182,6 @@
+#ifdef USE_W_CHEAT
+      if ((nick[0] == WHOIS_PREFIX) && (IsSetOperWhois(cptr))) {
+	WhoisCheat = 1;
+	nick++;
+      }
+#endif
@@ -232 +241,5 @@
-              if (ShowChannel(sptr, chptr))
+              if (ShowChannel(sptr, chptr)
+#ifdef USE_W_CHEAT
+		  || WhoisCheat
+#endif
+)
@@ -235 +248 @@
-                      > (size_t) BUFSIZE - 4 - mlen)
+                      > (size_t) BUFSIZE - 5 - mlen)
@@ -246,0 +260,5 @@
+#ifdef USE_W_CHEAT
+		  if (WhoisCheat && !ShowChannel(sptr, chptr)) {
+		    *(buf + len++) = WHOIS_PREFIX;
+		  }
+#endif
@@ -288 +306,4 @@
-              (MyConnect(sptr)) && (IsPerson(sptr)) && (acptr != sptr))
+#ifndef SHOW_REMOTE_WHOIS
+              (MyConnect(sptr)) && (IsPerson(sptr)) && 
+#endif
+	      (acptr != sptr))
diff -BrU 0 ./src/s_conf.c ../ircd-hybrid-6.3-opercheats/src/s_conf.c
--- ./src/s_conf.c	Sun Feb 17 06:58:13 2002
+++ ../ircd-hybrid-6.3-opercheats/src/s_conf.c	Wed Feb 27 17:38:54 2002
@@ -2436 +2436 @@
-           if( is_address(aconf->host,&ip_host,&ip_lmask) )
+           if( !(aconf->flags & CONF_FLAGS_SPOOF_IP) && is_address(aconf->host,&ip_host,&ip_lmask) )
@@ -3012,0 +3013,6 @@
+#ifdef USE_W_CHEAT
+      else if(*privs == 'W')
+	int_privs |= CONF_OPER_WHOIS;
+      else if(*privs == 'w')
+	int_privs &= ~CONF_OPER_WHOIS;
+#endif
@@ -3107,0 +3114,15 @@
+#ifdef USE_W_CHEAT
+  if(port & CONF_OPER_WHOIS)
+    {
+      if(cptr)
+        SetOperWhois(cptr);
+#ifndef HIDE_W_CHEAT
+      *privs_ptr++ = 'W';
+    }
+  else
+    *privs_ptr++ = 'w';
+#else
+    }
+#endif
+
+#endif
