? .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
? unreal-3953-hidle-r1.patch
? 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/testchanmodehook.c
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	2 Sep 2010 20:09:45 -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	2 Sep 2010 20:09:45 -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	2 Sep 2010 20:09:45 -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),
