? .hg
? 2010.08.03
? aclocal.m4
? autom4te.cache
? bcn.ircd.motd
? cache
? config.settings.bac
? config.settings.system
? hidle.patch
? ircd.log
? ircd.pid
? ircd.tune
? location.conf
? motd.txt
? nopost-1.1
? nopost.tar.gz
? patch1.patch
? robots.txt
? server.cert.pem
? server.key.pem
? server.req.pem
? smotd.txt
? tmp
? unrealircd.conf
? valgrind.unreal.suppress
? autoconf/acinclude.m4
? doc/AntiRandom
? extras/c-ares
? extras/c-ares-1.6.0
? extras/c-ares-1.7.3
? extras/c-ares-1.7.3.tar.gz.asc
? extras/c-ares.tar
? extras/regexp
? extras/tre-0.7.5
? extras/tre-0.8.0
? extras/tre.tar
? ircdcron/ircd.cron
? src/modules/antirandom.c
? src/modules/callerid.c
? src/modules/m_dnsbl.c
? src/modules/m_dnsbl.tar.gz
? src/modules/m_soper.c
? src/modules/nopost-1.1
? src/modules/nopost.tar.gz
? src/modules/testchanmodehook.c
Index: help.conf
===================================================================
RCS file: /cvs/unreal/Attic/help.conf,v
retrieving revision 1.1.2.51.2.40
diff -u -B -r1.1.2.51.2.40 help.conf
--- help.conf	14 Aug 2010 18:27:19 -0000	1.1.2.51.2.40
+++ help.conf	19 Sep 2010 16:41:23 -0000
@@ -114,6 +114,7 @@
 	" B = Marks you as being a Bot";
 	" G = Filters out all Bad words in your messages with <censored>";
 	" H = Hide IRCop status in /WHO and /WHOIS. (IRC Operators only)";
+	" I = Hide an oper's idle time (in /whois output) from regular users.";
 	" R = Allows you to only receive PRIVMSGs/NOTICEs from registered (+r) users";
 	" S = For Services only. (Protects them)";
 	" T = Prevents you from receiving CTCPs";
Index: doc/unreal32docs.html
===================================================================
RCS file: /cvs/unreal/doc/Attic/unreal32docs.html,v
retrieving revision 1.1.2.144.2.147
diff -u -B -r1.1.2.144.2.147 unreal32docs.html
--- doc/unreal32docs.html	15 Sep 2010 22:43:51 -0000	1.1.2.144.2.147
+++ doc/unreal32docs.html	19 Sep 2010 16:41:25 -0000
@@ -2896,7 +2896,7 @@
     <td><div align="center"><b>Description</b></div></td>
   </tr>
   <tr> 
-    <td colspan="2"><div align="center"><b>User Modes</b></div></td>
+    <td colspan="2" id="usermodes"><div align="center"><b>User Modes</b></div></td>
   </tr>
   <tr> 
     <td><div align="center">A</div></td>
@@ -2935,6 +2935,10 @@
     <td><div align="center">h</div></td>
     <td>Available for help (HelpOp) (Set in OperBlock)</td>
   </tr>
+  <tr>
+    <td><div style="text-align: center">I</div></td>
+    <td>Hide an oper's idle time (in /whois output) from regular users.</td>
+  </tr>
   <tr> 
     <td><div align="center">i</div></td>
     <td>Invisible (not shown in /who)</td>
@@ -3024,12 +3028,24 @@
     <td>Changes your online nick name. Alerts others to the change of your nick<br></td>
     <td>All</td>
   </tr>
-  <tr> 
+  <tr id="command_whois"> 
     <td>whois &lt;nick&gt;</td>
     <td>Displays information of user requested. Includes Full Name, Host, Channels 
       User is in, and Oper Status<br></td>
     <td>All</td>
   </tr>
+  <tr id="command_whois_nicknick">
+    <td>whois &lt;nick&gt; &lt;nick&gt;</td>
+    <td>
+      Performs a remote <a href="#command_whois">WHOIS</a>. If a
+      person is not on the same server as another person, a simple
+      WHOIS will not display all possible WHOIS responses. For
+      example, idle times are not shown in such a case. To request a
+      remote whois, issue a WHOIS with the remote user's nick as the
+      first and as the second arguments.
+    </td>
+    <td>All</td>
+  </tr>
   <tr> 
     <td height="39">who &lt;mask&gt;</td>
     <td>Who allows you to search for users. Masks 
Index: include/h.h
===================================================================
RCS file: /cvs/unreal/include/h.h,v
retrieving revision 1.1.1.1.6.1.2.173.2.69
diff -u -B -r1.1.1.1.6.1.2.173.2.69 h.h
--- include/h.h	16 Aug 2010 09:31:04 -0000	1.1.1.1.6.1.2.173.2.69
+++ include/h.h	19 Sep 2010 16:41:25 -0000
@@ -446,6 +446,7 @@
 extern MODVAR long UMODE_STRIPBADWORDS; /* 0x80000000	 */
 extern MODVAR long UMODE_HIDEWHOIS; /* hides channels in /whois */
 extern MODVAR long UMODE_NOCTCP;    /* blocks all ctcp (except dcc and action) */
+extern MODVAR long UMODE_HIDLE;     /* hides oper idle times */
 extern MODVAR long AllUmodes, SendUmodes;
 
 extern MODVAR long SNO_KILLS;
Index: src/umodes.c
===================================================================
RCS file: /cvs/unreal/src/Attic/umodes.c,v
retrieving revision 1.1.2.27.2.6
diff -u -B -r1.1.2.27.2.6 umodes.c
--- src/umodes.c	25 Aug 2010 04:36:28 -0000	1.1.2.27.2.6
+++ src/umodes.c	19 Sep 2010 16:41:25 -0000
@@ -78,6 +78,7 @@
 long UMODE_STRIPBADWORDS = 0L; /* Strip badwords */
 long UMODE_HIDEWHOIS = 0L;     /* Hides channels in /whois */
 long UMODE_NOCTCP = 0L;	       /* Blocks ctcp (except dcc and action) */
+long UMODE_HIDLE = 0L;         /* Hides the idle time of opers */
 
 long SNO_KILLS = 0L;
 long SNO_CLIENT = 0L;
@@ -155,6 +156,7 @@
 	UmodeAdd(NULL, 't', UMODE_GLOBAL, NULL, &UMODE_SETHOST);
 	UmodeAdd(NULL, 'G', UMODE_GLOBAL, NULL, &UMODE_STRIPBADWORDS);
 	UmodeAdd(NULL, 'p', UMODE_GLOBAL, NULL, &UMODE_HIDEWHOIS);
+	UmodeAdd(NULL, 'I', UMODE_GLOBAL, umode_allow_opers, &UMODE_HIDLE);
 	SnomaskAdd(NULL, 'k', umode_allow_all, &SNO_KILLS);
 	SnomaskAdd(NULL, 'c', umode_allow_opers, &SNO_CLIENT);
 	SnomaskAdd(NULL, 'f', umode_allow_opers, &SNO_FLOOD);
Index: src/modules/m_whois.c
===================================================================
RCS file: /cvs/unreal/src/modules/Attic/m_whois.c,v
retrieving revision 1.1.2.30.2.10
diff -u -B -r1.1.2.30.2.10 m_whois.c
--- src/modules/m_whois.c	22 Jan 2007 12:36:51 -0000	1.1.2.30.2.10
+++ src/modules/m_whois.c	19 Sep 2010 16:41:25 -0000
@@ -322,15 +322,15 @@
 					    name, acptr->user->swhois);
 
 			/*
-			 * Fix /whois to not show idle times of
-			 * global opers to anyone except another
-			 * global oper or services.
-			 * -CodeM/Barubary
+			 * Umode +I hides an oper's idle time from regular users.
+			 * -Nath.
 			 */
-			if (MyConnect(acptr))
+			if (MyConnect(acptr) && (IsAnOper(sptr) || !(acptr->umodes & UMODE_HIDLE)))
+			{
 				sendto_one(sptr, rpl_str(RPL_WHOISIDLE),
 				    me.name, parv[0], name,
 				    TStime() - acptr->last, acptr->firsttime);
+			}
 		}
 		if (!found)
 			sendto_one(sptr, err_str(ERR_NOSUCHNICK),
