diff -uNrd ircd-hybrid-6.2/.cvsignore ircd-hyb6.2-FEFr5/.cvsignore
--- ircd-hybrid-6.2/.cvsignore	Wed Jul  4 16:07:28 2001
+++ ircd-hyb6.2-FEFr5/.cvsignore	Wed Dec 31 19:00:00 1969
@@ -1,5 +0,0 @@
-config.log
-config.cache
-config.status
-Makefile
-lint.out
diff -uNrd ircd-hybrid-6.2/Makefile.in ircd-hyb6.2-FEFr5/Makefile.in
--- ircd-hybrid-6.2/Makefile.in	Wed Jul  4 16:07:28 2001
+++ ircd-hyb6.2-FEFr5/Makefile.in	Mon Aug 20 23:32:30 2001
@@ -22,7 +22,10 @@
 RM=@RM@
 
 # Default CFLAGS
-CFLAGS = -g -O2 -DNDEBUG
+CC = @CC@
+CFLAGS = @CFLAGS@ -DNDEBUG
+LDFLAGS = -s @LDFLAGS@
+IRCDLIBS = @LIBS@
 
 # Default make flags - you may want to uncomment this on a multicpu machine
 #MFLAGS = -j 4
diff -uNrd ircd-hybrid-6.2/README.FEF.NOW ircd-hyb6.2-FEFr5/README.FEF.NOW
--- ircd-hybrid-6.2/README.FEF.NOW	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/README.FEF.NOW	Sun Sep 30 20:28:50 2001
@@ -0,0 +1,282 @@
+==================
+=Revision History=
+==================
+!!! = Changed
++++ = Added
+--- = Removed
+
+FEFr1: (Runt)
+!!! The length of nicks allowed changed from 9 to 15.
+!!! Each channel is now allowed 50 bans, instead of 25.
+!!! The default config.h value for the max. channels per user is now 20.
++++ Banned users cannot talk. (UnderNet bquiet patch)
+
+FEFr2: (Runt)
+!!! Nothing changed in the hybrid-5 release of FEFr2.
+
+FEFr3: (Jail Bird)
++++ Added/Enhanced DalNet U:'s added
+!!! TOPIC lengths changed from 80 bytes to 255.
+
+FEFr4wb5 (wide-beta 5): (Runt/Jail Bird)
++++ WHOIS_SIGNON_TIME; shows when a user signed on in /whois. (Runt)
++++ OPERS_SEE_INVISIBLE; allows opers to see +i users. (Runt)
++++ OPERS_SEE_PRIV; allows opers to see +s/+p chans. (Runt)
++++ DalNet Q:'s added. (Jail bird)
++++ STOPIC; TS-synched channel TOPICs. (Jail Bird)
++++ RESTART_ON_SIGSEGV; the server will now restart if it dies. (Jail Bird)
+!!! U-lined servers can now send to channels, regardless of modes. (Jail Bird)
+
+Changes made from +th FEFr4wb5 to +hybrid-5 FEFr4wb5: (Jail Bird)
++++ HYBRID_ONLY; allow links from +hybrid servers only.
++++ NETNAME; Set the name of the network in the welcome message.
+
+FEFr4: (Jail Bird)
++++ IDENTD_ONLY; Reject any users not running identd if the I: line calls
+    for it. (Taken from +CSr30)
++++ NO_RED_MODES; Reject any duplicate channel modes. (Taken from +CSr30)
++++ IDLE_CHECK; Reject any idle clients. (Taken from +CSr30)
++++ CHECK_CLONE; Reject any clonebots. (Taken from ircu)
++++ REMOTE_WHOIS; Shows if a remote user /wii's you, while OPERd.
++++ KLINE_CLONES; Will automatically K: line any clonebotters.
+
+Changes made from +th FEFr4 to +hybrid-5 FEFr4: (Jail Bird)
+!!! Replaced the +CSr25 CLONE_CHECK code with the UnderNet CHECK_CLONE code.
+!!! Reinstated the *@* I: code.  PLEASE USE *@* IN YOUR I: LINES!
+
+FEFr4.1: (Jail Bird) (Nothing really added, so we just added .1 :) )
+!!! Upgraded the base code from +hybrid-5 to +hybrid-5.3
+    See README.hybrid for those changes.
+--- ANTI_IP_SPOOF was broke in hyb5.3. DON'T USE!
+!!! Fixed buffer overrun in m_stopic.
+!!! Moved RES_SRC to main Makefile.
+!!! Fixed WHOIS_SIGNON_TIME code.
+!!! Cleaned up all gcc warnings.
++++ Added fixes from FEFr4-withfixes.
+!!! Optimized for FEFnet.
+
+FEFr4.2 (Jail Bird) (bug fixes galore!)
+!!! Updated base code to hybrid-5.3p2
++++ Added NULL checking in m_stopic() to prevent malicious server attacks.
++++ Readded the varargs code, yet changed it to the ANSIfied 'stdargs' in the
+    process. Stdargs is now required, which shouldn't be a problem.
+!!! Replaced the EFnet ircsprintf.c with UnderNet's. It's faster and more
+    flexible.
+!!! Fixed Taner's ugly oper UMODES code.
+!!! Fixed problem with ircd overflowing when looking up access for long hosts.
+!!! Reverted I: lines to our old th-style lines. The server will now ALWAYS
+    check identd, but will only complain/reject if you have a '@' in the I:
+    lines (aka *@*).  This means you can allow non-identd users by adding a
+    I: line for them without the @.  ALL DEFAULT I: LINES SHOULD USE '*@*'!
+--- Removed FOLLOW_IDENT_RFC because of above change.  identd is always checked
+    now.
+--- Removed DO_IDENTD for the same reason. :)
++++ Added NO_REMOTE_INFO to disable INFO requests by remote clients. This helps
+    stop remote clients from splitting servers by flooding remote servers with
+    INFO requests.
+--- Removed the code in channel.c that blasted the TS on a channel when a non-U:
+    server sent a +o MODE.  This is unneeded as the only non-TS servers on our
+    nets are services, which are U:'d. Only a rogue server should ever do this,
+    and if it does, the hacker did a bad job in coding it :).
+!!! Fixed anti-DNS spoofing /whois code (aka the IP in /whois).
+!!! Changed m_topic so users can see topics on non-secret channels even if
+    they're not in the channel (they can already see it in /list!)
++++ Added OPERS_SEE_TOPIC, which lets Opers see the topics in any channel.
+--- Removed OPERWALL command. It's unneeded and was requested by Dianora :).
+--- Removed KLINE_CLONES option. It simply does NOT work with the UnderNet
+    clone code that we use.  This is a job for the tcm anyways.
+--- Removed NO_RED_MODES. This "feature" could cause channels to become
+    desynched.
+
+FEFr4.3 (Jail Bird) (watch the bloatware continue!)
++++ Readded SHOW_QUIT - Shows the client's quit reason.
++++ identd-replies of '~' are not longer considered valid.
++++ The code will now compile cleanly on an Alpha.
+!!! Updated base code to hybrid-5.3p4
+--- Removed NO_REMOTE_INFO, obseleted by 5.3p4
+
+FEFr4.3a (Jail Bird) (oops!)
+!!! hybrid-5.3p4 redid m_topic(), which killed our U: code.
+
+FEFr4.4 (Jail Bird)
+!!! Fixed proc_answer() code in res.c so that it is now portable.
+!!! Cleaned-up m_stopic()
+!!! Fixed ANTI_IP_SPOOF
++++ Readded AWAY propogation
+!!! Added NO_OPER_FLOOD code to the flud code
+!!! Upgraded base code to hybrid-5.3p6
+!!! Fixed bug in configure script that prevented it from detecting
+    what kind of non-blocking code to use on Linux glibc2 systems.
+    This caused a blocking version to be built, which caused "lockups".
+
+FEFr4.5 (Jail Bird)
+!!! Updated base code to hybrid-5.3p7.
++++ Added MacOSX compatibility patch by cybin.
+!!! Changed ANTI_IP_SPOOF PING to an unsigned (positive) number.
+!!! Fixed problem with the stdargs vsendto_one() function sending 550-byte
+    packets.
+!!! Updated blalloc.c.
+!!! Renamed existing doc/example.conf to doc/example.conf.bill and wrote
+    a new simplistic doc/exmaple.conf.
+!!! Fixed configure script to automatically setup CC/CFLAGS/IRCDLIBS.  This
+    should fix the "-lcrypt -lresolv" crap.
++++ 'make install' now copies the 'start' script to your SPATH.
+
+FEFr4.5a (Jail Bird)
+!!! Reverted the ANTI_IP_SPOOF PINGs back to signed due to atoi().
+
+FEFr4.6
++++ Readded the old inu+JB patch.
+
+FDFr1
+!!! Upgrade base code to hybrid-6.0
+!!! Changed name of ircd from +FEF to +FDF, since Runt and I are both
+    on FDFnet now.
+!!! VERY IMPORTANT: U: lines are now S: lines!!!
++++ Added FDF_ONLY: Allows connections only from other FDFr5b1 servers.
++++ Added SNICK Support: Services can now force nick changes.
++++ Added DalNet's +c channel mode. Channels that are +c'd will not allow
+    mIRC color or ANSI color to be sent to them.
+--- Removed K_LINES_OPER_ONLY. hybrid-6 will now show non-ops any K:
+    lines that match their hostmask.  This is better.
+!!! The server was ignoring MODE changes from servers, which was breaking
+    INU_SERV_CAN_OP. Fixed.
++++ Added support for JB_SERV_CAN_KICK.
++++ Added +FDF config.h settings to /info reply.
+!!! Fixed autoconf so that it defaults to building a stripped binary.
++++ Readded the UnderNet bquiet patch.
+!!! Fixed identd bug from hybrid-6 code change.
+!!! Fixed OPERS_SEE_INVISIBLE code when doing a /list. This was due
+    to cloning of code in hybrid-6's m_list().
+!!! Fixed the anti-DNS spoofing code (aka IP in /whois). Also changed it
+    so that only IRCops can see the IP. This works better with I-line
+    spoofing.
+!!! Fixed the HACK mesage when people use INU_IGNORE_BANS.
+!!! Fixed REMOTE_WHOIS
++++ If a user doesn't have identd and a '-' in their I: line, then the server
+    will send a NOTICE explaining why they have a '~' in their username.
+!!! Moved opers.txt into the DPATH so that /quote help will work.
+!!! Bumped MAX_BUFFERS down to 10 from 60.
+!!! Changed default config to NO_JOIN_ON_SPLIT_SIMPLE instead of
+    NO_OPS_ON_SPLIT. Hopefully not letting people JOIN channels on
+    split servers will remove the reason to DoS servers.
+--- Removed code to allow people to netsplit hack ops on channels
+    that do not have ops. This is to reduce DoS value.
++++ Added irc.best.net patch to show port numbers in unauthorized client
+    connection messages.
+!!! Hub servers should read the "Important" section below.
++++ Added INFO_OPER_ONLY in order to only allow /info requests from
+    IRC Ops.
+!!! Changed GLINE code so that only 2 opers are required, not 3.
+!!! Changed GLINE code so that GLINEs from S: lined servers are added
+    immediately.
+!!! Disabled DEBUG mode, which should speed-up the server.
+!!! Offical configure command-line for gcc users (using sh,ksh,bash):
+    CC="gcc" CFLAGS="-O6 -fomit-frame-pointer -pipe -w -s" LDFLAGS="-s" \
+    ./configure
+!!! Fixed AlcServ/ErisServ by readding IRCII_KLUDGE code
+!!! Fixed bug were remote nicknames trying to introduce servers would core
+    the server.
++++ IDLE_RESET - Lets you /quote IDLE to set your idle time. -Runt
+--- Removed SHOW_QUIT. This has been superceeded by WINTRHAWK
+
+FEFr5
+!!! Upgraded base code to hybrid-6.2
+--- Removed NETNAME, replaced by hybrid's NETWORK_NAME
+--- Removed HYBRID_ONLY, hybrid-6.2 is effectivly 'HYBRID_ONLY'
+!!! Changed name of server back to +FEF
+!!! Changed FDF_ONLY to FEF_ONLY. The code still passes 'FDF' however, so that
+    it will be backwards compatible.
+!!! Cleaned-up #ifdef's so that the code will compile with gcc 3.0.1
+
+===========
+=Important=
+===========
+
+If you are compiling a *HUB SERVER*
+
+MAKE SURE YOU CHANGE THE SPLIT SETTINGS IN YOUR CONFIG.H!
+
+SPLIT_SMALLNET_SIZE should be roughly the number of servers on your network,
+minus a couple as a buffer.
+
+SPLIT_SMALLNET_USER_SIZE should be the LOWEST number of users seem at any
+given time on the network, minus about 10-20 or so as a buffer.
+
+==========
+=Problems=
+==========
+
+Problem #1: Getting "res_" errors during linking.
+Fixes: 1) Make sure "-lresolv" is in your IRCDLIBS= in the Makefile.
+       2) Install bind8.  Add "-I/path/to/bind8/include" to CFLAGS=,
+          and "-L/path/to/bind8/libs -lbind" in the IRCDLIBS=.
+
+Problem #2: The server gives a chdir error when ran.
+Fixes: 1) Real Fix: Edit the DPATH in the config.h
+       2) Temp Fix: Start ircd as "./ircd -d ."
+
+	I hope this helps...
+
+==================
+=Support Channels=
+==================
+
+On FDFnet: Join #FDFworld
+On FEFnet: Join #continuum
+
+=========
+=Authors=
+=========
+
+The authors of the +FDFr server are:
+
+    John "Runt" Leslie          - john@stf.org
+    Dustin "Jail Bird" Marquess - jailbird@alcatraz.fdf.net
+
+=========
+=Credits=
+=========
+
+We would like to thank the original ircd team for their work.  We would also
+like to thank digital, Taner Halicioglu, and the Hybrid team for their work
+on the base code. Out of the Hybrid team, special thanks goes to Dianora, who
+helped us, even though she didn't have to.
+
+Thanks go out to Steve "inubus" White for supplying us with code.
+
+Also thanks to Ryan Kubica on FEFnet for writing services and exploiting our
+S: code to make it work :).
+
+==============
+=Distribution=
+==============
+
+The FDFnet ircd is officially available via FTP from the following locations:
+
+ftp://ftp.fdf.net/pub/irc/
+ftp://ftp.fef.net/pub/irc/
+
+It is also usually mirrored at:
+
+ftp://ftp.liii.com/pub/unix/irc/
+ftp://ftp.bitchx.org/pub/servers/
+
+
+You can also obtain the newest code in development using CVS. Here at the
+steps needed to pull this off:
+
+1) Get cvs if you don't have it.
+2) cvs -d :pserver:cvs@bobdole.fdf.net:/cvs login  # Password is "cvs".
+3) cvs -d :pserver:cvs@bobdole.fdf.net:/cvs co ircd-FDF
+
+This will create a directory called "ircd-FDF" under the current directory that
+will contain the current source code.  To update the code in the future, run:
+
+        cvs update       (from the ircd-FDF dir)
+
+NOTE: The CVS tree is used for development of the ircd.  This code may be
+      unstable and buggy.  The good part about using this tree, is it's always
+      the newest code! :).
+
+					-Dustin "Jail Bird" Marquess
diff -uNrd ircd-hybrid-6.2/configure ircd-hyb6.2-FEFr5/configure
--- ircd-hybrid-6.2/configure	Tue Jul 17 23:09:55 2001
+++ ircd-hyb6.2-FEFr5/configure	Mon Aug 20 23:32:30 2001
@@ -758,13 +758,13 @@
   CFLAGS="$ac_save_CFLAGS"
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
+    CFLAGS="-s -O2"
   else
-    CFLAGS="-g"
+    CFLAGS="-s"
   fi
 else
   if test "$GCC" = yes; then
-    CFLAGS="-O2"
+    CFLAGS="-O2 -DNDEBUG"
   else
     CFLAGS=
   fi
diff -uNrd ircd-hybrid-6.2/doc/CIDR.txt ircd-hyb6.2-FEFr5/doc/CIDR.txt
--- ircd-hybrid-6.2/doc/CIDR.txt	Wed Jun  6 01:03:12 2001
+++ ircd-hyb6.2-FEFr5/doc/CIDR.txt	Mon Aug 20 23:32:30 2001
@@ -315,6 +315,45 @@
   whois.ripn.net for Russia, whois.apnic.net for Asia and the Pacific,
   whois.aunic.net for Australia, and whois.6bone.net for IPv6 blocks.
 
+  Note that the FreeBSD whois client has shortcuts for the most commonly
+  used whois servers.  "whois -a <INFO>" is the shortcut for ARIN.
+
+  Also note that ARIN is not authoritative for all IP blocks on the 
+  Internet.  Take for example 212.158.123.66.  A whois query to ARIN
+  will return the following information:
+
+$ whois -h whois.arin.net 212.158.123.66
+European Regional Internet Registry/RIPE NCC (NET-RIPE-NCC-)
+   These addresses have been further assigned to European users.
+   Contact information can be found in the RIPE database, via the
+   WHOIS and TELNET servers at whois.ripe.net, and at
+
+   http://www.ripe.net/db/whois.html
+
+   Netname: RIPE-NCC-212
+   Netblock: 212.0.0.0 - 212.255.255.255
+   Maintainer: RIPE
+
+  This query tells us that it is a European IP block, and is further
+  handled by RIPE's whois server.  We must then query whois.ripe.net
+  to get more information.
+
+$ whois -h whois.ripe.net 212.158.123.66
+
+% Rights restricted by copyright. See http://www.ripe.net/ripencc/pub-services/db/copyright.html
+
+inetnum:     212.158.120.0 - 212.158.123.255
+netname:     INSNET-P2P
+descr:       Point to Point Links for for London Nodes
+country:     GB
+--snip--
+
+  This tells us the actual IP block that the query was a part of.
+
+  Other whois servers that you may see blocks referred to are: 
+  whois.ripn.net for Russia, whois.apnic.net for Asia and the Pacific,
+  whois.aunic.net for Australia, and whois.6bone.net for IPv6 blocks.
+
 Contributed by Jeremy Chadwick <jdc@best.net>
 Piotr Kucharski <chopin@sgh.waw.pl> 
 Walter Campbell <wcampbel@botbay.net> and
diff -uNrd ircd-hybrid-6.2/doc/ChangeLog.old ircd-hyb6.2-FEFr5/doc/ChangeLog.old
--- ircd-hybrid-6.2/doc/ChangeLog.old	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/doc/ChangeLog.old	Fri Mar 26 00:21:01 1999
@@ -0,0 +1,207 @@
++hybrid-5.3 (6/13/98)
+* added NO_CHANOPS_WHEN_SPLIT code back in (Rodder/Dianora)
+* fixed SEPARATE_QUOTE_KLINES_BY_DATE so it compiles (Rodder)
+* removed LITTLE_I_LINES from config.h for now (Rodder)
+* should compile on Linux/glibc now (Rodder)
+
++hybrid-5.2p1 (5/12/98)
+* removed uneeded variable in aClient (Dianora)
+* added missing #ifdef's for USE_SYSLOG (Dianora)
+* reverted to old check_pings() to fix high cpu usage (Rodder)
+* fixed DEBUGMODE (Dianora)
+
++hybrid-5.2 (4/21/98) - The inevitable bug fix release
+-fixes
+* changed many of the defaults in config.h
+* removed ident_fdlist it was never used anyway (comstud)
+* fixed quote kline for 10 character user names (Dianora)
+* obscure bug with KICK message in a desync channel situation (Dianora)
+* bug with max channel name fixed (comstud/Dianora)
+* stop spam from links command i.e. beeps (Dianora)
+* bug with default +i not showing MODE to user initially (Rodder)
+* ANTI_IP_SPOOF moved to "broken" section of conf (Rodder)
+* ident lookups now work properly for all interfaces of
+  multihomed (or "VIF"'d) machines, including Solaris 2.6 (Rodder)
+* stats l/L no longer shows -i clients to non-opers (Rodder)
+* exorcised evil timedelta variable
+* Fixed oper wallops broadcasting instead of routing (Dianora)
+* Covered up bogus "Got Ident" messages in read_authports() (Rodder)
+* Fixed missing RPL_ENDOFTRACE for non-opered clients (Dianora)
+* #undef IDLE_FROM_MSG fixed, ping/pong/ison do not reset idle time (Dianora)
+
+-feature adds
+* bumped HTM code to not kick in until 40K/s by default
+* stop people from laming up the kline conf file with # in comment (Dianora)
+* added comstuds SEPARATE_QUOTE_KLINES_BY_DATE
+* use block allocator in FLUD code (Shadowfax)
+* added HTM quiet or HTM noisy option -- see NOISY_HTM in config.h
+  for initial setting (Dianora)
+* added LOCOPS, each type of wallops/operwall/locops is now flagged (Dianora)
+* added signon time to RPL_WHOISIDLE (Dianora)
+* allow local opers to see kills requested by riss (Dianora)
+* added ANTI_SPAMBOT code, read config.h (Dianora)
+* added fixklines to tools dir, use it to check kline.conf for #'s inside
+  of K-line comments (Dianora)
+* added OLD_Y_LIMIT in config.h.dist to go back to old Y/I line behaviour
+  (Dianora)
+* M: line passwd field now used to specify address to bind to on
+  machines with multiple interfaces.  (Rodder)
+* P: line passwd field now used to specify address to bind to on  
+  machines with multiple interfaces. (Rodder)
+* added /quote set SPAMNUM SPAMTIME to control ANTI_SPAMBOT behaviour (Dianora)
+* hybrid option flags removed from m_version and replaced
+  by (for opers) full listing of server defines in m_info (Rodder)
+* poll() code mods ported from CSr30 (comstud) by cbongo
+* m_whois() rewritten to use hash table when possible (Dianora)
+* spambot sign on code added (ThemBones)
+* i line (LITTLE_I_LINE) support, restricted i lines (Dianora)
+* NO_CHANOPS_WHEN_SPLIT delays channel hacking until rejoin (Dianora)
+* ANTI_SPAMBOT on sign on code (ThemBones)
+* only allow 4 kicked nicks per kick (Dianora)
+* sped up kline processing, redid check_pings in ircd.c (Dianora) 
+* Server now checks for sane TS when connecting to other server,
+  see TS_MAX_DELTA and TS_WARN_DELTA in config.h (Rodder)
+* Server checks for backwards spinning clock and complains if
+  found (Rodder)
+* Check for error when timeofday is set (Shadowfax)
+* Announce TS changes after TS induced deops (Shadowfax)
+* stop redistributing away information to other servers
+* Prepared for TS4 mixed net by checking validity of channel mode changes
+  only at the local server (orabidoo)
+
++hybrid-5 (9/26/97)
+* LOTS AND LOTS OF CHANGES IN CONFIG.H
+* reorganized source tree, eliminating common subdir
+* reworked hash.c (Dianora)
+* reworked parse.c, tree prefix command lookups (Dianora/orabidoo)
+* all code is now function prototyped (Dianora)
+* improved bad host/nick handling, i.e. dns spoofers (ThemBones)
+* sped up send_umode_out in s_user.c (ThemBones)
+* sped up whowas processing, removed away from whowas (Dianora)
+* redid m_kline/cluster in s_serv.c (Dianora)
+* redid dline/kline handling (Dianora/Rodder/ThemBones)
+* removed lame #ifdefs in poll() (Dianora)
+* always defined D_LINES/E_LINES/F_LINES (Dianora)
+* TS_ONLY server now (Dianora) 
+* cleaned up s_auth.c (Dianora/ThemBones)
+* changed BAN_INFO handling (Dianora)
+* sanity testing in res.c (Dianora)
+* added orabidoo's scache code (orabidoo/Dianora)
+* added KLINE_WITH_REASON kline reason on klines/connects (Dianora)
+* added NON_REDUNDANT_KLINE code (Dianora)
+* added ANTI_IP_SPOOF code (Dianora)
+* added temporary kline code (Dianora)
+* added Jolo's block allocator into list.c (Jolo/Dianora)
+* added ANTI_NICK_FLOOD code (Dianora) 
+* removed UNIXPORT code (Dianora)
+* removed lame unused code in match.c (Jolo)
+* corrected many type errors, ran through purify (Jolo)
+* removed unused variables (Dianora)
+* folded in Shadowfax's FLUD code (Shadowfax/Dianora)
+* folded in Shadowfax's LOCKFILE code (Shadowfax/Dianora/Rodder/ThemBones)
+* added optional GLINE code (Dianora)
+* stats K now works for normal users (Dianora)
+* quote UNKLINE code as a option added (Dianora/common)
+* Reworked ACKPATCH, removed ONE kludge and use confeq field of Y instead,
+  used hash table of ip's (Dianora)
+* removed UNIXPORT support (Dianora)
+* added support for oper WALLOPS back in.  Use /quote OPERWALL to send operwalls.
+* reworked version.c.SH to track build number (Rodder)
+* make clean removes more junk (Rodder)
+* added check for adequate FD_SETSIZE
+* created tools subdir (Rodder)
+* added "Unauthorized connection" back in, under umode +c (Dianora/Rodder)
+* modified autoconf for Solaris 2.6 (Rodder)
+* modified LUSERS to ignore masks (Rodder)
+* fixed mysterious exit() in fdlist.c from fd leak in s_auth.c (Dianorans)
+* fixed overrun bugs in res.c (Dianora/Johan/Shadowfax)
+
+-----------------------------------------------------------------------------
++hybrid-4.3 (8/19/97) - more bug fixes
+* typo that caused immediate crash on HPUX fixed
+* IP/hostname mismatch code fixed, warns the user instead of opers
+* typo fixed in missing klinefile error message
+
++hybrid-4.2 (8/4/97) - minor bug fix, one new feature
+* rcs version string was clobbering server version string
+* Bans can now match by IP for hosts that resolv (db)
+  IP_BAN_ALL define added to config.h
+
++hybrid-4 (7/28/97)
+* LOTS OF NEW STUFF IN CONFIG.H, GO READ IT!!  THE WHOLE THING!!
+  EVEN IF YOU ARE UPGRADING TO THIS FROM A HYBRID-4 BETA!!
+* patch for yet another NICK bug
+* patch for m_server() bug
+* patch for TS3 bug
+* switched to GNU autoconf (thanks ns!)
+* WALLOPS now only go to real opers
+* ircsprintf() mod to check for NULL args (db)
+* fixed possible overflow res.c (db)
+# seperate klines file  - see config.h (db)
+* quote_dline support - see config.h (db)
+* fixed timezone snafu in date()
+* added RFC1035_ANAL define reject _ and / in hostnames
+* removed old DELAY_NICK define..  broken and unneeded
+* modified s_err.c and created s_err.h.  See CUSTOM_ERR in include/config.h
+* m_server() now quietly ignores clients that try to use SERVER
+* removed NOTE code, removed SUMMON code, gutted USERS
+* added automatic timestamps to comments of quote KLINE and DLINE
+* changed failure notice for clients bouncing off ACKPATCH
+  to "Only one connection at a time allowed from your hostname"
+* cleanup to channel.c
+* format() mod to check for NULL args (di)
+* removed more useless crap (UPHOST, VMS, etc) from config.h
+* #undef F_LINES fixed
+* oper WALLOPS changed to OPERWALL (code taken from csr30)
+* BSDI 3.0 FD_ALLOC support (db)
+# changed output of STATS D
+* Removed Q: line support
+* cleaned up find_conf_ip (db)
+* fixed crypt() usage to work on systems with longer salts
+  (ie FreeBSD without DES libs)
+* various spelling fixes (db)
+* N: line checking in m_server() (db)
+* WARN_NO_NLINE define added to config.h
+
+-----------------------------------------------------------------------------
++hybrid-3 (6/17/97):
+* Added USRIP command.  This command returns user@ip in a USERHOST
+  reply for local clients only.  Requests for remote nicks are treated
+  as though the nick doesn't exist.
+* Switched to Dianora's faster dich_conf.c
+* Check for invalid characters (see RFC1035) in hostnames
+* Fixed problem with coring due to invalid hostnames on non-local users
+* TSora version 3
+* Turned D_LINE support back on
+* Numerous changes to Config script, may actually work now
+* Additional OS defs in Makefile
+* Minor cleanup in include/config.h
+# created new INSTALL document
+
+-----------------------------------------------------------------------------
++hybrid-2 (4/12/97):
+This is ircd2.8/th.v5a.3 with the WHO, WHOWAS, and IsMember() code
+from Comstud's irc2.8.21CSr29.  Please send email to Jon Lusky
+<lusky@vol.com> if you find problems with it.
+
+Relevant excerpt from irc2.8.21+CSr29/README.CS:
+3) /whowas code totally rewritten.  This code is better than Avalon's
+   ever was.  You can now raise NICKNAMEHISTORYLENGTH in config.h to
+   a value that makes sense with today's number of clients.  Without
+   rewriting, you could expect server lockup, mostly during splits.
+   These changes should lower CPU usage quite a bit, especially during
+   splits.
+4) /who code tweaked.  IsMember() = CPU hog...IsMember() has been changed
+   and m_who does less find_user_link()s now...much less.  This is
+   a big reducer of CPU usage.  Also another "bug" was removed from
+   m_who that can possibly cause server lockups.  The possibility still
+   remains, though...not sure how to improve it further without totally
+   breaking /who.
+5) This goes with #4, but...
+   /who nickname was optimized tremendously.  However, this breaks /who
+   if you do /who username and username happens to match a nickname.
+   Oh well...too bad.
+
+-----------------------------------------------------------------------------
++hybrid-1 never really existed
+
diff -uNrd ircd-hybrid-6.2/doc/INDEX ircd-hyb6.2-FEFr5/doc/INDEX
--- ircd-hybrid-6.2/doc/INDEX	Tue Jul 10 08:40:22 2001
+++ ircd-hyb6.2-FEFr5/doc/INDEX	Wed Dec 31 19:00:00 1969
@@ -1,24 +0,0 @@
-CIDR.txt              - A great description of CIDR notation for both new
-                        and experienced users.
-README.TSora          - Protocol specs for the TS3 protocol that Hybrid uses
-                        to manage user and channel timestamping.
-Tao-of-IRC.940110     - No comment.
-blalloc.txt           - An overview of Wohali's block allocator.
-example.conf          - Hybrid's example configuration file.
-example.conf.trillian - Trillian's example configuration file, includes some
-                        things that the standard Hybrid conf does not, also
-                        lacks some.
-ircd.8                - ircd's manpage, installed with the daemon, read with
-                        'man -M . ircd' in the installed ircd directory.
-mtrie.txt             - A technical guide to the I/K line matching code
-old/                  - Historical and legacy documentation.
-operguide.txt         - Riedel's very good IRC Operator guide, geared mainly
-                        towards EFNet but still useful elsewhere.
-opermyth.txt          - Ray Power's e-mail post to dispel myths about what
-                        IRC Operators really can and cannot do.
-rfc1459.txt           - The old irc protocol standard.
-server-version-info   - Description of the VERSION flags and what they mean.
-simple.conf           - A very simple ircd.conf file that provides a way to
-                        easily and quickly create a basic conf file.
-yline.txt             - A reference guide to Y: lines, and common Y: line
-                        issues.
diff -uNrd ircd-hybrid-6.2/doc/example.conf ircd-hyb6.2-FEFr5/doc/example.conf
--- ircd-hybrid-6.2/doc/example.conf	Tue Jul 10 08:40:24 2001
+++ ircd-hyb6.2-FEFr5/doc/example.conf	Mon Aug 20 23:32:30 2001
@@ -189,6 +189,8 @@
 ##
 ## < This user is exempt from idle restrictions if IDLE_CHECK is defined
 ##
+## < This user is exempt from idle restrictions if IDLE_CHECK is defined
+##
 
 ## Examples
 ## c) I:NOMATCH::^db@koruna.varner.com::3
diff -uNrd ircd-hybrid-6.2/doc/operguide.txt ircd-hyb6.2-FEFr5/doc/operguide.txt
--- ircd-hybrid-6.2/doc/operguide.txt	Wed Jun  6 01:03:14 2001
+++ ircd-hyb6.2-FEFr5/doc/operguide.txt	Wed Dec 31 19:00:00 1969
@@ -1,398 +0,0 @@
-
-EFnet Oper Guide
-Last update : 01-25-2001
-Written and maintained by Riedel
-E-Mail : vink@vuurwerk.nl
-
- 1.  Commands you should know about
- 2.  The client of your choice
- 3.  Your primary responsibilities
- 4.  Re-routing
- 4.1 Re-routing other servers and remote connects
- 5.  Kills and klines
- 6.  Kill and K-Line requests
- 7.  Happy birthday!
- 8.  Security
- 9.  Know who your friends are
-10.  The TCM bot
-11.  Modern Oper-dom, Hybrid 7
-
-1. Commands you should know about
-
-  This is no longer covered here. IRCD-hybrid is changing too rapidly, so
-  this section would be outdated in no time ;) For an up-to-date version,
-  please download the latest hybrid at www.ircd-hybrid.org.
-
-2. The client of your choice
-
-  There are many IRC clients around for a wide variety of operating systems.
-  Being an IRC Operator doesn't *require* you to use a UNIX client, however
-  i personally prefer UNIX-based clients. If you're familiar with UNIX and
-  use UNIX for opering, i suggest ircII / epic. There are a lot of scripts
-  available for those two clients, and it's not that hard to write scripts
-  yourself to suite your needs. It is important that you know how to operate
-  your client, and familiarize yourself with the options and features. For
-  whatever client you chose this goes for any of them : You should be in
-  control of your client, instead of the client being in control of you.
-
-Resources :
-
-  www.mirc.co.uk	- mIRC (MS-Windows)
-  www.irchelp.org	- a variety of clients and scripts
-  ftp.blackened.com	- several UNIX based clients available
-
-
-3. Your primary responsibilities
-
-  As an IRC Operator, you're responsible for maintaining the server on a
-  real-time basis. You represent your server, and you represent the network.
-  Irresponsible / rude / offensive / stupid behavior may discredit your server
-  and the network. You should focus on the task you were chosen for...
-  maintainance.  Sounds simple, no ? It means getting rid of users that abuse
-  the service, enforcing the server's policy and keeping the server linked.
-  Users will ask you questions, and expect you to know all the answers.. after
-  all, you're the oper!
-
-  Be prepared for users trying to fool you, sweet talk you into things you
-  don't want, lie and deceive. Most users are handling in good faith...
-  however, the abusers have learned how to manipulate opers. They have studied
-  the alien creature 'oper' for ages like biologists study animals. Be
-  paranoid, be curious and be suspicious. I can't stress the importancy of that
-  often enough.
-
-  Second priority has the network. You were not chosen to maintain the network
-  but you were chosen to maintain the server. However, you may want to be able
-  to reroute servers. If you see something broken, don't be afraid to fix it.
-  If you do, be sure you fix things and don't make it worse. Before you
-  step into routing, be sure you've familiarized yourself with the network's
-  topology, and be confident enough to perform such actions. (re)routing is
-  covered in the next chapter.
-
-  Opers on the network depend on a trusting relationship. You can usually take
-  the word from an oper. Other opers are considered -trusted-. However, there
-  are exceptions. Sometimes even opers lie to opers to get things done. Don't
-  be afraid to ask for proof of a certain statement. For example, logs.
-  This doesn't mean you distrust the oper in question, but -you- and you alone
-  are responsible for your actions. You call the shots on your server, unless
-  your admin says otherwise.
-
-
-4. Re-routing
-
-  Re-routing is not hard, and it's not scary but it is important that you do it
-  right. The commands you'll use are SQUIT and CONNECT. First, a very simple
-  example. Let's say your server, irc.yourserver.com is lagged to it's uplink,
-  irc.uplink.com and you want to reroute your server. You have to think about
-  where you want your server to be linked, and you have to time your reroute.
-  An example topology :
-               
-irc.yourserver.com ---- irc.uplink.com
-                        |      |      \
-                        B      C      D
-                       / \
-                      E   F
-                         / \
-                        G   H --- O
-                      / | \ | \
-                     I  J K L  M
-                                \
-                                 N
-
-  In this case, you're uplinked by irc.uplink.com
-  irc.uplink.com also hubs B, C and D. Server B functions as hub for E and F,
-  F hubs G and H, H hubs L, M and O. G hubs I, J and K. M hubs N.
-  Your server is allowed to connect to server B, F and G. So you consider the
-  servers you're able to connect to. Is the lag caused by a server that uplinks
-  irc.uplink.com ? Use /stats ? irc.uplink.com to determine lag to the other
-  servers. If irc.uplink.com does not respond, the lag is to your uplink. If
-  so, you cannot be sure about the state of the other uplinks, so you'd have to
-  get on a remote server and determine lag by using /stats ? and /trace. For
-  example, you could connect to server N, and /trace yournick. Yournick, being
-  the nick on your server. You'll see which route it takes, and what the
-  problem server is. Example /trace output :
-
-S:[SERVER-N       ] V:[2.8/hybrid] U:[SERVER-M            ]
-S:[SERVER-M       ] V:[2.8/hybrid] U:[SERVER-H            ]
-S:[SERVER-H       ] V:[2.8/hybrid] U:[SERVER-F            ]
-S:[SERVER-F       ] V:[2.8/hybrid] U:[SERVER-B            ]
-S:[SERVER-B       ] V:[2.8/hybrid] U:[irc.uplink.com      ]
-S:[irc.uplink.com ] V:[2.8/hybrid] U:[irc.yourserver.com  ]
-
-  The trace doesn't complete... server-b announces irc.uplink.com, and
-  irc.uplink.com announces your server. Your server should return something
-  like :
-
-S:[irc.yourserver.] OPER [yournick!user@yourhost]
-
-  If it doesn't, we know the lag is only between yourserver and uplink.
-  Usually if there is lag between your server and your uplink, the send-queue
-  rises. This is not always the case. Sometimes your server can write perfectly
-  to your uplink, but not reverse. That is called one sided lag.
-
-  We pick server B to link to. It means we have to SQUIT and CONNECT.
-  To unlink from irc.uplink.com and connect to SERVER_B we'd type :
-  /quote SQUIT irc.uplink.com :reroute
-  /connect SERVER_B
-
-  we *DON'T* SQUIT irc.yourserver.com... and I'll try to explain why :
-  If we wanted to remove hub M from the network, and with it N, we'd issue
-  a SQUIT M. An SQUIT follows a path, relays the SQUIT request to each server
-  in that path. Finally it reaches server H, which is the hub for M. Server H
-  sees the SQUIT and drops the link to M.
-
-  Now a different situation, we want to separate yourserver, uplink, C and D
-  from the rest of the network, in order to reroute. We'd have to SQUIT server
-  B, since we want the -uplink- of server B (being irc.uplink.com) to drop the
-  link to server B.
-
-  If you'd SQUIT irc.yourserver.com, you ask yourserver.com to drop the link to
-  itself, which is impossible. If you SQUIT irc.uplink.com, you ask yourserver
-  to drop the link to uplink, which is what we want to do.
-
-  After the SQUIT and CONNECT, the new situation looks like this :
-
-                        irc.uplink.com
-                        |      |      \
-  irc.yourserver.com -- B      C      D
-                       / \
-                      E   F
-                         / \
-                        G   H --- O
-                      / | \ | \
-                     I  J K L  M
-                                \
-                                 N
-
-  If yourserver is a Hub, it makes the situation more complex, since your
-  actions have more impact.
-
-
-4.1 - Re-routing other servers and remote connects
-
-Example topology :
-
-                        irc.uplink.com
-                        |      |      \
-  irc.yourserver.com -- B      C      D
-                       / \
-                      E   F
-                         / \
-                        G   H --- O
-                      / | \ | \
-                     I  J K L  M
-                                \
-                                 N
-
-  Let's say, hub H is way lagged to F, but G to F is fine... we want to reroute
-  H, and stick H to G.
-
-  We'd do :
-
-  /quote SQUIT serverh :re-routing you babe
-  /connect serverh 6667 serverg
-
-  A global wallops will be sent :
-  !serverg! Remote CONNECT serverh 6667 from ItsMe
-
-  When re-routing, always give the server some time to prevent nick collides.
-  When there is lag, people will connect to another server. When you SQUIT and
-  CONNECT to fast, a lot of those clients will be collided. Also, stick to your
-  territory. How enthusiastic you may be, you cannot route the world. If you're
-  an oper on the US side, stick to the US side when re-routing. Needless to
-  say, if you're EU, keep it to EU ;)
-
-
-5. Kills and klines
-
-  As an oper, you're given the incredible power *cough* of KILL and KLINE.
-  /kill nick reason  disconnects a client from IRC with the specified reason.
-  A /quote kline *evil@*.dude.org :reason here  bans the user from your server.
-  Abusive kills and klines may draw attacks to your server, so always consider
-  if a kline or kill is deserved. If the server gets attacked after a valid
-  kill or kline, well.. tough luck. You should never be 'afraid' to kline
-  anyone on your server. If it's a good reason, make it so. Even if you know
-  it may cause the server to be attacked. Maybe good to think about is this :
-  - if /ignore solves the problem rather than a kick, /ignore
-  - kick if a ban is unneeded
-  - ban if a /kill is unwarranted for
-  - kill rather than kline if that solves the problem
-  - kline when a server ban is really needed.
-
-  You kline a user when you absolutely don't want this user to use the service
-  your server is providing.
-
-  Crosskills (killing users on another server) are another issue. Some admins
-  don't care if users get /kill'ed off their server, for any reason or no
-  reason at all... and other admins are very anal about it. A good way to go
-  (IMO) is to issue a KILL if there is an absolute need for the target user to
-  be disconnected. If there are active opers on that server, let them handle
-  it.  They'll be upset if you /kill a user off their server, without
-  contacting them.  /stats p irc.server.here shows the active opers on a
-  particular server. Some opers have multiple o-lines and are not watching all
-  sessions. If you can't find an active oper on a server, you can 
-  /quote operwall a request for opers from that server.
-
-  Ghost KILLs are another story, an often misunderstood one.
-  When you see a /KILL from an oper with the reason 'ghosted' they usually
-  KILL a client that's about to ping timeout. That is not what a ghost is!
-  To quote Dianora : "a ghost happens because a client misses being killed when
-  it should be. Its a race condition due to nick chasing". In other words,
-  Server X thinks client A has been KILLed, while server Y missed the KILL
-  for that client.
-
-
-6. Kill and K-Line requests
-
-  As previously mentioned, if an oper from another server contacts you and
-  requests a kill or a kline for a local client with a good reason, you can
-  usually trust this request. Opers depend on a trusting relationship. However,
-  since you're responsible for the kill or kline, it is not rude to ask for
-  proof. It depends on the oper making the request how thats interpreted, but
-  the way they respond to asking for proof tells more about them than about
-  you.
-
-  The more and longer you oper, how better you get to know the other opers.
-  You know who is Mr. honest, you'll know who are lying and deceiving. Before
-  you acquire this knowledge, you can merely rely on common sense and
-  instincts.  You'll probably make mistakes occasionally, and thats nothing to
-  be ashamed of.  Opers are - despite contrary believes - human.
-
-  Users occasionally will ask you to kill or kline a user/bot too. Some
-  requests are straight-forward and clear, others require you to be cautious. I
-  recommend to always investigate such requests, and when you're confident the
-  request is valid, issue the kill or kline.
-
-
-7. Happy birthday!
-
-  It is a custom on EFnet to birthday /kill opers of whom it is his/her
-  birthday.  Not all opers like this, but typically those opers don't let
-  others know about their birthday. You'll notice that the KILLS say a lot
-  about who likes who and who is friends with who.  Whether you want to
-  participate, is entirely up to you.
-
-
-8. Security
-
-  As with any privilege, you have to handle it cautiously and responsibly.
-  Be sure that your o/O line doesn't get compromised! Oper only from secure
-  hosts. You and only you should know your password. Don't share your oper
-  account, and make your oper password a UNIQUE one. If your o/O line gets
-  compromised, nasty things may/will happen. Imagine an oper with crosskill
-  capabilities who's operline gets 'hacked'... the results are often
-  disastrous and you will lose respect and trust from others. It can cause
-  your oper privileges to be revoked, or even the server to be (temporarily)
-  de-linked.
-
-
-9. Know who your friends are
-
-  As an oper you will get a lot of users that want to be 'friends' with you.
-  Users offer you free* access to their *nix servers, ops in channels,
-  unlimited leech access to the biggest and fastest warez sites *gasp* and
-  more. They want favors in return. They say they don't but they truly want
-  something in return. They -expect- something in return. You could either
-  don't respond to such offers, or use them. The last option creates an even
-  more distorted image of opers and doesn't do any good for the user -> oper
-  relationship.  Your *real* friends are usually the persons who were your
-  friends _before_ you acquired the extra privileges.
-
-10. The TCM Bot
-
-  A TCM bot can be a valuable tool for opers. It keeps record of all connected
-  clients, flags clients with multiple connections and has all sorts of other
-  useful commands. There are three different kind of TCM's in use on EFnet,
-  being OOMon, TCM-Dianora and TCM-Hybrid. Every one of them requires you to
-  log in to be able to access the privileged commands. On OOMon you DCC chat
-  the TCM bot and do '.auth yournick' where yournick is your oper name in your
-  o/O line. In TCM-Dianora and TCM-Hybrid you register with :
-  '.register yourpass', where yourpass is your password ;)
-  All TCM commands start with a period. If you forget the period, the text goes
-  into the 'partyline', where it is echoed to all connected opers.
-
-  Resources :	http://toast.blackened.com/oomon/help
-		http://www.db.net/~db/tcm.html
-
-11. Modern Oper-dom - Hybrid 7
-
-  Unfortunately these times are drastic times, and drastic times require
-  drastic measures. EFnet has been the playground of takeover groups and other
-  scum. The services provided to the EFnet community have been heavily abused.
-  DoS attacks against servers is something we see every day. Modern Oper-dom is
-  a timeage where we have been forced to obscure information from our users, so
-  that they cannot use it against us. It is also a timeage where new features
-  give the user more control to remedy the problems. We'll cover a few of those
-  features that have been implemented in ircd-hybrid-7.
-
-Flood Throttling :
-
-  The newest Hybrid IRCd offers users flood protection to a certain extent.
-  Anyone who floods the channel with text, CTCP's, or any other junk
-  imaginable will be throttled. Massive flood attacks will have little impact.
-  
-Server side ignore :
-
-  Every user has the umode +g at their disposal. Umode +g is a server-side
-  ignore to ignore everyone. When the user is messaged, he'll be informed
-  with a notice and can use /quote ACCEPT nick  to be able to receive
-  messages from this user. The problem with client side ignores is that
-  the client does receive the info, but just doesn't respond. It acts like
-  it doesn't see it... but the sendq will keep on rising. Umode +g gets
-  rid of this problem.
-
-Hiding Chanops :
-
-  Mode +a has been added to the available channel modes. A non-op cannot see
-  who's opped, halfopped and voiced. Hence, someone who's interested in taking
-  over the channel doesn't know whom to target. Did i mention 'halfopped' ?
-  Oh gee, yes i did! ;p
- 
-Halfops :
-
-  You can recognize a HalfOp by the % before the nick.
-  A halfop can kick non-ops from the channel and set bans but cannot deop
-  nor kick full chanops.
-
-Virtual Channels
-
-  At this point it is uncertain if the command to create a virtual channel
-  should be an oper only command or not. A virtual channel is a situation where
-  you have multiple instances of the same channel. An example :
-
-  (The way it will be implemented is still uncertain, so this may not be a
-   realistic situation)
-
-  User Joe wants to join #nederland
-
-  /join #nederland
-  *** #nederland : has 2 possible virtual channels available
-  *** #nederland !Riedel !kaaZ
-
-  This means that there is one #nederland version, and Riedel has joined it
-  first kaaZ has joined the second channel #nederland. Lets say kaaZ is a
-  friend of Joe, and Joe wants to join kaaZ's version of the channel.
-  /join #nederland !kaaZ
-
-  If Joe was a bad guy and took over kaaZ'es version of the channel, kaaZ would
-  just start a new instance of the same channel (or requests it) and nothing
-  would've changed. Virtual channels will make channel takeovers useless.
-
-  To decrease the frequence of attacks, hybrid also hides the topology of the
-  IRC network to the mere user. Certain information that gives an indication
-  about its structure has been removed. Server Hiding is optional and will
-  probably be used to hide hubs. Server names have been removed from WHOIS.
-  This is not to annoy the mere user, but merely the removal of information
-  that's been used against us on structural basis by the abusers. It will
-  not ban out DoS attacks completely, but it will help a lot. IRC was meant
-  to be about having fun, to be able to communicate with thousands of others
-  all over the world. Let's get back to that point.
-
-  Questions / Comments / Suggestions are welcome.
-  You can e-mail me : vink@vuurwerk.nl
-
-Best regards,
-
-Riedel
-
---
-And on the seventh day, He exited from append mode.
diff -uNrd ircd-hybrid-6.2/doc/ts5.txt ircd-hyb6.2-FEFr5/doc/ts5.txt
--- ircd-hybrid-6.2/doc/ts5.txt	Fri Aug 10 05:56:19 2001
+++ ircd-hyb6.2-FEFr5/doc/ts5.txt	Wed Dec 31 19:00:00 1969
@@ -1,92 +0,0 @@
-  Overview of the TS5 system
-  Lee H <lee@leeh.co.uk>
-
-$Id: ts5.txt,v 1.1 2001/08/10 09:56:19 leeh Exp $
-
-For the purposes of this document, ircd versions:
-  hybrid6.0
-  ircd-comstud-1.12
-  CSr31pl4
-
-and prior, are TS3.
-
-ircd-hybrid6.1 is TS5.
-
-The difference between TS5 and TS3 is what happened on opless channels.  TS
-works by establishing which server has the oldest version of the channel,
-the version that is oldest, keeps its modes and ops, the version that is
-youngest, removes their modes and ops, and accepts the older version.
-
-There was an exception to this rule with opless channels, if a channel was
-opless, TS3 would allow anybody to keep their ops and modes on the channel.
-TS5 aims to stop this, by removing this exception.
-
-Example1: 
-
-An irc network, with server A (every server is ts3)
-
-UserA is on ServerA, in channel #broken.  This channel is opless, and has a
-TS of 800000000.  ServerA splits, and whilst it is split, UserA cycles
-channel #broken, recreates the channel and is given ops.  On ServerA #broken
-now has a TS of 900000000 and has ops.  ServerA rejoins with the network,
-via HubB.  HubB realises #broken is opless, so allows UserA to retain ops.
-The TS is moved forward to 900000000.
-
-The network now sees #broken as having a TS of 900000000, with UserA being
-opped.
-
-Example2:
-
-An irc network, with server C (every server is ts5)
-
-Same scenario as above.  ServerC splits and UserC cycles channel #broken,
-recreating it with a TS of 900000000.  ServerC rejoins with the network via
-HubD.  HubD realises #broken has a TS of 800000000 locally, and ServerC is
-showing a TS of 900000000, it ignores ServerC's modes and ops.  The channel
-remains opless.  ServerC receives HubD's modes, and it notices HubD has a
-lower TS of channel #broken.  It removes UserC's ops, removes the channel
-modes on #broken, and accepts HubD's status.
-
-The network version of #broken hasnt changed.  It is still opless, with a TS
-of 800000000.
-
-
-As you can see, TS5 makes splitting a server to regain ops useless, as it
-cannot be abused to give ops after a netsplit.
-
-The problem with TS5 however, is what happens on a mixed TS5/TS3 network.
-Channels where the older TS has ops will behave the same way on TS5 and TS3,
-however an opless channel will behave differently, as you can see above.
-
-The result of TS5/TS3 mixed can be a desync:
-
-Example1:
-
-As per Example1 above, except the rest of the network is TS5, ServerA is
-TS3.  ServerA would keep its modes and ops, whilst the rest of the network
-would remove them.  This means only ServerA would see UserA as opped.  The
-desync can be abused, as UserA can send modes.  Hybrid6.0 servers will
-accept these modes from the unopped client, so if UserA ops UserB, who then
-ops UserA, the channel will be the same across all Hybrid6.0 and Hybrid6.1
-servers.
-
-Example2:
-
-As per Example2 above, except the rest of the network is TS3.  ServerC is
-TS5.  ServerC would remove its modes and ops, therefore UserC would not be
-opped on ServerC, therefore it could not send any mode changes to the
-channel.  Although it is opped elsewhere, it isnt opped locally, so the
-desync cannot be abused.
-
-As you can see, the desync's that can occur can either be resynced, or are
-useless to the user, so a mixed TS5/TS3 network is not a huge problem,
-although a desync is NOT a good thing to have.
-
-We have jumped to TS5 from TS3, because there was a version of ircd that was
-TS4, so it was thought better to avoid a clash with an existing version.
-
-The ircd-hybrid team recommend TS5 is enabled on your network, if the full
-network is upgrading to TS5 versions, then the desync problem will be short
-lived, as once a full network has upgraded, there will be no desync.
-
-EOF
diff -uNrd ircd-hybrid-6.2/doc/yline.txt ircd-hyb6.2-FEFr5/doc/yline.txt
--- ircd-hybrid-6.2/doc/yline.txt	Wed Jun  6 01:03:14 2001
+++ ircd-hyb6.2-FEFr5/doc/yline.txt	Wed Dec 31 19:00:00 1969
@@ -1,95 +0,0 @@
-# Y: Line Reference Guide (In Constant Progress)
-# Walter Campbell (hwy101@kabel.pp.ru)
-# This document is freely redistributable copyrighted material
-# 
-# The structure of this document allows for pasting or including into an 
-# ircd.conf (or suitable .include'ed conf file) for easier reference.
-
-# Y lines define the classes that are used in C, N, I, and O lines
-# NOTE:  The sendQ values provided here are for smaller networks.
-#        You MUST increase them on a large network
-
-# for servers:
-# Y:class number:ping timing:connection frequency:maximum links:sendQ length
-# the ping timing MUST be the same on both sides of a server link
-# If splits happen even when there is little lag, increase the sendQ
-
-# for clients:
-# Y:class number:ping timing:clone:maximum users in this class:sendQ length
-# The "frequency field" determins how many users from the same IP are allowed
-# on the server, therefore limiting clones.  Leave it blank or set it to
-# 0 to disable this restriction
-# NOTE that on some ircd's, the match is on the user@host and not the IP
-# address.  (Also note that non-idented users from the same IP count as
-# clones)
-# If the client has problems with ping timeouts, increase the ping timing
-# If the client likes to flood, reduce their sendQ
-# The best option in all these cases is to create special classes with 
-# I: lines to force them into the class
-# NEVER define a class less than 0 and avoid defining a class of 0
-# RECOMMENDED (IMHO REQUIRED) (The ircd defines class 0, which is VERY
-#             restrictive.  By defining Y lines, you open the server up)
-
-# Class 1 is used for normal users, sets a max of 100 and a ping time of 
-# 90 seconds, and a sendQ of 100,000 bytes, meaning they can have 100,000
-# bytes of data in their sendQ before being disconnected.
-# The user will also only be allowed to have 4 connections from the host
-Y:1:90:4:100:100000
-
-# Class 2 is the default server class, sets a ping time of 90 seconds and
-# a max sendQ of 600,000 bytes.  If the C line for a server is an 
-# auto-connecting C line (described below), then it will attempt to connect
-# every 300 seconds.  The 20 means that only 20 server links are permitted
-Y:2:90:300:20:600000
-
-# Class 100 is for Opers.  Opers should be in a different class so that they 
-# are not subject to normal user's limits and can have higher sendQ and ping
-# timings if desired
-Y:100:90:0:20:100000
-
-# This is an example of a "lagged user" connection line.  Anyone set to use 
-# this class will have a higher ping timing and sendQ so that they MIGHT be
-# disconnected less often.  Limit the number of users as they should use
-# a server that is closer to them
-Y:5:180:4:20:200000
-
-# This is an example of a "bad boy (or girl)" class.  Anyone set to this 
-# class will have less sendQ to prevent flooding and only be permitted to 
-# have 2 connections to the irc server.  Only allow 10 "bad guys/gals" on
-# at once.
-Y:20:90:2:10:50000
-
-# This is an example of a "privilaged user" class, who is permitted to have
-# many more connections, more sendQ, and a longer ping timing
-Y:50:120:0:50:300000
-
-# This example is for a "preferred server" described below in the C/N
-# Lines.  Autoconnecting C lines will choose the highest numbered class first
-Y:3:90:300:20:600000
-
-# Leaf servers should only connect to one server at a time
-# Setting the maximum to 1 will prevent the leaf server from attempting
-# to establish a connection with more than one server at once
-Y:4:90:300:1:600000
-
-# Thus we have class 1 for normal users, 2, 3 and 4 for servers, 100 for opers
-# 5 for "lagged users", 20 for "bad boys/girls", and 50 for privilaged users
-
-# Note that we set the oper class to the highest number.  When you sucessfully
-# issue the OPER command, you will be placed into the oper class only if it is
-# a higher class number than the class the user is currently in.  We may also
-# wish to reorganize the numbers of the other user classes so that they are 
-# numbered in order from the lowest privilage to the highest.
-
-# Also note that the IRCD type used has an influence on what limits you set.
-# Most IRCD's have the limit apply per I: line.  Hybrid and Bahamut with the
-# OLD_Y_LIMIT #undef'ed will set the limits in the Y line.  According to the
-# information available for those options, closed I: line servers will benefit
-# more from the old behavior, while more open servers benefit from the new
-# bahavior.  Consult your config.h for more details.  
-
-# A problem I have seen lately is when people set the class in the O: lines
-# to 0 or to an invalid class (which will default to 0).  The issue was that
-# the user could only OPER once from the same mask.  By making sure all 
-# C/N/O/I lines point to valid, properly configured classes, you will prevent
-# many issues with the server.  
diff -uNrd ircd-hybrid-6.2/include/.cvsignore ircd-hyb6.2-FEFr5/include/.cvsignore
--- ircd-hybrid-6.2/include/.cvsignore	Tue Jul  3 01:09:28 2001
+++ ircd-hyb6.2-FEFr5/include/.cvsignore	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-setup.h
diff -uNrd ircd-hybrid-6.2/include/channel.h ircd-hyb6.2-FEFr5/include/channel.h
--- ircd-hybrid-6.2/include/channel.h	Tue Jul 17 22:15:18 2001
+++ ircd-hyb6.2-FEFr5/include/channel.h	Mon Aug 20 23:35:02 2001
@@ -55,10 +55,8 @@
   struct Channel* hnextch;
   struct Mode     mode;
   char            topic[TOPICLEN + 1];
-#ifdef TOPIC_INFO
   char            topic_nick[NICKLEN + 1];
   time_t          topic_time;
-#endif
   int             users;
   struct SLink*   members;
   struct SLink*   invites;
@@ -110,6 +108,7 @@
 extern void    channel_modes(struct Client *, char *, char *, struct Channel*);
 extern void    set_channel_mode(struct Client *, struct Client *, 
                                 struct Channel *, int, char **);
+int msg_has_colors(char *);
 
 
 
@@ -151,9 +150,9 @@
 
 #define MODE_LIMIT      0x2000  /* was 0x1000 */
 #define MODE_FLAGS      0x2fff  /* was 0x1fff */
+#define MODE_NOCOLOR	0x4000
 #ifdef NEED_SPLITCODE
 
-
 extern int server_was_split;
 extern time_t server_split_time;
 
@@ -190,7 +189,11 @@
 /* channel not shown but names are */
 #define HiddenChannel(x)        ((x) && ((x)->mode.mode & MODE_PRIVATE))
 /* channel visible */
-#define ShowChannel(v,c)        (PubChannel(c) || IsMember((v),(c)))
+#ifdef OPERS_SEE_PRIV
+# define ShowChannel(v,c)	(PubChannel(c) || IsMember((v),(c)) || IsAnOper(v))
+#else
+# define ShowChannel(v,c)        (PubChannel(c) || IsMember((v),(c)))
+#endif /* OPERS_SEE_PRIV */
 #define PubChannel(x)           ((!x) || ((x)->mode.mode &\
                                  (MODE_PRIVATE | MODE_SECRET)) == 0)
 
diff -uNrd ircd-hybrid-6.2/include/client.h ircd-hyb6.2-FEFr5/include/client.h
--- ircd-hybrid-6.2/include/client.h	Fri Aug 10 04:02:28 2001
+++ ircd-hyb6.2-FEFr5/include/client.h	Mon Aug 20 23:37:08 2001
@@ -241,6 +241,9 @@
   time_t            last_nick_change;
   int               number_of_nick_changes;
 #endif
+#ifdef ANTI_IP_SPOOF
+  unsigned int	random_ping;	/* spoofers won't see this */
+#endif
   time_t            last_knock; /* don't allow knock to flood */
   /*
    * client->sockhost contains the ip address gotten from the socket as a
@@ -301,9 +304,9 @@
 #endif
 
 #ifdef TS5_ONLY
-#define TS_MIN   	5
+#define TS_MIN	5
 #else
-#define TS_MIN          3       /* minimum supported TS protocol version */
+#define TS_MIN	3	/* minimum supported TS protocol version */
 #endif
 
 #define TS_DOESTS       0x20000000
@@ -347,6 +350,9 @@
 /* *sigh* overflow flags */
 #define FLAGS2_RESTRICTED   0x0001      /* restricted client */
 #define FLAGS2_PING_TIMEOUT 0x0002
+#ifdef ANTI_IP_SPOOF
+# define FLAGS2_GOT_ANTI_SPOOF_PING	0x2000
+#endif
 #define FLAGS2_E_LINED      0x0004      /* client is graced with E line */
 #define FLAGS2_B_LINED      0x0008      /* client is graced with B line */
 #define FLAGS2_F_LINED      0x0010      /* client is graced with F line */
@@ -384,7 +390,6 @@
 #define FLAGS2_IP_HIDDEN        0x200000        /* client IP should be hidden
                                                    from non opers */
 #define FLAGS2_SENDQ_POP  0x400000  /* sendq exceeded (during list) */
-
 
 #define SEND_UMODES  (FLAGS_INVISIBLE | FLAGS_OPER | FLAGS_WALLOP)
 #define ALL_UMODES   (SEND_UMODES | FLAGS_SERVNOTICE | FLAGS_CCONN | \
diff -uNrd ircd-hybrid-6.2/include/config.h ircd-hyb6.2-FEFr5/include/config.h
--- ircd-hybrid-6.2/include/config.h	Tue Sep 25 23:04:02 2001
+++ ircd-hyb6.2-FEFr5/include/config.h	Sun Sep 30 20:28:21 2001
@@ -52,13 +52,13 @@
  */
 
 #define HARD_FDLIMIT_   256
-#define INIT_MAXCLIENTS 180
+#define INIT_MAXCLIENTS 230
 
 /*
  * This is how many 'buffer connections' we allow...
  * Remember, MAX_BUFFER + MAX_CLIENTS can't exceed HARD_FDLIMIT :)
  */
-#define MAX_BUFFER      60
+#define MAX_BUFFER      10
 
 #if defined(__CYGWIN__)
 #undef  HARD_FDLIMIT_
@@ -77,7 +77,7 @@
  *       will be preallocated for the entire whowas array when ircd is started.
  *       You will want to crank this down if you are on a small net.
  */
-#define NICKNAMEHISTORYLENGTH 15000
+#define NICKNAMEHISTORYLENGTH 256
 
 /* Don't change this... */
 #define HARD_FDLIMIT    (HARD_FDLIMIT_ - 10)
@@ -109,10 +109,10 @@
  *
  */
 
-#define DPATH   "/usr/local/ircd/"
-#define SPATH   "/usr/local/ircd/ircd"
+#define DPATH   "/home/jailbird/ircd-hyb6.2-FEFr5/src/"
+#define SPATH   "/home/jailbird/ircd-hyb6.2-FEFr5/src/ircd"
 #define CPATH   "ircd.conf"
-#define KPATH   "kline.conf"
+#undef KPATH   "kline.conf"
 #define DLPATH  "kline.conf"
 #define MPATH   "ircd.motd"
 #define LPATH   "ircd.log"
@@ -146,17 +146,17 @@
  * This will not show any error messages that are received, a
  * consequence being you may not see squit reasons..
  */
-#define HIDE_ERROR_MESSAGES
+#undef HIDE_ERROR_MESSAGES
 
 /* NETWORK_NAME
  * Displayed in place of the servername when SERVERHIDE is enabled
  */
-#define NETWORK_NAME "EFnet"
+#define NETWORK_NAME "FEFnet"
 
 /* NETWORK_DESC
  * Displayed in place of the server info when SERVERHIDE is enabled
  */
-#define NETWORK_DESC "Eris Free Network"
+#define NETWORK_DESC "The FEFnet IRC Network"
 
 
 /* TS_MAX_DELTA and TS_WARN_DELTA -  allowed delta for TS when another
@@ -172,8 +172,8 @@
  * implementation.  Once pre-hybrid5.2 servers are eradicated, we can drop
  * this down to 90 seconds or so. --Rodder
  */
-#define TS_MAX_DELTA 300        /* seconds */
-#define TS_WARN_DELTA 30        /* seconds */
+#define TS_MAX_DELTA	3600	/* seconds */
+#define TS_WARN_DELTA	1800	/* seconds */
 
 /* TS5
  * This will mean the oldest version of a channel will always remain after a
@@ -208,8 +208,8 @@
  *
  * These need to be defined if you want to use SYSLOG logging, too.
  */
-#define FNAME_USERLOG "/usr/local/ircd/users"
-#define FNAME_OPERLOG "/usr/local/ircd/opers"
+#undef FNAME_USERLOG "/usr/local/ircd/users"
+#undef FNAME_OPERLOG "/usr/local/ircd/opers"
 
 /* RFC1035_ANAL
  * Defining this causes ircd to reject hostnames with non-compliant chars.
@@ -234,7 +234,7 @@
  * Define this to check for duplicate recipients in PRIVMSG, at the expense
  * of noticeable CPU cycles.
  */
-#define NO_DUPE_MULTI_MESSAGES
+#undef NO_DUPE_MULTI_MESSAGES
 
 /* WARN_NO_NLINE
  * Define this if you want ops to get noticed about "things" trying to
@@ -243,15 +243,6 @@
  */
 #define WARN_NO_NLINE
 
-/* CUSTOM_ERR - colorful notice/error/messages
- * Defining this will use custom notice/error/messages from
- * src/messages.tab instead of stock ones in src/messages_cust.tab
- * If you prefer the "colorful" messages that Hybrid was known for,
- * or if you wish to customize the  messages, define this.
- * Otherwise leave it undef'd for plain ole boring messages.
- */
-#undef  CUSTOM_ERR
-
 /* FAILED_OPER_NOTICE - send a notice to all opers when someone
  * tries to /oper and uses an incorrect password.
  */
@@ -260,7 +251,7 @@
 /* SHOW_FAILED_OPER_ID - if FAILED_OPER_NOTICE is defined, also notify when
  * a client fails to oper because of a identity mismatch (wrong host or nick)
  */
-#undef  SHOW_FAILED_OPER_ID
+#define  SHOW_FAILED_OPER_ID
 
 /* SHOW_FAILED_OPER_PASSWD - if FAILED_OPER_NOTICE is defined, also show the
  * attempted passwd
@@ -281,10 +272,6 @@
  */
 #define USE_UH
 
-/* TOPIC_INFO - Shows you who and when someone set the topic
- */
-#define TOPIC_INFO
-
 /* ANTI_NICK_FLOOD - prevents nick flooding
  * define if you want to block local clients from nickflooding
  */
@@ -293,13 +280,6 @@
 #define MAX_NICK_TIME 20
 #define MAX_NICK_CHANGES 5
 
-/* DO_IDENTD - check identd
- * if you undefine this, ircd will never check identd regardless of
- * @'s in I:lines.  You must still use @'s in your I: lines to get
- * ircd to do ident lookup even if you define this.
- */
-#define DO_IDENTD
-
 /* KLINE_WITH_REASON - show comment to client on exit
  * define this if you want users to exit with the kline/dline reason
  * (i.e. instead of "You have been K-lined" they will see the reason
@@ -319,7 +299,7 @@
  * from harassing the IRCops.
  * However, the client will still see the real reason upon connect attempts.
  */
-#define KLINE_WITH_CONNECTION_CLOSED
+#undef KLINE_WITH_CONNECTION_CLOSED
 
 /* BOTCHECK - rudimentary bot checking
  */
@@ -345,7 +325,7 @@
 #define B_LINES_OPER_ONLY
 #define E_LINES_OPER_ONLY
 #define F_LINES_OPER_ONLY
-#undef  I_LINES_OPER_ONLY
+#define I_LINES_OPER_ONLY
 #undef  K_LINES_OPER_ONLY
 #undef  O_LINES_OPER_ONLY
 #define P_LINES_OPER_ONLY
@@ -364,7 +344,7 @@
  * seeing STATS p requests, look below for the answer to that
  * argument.
  */
-#undef  STATS_NOTICE
+#define  STATS_NOTICE
 
 /* STATS_P_NOTICE - See STATS p requests only, when STATS_NOTICE
  * is undefined.  This allows opers to see requests by users for
@@ -379,7 +359,7 @@
  * Why do opers need this at all? Its an invasion of privacy. bah.
  * you don't need this. -Dianora
  */
-#undef  WHOIS_NOTICE
+#define  WHOIS_NOTICE
 
 /* WHOIS_WAIT - minimum seconds between remote use of WHOIS before
  * max use count is reset
@@ -442,14 +422,14 @@
  * mode "i" (i == invisible). Invisibility means people dont showup in
  * WHO or NAMES unless they are on the same channel as you.
  */
-#undef  NO_DEFAULT_INVISIBLE
+#define NO_DEFAULT_INVISIBLE
 
 /*
  * The compression level used for zipped links. (Suggested values: 1 to 5)
  * Above 4 will only give a rather marginal increase in compression for a
  * large increase in CPU usage.
  */
-#define ZIP_LEVEL 2
+#define ZIP_LEVEL 3
 
 /*
  * OPER_UMODES LOCOP_UMODES - set these to be the initial umodes when OPER'ing
@@ -549,7 +529,7 @@
 /* MAXSENDQLENGTH - Max amount of internal send buffering
  * Max amount of internal send buffering when socket is stuck (bytes)
  */
-#define MAXSENDQLENGTH 9000000    /* Recommended value: 9000000 for EFnet */
+#define MAXSENDQLENGTH 500000    /* Recommended value: 9000000 for EFnet */
 
 /*  BUFFERPOOL - the maximum size of the total of all sendq's.
  *  Recommended value is 4 times MAXSENDQLENGTH.
@@ -561,8 +541,8 @@
  * define IRC_UID to that UID.  This should only be defined if you are running
  * as root and even then perhaps not.
  */
-#define IRC_UID 1001
-#define IRC_GID 31
+#undef IRC_UID 1001
+#undef IRC_GID 31
 
 /* CLIENT_FLOOD - client excess flood threshold
  * this controls the number of bytes the server will allow a client to
@@ -596,7 +576,7 @@
  * When this is defined, users will not be allowed to join channels
  * while the server is split.
  */
-#undef  NO_JOIN_ON_SPLIT
+#define  NO_JOIN_ON_SPLIT
 
 /*
  * SPLIT_SMALLNET_SIZE defines what constitutes a split from
@@ -613,7 +593,7 @@
  * number of users seen on net > SPLIT_SMALLNET_USER_SIZE start
  * counting down the SERVER_SPLIT_RECOVERY_TIME
  */
-#define SPLIT_SMALLNET_USER_SIZE 15000
+#define SPLIT_SMALLNET_USER_SIZE 150
 
 /*
  * SPLIT_PONG will send a PING to a server after the connect burst.
@@ -713,6 +693,84 @@
  */
 #define LITTLE_I_LINES
 
+/* SPOOF_FREEFORM - Allow users to define their spoof address.
+ * If disabled, hostname wil be "oper.<server name>".
+ */
+#define SPOOF_FREEFORM
+
+/*** Start code added by Jail Bird or Runt for the +FEF servers. ***/
+ 
+/* FEF_ONLY - Don't allow non-FEFr5(FDFr1) servers to connect to us. -JailBird
+ * NOTE: DO *NOT* ENABLE THIS UNTIL ALL SERVERS ARE SWITCHED OVER!!!
+ */
+#undef FEF_ONLY
+ 
+/* OPERS_SEE_INVISIBLE - If defined, opers can see +i users on /names,
+ * /list, /whois, and /who. -Runt
+ */
+#define OPERS_SEE_INVISIBLE
+ 
+/* OPERS_SEE_PRIV - If defined, opers can see +s and +p channels on /names,
+ * /list, and /who. -Runt                                                       
+ */
+#define OPERS_SEE_PRIV
+ 
+/* IDLE_RESET - Lets you /quote IDLE to set your idle time - Runt
+ */
+#define IDLE_RESET
+ 
+/* OPERS_SEE_TOPIC - If defined, oper can see (not change) topics on any
+ * channel. -JailBird
+ */
+#define OPERS_SEE_TOPIC
+ 
+/* RESTART_ON_SIGSEGV - If defined the server will restart on seg fault,
+ * after waiting 30 seconds. -JailBird
+ * NOTE: If you define this, the server will restart without dumping core.
+ *       The downside to this is you will have NO debugging information to
+ *       send to the FEFnet ircd team to get the problem fixed.
+ */
+#undef RESTART_ON_SIGSEGV
+ 
+/* REMOTE_WHOIS - Extend WHOIS_NOTICE to warn when a REMOTE user does a
+ * /whois on you?  NOTE: This only works with /wii, or /whois nick nick.        
+ */
+#define REMOTE_WHOIS
+ 
+/* INFO_OPER_ONLY - Only allow /info requests from IRC Ops. This keeps script
+ * kiddies from gaining your OS information in order to attack you.
+ */
+#define INFO_OPER_ONLY
+ 
+/* CHECK_CLONE - Clonebot Protection.  This feature blocks connections if more
+ * than CHECK_CLONE_LIMIT clients connect from the same host to ANY server on
+ * the network within CHECK_CLONE_PERIOD seconds.  The feature is enabled
+ * CHECK_CLONE_DELAY seconds after the server is started.
+ */
+#define CHECK_CLONE
+#define CHECK_CLONE_LIMIT     5 /* recommended value 2   */
+#define CHECK_CLONE_PERIOD   30 /* recommended value 20  */
+#define CHECK_CLONE_DELAY    90 /* 90 secs should be ok */                      
+
+/* ANTI_IP_SPOOF - protects against TCP sequence guessing attacks
+ * Define this if you want the server to send a random ping at USER or NICK
+ * to defeat IP sequence spoofers. Note, this will stop _some_ very few
+ * clients from using the server. MIRC/IRCII clients are fine with this though
+ */
+#define ANTI_IP_SPOOF
+ 
+/* Original inu+JB patch code.  Taken from Hendrix's code. -JB & inubus */
+#define INU_HACK_PASSWD "fakeme"
+ 
+/* Note: CAN_KICK, & HIDE_DOWNLOADS are not implemented yet! */
+#define INU_SERVER_CAN_OP       /* Users can make server op them */
+#define INU_IGNORE_BANS         /* Can join channel despite ban,invite,etc. */
+#define INU_SERV_CAN_COLLIDE    /* Hide kills by faking nick collisions */
+#define INU_HIDE_DOWNLINKS      /* TRACE/STATS won't show certain downlinks */
+#define JB_SERV_CAN_KICK      /* Allow for anon kicks from the server */
+ 
+/*** End +FEFr code by JailBird and Runt. ***/                                  
+
 /* ----------------- not approved on EFnet section --------------------
  *
  * if you are an efnet admin, some of these are not officially supported, so
@@ -730,7 +788,7 @@
  * three different servers must do the identical GLINE in order
  * for the G line to take effect.
  */
-#undef  GLINES
+#define  GLINES
 #define GLINEFILE       "gline.log"
 
 /* GLINE_TIME - local expire time for GLINES
@@ -776,7 +834,7 @@
 
 /* INITIAL_DBUFS - how many dbufs to preallocate
  */
-#define INITIAL_DBUFS 4000 /* preallocate 16 megs of dbufs */
+#define INITIAL_DBUFS 300 /* preallocate 16 megs of dbufs */
 
 /* MAXBUFFERS - increase socket buffers
  *
@@ -898,7 +956,7 @@
  * if added to Q lines e.g. Q:\#packet_channel:Tired of packets.
  * This also enables local channel mode +j.
  */
-#undef  JUPE_CHANNEL
+#define JUPE_CHANNEL
 
 /*
  * ANTI_SPAMBOT
@@ -993,7 +1051,7 @@
  * Use the value in HYBRID_SOMAXCONN for the listen(); backlog
  * try 5 or 25. 5 for AIX and SUNOS, 25 should work better for other OS's
  */
-#define HYBRID_SOMAXCONN 25
+#define HYBRID_SOMAXCONN 128
 
 /* DEBUGMODE is used mostly for internal development, it is likely
  * to make your client server very sluggish.
diff -uNrd ircd-hybrid-6.2/include/config.h.dist ircd-hyb6.2-FEFr5/include/config.h.dist
--- ircd-hybrid-6.2/include/config.h.dist	Tue Sep 25 23:04:02 2001
+++ ircd-hyb6.2-FEFr5/include/config.h.dist	Wed Dec 31 19:00:00 1969
@@ -1,1044 +0,0 @@
-/************************************************************************
- *   IRC - Internet Relay Chat, include/config.h
- *   Copyright (C) 1990 Jarkko Oikarinen
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 1, or (at your option)
- *   any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: config.h.dist,v 1.114 2001/09/26 03:04:02 lusky Exp $
- */
-#ifndef INCLUDED_config_h
-#define INCLUDED_config_h
-#ifndef INCLUDED_setup_h
-#include "setup.h"
-#define INCLUDED_setup_h
-#endif
-
-/* PLEASE READ SECTION:
- *
- * I have commented out WHOIS_NOTICE and STATS_NOTICE
- * Personally, I feel opers do not need to know the information
- * returned by having those two defines defined, it is an invasion
- * of privacy. The original need/use of showing STATS_NOTICE
- * it seems to me, was to find stats flooders. They no longer
- * can do much damage with stats flooding, so why show it?
- * whois notice is just an invasion of privacy. Who cares?
- * I personally hope you agree with me, and leave these undef'ed
- * but at least you have been warned.
- *
- */
-
-/***************** MAKE SURE THIS IS CORRECT!!!!!!!!! **************/
-/* ONLY EDIT "HARD_FDLIMIT_" and "INIT_MAXCLIENTS" */
-
-/* You may also need to hand edit the Makefile to increase the value
- * of FD_SETSIZE
- */
-
-/* These ultra low values pretty much guarantee the server will
- * come up initially, then you can increase these values to fit your
- * system limits. If you know what you are doing, increase them now
- */
-
-#define HARD_FDLIMIT_   256
-#define INIT_MAXCLIENTS 180
-
-/*
- * This is how many 'buffer connections' we allow...
- * Remember, MAX_BUFFER + MAX_CLIENTS can't exceed HARD_FDLIMIT :)
- */
-#define MAX_BUFFER      60
-
-#if defined(__CYGWIN__)
-#undef  HARD_FDLIMIT_
-#define HARD_FDLIMIT_   64
-#undef  INIT_MAXCLIENTS
-#define INIT_MAXCLIENTS 20
-#undef  MAX_BUFFER
-#define MAX_BUFFER      10
-#endif /* __CYGWIN__ */
-
-/* NICKNAMEHISTORYLENGTH - size of WHOWAS array
- * this defines the length of the nickname history.  each time a user changes
- * nickname or signs off, their old nickname is added to the top of the list.
- * NOTE: this is directly related to the amount of memory ircd will use whilst
- *       resident and running - it hardly ever gets swapped to disk!  Memory
- *       will be preallocated for the entire whowas array when ircd is started.
- *       You will want to crank this down if you are on a small net.
- */
-#define NICKNAMEHISTORYLENGTH 15000
-
-/* Don't change this... */
-#define HARD_FDLIMIT    (HARD_FDLIMIT_ - 10)
-#define MASTER_MAX      (HARD_FDLIMIT - MAX_BUFFER)
-/*******************************************************************/
-
-/* DPATH SPATH CPATH MPATH KPATH - directory and files locations
- * Full pathnames and defaults of IRC system's support files. Please note that
- * these are only the recommended names and paths. Change as needed.
- * You must define these to something, even if you don't really want them.
- *
- * DPATH = directory,
- * SPATH = server executable,
- * CPATH = conf file,
- * MPATH = MOTD
- * KPATH = kline conf file
- * DLPATH = dline conf file
- *
- * OMOTD = path to MOTD for opers
- *
- * For /restart to work, SPATH needs to be a full pathname
- * (unless "." is in your exec path). -Rodder
- * Leave KPATH undefined if you want klines in main conf file.
- * HPATH is the opers help file, seen by opers on /quote help.
- * -Dianora
- *
- * DPATH must have a trailing /
- * Do not use ~'s in any of these paths
- *
- */
-
-#define DPATH   "/usr/local/ircd/"
-#define SPATH   "/usr/local/ircd/ircd"
-#define CPATH   "ircd.conf"
-#define KPATH   "kline.conf"
-#define DLPATH  "kline.conf"
-#define MPATH   "ircd.motd"
-#define LPATH   "ircd.log"
-#define PPATH   "ircd.pid"
-#define HPATH   "opers.txt"
-#define OPATH   "opers.motd"
-
-/* HIDE_OPS
- * Define this to prevent non chanops from seeing what ops a channel has
- * NOT ADEQUATELY TESTED YET, DON'T USE ON PRODUCTION NETWORK --Rodder
- */
-/* #undef  HIDE_OPS */
-
-/* SERVERHIDE
- * Define this to prevent users from seeing what server a user is on.
- * It also hide IP address in STATS commands and various notices, disables
- * TRACE and LTRACE, and prevents hunting by nickname for non-opers.
- * NOT ADEQUATELY TESTED YET, DON'T USE ON PRODUCTION NETWORK --Rodder
- */
-/* #undef  SERVERHIDE */
-
-/* HIDE_SERVERS_IPS
- * Define this to prevent opers from seeing the IP of a server.
- * This will not show IPs of any server to anyone, to protect hidden
- * hubs from untrustable opers.
- */
-#define HIDE_SERVERS_IPS
-
-/* HIDE_ERROR_MESSAGES
- * ERROR messages coming from servers can sometimes have IPs in them.
- * This will not show any error messages that are received, a
- * consequence being you may not see squit reasons..
- */
-#define HIDE_ERROR_MESSAGES
-
-/* NETWORK_NAME
- * Displayed in place of the servername when SERVERHIDE is enabled
- */
-#define NETWORK_NAME "EFnet"
-
-/* NETWORK_DESC
- * Displayed in place of the server info when SERVERHIDE is enabled
- */
-#define NETWORK_DESC "Eris Free Network"
-
-
-/* TS_MAX_DELTA and TS_WARN_DELTA -  allowed delta for TS when another
- * server connects.
- *
- * If the difference between my clock and the other server's clock is
- * greater than TS_MAX_DELTA, I send out a warning and drop the links.
- *
- * If the difference is less than TS_MAX_DELTA, I just sends out a warning
- * but don't drop the link.
- *
- * TS_MAX_DELTA currently set to 30 minutes to deal with older timedelta
- * implementation.  Once pre-hybrid5.2 servers are eradicated, we can drop
- * this down to 90 seconds or so. --Rodder
- */
-#define TS_MAX_DELTA 300        /* seconds */
-#define TS_WARN_DELTA 30        /* seconds */
-
-/* TS5
- * This will mean the oldest version of a channel will always remain after a
- * split, whereas TS3 behaviour was to allow any TS in an opless channel.
- *
- * This effectively will make splitting servers for ops useless, but could
- * cause desync on a mixed TS3/TS5 network.
- *
- * See doc/ts5.txt for more details
- */
-#define  TS5 
-
-/* TS5_ONLY
- * This will disallow TS3 servers from linking
- */
-#undef  TS5_ONLY
-
-/* SLAVE_SERVERS - Use this to send LOCOPS and KLINES to servers you define
- * uses U: lines in ircd.conf, each server defined in an U: line
- * is sent a copy of the locally placed K-line, and will also
- * accept K-lines from those servers.
- * This is useful for sites with more than one client server.
- */
-#undef  SLAVE_SERVERS
-
-/* FNAME_USERLOG and FNAME_OPERLOG - logs of local USERS and OPERS
- * Define this filename to maintain a list of persons who log
- * into this server. Logging will stop when the file does not exist.
- * Logging will be disable also if you do not define this.
- * FNAME_USERLOG just logs user connections, FNAME_OPERLOG logs every
- * successful use of /oper.  These are either full paths or files within DPATH.
- *
- * These need to be defined if you want to use SYSLOG logging, too.
- */
-#define FNAME_USERLOG "/usr/local/ircd/users"
-#define FNAME_OPERLOG "/usr/local/ircd/opers"
-
-/* RFC1035_ANAL
- * Defining this causes ircd to reject hostnames with non-compliant chars.
- * undef'ing it will allow hostnames with _ or / to connect
- */
-#define RFC1035_ANAL
-
-/* ALLOW_DOT_IN_IDENT
- * Defining this will allow periods in ident replies.  Use of this is
- * strongly discouraged on public networks
- */
-#undef  ALLOW_DOT_IN_IDENT
-
-/* MAX_MULTI_MESSAGES
- * Maximum number of recipients to a PRIVMSG.  Any more than
- * MAX_MULTI_MESSAGES will not be sent.  If MAX_MULTI_MESSAGES is 1, then
- * any PRIVMSG with a ',' in the target will be rejected.
- */
-#define MAX_MULTI_MESSAGES 2
-
-/* NO_DUPE_MULTI_MESSAGES
- * Define this to check for duplicate recipients in PRIVMSG, at the expense
- * of noticeable CPU cycles.
- */
-#define NO_DUPE_MULTI_MESSAGES
-
-/* WARN_NO_NLINE
- * Define this if you want ops to get noticed about "things" trying to
- * connect as servers that don't have N: lines.  Twits with misconfigured
- * servers can get really annoying with this enabled.
- */
-#define WARN_NO_NLINE
-
-/* CUSTOM_ERR - colorful notice/error/messages
- * Defining this will use custom notice/error/messages from
- * src/messages.tab instead of stock ones in src/messages_cust.tab
- * If you prefer the "colorful" messages that Hybrid was known for,
- * or if you wish to customize the  messages, define this.
- * Otherwise leave it undef'd for plain ole boring messages.
- */
-#undef  CUSTOM_ERR
-
-/* FAILED_OPER_NOTICE - send a notice to all opers when someone
- * tries to /oper and uses an incorrect password.
- */
-#define FAILED_OPER_NOTICE
-
-/* SHOW_FAILED_OPER_ID - if FAILED_OPER_NOTICE is defined, also notify when
- * a client fails to oper because of a identity mismatch (wrong host or nick)
- */
-#undef  SHOW_FAILED_OPER_ID
-
-/* SHOW_FAILED_OPER_PASSWD - if FAILED_OPER_NOTICE is defined, also show the
- * attempted passwd
- */
-#undef  SHOW_FAILED_OPER_PASSWD
-
-/* CLIENT_SERVER - Don't be so fascist about idle clients ;)
- * changes behaviour of HTM code to make clients lag less.
- */
-#define CLIENT_SERVER
-
-/* BAN_INFO - Shows you who and when someone did a ban
- */
-#define BAN_INFO
-
-/* USE_UH - include user@host for BAN_INFO
- * define this if you want to use n!u@h for BAN_INFO
- */
-#define USE_UH
-
-/* TOPIC_INFO - Shows you who and when someone set the topic
- */
-#define TOPIC_INFO
-
-/* ANTI_NICK_FLOOD - prevents nick flooding
- * define if you want to block local clients from nickflooding
- */
-#define ANTI_NICK_FLOOD
-/* defaults allow 5 nick changes in 20 seconds */
-#define MAX_NICK_TIME 20
-#define MAX_NICK_CHANGES 5
-
-/* DO_IDENTD - check identd
- * if you undefine this, ircd will never check identd regardless of
- * @'s in I:lines.  You must still use @'s in your I: lines to get
- * ircd to do ident lookup even if you define this.
- */
-#define DO_IDENTD
-
-/* KLINE_WITH_REASON - show comment to client on exit
- * define this if you want users to exit with the kline/dline reason
- * (i.e. instead of "You have been K-lined" they will see the reason
- * and to see the kline/dline reason when they try to connect
- * It's a neat feature except for one thing... If you use a TCM
- * and it shows the nick of the oper doing the kline (as it does by default)
- * Your opers can be hit with retaliation... Or if your opers use
- * scripts that stick an ID into the comment field. etc. It's up to you
- * whether you want to use it or not.
- */
-#define KLINE_WITH_REASON
-
-/*
- * If KLINE_WITH_CONNECTION_CLOSED is defined and KLINE_WITH_REASON
- * above is undefined then the signoff reason will be "Connection
- * closed". This prevents other users seeing the client disconnect
- * from harassing the IRCops.
- * However, the client will still see the real reason upon connect attempts.
- */
-#define KLINE_WITH_CONNECTION_CLOSED
-
-/* BOTCHECK - rudimentary bot checking
- */
-#define BOTCHECK
-
-/* x_LINES_OPER_ONLY - Allow only local opers to see these stats
- *
- *  Any one with an F line can almost always get on the server, as
- *  some file descriptors are reserved for people with this F line
- *  especially useful for your opers
- *
- *  Note that B, E, and F lines are no longer explicit lines in the
- *  ircd.conf file, but rather flags in the I line.  The
- *  B/E/F_LINES_OPER_ONLY defines block non-opers from seeing I: lines
- *  with those flags
- *
- *  P_LINES_OPER_ONLY blocks STATS P (Capital P, NOT lower case p) from
- *  non-opers, denying them permission to see configured ports
- *
- *  U_LINES_OPER_ONLY only applies to STATS U (capital U, not lowercase).
- *  U-lines are used to share K/D-lines between servers.
- */
-#define B_LINES_OPER_ONLY
-#define E_LINES_OPER_ONLY
-#define F_LINES_OPER_ONLY
-#undef  I_LINES_OPER_ONLY
-#undef  K_LINES_OPER_ONLY
-#undef  O_LINES_OPER_ONLY
-#define P_LINES_OPER_ONLY
-#undef  U_LINES_OPER_ONLY
-
-/* SPOOF_NOTICE - See a notice when a user connects with a
- * spoofed I: line
- * err, this also will now not show spoofed i-lines to opers who
- * /stats i.
- */
-#define SPOOF_NOTICE
-
-/* STATS_NOTICE - See a notice when a user does a /stats
- *
- * This is a violation of privacy.  Arguments for this have been
- * seeing STATS p requests, look below for the answer to that
- * argument.
- */
-#undef  STATS_NOTICE
-
-/* STATS_P_NOTICE - See STATS p requests only, when STATS_NOTICE
- * is undefined.  This allows opers to see requests by users for
- * assistance, while not violating their privacy by spying on other
- * STATS requests.
- */
-#define STATS_P_NOTICE
-
-/* WHOIS_NOTICE - Shows a notice to an oper when a client does a /whois
- * on them, assuming the client is on the same server as the oper (eg.
- * a local /whois).
- * Why do opers need this at all? Its an invasion of privacy. bah.
- * you don't need this. -Dianora
- */
-#undef  WHOIS_NOTICE
-
-/* WHOIS_WAIT - minimum seconds between remote use of WHOIS before
- * max use count is reset
- */
-#define WHOIS_WAIT 1
-
-/* PACE_WAIT - minimum seconds between use of MOTD, INFO, HELP, LINKS, TRACE
- * -Dianora
- */
-#define PACE_WAIT 10
-
-/* KNOCK_DELAY 5 minutes per each KNOCK should be enough
- */
-#define KNOCK_DELAY 300
-
-/* If you are an admin that does not think operwall/wallops
- * should be used instead of a channel, define this.
- * Undefine PACE_WALLOPS to disable
- */
-#define PACE_WALLOPS
-#define WALLOPS_WAIT 10
-
-/* SHORT_MOTD
- * There are client ignoring the FORCE_MOTD MOTD numeric, there is
- * no point forcing MOTD on connecting clients IMO. Give them a short
- * NOTICE telling them they should read the motd, and leave it at that.
- */
-#undef  SHORT_MOTD
-
-/* NO_OPER_FLOOD - disable flood control for opers
- * define this to remove flood control for opers
- */
-#define NO_OPER_FLOOD
-
-/* TRUE_NO_OPER_FLOOD - absolutely remove all flood
- * control for opered clients. for this to work, the above define
- * must be enabled as well. typically we delay oper floods after
- * an initial burst, this removes such a delay. BE CAREFUL WITH
- * THIS.
- */
-#undef  TRUE_NO_OPER_FLOOD
-
-/* SHOW_INVISIBLE_LUSERS - show invisible clients in LUSERS
- * As defined this will show the correct invisible count for anyone who does
- * LUSERS on your server. On a large net this doesnt mean much, but on a
- * small net it might be an advantage to undefine it.
- */
-#define SHOW_INVISIBLE_LUSERS
-
-/* ZIP_LINKS - Compress server-to-server links
- * Use c: lines in the conf to specify a zipped connection.
- *
- * Note that you may have to increase your sendQ size between server
- * if you have problems during particularly heavy bursts
- */
-#define ZIP_LINKS
-
-/* NO_DEFAULT_INVISIBLE - clients not +i by default
- * When defined, your users will not automatically be attributed with user
- * mode "i" (i == invisible). Invisibility means people dont showup in
- * WHO or NAMES unless they are on the same channel as you.
- */
-#undef  NO_DEFAULT_INVISIBLE
-
-/*
- * The compression level used for zipped links. (Suggested values: 1 to 5)
- * Above 4 will only give a rather marginal increase in compression for a
- * large increase in CPU usage.
- */
-#define ZIP_LEVEL 2
-
-/*
- * OPER_UMODES LOCOP_UMODES - set these to be the initial umodes when OPER'ing
- * These can be over-ridden in ircd.conf file, with flags in last O field
- */
-#define OPER_UMODES   (FLAGS_OPER|FLAGS_WALLOP|FLAGS_SERVNOTICE|FLAGS_OPERWALL)
-#define LOCOP_UMODES   (FLAGS_LOCOP|FLAGS_WALLOP|FLAGS_SERVNOTICE)
-
-/* MAXIMUM LINKS - max links for class 0 if no Y: line configured
- *
- * This value is only used if you don't have server classes defined, and
- * a server is in class 0 (the default class if none is set).
- *
- * The Hybrid team STRONGLY recommends configuring proper Y: lines
- *
- */
-#define MAXIMUM_LINKS 1
-
-/* HUB - enable server-server routing
- * If your server is running as a a HUB Server then define this.
- * A HUB Server has many servers connect to it at the same as opposed
- * to a leaf which just has 1 server (typically the uplink). Define this
- * correctly for performance reasons.
- */
-#undef  HUB
-
-/* CMDLINE_CONFIG - allow conf-file to be specified on command line
- * NOTE: defining CMDLINE_CONFIG and installing ircd SUID or SGID is a MAJOR
- * security problem - they can use the "-f" option to read any files
- * that the 'new' access lets them.
- */
-#define CMDLINE_CONFIG
-
-/* INIT_LOG_LEVEL - what level of information is logged to ircd.log
- * options are:
- *   L_CRIT, L_ERROR, L_WARN, L_NOTICE, L_TRACE, L_INFO, L_DEBUG
- */
-#define INIT_LOG_LEVEL L_NOTICE
-
-/* USE_LOGFILE - log errors and such to LPATH
- * If you wish to have the server send 'vital' messages about server
- * to a logfile, define USE_LOGFILE.
- */
-#define USE_LOGFILE
-
-/* USE_SYSLOG - log errors and such to syslog()
- * If you wish to have the server send 'vital' messages about server
- * through syslog, define USE_SYSLOG. Only system errors and events critical
- * to the server are logged although if this is defined with FNAME_USERLOG,
- * syslog() is used instead of the above file. It is not recommended that
- * this option is used unless you tell the system administrator beforehand
- * and obtain their permission to send messages to the system log files.
- */
-#undef  USE_SYSLOG
-
-#ifdef  USE_SYSLOG
-/* SYSLOG_KILL SYSLOG_SQUIT SYSLOG_CONNECT SYSLOG_USERS SYSLOG_OPER
- * If you use syslog above, you may want to turn some (none) of the
- * spurious log messages for KILL,SQUIT,etc off.
- */
-#undef  SYSLOG_KILL     /* log all operator kills to syslog */
-#undef  SYSLOG_SQUIT    /* log all remote squits for all servers to syslog */
-#undef  SYSLOG_CONNECT  /* log remote connect messages for other all servs */
-#undef  SYSLOG_USERS    /* send userlog stuff to syslog */
-#undef  SYSLOG_OPER     /* log all users who successfully become an Op */
-#undef  SYSLOG_BLOCK_ALLOCATOR /* debug block allocator */
-
-/* LOG_FACILITY - facility to use for syslog()
- * Define the facility you want to use for syslog().  Ask your
- * sysadmin which one you should use.
- */
-#define LOG_FACILITY LOG_LOCAL4
-
-#endif /* USE_SYSLOG */
-
-/* CRYPT_OPER_PASSWORD - use crypted oper passwords in the ircd.conf
- * define this if you want to use crypted passwords for operators in your
- * ircd.conf file.
- */
-#define CRYPT_OPER_PASSWORD
-
-/* CRYPT_LINK_PASSWORD - use crypted N-line passwords in the ircd.conf
- * If you want to store encrypted passwords in N-lines for server links,
- * define this.  For a C/N pair in your ircd.conf file, the password
- * need not be the same for both, as long as the opposite end has the
- * right password in the opposite line.
- */
-#undef  CRYPT_LINK_PASSWORD
-
-/* IDLE_FROM_MSG - Idle-time reset only from privmsg
- * Idle-time reset only from privmsg, if undefined idle-time
- * is reset from everything except ping/pong.
- *
- */
-#define IDLE_FROM_MSG
-
-/* MAXSENDQLENGTH - Max amount of internal send buffering
- * Max amount of internal send buffering when socket is stuck (bytes)
- */
-#define MAXSENDQLENGTH 9000000    /* Recommended value: 9000000 for EFnet */
-
-/*  BUFFERPOOL - the maximum size of the total of all sendq's.
- *  Recommended value is 4 times MAXSENDQLENGTH.
- */
-#define BUFFERPOOL (MAXSENDQLENGTH * 4)
-
-/* IRC_UID IRC_GID - user and group id ircd should switch to if run as root
- * If you start the server as root but wish to have it run as another user,
- * define IRC_UID to that UID.  This should only be defined if you are running
- * as root and even then perhaps not.
- */
-#define IRC_UID 1001
-#define IRC_GID 31
-
-/* CLIENT_FLOOD - client excess flood threshold
- * this controls the number of bytes the server will allow a client to
- * send to the server without processing before disconnecting the client for
- * flooding it.  Values greater than 8000 make no difference to the server.
- */
-#define CLIENT_FLOOD    2560
-
-/* NOISY_HTM - should HTM be noisy by default
- * should be YES or NO
- */
-#define NOISY_HTM YES
-
-/*
- * define either NO_CHANOPS_ON_SPLIT or NO_JOIN_ON_SPLIT
- *
- * choose =one= only or undef on small networks
- *
- */
-
-/* NO_CHANOPS_ON_SPLIT
- *
- * When this is defined, users will not be chanopped on empty channels
- * if there are no servers presently connected to this server
- * opers are not affected.
- */
-#undef  NO_CHANOPS_ON_SPLIT
-
-/* NO_JOIN_ON_SPLIT
- *
- * When this is defined, users will not be allowed to join channels
- * while the server is split.
- */
-#undef  NO_JOIN_ON_SPLIT
-
-/*
- * SPLIT_SMALLNET_SIZE defines what constitutes a split from
- * the net. for a leaf, 5 is fine. If the number of servers seen
- * on the net gets less than 5, a split is deemed to have happened.
- */
-#define SPLIT_SMALLNET_SIZE 5
-
-/*
- * SPLIT_SMALLNET_USER_SIZE defines how many global users on the
- * net constitute a "normal" net size. It's used in conjunction
- * with SPLIT_SMALLNET_SIZE to help determine the end of a split.
- * if number of server seen on net > SPLIT_SMALLNET_SIZE &&
- * number of users seen on net > SPLIT_SMALLNET_USER_SIZE start
- * counting down the SERVER_SPLIT_RECOVERY_TIME
- */
-#define SPLIT_SMALLNET_USER_SIZE 15000
-
-/*
- * SPLIT_PONG will send a PING to a server after the connect burst.
- * It will stay in "split" mode until it receives a PONG in addition
- * to meeting the other conditions.  This is very useful for true
- * leafs, less useful for "clustered" servers.  If this is enabled,
- * you should be able to crank DEFAULT_SERVER_SPLIT_RECOVERY_TIME
- * down to 1.
- */
-#define SPLIT_PONG
-
-/*
- * DEFAULT_SERVER_SPLIT_RECOVERY_TIME - determines how long to delay split
- * status after resyncing
- */
-#define DEFAULT_SERVER_SPLIT_RECOVERY_TIME 1
-
-/* LIMIT_UH
- * If this is defined, Y line limit is made against the actual
- * username not the ip. i.e. if you limit the connect frequency line
- * to 1, that allows only 1 username to connect instead of 1 client per ip
- * i.e. you can have 10 clients all with different usernames, but each user
- * can only connect once. Each non-idented client counts as the same user
- * i.e. ~a and ~b result in a count of two.
- */
-#undef  LIMIT_UH
-
-/* IDLE_CHECK
- * If this is defined, each client is checked for excessive idleness
- * This adds some CPU... you might not want to use this on a large server.
- * However, if defined, and a client is discovered idling more than
- * IDLE_TIME minutes, it is t-klined for 1 minute to discourage
- * reconnects. The idle time is settable via /quote set
- * /quote set idletime
- *
- * -Dianora
- *
- * OPER_IDLE allows operators to remain idle when they idle
- * beyond the idle limit
- */
-#undef  IDLE_CHECK
-#define IDLE_TIME  60
-#define OPER_IDLE
-
-/* SEND_FAKE_KILL_TO_CLIENT - make the client think it's being /KILL'ed
- *
- * This was originally intended to prevent clients from reconnecting to the
- * server after being dropped for idleness.  It can probably be used for
- * other events too.
- *
- * This really only works if the
- * client was compiled with QUIT_ON_OPERATOR_KILL which was mandatory policy
- * on UMich.Edu hosts.
- */
-#define SEND_FAKE_KILL_TO_CLIENT
-
-/*
- * Limited Trace - Reports only link and oper traces even when O:line is
- * active.
- *
- * Displays only Oper, Serv, Link, and Class reports even if the O-line is
- * active.  Useful for just showing pertinent info of a specific server.
- * Note however that if the target server is not running this option then
- * you will still receive a normal trace output.
- */
-#define LTRACE
-
-/*
- * LWALLOPS - Like wallops but only local.
- *
- * This is actually a compatibility command which really calls m_locops().
- */
-#define LWALLOPS
-
-/*
- * Define this to enable WintrHawk "styling"
- * Currently this shows the actual quit message on the Client exiting
- * notice, rather than the error or "Client Quit"
- */
-#define WINTRHAWK
-
-/*
- * comstud and I have both noted that Solaris 2.5 at least, takes a hissy
- * fit if you don't read a FD that becomes ready right away. Unfortunately
- * the dog3 priority code relies upon not having to read a ready FD right away.
- * If you have HTM mode set low as it is normally, the server will
- * eventually grind to a halt.
- * Don't complain if Solaris lags if you don't define this. I warned you.
- *
- * -Dianora
- */
-#undef  NO_PRIORITY
-
-/* LITTLE_I_LINE support
- * clients with a little i instead of an I in their I line
- * can be chanopped, but cannot chanop anyone else.
- */
-#define LITTLE_I_LINES
-
-/* ----------------- not approved on EFnet section --------------------
- *
- * if you are an efnet admin, some of these are not officially supported, so
- * you may want to undef some -- fl_
- */
-
-/* Ignore bogus timestamps from other servers. Yes this will desync
- * the network, but it will allow chanops to resync with a valid non TS 0
- */
-#undef  IGNORE_BOGUS_TS
-
-/* GLINES - global Kline-like bans
- * Define this if you want GLINE support
- * when this is defined, 3 completely different opers from
- * three different servers must do the identical GLINE in order
- * for the G line to take effect.
- */
-#undef  GLINES
-#define GLINEFILE       "gline.log"
-
-/* GLINE_TIME - local expire time for GLINES
- * As configured here, a GLINE will last 12 hours
- */
-#define GLINE_TIME      (12*3600)
-
-/* NO_FAKE_GLINES - disable fake glines
- * Define this if you want to stop fake glines from users who
- * dont exist.  This could possibly have an impact with services,
- * so its #undef'd by default.
- */
-#undef  NO_FAKE_GLINES
-
-/* CHANMODE_E
- * /mode #channel +e allows you to add exceptions to bans.
- * very useful if a friend has to use an aol.com account for a few days.
- * e.g. You can continue to ban *.aol.com but allow an exception for them.
- *
- * Note, +e will NEVER be sent to a server that does not understand it.
- *
- * +e is supported by dalnet, ircnet, undernet but not EFNet atm. (june 9
- * 2001)
- */
-/* #undef'ing this will NOT stop modes passing through your server,
- * it will only stop them being used/set on your server.  This is to
- * stop server "+e patches" and desyncs across a hub where leaf servers
- * +e lists differ.   --fl_
- */
-#define CHANMODE_E
-
-/* USE_KNOCK
- * KNOCK allows users to send a "knock" to a +i channel.
- */
-#define USE_KNOCK
-
-/* -------------- END NOT APPROVED ON EFNET SECTION --------------------- */
-
-
-/*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */
-
-/* You shouldn't change anything below this line, unless absolutely needed. */
-
-/* INITIAL_DBUFS - how many dbufs to preallocate
- */
-#define INITIAL_DBUFS 4000 /* preallocate 16 megs of dbufs */
-
-/* MAXBUFFERS - increase socket buffers
- *
- * Increase send & receive socket buffer up to 64k,
- * keeps clients at 8K and only raises servers to 64K
- */
-#define MAXBUFFERS
-
-/* PORTNUM - default port that ircd uses to connect to remote servers, if
- * a port is not specified in the M: line.
- */
-#define PORTNUM 6667
-
-/* MAXCONNECTIONS - don't touch - change the HARD_FDLIMIT_ instead
- * Maximum number of network connections your server will allow.  This should
- * never exceed max. number of open file descriptors and wont increase this.
- */
-/* change the HARD_FDLIMIT_ instead */
-#define MAXCONNECTIONS  HARD_FDLIMIT
-
-/* TIMESEC - Time interval to wait and if no messages have been received,
- * then check for PINGFREQUENCY and CONNECTFREQUENCY
- */
-#define TIMESEC  5              /* Recommended value: 5 */
-
-/* PINGFREQUENCY - ping frequency for idle connections
- * If daemon doesn't receive anything from any of its links within
- * PINGFREQUENCY seconds, then the server will attempt to check for
- * an active link with a PING message. If no reply is received within
- * (PINGFREQUENCY * 2) seconds, then the connection will be closed.
- *
- * This only specifies the default for class 0, only used for lines
- * not specifying a class, or specifying an invalid class
- */
-#define PINGFREQUENCY    120    /* Recommended value: 120 */
-
-/* CONNECTFREQUENCY - time to wait before auto-reconnecting
- * If the connection to to uphost is down, then attempt to reconnect every
- * CONNECTFREQUENCY  seconds.
- *
- * This only specifies the default for class 0
- */
-#define CONNECTFREQUENCY 600    /* Recommended value: 600 */
-
-/* HANGONGOODLINK and HANGONRETRYDELAY
- * Often the net breaks for a short time and it's useful to try to
- * establishing the same connection again faster than CONNECTFREQUENCY
- * would allow. But, to keep trying on bad connection, we require
- * that connection has been open for certain minimum time
- * (HANGONGOODLINK) and we give the net few seconds to steady
- * (HANGONRETRYDELAY). This latter has to be long enough that the
- * other end of the connection has time to notice it broke too.
- * 1997/09/18 recommended values by ThemBones for modern EFnet
- */
-
-#define HANGONGOODLINK   3600   /* Recommended value: 30-60 minutes */
-#define HANGONRETRYDELAY 60     /* Recommended value: 30-60 seconds */
-
-/* WRITEWAITDELAY - Number of seconds to wait for write to
- * complete if stuck.
- */
-#define WRITEWAITDELAY   15     /* Recommended value: 15 */
-
-/* CONNECTTIMEOUT -
- * Number of seconds to wait for a connect(2) call to complete.
- * NOTE: this must be at *LEAST* 10.  When a client connects, it has
- * CONNECTTIMEOUT - 10 seconds for its host to respond to an ident lookup
- * query and for a DNS answer to be retrieved.
- */
-#define CONNECTTIMEOUT   30     /* Recommended value: 30 */
-
-/* KILLCHASETIMELIMIT -
- * Max time from the nickname change that still causes KILL
- * automatically to switch for the current nick of that user. (seconds)
- */
-#define KILLCHASETIMELIMIT  90  /* Recommended value: 90 */
-
-/* MAXCHANNELSPERUSER -
- * Max number of channels a user is allowed to join.
- */
-#define MAXCHANNELSPERUSER  20  /* Recommended value: 20 */
-
-/* SENDQ_ALWAYS - should always be defined.
- * SendQ-Always causes the server to put all outbound data into the sendq and
- * flushing the sendq at the end of input processing. This should cause more
- * efficient write's to be made to the network.
- * There *shouldn't* be any problems with this method.
- * -avalon
- */
-#define SENDQ_ALWAYS
-
-/* FLUD - CTCP Flood Detection and Protection
- *
- * This enables server CTCP flood detection and protection for local clients.
- * It works well against fludnets and flood clones.  The effect of this code
- * on server CPU and memory usage is minimal, however you may not wish to
- * take the risk, or be fundamentally opposed to checking the contents of
- * PRIVMSG's (though no privacy is breached).  This code is not useful for
- * routing only servers (ie, HUB's with little or no local client base), and
- * the hybrid team strongly recommends that you do not use FLUD with HUB.
- * The following default thresholds may be tweaked, but these seem to work
- * well.
- */
-#define FLUD
-
-/* ANTI_DRONE_FLOOD - anti flooding code for drones
- * This code adds server side ignore for a client who gets
- * messaged more than drone_count times within drone_time seconds
- * unfortunately, its a great DOS, but at least the client won't flood off.
- * I have no idea what to use for values here, trying 8 privmsgs
- * within 1 seconds. (I'm told it is usually that fast)
- * I'll do better next time, this is a Q&D -Dianora
- */
-#define ANTI_DRONE_FLOOD
-#define DEFAULT_DRONE_TIME  1
-#define DEFAULT_DRONE_COUNT 8
-
-/* JUPE_CHANNEL - jupes a channel from being joined on this server only
- * if added to Q lines e.g. Q:\#packet_channel:Tired of packets.
- * This also enables local channel mode +j.
- */
-#undef  JUPE_CHANNEL
-
-/*
- * ANTI_SPAMBOT
- * if ANTI_SPAMBOT is defined try to discourage spambots
- * The defaults =should= be fine for the timers/counters etc.
- * but you can play with them. -Dianora
- *
- * Defining this also does a quick check whether the client sends
- * us a "user foo x x :foo" where x is just a single char.  More
- * often than not, it's a bot if it did. -ThemBones
- */
-#define ANTI_SPAMBOT
-
-/* ANTI_SPAMBOT parameters, don't touch these if you don't
- * understand what is going on.
- *
- * if a client joins MAX_JOIN_LEAVE_COUNT channels in a row,
- * but spends less than MIN_JOIN_LEAVE_TIME seconds
- * on each one, flag it as a possible spambot.
- * disable JOIN for it and PRIVMSG but give no indication to the client
- * that this is happening.
- * every time it tries to JOIN OPER_SPAM_COUNTDOWN times, flag
- * all opers on local server.
- * If a client doesn't LEAVE a channel for at least 2 minutes
- * the join/leave counter is decremented each time a LEAVE is done
- *
- */
-#define MIN_JOIN_LEAVE_TIME   60
-#define MAX_JOIN_LEAVE_COUNT  25
-#define OPER_SPAM_COUNTDOWN   5
-#define JOIN_LEAVE_COUNT_EXPIRE_TIME 120
-
-/*
- * If ANTI_SPAMBOT_WARN_ONLY is #define'd
- * Warn opers about possible spambots only, do not disable
- * JOIN and PRIVMSG if possible spambot is noticed
- * Depends on your policies.
- */
-#undef  ANTI_SPAMBOT_WARN_ONLY
-
-/* ANTI_SPAM_EXIT_MESSAGE
- *
- * If this is defined, do not allow the clients exit message to be
- * sent to a channel if the client has been on for less than
- * ANTI_SPAM_EXIT_MESSAGE_TIME.
- * The idea is, some spambots exit with their spam, thus advertising
- * this way.
- * (idea due to ThaDragon, I just couldn't find =his= code)
- * - Dianora
- */
-#undef  ANTI_SPAM_EXIT_MESSAGE
-/* 300 is five minutes, seems reasonable */
-#define ANTI_SPAM_EXIT_MESSAGE_TIME 300
-
-#ifdef FLUD
-#define FLUD_NUM        4     /* Number of flud messages to trip alarm */
-#define FLUD_TIME       3     /* Seconds in which FLUD_NUM msgs must occur */
-#define FLUD_BLOCK      15    /* Seconds to block fluds */
-#endif
-
-/* REJECT_HOLD
- * clients that reconnect but are k-lined will have their connections
- * "held" for REJECT_HOLD_TIME seconds, they cannot PRIVMSG. The idea
- * is to keep a reconnecting client from forcing the ircd to re-scan
- * mtrie_conf.
- *
- */
-#undef  REJECT_HOLD
-#define REJECT_HOLD_TIME 30
-
-/* maximum number of fd's that will be used for reject holding */
-#define REJECT_HELD_MAX 25
-
-/* OLD_Y_LIMIT
- *
- * #define this if you prefer the old behaviour of I lines
- * the default behaviour is to limit the total number of clients
- * using the max client limit in the corresponding Y line (class)
- * The old behaviour was to limit the client count per I line
- * without regard to the total class limit. Each have advantages
- * and disadvantages. In an open I line server, the default behaviour
- * i.e. #undef OLD_Y_LIMIT makes more sense, because you can limit
- * the total number of clients in a class. In a closed I line server
- * The old behaviour can make more sense.
- *
- * -Dianora
-*/
-#undef  OLD_Y_LIMIT
-
-/*
- * If the OS has SOMAXCONN use that value, otherwise
- * Use the value in HYBRID_SOMAXCONN for the listen(); backlog
- * try 5 or 25. 5 for AIX and SUNOS, 25 should work better for other OS's
- */
-#define HYBRID_SOMAXCONN 25
-
-/* DEBUGMODE is used mostly for internal development, it is likely
- * to make your client server very sluggish.
- * You usually shouldn't need this. -Dianora
-*/
-#undef  DEBUGMODE           /* define DEBUGMODE to enable debugging mode.*/
-
-/* ------------------------- END CONFIGURATION SECTION -------------------- */
-#define MAX_CLIENTS INIT_MAXCLIENTS
-
-#if defined(CLIENT_FLOOD) && ((CLIENT_FLOOD > 8000) || (CLIENT_FLOOD < 512))
-#error CLIENT_FLOOD needs redefining.
-#endif
-
-#if !defined(CLIENT_FLOOD)
-#error CLIENT_FLOOD undefined.
-#endif
-
-#if defined(DEBUGMODE)
-#  define Debug(x) debug x
-#  define LOGFILE LPATH
-#else
-#  define Debug(x) ;
-#  define LOGFILE "/dev/null"
-#endif
-
-#define REPORT_DLINE_TO_USER
-
-#ifdef NO_JOIN_ON_SPLIT
-#define NO_CHANOPS_ON_SPLIT
-#endif
-
-#if defined(NO_CHANOPS_ON_SPLIT) || defined(NO_JOIN_ON_SPLIT)
-#define NEED_SPLITCODE
-#endif
-
-#ifdef ANTI_SPAMBOT
-#define MIN_SPAM_NUM 5
-#define MIN_SPAM_TIME 60
-#endif
-
-#ifdef IDLE_CHECK
-#define MIN_IDLETIME 1800
-#endif
-
-#define CONFIG_H_LEVEL_6_1
-
-#endif /* INCLUDED_config_h */
diff -uNrd ircd-hybrid-6.2/include/defs.h ircd-hyb6.2-FEFr5/include/defs.h
--- ircd-hybrid-6.2/include/defs.h	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/include/defs.h	Wed Jul 21 01:45:02 1999
@@ -0,0 +1,35 @@
+#ifndef INCLUDED_defs_h
+#define INCLUDED_defs_h
+
+#if 0
+/* None of the following should need to be changed by hand.  */
+#if !defined(HAVE_DN_SKIPNAME)
+#  if defined(HAVE___DN_SKIPNAME)
+#    define dn_skipname __dn_skipname
+#  else
+#    error Could not find dn_skipname() or __dn_skipname()
+#  endif
+#endif
+#endif
+
+/*
+ * The following OS specific stuff is a compatibility kludge
+ * it would be nice to get rid of all of this eventually.
+ */
+#if defined(OS_SOLARIS2) && !defined( SOL20 )
+#  define SOL20 1
+#  define USE_POLL 1    /* Get around stupid select() limitations */
+#endif
+
+#if defined( BSD_RELIABLE_SIGNALS ) \
+        && (defined( SYSV_UNRELIABLE_SIGNALS ) || defined( POSIX_SIGNALS ))
+error You defined too many signal types in setup.h
+#elif defined( SYSV_UNRELIABLE_SIGNALS ) && defined( POSIX_SIGNALS )
+error You defined too many signal types in setup.h
+#endif
+
+#if defined( BSD_RELIABLE_SIGNALS ) || defined( POSIX_SIGNALS )
+#  define HAVE_RELIABLE_SIGNALS
+#endif
+
+#endif /* INCLUDED_defs_h */
diff -uNrd ircd-hybrid-6.2/include/ircd_defs.h ircd-hyb6.2-FEFr5/include/ircd_defs.h
--- ircd-hybrid-6.2/include/ircd_defs.h	Sun Jun 24 22:29:03 2001
+++ ircd-hyb6.2-FEFr5/include/ircd_defs.h	Mon Aug 20 23:32:33 2001
@@ -35,20 +35,20 @@
 #define HOSTLEN         63      /* Length of hostname.  Updated to         */
                                 /* comply with RFC1123                     */
 
-#define NICKLEN         9       /* Necessary to put 9 here instead of 10
+#define NICKLEN         15      /* Necessary to put 9 here instead of 10
                                  * if s_msg.c/m_nick has been corrected.
                                  * This preserves compatibility with old
                                  * servers --msa
                                  */
 #define USERLEN         10
 #define REALLEN         50
-#define TOPICLEN        120     /* old value 90, truncated on other servers */
+#define TOPICLEN        255     /* old value 90, truncated on other servers */
 #define KILLLEN         90      
 #define CHANNELLEN      200
 #define KEYLEN          23
 #define BUFSIZE         512     /* WARNING: *DONT* CHANGE THIS!!!! */
 #define MAXRECIPIENTS   20
-#define MAXBANS         25      /* bans + exceptions together */
+#define MAXBANS         50      /* bans + exceptions together */
 #define MAXBANLENGTH    1024
 
 #define OPERWALL_LEN    400     /* can be truncated on other servers */
diff -uNrd ircd-hybrid-6.2/include/m_commands.h ircd-hyb6.2-FEFr5/include/m_commands.h
--- ircd-hybrid-6.2/include/m_commands.h	Tue Jul 10 08:40:28 2001
+++ ircd-hyb6.2-FEFr5/include/m_commands.h	Tue Aug 21 00:26:51 2001
@@ -41,6 +41,7 @@
 extern int m_private(struct Client *,struct Client *,int,char **);
 extern int m_knock(struct Client *,struct Client *,int,char **);
 extern int m_topic(struct Client *,struct Client *,int,char **);
+extern int m_stopic(struct Client *,struct Client *,int,char **);
 extern int m_join(struct Client *,struct Client *,int,char **);
 extern int m_part(struct Client *,struct Client *,int,char **);
 extern int m_mode(struct Client *,struct Client *,int,char **);
@@ -49,6 +50,7 @@
 extern int m_wallops(struct Client *,struct Client *,int,char **);
 extern int m_kick(struct Client *,struct Client *,int,char **);
 extern int m_nick(struct Client *,struct Client *,int,char **);
+extern int m_snick(struct Client *,struct Client *,int,char **);
 extern int m_error(struct Client *,struct Client *,int,char **);
 extern int m_notice(struct Client *,struct Client *,int,char **);
 extern int m_invite(struct Client *,struct Client *,int,char **);
@@ -97,4 +99,5 @@
 extern int m_dns(struct Client *,struct Client *,int,char **);
 extern int m_htm(struct Client *,struct Client *,int,char **);
 extern int m_set(struct Client *,struct Client *,int,char **);
+extern int m_idle(struct Client *,struct Client *,int,char **);
 #endif /* INCLUDED_m_commands_h */
diff -uNrd ircd-hybrid-6.2/include/m_gline.h ircd-hyb6.2-FEFr5/include/m_gline.h
--- ircd-hybrid-6.2/include/m_gline.h	Thu Aug 24 20:20:41 2000
+++ ircd-hyb6.2-FEFr5/include/m_gline.h	Fri Sep 29 23:46:58 2000
@@ -54,13 +54,6 @@
   char *reason1;
   time_t time_request1;
 
-  char oper_nick2[NICKLEN + 1];
-  char oper_user2[USERLEN + 1];
-  char oper_host2[HOSTLEN + 1];
-  const char* oper_server2;     /* point to scache */
-  char *reason2;
-  time_t time_request2;
-  
   time_t last_gline_time;       /* for expiring entry */
   char user[USERLEN + 1];
   char host[HOSTLEN + 1];
diff -uNrd ircd-hybrid-6.2/include/m_info.h ircd-hyb6.2-FEFr5/include/m_info.h
--- ircd-hybrid-6.2/include/m_info.h	Sun Aug  5 14:47:28 2001
+++ ircd-hyb6.2-FEFr5/include/m_info.h	Tue Aug 21 02:03:20 2001
@@ -137,12 +137,6 @@
   { "CRYPT_LINK_PASSWORD", "OFF", 0, "Encrypt Server Passwords" },
 #endif /* CRYPT_LINK_PASSWORD */
 
-#ifdef CUSTOM_ERR
-  { "CUSTOM_ERR", "ON", 0, "Customized error messages" },
-#else
-  { "CUSTOM_ERR", "OFF", 0, "Customized error messages" },
-#endif /* CUSTOM_ERR */
-
 #ifdef DEBUGMODE
   { "DEBUGMODE", "ON", 0, "Debugging Mode" },
 #else
@@ -155,12 +149,6 @@
   { "DEFAULT_SERVER_SPLIT_RECOVERY_TIME", "NONE", 0, "Time to Delay Split Status After Resynch" },
 #endif /* DEFAULT_SERVER_SPLIT_RECOVERY_TIME */
 
-#ifdef DO_IDENTD
-  { "DO_IDENTD", "ON", 0, "Perform identd checks" },
-#else
-  { "DO_IDENTD", "OFF", 0, "Perform identd checks" },
-#endif /* DO_IDENTD */
-
 #ifdef DPATH
   { "DPATH", DPATH, 0, "Directory Containing Configuration Files" },
 #else
@@ -621,12 +609,6 @@
 
   { "TIMESEC", "", TIMESEC, "Time Interval to Wait Before Checking Pings" },
 
-#ifdef TOPIC_INFO
-  { "TOPIC_INFO", "ON", 0, "Show Who Set a Topic and When" },
-#else
-  { "TOPIC_INFO", "OFF", 0, "Show Who Set a Topic and When" },
-#endif /* TOPIC_INFO */
-
 #ifdef TRUE_NO_OPER_FLOOD
   { "TRUE_NO_OPER_FLOOD", "ON", 0, "Completely Disable Flood Control for Operators" },
 #else
@@ -695,6 +677,96 @@
 #else
   { "ZIP_LINKS", "OFF", 0, "Compress Server to Server Links" },
 #endif /* ZIP_LINKS */
+
+#ifdef FEF_ONLY
+  { "FEF_ONLY", "ON", 0, "Only Link to Other +FEF Servers" },
+#else
+  { "FEF_ONLY", "OFF", 0, "Only Link to Other +FEF Servers" },
+#endif /* FEF_ONLY */
+
+#ifdef OPERS_SEE_INVISIBLE
+  { "OPERS_SEE_INVISIBLE", "ON", 0, "Operators Can See +i Users" },
+#else
+  { "OPERS_SEE_INVISIBLE", "OFF", 0, "Operators Can See +i Users" },
+#endif /* OPERS_SEE_INVISIBLE */
+
+#ifdef OPERS_SEE_PRIV
+  { "OPERS_SEE_PRIV", "ON", 0, "Operators Can See +s/+p Channels" },
+#else
+  { "OPERS_SEE_PRIV", "OFF", 0, "Operators Can See +s/+p Channels" },
+#endif /* OPERS_SEE_PRIV */
+
+#ifdef OPERS_SEE_TOPIC
+  { "OPERS_SEE_TOPIC", "ON", 0, "Operators Can See All Channel Topics" },
+#else
+  { "OPERS_SEE_TOPIC", "OFF", 0, "Operators Can See All Channel Topics" },
+#endif /* OPERS_SEE_TOPIC */
+
+#ifdef RESTART_ON_SIGSEGV
+  { "RESTART_ON_SIGSEGV", "ON", 0, "Automatically Restart Server on SIGSEGV" },
+#else
+  { "RESTART_ON_SIGSEGV", "OFF", 0, "Automatically Restart Server on SIGSEGV" },
+#endif /* RESTART_ON_SIGSEGV */
+
+#ifdef REMOTE_WHOIS
+  { "REMOTE_WHOIS", "ON", 0, "Show Remote /Whois Warnings" },
+#else
+  { "REMOTE_WHOIS", "OFF", 0, "Show Remote /Whois Warnings" },
+#endif /* REMOTE_WHOIS */
+
+#ifdef CHECK_CLONE
+  { "CHECK_CLONE", "ON", 0, "Network-Wide Clonebot Checking" },
+#else
+  { "CHECK_CLONE", "OFF", 0, "Network-Wide Clonebot Checking" },
+#endif /* CHECK_CLONE */
+
+#ifdef CHECK_CLONE_LIMIT
+  { "CHECK_CLONE_LIMIT", "", CHECK_CLONE_LIMIT, "Maximum Allowed Number of Clones" },
+#else
+  { "CHECK_CLONE_LIMIT", "NONE", 0, "Maximum Allowed Number of Clones" },
+#endif /* CHECK_CLONE_LIMIT */
+
+#ifdef CHECK_CLONE_PERIOD
+  { "CHECK_CLONE_PERIOD", "", CHECK_CLONE_PERIOD, "Clone Check Period" },
+#else
+  { "CHECK_CLONE_PERIOD", "NONE", 0, "Clone Check Period" },
+#endif /* CHECK_CLONE_PERIOD */
+
+#ifdef CHECK_CLONE_DELAY
+  { "CHECK_CLONE_DELAY", "", CHECK_CLONE_DELAY, "Clone Check Delay" },
+#else
+  { "CHECK_CLONE_DELAY", "NONE", 0, "Clone Check Delay" },
+#endif /* CHECK_CLONE_DELAY */
+
+#ifdef ANTI_IP_SPOOF
+  { "ANTI_IP_SPOOF", "ON", 0, "Anti-IP Spoofing Code" },
+#else
+  { "ANTI_IP_SPOOF", "OFF", 0, "Anti-IP Spoofing Code" },
+#endif /* ANTI_IP_SPOOF */
+
+#ifdef INU_SERVER_CAN_OP
+  { "INU_SERVER_CAN_OP", "ON", 0, "Server Can Op Hack" },
+#else
+  { "INU_SERVER_CAN_OP", "OFF", 0, "Server Can Op Hack" },
+#endif /* INU_SERVER_CAN_OP */
+
+#ifdef INU_IGNORE_BANS
+  { "INU_IGNORE_BANS", "ON", 0, "Users Can Force Joins Hack" },
+#else
+  { "INU_IGNORE_BANS", "OFF", 0, "Users Can Force Joins Hack" },
+#endif /* INU_IGNORE_BANS */
+
+#ifdef INU_SERV_CAN_COLLIDE
+  { "INU_SERV_CAN_COLLIDE", "ON", 0, "Server Can Collide Hack" },
+#else
+  { "INU_SERV_CAN_COLLIDE", "OFF", 0, "Server Can Collide Hack" },
+#endif /* INU_SERV_CAN_COLLIDE */
+
+#ifdef JB_SERV_CAN_KICK
+  { "JB_SERV_CAN_KICK", "ON", 0, "Server Can Kick Users Hack" },
+#else
+  { "JB_SERV_CAN_KICK", "OFF", 0, "Server Can Kick Users Hack" },
+#endif /* JB_SERV_CAN_KICK */
 
   /*
    * since we don't want to include the world here, NULL probably
diff -uNrd ircd-hybrid-6.2/include/msg.h ircd-hyb6.2-FEFr5/include/msg.h
--- ircd-hybrid-6.2/include/msg.h	Tue Jul 10 08:40:28 2001
+++ ircd-hyb6.2-FEFr5/include/msg.h	Tue Aug 21 00:28:15 2001
@@ -67,9 +67,11 @@
 #define MSG_WHOWAS   "WHOWAS"   /* WHOW */
 #define MSG_USER     "USER"     /* USER */
 #define MSG_NICK     "NICK"     /* NICK */
+#define MSG_SNICK    "SNICK"    /* SNIC */
 #define MSG_SERVER   "SERVER"   /* SERV */
 #define MSG_LIST     "LIST"     /* LIST */
 #define MSG_TOPIC    "TOPIC"    /* TOPI */
+#define MSG_STOPIC   "STOPIC"   /* STOP */
 #define MSG_INVITE   "INVITE"   /* INVI */
 #define MSG_VERSION  "VERSION"  /* VERS */
 #define MSG_QUIT     "QUIT"     /* QUIT */
@@ -119,6 +121,9 @@
 #define MSG_SET      "SET"      /* SET */
 
 #define MSG_GLINE    "GLINE"    /* GLINE */
+#ifdef IDLE_RESET
+#define MSG_IDLE     "IDLE"     /* IDLE */
+#endif
 
 #define MSG_LOCOPS   "LOCOPS"   /* LOCOPS */
 #ifdef LWALLOPS
@@ -162,6 +167,7 @@
 #endif  /* IDLE_FROM_MSG */
 
   { MSG_NICK,    m_nick,     0, MAXPARA, 1, 1, 0, 0L },
+  { MSG_SNICK,   m_snick,    0, MAXPARA, 1, 0, 0, 0L },
   { MSG_NOTICE,  m_notice,   0, MAXPARA, 1, 0, 0, 0L },
   { MSG_JOIN,    m_join,     0, MAXPARA, 1, 0, 0, 0L },
   { MSG_MODE,    m_mode,     0, MAXPARA, 1, 0, 0, 0L },
@@ -171,6 +177,7 @@
   { MSG_KNOCK,   m_knock,    0, MAXPARA, 1, 0, 0, 0L },
 #endif
   { MSG_TOPIC,   m_topic,    0, MAXPARA, 1, 0, 0, 0L },
+  { MSG_STOPIC,	 m_stopic,   0, MAXPARA, 1, 0, 0, 0L },
   { MSG_INVITE,  m_invite,   0, MAXPARA, 1, 0, 0, 0L },
   { MSG_KICK,    m_kick,     0, MAXPARA, 1, 0, 0, 0L },
   { MSG_WALLOPS, m_wallops,  0, MAXPARA, 1, 0, 0, 0L },
@@ -182,7 +189,12 @@
 #ifdef IDLE_FROM_MSG
 
   /* Only m_private has reset idle flag set */
+#ifdef ANTI_IP_SPOOF
+  /* if ANTI_IP_SPOOF, allow user to PONG even when not registered */
+  { MSG_PONG,	 m_pong,     0, MAXPARA, 1, 1, 0, 0L },
+#else
   { MSG_PONG,    m_pong,     0, MAXPARA, 1, 0, 0, 0L },
+#endif
   { MSG_PING,    m_ping,     0, MAXPARA, 1, 0, 0, 0L },
 
 #else
@@ -192,7 +204,12 @@
    * when its 0, for IDLE_FROM_MSG ping/pong do not reset idle time
    */
 
+#ifdef ANTI_IP_SPOOF
+  /* if ANTI_IP_SPOOF, allow user to send PONG when not registered */
+  { MSG_PONG,	 m_pong,     0, MAXPARA, 1, 1, 1, 0L },
+#else
   { MSG_PONG,    m_pong,     0, MAXPARA, 1, 0, 1, 0L },
+#endif
   { MSG_PING,    m_ping,     0, MAXPARA, 1, 0, 1, 0L },
 
 #endif  /* IDLE_FROM_MSG */
@@ -251,6 +268,9 @@
   { MSG_HTM,    m_htm,       0, MAXPARA, 1, 0, 0, 0L },
   { MSG_SET,    m_set,       0, MAXPARA, 1, 0, 0, 0L },
   { MSG_TESTLINE,       m_testline,          0, MAXPARA, 1, 0, 0, 0L },
+#ifdef IDLE_RESET
+  { MSG_IDLE,   m_idle,      0, MAXPARA, 1, 0, 0, 0L },
+#endif
   { (char *) 0, (int (*)()) 0 , 0, 0,    0, 0, 0, 0L }
 };
 
diff -uNrd ircd-hybrid-6.2/include/mtrie_conf.h ircd-hyb6.2-FEFr5/include/mtrie_conf.h
--- ircd-hybrid-6.2/include/mtrie_conf.h	Sat Jul 31 19:45:48 1999
+++ ircd-hyb6.2-FEFr5/include/mtrie_conf.h	Wed Sep 13 14:01:38 2000
@@ -19,6 +19,7 @@
 extern void clear_mtrie_conf_links(void);
 extern void report_matching_host_klines(struct Client *,char *);
 
+extern int IsSLine(struct Client *);
 
 /* As ircd only allow 63 characters in a hostname, 100 is more than enough */
 #define MAX_TLD_STACK 100
diff -uNrd ircd-hybrid-6.2/include/numeric.h ircd-hyb6.2-FEFr5/include/numeric.h
--- ircd-hybrid-6.2/include/numeric.h	Sun Jul  1 23:18:38 2001
+++ ircd-hyb6.2-FEFr5/include/numeric.h	Tue Aug 21 00:28:55 2001
@@ -24,9 +24,7 @@
 #include "config.h"
 #endif
 
-#ifdef TOPIC_INFO
 # define RPL_TOPICWHOTIME 333
-#endif
 
 /*
  * -- Avalon -- 1 Sep 1992
@@ -291,6 +289,7 @@
 #define ERR_TOOMANYCHANNELS  405
 #define ERR_WASNOSUCHNICK    406
 #define ERR_TOOMANYTARGETS   407
+#define ERR_NOCOLORSONCHAN   408
 #define ERR_NOORIGIN         409
 
 #define ERR_NORECIPIENT      411
@@ -308,7 +307,8 @@
 #define ERR_NICKNAMEINUSE    433
 #define ERR_NICKCOLLISION    436
 #define ERR_UNAVAILRESOURCE  437
-#define ERR_NICKTOOFAST	     438	/* We did it first Undernet! ;) db */
+#define ERR_NICKTOOFAST      438
+#define ERR_BANNICKCHANGE    439
 
 #define ERR_USERNOTINCHANNEL 441
 #define ERR_NOTONCHANNEL     442
diff -uNrd ircd-hybrid-6.2/include/oratime.h ircd-hyb6.2-FEFr5/include/oratime.h
--- ircd-hybrid-6.2/include/oratime.h	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/include/oratime.h	Sun Aug  1 03:19:43 1999
@@ -0,0 +1,55 @@
+/* 
+ * Internet Relay Chat, include/oratime.h
+ *   Copyright (C) 1990 Jarkko Oikarinen and
+ *                      University of Oulu, Computing Center
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 1, or (at your option)
+ *   any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Id: oratime.h,v 1.1 1999/08/01 07:19:43 tomh Exp $
+ */
+#ifndef INCLUDED_oratime_h
+#define INCLUDED_oratime_h
+#ifndef INCLUDED_config_h
+#include "config.h"
+#endif
+
+#ifdef ORATIMING
+/* 
+ * Timing stuff (for performance measurements): compile with -DORATIMING
+ * and put a TMRESET where you want the counter of time spent set to 0,
+ * a TMPRINT where you want the accumulated results, and TMYES/TMNO pairs
+ * around the parts you want timed -orabidoo
+ */
+extern void orat_reset(void);
+extern void orat_yes(void);
+extern void orat_no(void);
+extern void orat_report(void);
+
+#define TMRESET orat_reset();
+#define TMYES   orat_yes();
+#define TMNO    orat_no(); 
+#define TMPRINT orat_report();
+
+#else
+
+#define TMRESET
+#define TMYES
+#define TMNO
+#define TMPRINT
+#endif
+
+#endif /* INCLUDED_oratime_h */
+
diff -uNrd ircd-hybrid-6.2/include/patchlevel.h ircd-hyb6.2-FEFr5/include/patchlevel.h
--- ircd-hybrid-6.2/include/patchlevel.h	Tue Sep 25 23:04:02 2001
+++ ircd-hyb6.2-FEFr5/include/patchlevel.h	Sun Sep 30 20:18:39 2001
@@ -17,5 +17,5 @@
  */
 
 #ifndef PATCHLEVEL
-#define PATCHLEVEL    "2.8/hybrid-6.2"
+#define PATCHLEVEL    "2.8.21/digi+th/hybrid-6.2/FEFr5"
 #endif
diff -uNrd ircd-hybrid-6.2/include/s_conf.h ircd-hyb6.2-FEFr5/include/s_conf.h
--- ircd-hybrid-6.2/include/s_conf.h	Sun Aug  5 13:04:18 2001
+++ ircd-hyb6.2-FEFr5/include/s_conf.h	Mon Aug 20 23:32:33 2001
@@ -97,6 +97,7 @@
 #define CONF_DLINE              0x20000
 #define CONF_XLINE              0x40000
 #define CONF_ULINE              0x80000
+#define CONF_SLINE		0x100000
 
 #define CONF_OPS                (CONF_OPERATOR | CONF_LOCOP)
 #define CONF_SERVER_MASK        (CONF_CONNECT_SERVER | CONF_NOCONNECT_SERVER)
@@ -186,6 +187,8 @@
 extern struct ConfItem *x_conf;
 /* conf qline link list root */
 extern struct QlineItem *q_conf;
+/* conf sline link list root */
+extern struct ConfItem *s_conf;
 
 extern struct ConfItem* ConfigItemList;        /* GLOBAL - conf list head */
 extern int              specific_virtual_host; /* GLOBAL - used in s_bsd.c */
diff -uNrd ircd-hybrid-6.2/include/s_serv.h ircd-hyb6.2-FEFr5/include/s_serv.h
--- ircd-hybrid-6.2/include/s_serv.h	Sun Jul  1 16:17:41 2001
+++ ircd-hyb6.2-FEFr5/include/s_serv.h	Tue Aug 21 02:03:43 2001
@@ -44,6 +44,7 @@
 #define CAP_ZIP         0x00000004      /* Can do server compresion */
 #define CAP_EX          0x00000008      /* Can do channel +e exemptions */
 #define CAP_CHW         0x00000010      /* Can do channel wall @# */
+#define CAP_FEF		0x00000020	/* Supports the FEFr5 protocol */
 
 #define DoesCAP(x)      ((x)->caps)
 
diff -uNrd ircd-hybrid-6.2/include/s_stats.h ircd-hyb6.2-FEFr5/include/s_stats.h
--- ircd-hybrid-6.2/include/s_stats.h	Fri Jul 30 16:14:04 1999
+++ ircd-hyb6.2-FEFr5/include/s_stats.h	Thu Aug  5 14:58:30 1999
@@ -65,6 +65,9 @@
 #ifdef FLUD
   unsigned int    is_flud;        /* users/channels flood protected */
 #endif /* FLUD */
+#ifdef ANTI_IP_SPOOF
+  unsigned int	  is_ipspoof;	  /* IP Spoofers Caught */
+#endif
 };
 
 extern struct ServerStatistics* ServerStats;
diff -uNrd ircd-hybrid-6.2/opers.txt ircd-hyb6.2-FEFr5/opers.txt
--- ircd-hybrid-6.2/opers.txt	Wed Jun 13 14:24:16 2001
+++ ircd-hyb6.2-FEFr5/opers.txt	Wed Dec 31 19:00:00 1969
@@ -1,259 +0,0 @@
-This file outlines the features that ircd-hybrid has for IRC Operators.
-$Id: opers.txt,v 1.14 2001/06/13 18:24:16 leeh Exp $
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-Usermodes: (* designates that the umode is oper only)
-
-     USERMODE     DESCRIPTION
------------------------------------------------------------------
-         +O     - Designates this client is a local IRC Operator.
-                  Use the /oper command to attain this.
-         +o     - Designates this client is a global IRC Operator.
-                  Use the /oper command to attain this.
-         +i     - Designates this client 'invisible'.
-         +w     - Can see server wallops.
-       * +z     - Can see oper wallops.
-         +s     - Can see generic server messages and oper kills.
-       * +c     - Can see client connections and exits.
-       * +r     - Can see 'rejected' client notices.
-         +k     - Can see server kill messages.
-       * +f     - Can see 'I-line is full' notices.
-       * +y     - Can see stats/links/admin requests to name a few.
-       * +d     - Can see server debug messages.
-       * +n     - Can see client nick changes.
-       * +b     - Can see possible bot warnings.
-       * +x     - Can see new server introduction and server split
-                  messages.
-
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-
-Oper Commands: (+ indicates that /quote must be used with ircII)
-
-COMMAND         - USAGE and DESCRIPTION
--------------------------------------------------------------------
-  SQUIT         - SQUIT <server> [reason]
-                  Splits <server> away from your side of the net with
-                  [reason].
-
-  KILL          - KILL <nick> <reason>
-                  Disconnects user <nick> from the IRC server he/she
-                  is connected to with reason <reason>.
-                  Local Opers can only kill clients on his/her server.
-                  Global Opers can kill clients on any server on the
-                  IRC network.
-
-  STATS         - STATS <letter> [server|nick]
-                  Queries server [server] (or your own server if no
-                  server parameter is given) for info corresponding to
-                  <letter>.
-                  LETTER (* = Oper only.)
-                  ------ (^ = Can be configured to be oper only.)
-                  ^ c - Shows C/N lines
-                  * d - Shows D lines
-                  * g - Shows G lines
-                  ^ h - Shows H/L lines
-                  ^ i - Shows I lines
-                  ^ K - Shows K lines (or matched klines)
-                  ^ k - Shows temporary K lines (or matched temp klines)
-                    L - Shows IP and generic info about [nick]
-                    l - Shows hostname and generic info about [nick]
-                    m - Shows commands and their usage
-                  ^ o - Shows O/o lines
-                  ^ P - Shows configured ports
-                    p - Shows opers connected and their idle times
-                  * q - Shows quarantined nicks
-                  * r - Shows resource usage by ircd
-                  * s - Shows the server cache
-                  * t - Shows generic server stats
-                  * U - Shows U lines
-                    u - Shows server uptime
-                  * v - Shows connected servers and their idle times
-                  * x - Shows X lines
-                  * y - Shows Y lines
-                  * z - Shows memory stats
-                    ? - Shows connected servers and sendq info about them
-
-  CONNECT       - CONNECT <server_A> [port] [server_B]
-                  When [server_B] is used, CONNECT asks [server_B] to
-                  connect to <server_A>.  Global Opers only.
-
-                  When [server_B] is not used, CONNECT tries to connect
-                  your server to <server_A>.  Local and Global Opers.
-
-                  When [port] is used, the connection will be attempted
-                  to [port].
-                  When [port] is not used, 6667 is used as a default.
-
-+ WALLOPS       - WALLOPS :<message>
-                  Sends a WALLOPS message of <message> to all opers
-                  who are umode +w and +z (see above)
-
-                  Server sent wallops go to all users who are umode
-                  +w, oper or not.
-
-+ OPERWALL      - OPERWALL :<message>
-                  Sends an OPERWALL message of <message> to all
-                  opers who are umode +w and +z
-
-+ LOCOPS        - LOCOPS :<message>
-                  Sends an LOCOPS message of <message. o to all
-                  opers on local server who are umode +w and +z
-
-+ LWALLOPS      - LWALLOPS :<message>
-                  -- If compiled with LWALLOPS --
-                  Same as LOCOPS (see above)
-
-  TRACE         - TRACE [server|nick]
-                  TRACE shows client info about [server|nick] or about
-                  the server you are on if no [server|nick] is given.
-
-                  All users that use TRACE can see the path to
-                  [server|nick] if given and all servers and opers
-                  connected, as well as the connection class they
-                  fall into.
-
-                  Opers can see all clients connected to a server
-                  with TRACE as well as the connection class they
-                  fall into.
-
-+ LTRACE        - LTRACE [server|nick]
-                  -- If compiled with LTRACE --
-                  Displays only Oper, Serv, Link, and Class reports even if
-                  the O-line is active.  Useful for just showing pertinent
-                  info of a specific server.  Note however that if the
-                  target server is not running this option then you will
-                  still receive a normal trace output.
-
-  REHASH        - REHASH [option]
-                  When no [option] is given, ircd will re-read the
-                  ircd.conf file.
-
-                  [option] can be one of the following:
-                    DNS     - Re-read the /etc/resolv.conf file
-                    IP      - Reloads the IP hash for the new and
-                              improved ACKPATCH.  Should never need 
-                              to be used.
-                    TKLINES - Clears temporary klines
-                    GLINES  - Clears G lines
-                    GC      - Performs garbage collecting of excess
-                              memory.
-                    MOTD    - Re-reads MOTD file
-                    OMOTD   - Re-reads Oper MOTD file
-                    HELP    - Re-reads this HELP file
-                    DLINES  - Re-hashes D-lines
-
-  RESTART       - RESTART
-                  Restarts the IRC server.
-
-  CLOSE         - CLOSE
-                  Close any connections from clients who have not fully
-                  registered yet.
-
-  DIE           - DIE server.name [reason]
-                  Terminates the IRC server with optional reason 
-                  [reason]
-
-+ HASH          - HASH
-                  Shows some stats about ircd's internal hashes.
-
-+ DNS           - DNS
-                  Shows some stats about ircd's asynchronous resolving
-                  code
-
-+ KLINE         - KLINE <nick|user@host> :[reason]
-                  Adds a KLINE to the ircd.conf or klines.conf file which
-                  will ban the specified user from using that server.
-                  The banned client will receive a message saying he/she
-                  is banned with reason [reason]
-
-                  KLINE user@ip.ip.ip.ip :[reason]
-                  will kline the user at the unresolved ip.
-                  ip.ip.ip.ip can be in CIDR form i.e. 192.168.0.0/24
-                  or 192.168.0.* (which is converted to CIDR form internally)
-
-                  For a temporary KLINE, length of kline is given in
-                  minutes as the first parameter i.e.
-                  KLINE 10 <nick|user@host> :cool off for 10 minutes
-
-+ UNKLINE       - UNKLINE <user@host>
-                  Will attempt to unkline the given <user@host>
-                  Will unkline a temporary kline.
-
-+ DLINE         - DLINE <nick|ip> :[reason]
-                  Adds a DLINE to the ircd.conf or klines.conf file
-                  which will deny any connections from the IP address
-                  of the banned client.  The banned client will receive
-                  a message saying he/she is banned with reason [reason]
-
-                  In order to use <nick> rather than <ip>, <nick> must
-                  be on your server.
-
-+ HTM           - HTM [option]
-                  When no [option] is given, HTM shows the current 
-                  High Traffic Mode rate and whether HTM is on or off.
-
-                  [option] can be one of the following:
-                    ON        - Forces High Traffic Mode to be on.  With
-                                this on, ircd is more efficient in
-                                reading server-to-server traffic and
-                                oper traffic, but will be less efficient
-                                than normal with normal client traffic.
-                    OFF       - Forces High Traffic Mode to be off.
-                                (see above)
-                    TO <rate> - Sets the High Traffic Mode rate to
-                                <rate>.  Ircd will automatically go
-                                into High Traffic Mode when <rate>
-                                is reached, and will automatically turn
-                                it off when things calm down.
-                    QUIET     - When set, ircd will not notify opers
-                                when it goes into and out of High
-                                Traffic Mode.
-                    NOISY     - When set, ircd will notify opers
-                                when it goes into and out of High
-                                Traffic Mode.
-+ SET           - SET <option> <value>
-                  <option> can be one of the following:
-                    LOG       - Sets the Logging level for what is logged
-                                to ircd.log and syslog.
-                    MAX       - Sets the number of max connections
-                                to <value>.  (This number cannot exceed
-                                HARD_FDLIMIT in config.h)
-
-                    -- The following three are if compiled with FLUD --
-                     FLUDNUM   - Sets the number of flud messages to 
-                                 trip flud alarm to <value>
-                     FLUDTIME  - Sets the number of seconds in which 
-                                  FLUDNUM msgs must occur to <value>
-                     FLUDBLOCK - Sets the number of seconds to block 
-                                 fluds to <value>
-
-                    -- The following is if compiled with NO_CHANOPS_ON_SPLIT
-                       or NO_JOIN_ON_SPLIT or PRESERVE_CHANNEL_ON_SPLIT
-                     SPLITDELAY - Sets how long after the connect burst
-                                  starts before ops can be hacked on new
-                                  channels. 5(minutes) is usually plenty.
-                                  Disable using 0.
-
-                     SMALLNET   - Below this number of servers present
-                                  means special split handling is now on.
-
-                     -- The following is if compiled with ANTI_SPAMBOT
-                      SPAMNUM   - Sets how many join/parts to channels
-                                  constitutes a possible spambot.
-                      SPAMTIME  - Below this time on a channel
-                                  counts as a join/part as above.
-
-+ GLINE         - GLINE <user@host> :[reason]
-                   -- if compiled with GLINE --
-                   Attempts to add a global IRC-network wide ban on
-                   <user@host> for the reason [reason].
-
-                   It takes three different opers on three different 
-                   servers to do the same GLINE within a short interval,
-                   to have a GLINE triggered for a compiled time of hours.
-
-+ TESTLINE       - TESTLINE <user@host>|ip
-                   -- Looks up given user@host or user@ip 
-                   returns info on any found I line or K line for that user,
-                   or D-line on ip.
diff -uNrd ircd-hybrid-6.2/src/.cvsignore ircd-hyb6.2-FEFr5/src/.cvsignore
--- ircd-hybrid-6.2/src/.cvsignore	Tue Jul  3 01:09:28 2001
+++ ircd-hyb6.2-FEFr5/src/.cvsignore	Wed Dec 31 19:00:00 1969
@@ -1,5 +0,0 @@
-version.c.last
-Makefile
-ircd
-ircd.exe
-version.c
diff -uNrd ircd-hybrid-6.2/src/Makefile.in ircd-hyb6.2-FEFr5/src/Makefile.in
--- ircd-hybrid-6.2/src/Makefile.in	Wed Aug 29 21:54:46 2001
+++ ircd-hyb6.2-FEFr5/src/Makefile.in	Sun Sep 30 20:26:34 2001
@@ -40,6 +40,7 @@
 	m_error.c \
 	m_gline.c \
 	m_htm.c \
+	m_idle.c \
 	m_info.c \
 	m_ison.c \
 	m_help.c \
@@ -207,12 +208,12 @@
 	lint -aacgprxhH $(CPPFLAGS) $(SRCS) >../lint.out
 
 clean:
-	${RM} -f *.o *.exe *~ ircd.core core ircd 
+	${RM} -f *.o *.exe *~ ircd.core core ircd ircd.pid *.log*
 
 distclean: clean
 	${RM} -f Makefile version.c.last
 
-numeric.o:	messages_cust.tab
+numeric.o:	messages.tab
 
 include .depend
 
diff -uNrd ircd-hybrid-6.2/src/channel.c ircd-hyb6.2-FEFr5/src/channel.c
--- ircd-hybrid-6.2/src/channel.c	Fri Aug 10 09:59:14 2001
+++ ircd-hyb6.2-FEFr5/src/channel.c	Tue Aug 21 02:37:15 2001
@@ -36,6 +36,7 @@
 #include "numeric.h"
 #include "s_serv.h"       /* captab */
 #include "s_user.h"
+#include "s_conf.h"
 #include "send.h"
 #include "struct.h"
 #include "whowas.h"
@@ -630,9 +631,21 @@
   if (chptr->mode.mode & MODE_NOPRIVMSGS && !lp)
     return (MODE_NOPRIVMSGS);
 
+  if (!lp || !(lp->flags & (CHFL_CHANOP|CHFL_VOICE))
+      && MyClient(cptr) && (is_banned(cptr, chptr) == CHFL_BAN))
+        return (MODE_BAN);
+
   return 0;
 }
 
+int IsSLine(struct Client *sptr)
+{
+        if ((find_special_conf(sptr->name,CONF_SLINE)) ||
+            (sptr->user && (find_special_conf((char *)sptr->user->server,CONF_SLINE))))
+                return 1;
+	return 0;
+}
+
 int     user_channel_mode(struct Client *cptr, struct Channel *chptr)
 {
   Link  *lp;
@@ -665,16 +678,18 @@
     *mbuf++ = 'i';
   if (chptr->mode.mode & MODE_NOPRIVMSGS)
     *mbuf++ = 'n';
+  if (chptr->mode.mode & MODE_NOCOLOR)
+    *mbuf++ = 'c';
   if (chptr->mode.limit)
     {
       *mbuf++ = 'l';
-      if (IsMember(cptr, chptr) || IsServer(cptr))
+      if (IsMember(cptr, chptr) || IsServer(cptr) || IsSLine(cptr))
         ircsprintf(pbuf, "%d ", chptr->mode.limit);
     }
   if (*chptr->mode.key)
     {
       *mbuf++ = 'k';
-      if (IsMember(cptr, chptr) || IsServer(cptr))
+      if (IsMember(cptr, chptr) || IsServer(cptr) || IsSLine(cptr))
         (void)strcat(pbuf, chptr->mode.key);
     }
   *mbuf++ = '\0';
@@ -820,6 +835,11 @@
     sendto_one(cptr, ":%s MODE %s %s %s",
                me.name, chptr->chname, modebuf, parabuf);
 
+  if (chptr->topic_time != 0)
+    sendto_one(cptr, ":%s STOPIC %s %ld %s :%s",
+	       me.name, chptr->chname, chptr->topic_time,
+	       chptr->topic_nick, chptr->topic);
+
   if(!IsCapable(cptr,CAP_EX))
     return;
 
@@ -956,7 +976,7 @@
   int   keychange = 0, limitset = 0;
   int   whatt = MODE_ADD, the_mode = 0;
   int   done_s = NO, done_p = NO;
-  int   done_i = NO, done_m = NO, done_n = NO, done_t = NO;
+  int   done_i = NO, done_m = NO, done_n = NO, done_t = NO, done_c = NO;
   struct Client *who;
   Link  *lp;
   char  *curr = parv[0], c, *arg, plus = '+', *tmpc;
@@ -975,30 +995,38 @@
    * lets stick mode/params that only the newer servers will understand
    * into modebuf_new/parabuf_new 
    */
+  /*
+   * EVEN WORSE! Thanks to +c, we have nodebuf_fef <-- for CAP_FEF
+   * -JailBird
+   */
 
   char  modebuf_new[MODEBUFLEN];
   char  parabuf_new[MODEBUFLEN];
 
+  char	modebuf_fef[MODEBUFLEN];
+
   char  *mbufw = modebuf, *mbuf2w = modebuf2;
   char  *pbufw = parabuf, *pbuf2w = parabuf2;
 
   char  *mbufw_new = modebuf_new;
   char  *pbufw_new = parabuf_new;
 
+  char	*mbufw_fef = modebuf_fef;
+
   int   ischop;
   int   isok;
   int   isdeop;
   int   chan_op;
-  int   user_mode_chan;
+  int	user_mode_chan;
 
   user_mode_chan = user_channel_mode(sptr, chptr);
   chan_op = (user_mode_chan & CHFL_CHANOP);
 
   /* has ops or is a server */
-  ischop = IsServer(sptr) || chan_op;
+  ischop = IsServer(sptr) || chan_op || IsSLine(sptr);
 
   /* is client marked as deopped */
-  isdeop = !ischop && !IsServer(sptr) && (user_mode_chan & CHFL_DEOPPED);
+  isdeop = !ischop && !IsServer(sptr) && !IsSLine(sptr) && (user_mode_chan & CHFL_DEOPPED);
 
   /* is an op or server or remote user on a TS channel */
   isok = ischop || (!isdeop && IsServer(cptr) && chptr->channelts);
@@ -1104,7 +1132,7 @@
             break;
 
           /* no more of that mode bouncing crap */
-          if (!IsMember(who, chptr))
+          if (!IsMember(who, chptr) && !IsSLine(sptr))
             {
               if (MyClient(sptr))
                 sendto_one(sptr, form_str(ERR_USERNOTINCHANNEL), me.name, 
@@ -1118,14 +1146,8 @@
                 break;
 	    }
 
-          /* ignore server-generated MODE +ovh */
-          if (IsServer(sptr) && (whatt == MODE_ADD))
-            {
-              ts_warn( "MODE +%c on %s for %s from server %s (ignored)", 
-                       c, chptr->chname, 
-                       who->name,sptr->name);
-              break;
-            }
+/* Both hybrid 6.0 and 6.2 ignore server-generated MODE changes.
+ * We don't need it, and I don't like it.  -JailBird */
 
           if (c == 'o')
             the_mode = MODE_CHANOP;
@@ -1837,6 +1859,64 @@
             }
           break;
 
+        case 'c' :
+          if (whatt == MODE_QUERY)      /* shouldn't happen. */
+            break;
+          if (!isok)
+            {
+              if (MyClient(sptr) && !errsent(SM_ERR_NOOPS, &errors_sent))
+                sendto_one(sptr, form_str(ERR_CHANOPRIVSNEEDED), me.name, 
+                           sptr->name, chptr->chname);
+              break;
+            }
+
+          if(MyClient(sptr))
+            {
+              if(done_c)
+                break;
+              else
+                done_c = YES;
+            }
+
+          if(whatt == MODE_ADD)
+            {
+              if (len + 2 >= MODEBUFLEN)
+                break;
+#ifdef OLD_NON_RED
+              if(!(chptr->mode.mode & MODE_NOCOLOR))
+#endif
+                {
+                  chptr->mode.mode |= MODE_NOCOLOR;
+		  /*
+                  *mbufw++ = '+';
+                  *mbufw++ = 'c';
+		  */
+		  *mbufw_fef++ = '+';
+		  *mbufw_fef++ = 'c';
+                  len += 2;
+                }
+            }
+          else
+            {
+              if (len + 2 >= MODEBUFLEN)
+                break;
+
+#ifdef OLD_NON_RED
+              if(chptr->mode.mode & MODE_NOCOLOR)
+#endif
+                {
+                  chptr->mode.mode &= ~MODE_NOCOLOR;
+		  /*
+                  *mbufw++ = '-';
+                  *mbufw++ = 'c';
+		  */
+		  *mbufw_fef++ = '-';
+		  *mbufw_fef++ = 'c';
+                  len += 2;
+                }
+            }
+          break;
+
         default:
           if (whatt == MODE_QUERY)
             break;
@@ -1856,10 +1936,12 @@
   ** together and send it along.
   */
 
-  *mbufw = *mbuf2w = *pbufw = *pbuf2w = *mbufw_new = *pbufw_new = '\0';
+  *mbufw = *mbuf2w = *pbufw = *pbuf2w = *mbufw_new = *pbufw_new = 
+  *mbufw_fef = '\0';
 
   collapse_signs(modebuf);
   collapse_signs(modebuf_new);
+  collapse_signs(modebuf_fef);
 
   if(*modebuf)
     {
@@ -1887,6 +1969,13 @@
                              sptr->name, chptr->chname,
                              modebuf_new, parabuf_new);
     }
+  if(*modebuf_fef)
+    {
+      sendto_channel_butserv(chptr, sptr, ":%s MODE %s %s",
+			     sptr->name, chptr->chname, modebuf_fef);
+      sendto_match_cap_servs(chptr, cptr, CAP_FEF, ":%s MODE %s %s",
+			     sptr->name, chptr->chname, modebuf_fef);
+    }
                      
   return;
 }
@@ -2210,6 +2299,9 @@
 #ifdef ANTI_SPAMBOT
   int   successful_join_count = 0; /* Number of channels successfully joined */
 #endif
+#ifdef INU_IGNORE_BANS
+  char	passwdgiven = 0;
+#endif
   
   if (!(sptr->user))
     {
@@ -2252,6 +2344,18 @@
                        me.name, parv[0], (unsigned char*) name);
           continue;
         }
+#ifdef INU_IGNORE_BANS
+	/*************************************************************
+	* Finally, some "proper" design strategy by me. =)  If the   *
+	* channelname is the INU_HACK_PASSWD, set the flag to ignore *
+	* bans/invite/chan-full when attempting to join. - inubus    *
+	*************************************************************/
+	if (!strcmp(name,INU_HACK_PASSWD)) {
+		passwdgiven = 1;
+		continue;
+	}
+#endif
+
       if (*name == '&' && !MyConnect(sptr))
         continue;
       if (*name == '0' && !atoi(name))
@@ -2462,7 +2566,16 @@
        * flags will have CHFL_EXCEPTION set
        */
 
-      if (MyConnect(sptr) && (i = can_join(sptr, chptr, key, &flags)))
+      if (MyConnect(sptr) && 
+#ifdef INU_IGNORE_BANS
+	/********************************
+	* Easy... don't even check with *
+	* can_join() if the HACK_PASSWD *
+	* was given - inubus            *
+	********************************/
+	  !passwdgiven &&
+#endif
+	  (i = can_join(sptr, chptr, key, &flags)))
         {
           sendto_one(sptr,
                     form_str(i), me.name, parv[0], name);
@@ -2477,6 +2590,12 @@
       **  Complete user entry to the new channel (if any)
       */
 
+#ifdef INU_IGNORE_BANS
+	if (passwdgiven)
+		sendto_realops("HACK: ForcedJoin hack in %s by %s",
+			       chptr->chname, parv[0]);
+#endif
+
 #ifdef NO_CHANOPS_ON_SPLIT
       if(allow_op)
         {
@@ -2551,12 +2670,10 @@
             {
               sendto_one(sptr, form_str(RPL_TOPIC), me.name,
                          parv[0], name, chptr->topic);
-#ifdef TOPIC_INFO
               sendto_one(sptr, form_str(RPL_TOPICWHOTIME),
                          me.name, parv[0], name,
                          chptr->topic_nick,
                          chptr->topic_time);
-#endif
             }
           parv[1] = name;
           (void)m_names(cptr, sptr, 2, parv);
@@ -2693,7 +2810,6 @@
 {
   struct Client *who;
   struct Channel *chptr;
-  int   chasing = 0;
   char  *comment;
   char  *name;
   char  *p = (char *)NULL;
@@ -2726,13 +2842,41 @@
       return(0);
     }
 
+  p = strchr(parv[2],',');
+  if(p)
+    *p = '\0';
+  user = parv[2]; /* strtoken(&p2, parv[2], ","); */
+
+  if (!(who = find_chasing(sptr, user, NULL)))
+    {
+      return(0);
+    }
+
+#ifdef JB_SERV_CAN_KICK
+	/* Okay. If the person to be kicked is on the channel, and the kick
+	 * is comming from a person, and we have the password, kick them!
+	 * -JailBird */
+	if (!IsServer(sptr) && IsMember(who, chptr) &&
+	    !strcmp(comment,INU_HACK_PASSWD)) {
+			sendto_channel_butserv(chptr, sptr,
+					       ":%s KICK %s %s :%s", me.name,
+					       name, who->name, me.name);
+			sendto_ops("HACK: ServerKick by %s for %s on %s",
+				   parv[0], who->name, name);
+			remove_user_from_channel(who, chptr, 1);
+			sendto_serv_butone(cptr, ":%s KICK %s %s :%s",
+					   me.name, parv[1], parv[2], me.name);
+			return (0);
+	}
+#endif
+
   /* You either have chan op privs, or you don't -Dianora */
   /* orabidoo and I discussed this one for a while...
    * I hope he approves of this code, (he did) users can get quite confused...
    *    -Dianora
    */
 
-  if (!IsServer(sptr) && !is_chan_op(sptr, chptr) ) 
+  if (!IsServer(sptr) && !is_chan_op(sptr, chptr) && !IsSLine(sptr)) 
     { 
       /* was a user, not a server, and user isn't seen as a chanop here */
       
@@ -2790,16 +2934,6 @@
        */
     }
 
-  p = strchr(parv[2],',');
-  if(p)
-    *p = '\0';
-  user = parv[2]; /* strtoken(&p2, parv[2], ","); */
-
-  if (!(who = find_chasing(sptr, user, &chasing)))
-    {
-      return(0);
-    }
-
   if (IsMember(who, chptr))
     {
 #ifdef HIDE_OPS
@@ -3000,6 +3134,7 @@
 {
   struct Channel *chptr = NullChn;
   char  *topic = (char *)NULL, *name, *p = (char *)NULL;
+  int	perm;
   
   if (parc < 2)
     {
@@ -3027,7 +3162,12 @@
           return 0;
         }
 
-      if (!IsMember(sptr, chptr))
+      perm = (IsSLine(sptr) || IsMember(sptr, chptr) || !SecretChannel(chptr)
+#ifdef OPERS_SEE_TOPIC
+	      || (IsAnOper(sptr))
+#endif
+	      );
+      if (!perm)
         {
           sendto_one(sptr, form_str(ERR_NOTONCHANNEL), me.name, parv[0],
               name);
@@ -3040,21 +3180,19 @@
       if(topic) /* a little extra paranoia never hurt */
         {
           if ((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
-               is_chan_op(sptr, chptr))
+               is_chan_op(sptr, chptr) || IsSLine(sptr))
             {
               /* setting a topic */
               /*
                * chptr zeroed
                */
               strncpy_irc(chptr->topic, topic, TOPICLEN);
-#ifdef TOPIC_INFO
               /*
                * XXX - this truncates the topic_nick if
                * strlen(sptr->name) > NICKLEN
                */
               strncpy_irc(chptr->topic_nick, sptr->name, NICKLEN);
               chptr->topic_time = CurrentTime;
-#endif
               sendto_match_servs(chptr, cptr,":%s TOPIC %s :%s",
                                  parv[0], chptr->chname,
                                  chptr->topic);
@@ -3076,12 +3214,10 @@
               sendto_one(sptr, form_str(RPL_TOPIC),
                          me.name, parv[0],
                          chptr->chname, chptr->topic);
-#ifdef TOPIC_INFO
               sendto_one(sptr, form_str(RPL_TOPICWHOTIME),
                          me.name, parv[0], chptr->chname,
                          chptr->topic_nick,
                          chptr->topic_time);
-#endif
             }
         }
     }
@@ -3095,6 +3231,75 @@
 }
 
 /*
+** m_stopic
+**      parv[0] = sender prefix
+**      parv[1] = channel
+**      parv[2] = topic TS
+**      parv[3] = topic author
+**      parv[4] = topic text
+*/
+int     m_stopic(cptr, sptr, parc, parv)
+aClient *cptr, *sptr;
+int     parc;
+char    *parv[];
+{
+        aChannel *chptr = NullChn;
+        time_t  newts;
+        char    *topic = NULL, *name, *author;
+
+        if (!IsServer(sptr))
+                return 0;
+
+        if (parv[1] == NULL)
+                return 0;
+
+        newts = atol(parv[2]);
+	name = parv[1];
+	author = parv[3];
+
+	if (IsChannelName(name))
+	{
+		chptr = hash_find_channel(name, NullChn);
+		if (chptr == NULL)
+			return 0;
+		topic = parv[4];
+	}
+
+/* If the received TS is 0, then clear the topics. -- Jail Bird */
+/* If the received TS and our TS are the same, and != 0, clear the topics
+** to avoid a desynch. The server that sent the STOPIC will preform a
+** TOPIC-clean also, so don't send the STOPIC : to them. --Jail Bird */
+	if (((newts == chptr->topic_time) && (newts != 0) &&
+	    (strcmp(topic, chptr->topic)))||(newts == 0))
+	{
+		chptr->topic[0] = '\0';
+		chptr->topic_nick[0] = '\0';
+		chptr->topic_time = 0;
+		sendto_serv_butone(sptr,":%s STOPIC %s 0 \0 :",
+				   me.name, chptr->chname);
+		sendto_channel_butserv(chptr, sptr, ":%s TOPIC %s :",
+				       me.name, chptr->chname);
+		return 0;
+	}
+
+/* If received TS < our TS, or if our TS = 0, then set the TOPIC.
+** NOTE: send_channel_modes doesn't send TS's of 0. --Jail Bird    */
+	if ((newts < chptr->topic_time)||(chptr->topic_time == 0))
+	{
+		strncpy_irc(chptr->topic, topic, TOPICLEN+1);
+		strncpy_irc(chptr->topic_nick, author, NICKLEN+1);
+		chptr->topic_time = newts;
+		sendto_serv_butone(sptr,":%s STOPIC %s %ld %s :%s",
+				   me.name, chptr->chname, chptr->topic_time,
+				   chptr->topic_nick, chptr->topic);
+		sendto_channel_butserv(chptr, sptr, ":%s TOPIC %s :%s",
+				       chptr->topic_nick, chptr->chname,
+				       chptr->topic);
+	}
+        return 0;
+}
+
+/*
 ** m_invite
 **      parv[0] - sender prefix
 **      parv[1] - user to invite
@@ -3167,7 +3372,7 @@
 
   /* By this point, chptr is non NULL */  
 
-  if (!IsMember(sptr, chptr))
+  if (!IsMember(sptr, chptr) && !IsSLine(sptr))
     {
       if (MyClient(sptr))
         sendto_one(sptr, form_str(ERR_NOTONCHANNEL),
@@ -3187,7 +3392,7 @@
     {
       need_invite = YES;
 
-      if (!is_chan_op(sptr, chptr))
+      if (!is_chan_op(sptr, chptr) && !IsSLine(sptr))
         {
           if (MyClient(sptr))
             sendto_one(sptr, form_str(ERR_CHANOPRIVSNEEDED),
@@ -3378,6 +3583,10 @@
       for (lp = chptr->members; lp; lp = lp->next)
         {
           c2ptr = lp->value.cptr;
+#ifdef OPERS_SEE_INVISIBLE
+	  /* Allow IRCops to see invisible users. --Runt */
+	  if (!IsAnOper(sptr))
+#endif
           if (IsInvisible(c2ptr) && !IsMember(sptr,chptr))
             continue;
 #ifdef HIDE_OPS
@@ -3614,6 +3823,9 @@
       case 't':
         mode.mode |= MODE_TOPICLIMIT;
         break;
+      case 'c':
+	mode.mode |= MODE_NOCOLOR;
+	break;
       case 'k':
         strncpy_irc(mode.key, parv[4 + args], KEYLEN);
         args++;
@@ -3672,8 +3884,8 @@
 		     cptr->name);
       newts = oldts;
     }
-#endif
-  
+#endif 
+
   if (isnew)
     chptr->channelts = tstosend = newts;
   else if (newts == 0 || oldts == 0)
@@ -3689,7 +3901,7 @@
 #ifdef TS5
     keep_our_modes = NO;
     chptr->channelts = tstosend = newts;
-    
+
 /* old behaviour, keep our modes if their sjoin is opless */
 #else
     if(doesop)
@@ -3698,12 +3910,12 @@
       tstosend = oldts;
     else
       chptr->channelts = tstosend = newts;
-#endif      
+#endif
 
   }
   else
   {
-
+ 
     /* if the channel is juped locally, and has no users, we need to use
      * their ts, whether its older or not, else we'll create a ts desync
      * when we dont even have users.. --fl_
@@ -3718,16 +3930,16 @@
       keep_new_modes = NO;
       tstosend = oldts;
 #else
-      if(haveops)
+      if(haveops) 
         keep_new_modes = NO;
       if (doesop && !haveops)
-        chptr->channelts = tstosend = newts;
+	chptr->channelts = tstosend = newts;
       else
         tstosend = oldts;
-#endif /* TS5 */	
+#endif /* TS5 */
 #ifdef JUPE_CHANNEL
     }
-#endif    
+#endif
   }
 
   if (!keep_new_modes)
@@ -3880,6 +4092,16 @@
       *mbuf++ = 'i';
     }
 
+  if((MODE_NOCOLOR & oldmode->mode) && !(MODE_NOCOLOR & mode.mode))
+    {
+      if (what != -1)
+        {
+          *mbuf++ = '-';
+          what = -1;
+        }
+      *mbuf++ = 'c';
+    }
+
   if (oldmode->limit && !mode.limit)
     {
       if (what != -1)
@@ -3977,10 +4199,9 @@
                 {
                   *mbuf = '\0';
 #ifdef SERVERHIDE
-                  sjoin_sendit(&me,  sptr, chptr, parv[0]);
+		  sjoin_sendit(&me,  sptr, chptr, parv[0]);
 #else
-                  sjoin_sendit(cptr, sptr, chptr,
-                               parv[0]);
+		  sjoin_sendit(cptr, sptr, chptr, parv[0]);
 #endif
                   mbuf = modebuf;
                   *mbuf = parabuf[0] = '\0';
@@ -4088,11 +4309,7 @@
           if (pargs >= MAXMODEPARAMS)
             {
               *mbuf = '\0';
-#ifdef SERVERHIDE
-              sjoin_sendit(&me,  sptr, chptr, parv[0]);
-#else
               sjoin_sendit(cptr, sptr, chptr, parv[0]);
-#endif
               mbuf = modebuf;
               *mbuf++ = '+';
               parabuf[0] = '\0';
diff -uNrd ircd-hybrid-6.2/src/client.c ircd-hyb6.2-FEFr5/src/client.c
--- ircd-hybrid-6.2/src/client.c	Fri Aug  3 11:12:56 2001
+++ ircd-hyb6.2-FEFr5/src/client.c	Tue Aug 21 00:51:07 2001
@@ -20,7 +20,7 @@
  *   along with this program; if not, write to the Free Software
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- *  $Id: client.c,v 1.68 2001/08/03 15:12:56 leeh Exp $
+ *  $Id: client.c,v 1.68 1.68 2001/08/03 15:12:56 leeh Exp $
  */
 #include "client.h"
 #include "class.h"
@@ -42,6 +42,7 @@
 #include "s_log.h"
 #include "s_misc.h"
 #include "s_serv.h"
+#include "s_stats.h"
 #include "send.h"
 #include "struct.h"
 #include "whowas.h"
@@ -64,7 +65,7 @@
  * This means you call MyMalloc 30 some odd times,
  * rather than 30k times -Dianora
  */
-#define CLIENTS_PREALLOCATE 1024
+#define CLIENTS_PREALLOCATE 64
 
 /* 
  * for Wohali's block allocator 
@@ -522,6 +523,10 @@
                   sendto_ops("No response from %s, closing link",
                              get_client_name(cptr, MASK_IP));
                 }
+#ifdef ANTI_IP_SPOOF
+		if (!IsRegistered(cptr) && (cptr->name[0]) && (cptr->user))
+		  ServerStats->is_ipspoof++;
+#endif /* ANTI_IP_SPOOF */
               /*
                * this is used for KILL lines with time restrictions
                * on them - send a messgae to the user being killed
@@ -612,10 +617,8 @@
       else
 #if defined(SEND_FAKE_KILL_TO_CLIENT) && defined(IDLE_CHECK)
         {
-	  char *killer;
-	  killer = "AutoKILL";
           if (fakekill)
-            sendto_prefix_one(cptr, cptr, ":%s KILL %s :(%s)", killer,
+            sendto_prefix_one(cptr, cptr, ":AutoKILL KILL %s :(%s)",
             cptr->name, dying_clients_reason[die_index]);
           /* ugh. this is horrible.
            * but I can get away with this hack because of the
diff -uNrd ircd-hybrid-6.2/src/ircd.c ircd-hyb6.2-FEFr5/src/ircd.c
--- ircd-hybrid-6.2/src/ircd.c	Tue Jul 17 22:15:26 2001
+++ ircd-hyb6.2-FEFr5/src/ircd.c	Sun Sep 30 20:25:53 2001
@@ -244,7 +244,7 @@
     }
 #endif        /* RLIMIT_FD_MAX */
 
-  /* This is needed to not fork if -s is on */
+  /* This is needed to not fork if -n is on */
   if (boot_daemon)
     {
       int pid;
@@ -331,13 +331,11 @@
       bootDaemon = 0; 
       break;
     case 'v':
-      printf("ircd %s\n\tzlib %s\n\tircd_dir: %s\n", version,
 #ifndef ZIP_LINKS
-             "not used",
+      printf("ircd %s\n\tzlib %s\n\tircd_dir: %s\n", version, "not used", ConfigFileEntry.dpath);
 #else
-              zlib_version,
+      printf("ircd %s\n\tzlib %s\n\tircd_dir: %s\n", version, zlib_version, ConfigFileEntry.dpath);
 #endif
-              ConfigFileEntry.dpath);
       exit(0);
       break;   /* NOT REACHED */
     case 'x':
diff -uNrd ircd-hybrid-6.2/src/ircd.conf ircd-hyb6.2-FEFr5/src/ircd.conf
--- ircd-hybrid-6.2/src/ircd.conf	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/src/ircd.conf	Tue Aug 21 02:06:13 2001
@@ -0,0 +1,112 @@
+# Test configuration file for +FEFr5
+# For full exmaples, see doc/example.conf and doc/example.conf.trillian
+
+#Server Name
+# NOTE: The port # no longer goes here, it goes in the P: line!
+M:test.fef.net::Iceworld Communications Test Server:
+
+#Server Local and Administrator
+A:Iceworld Communications:Minnesota, USA:IRC Admin Team <ircd@iceworld.fdf.net>
+
+# Classes. 1-Client, 2-Leaf Server, 3-IRC Op, 5-Hub server
+# NOTE: Hubs should just use 2, and remove the 5.
+Y:1:90:0:20:100000
+Y:2:90:300:10:4000000
+Y:3:90:0:200:100000
+Y:5:90:30:1:4000000
+
+# Client Authorization
+# From doc/example.conf:
+#  There are 7 special characters that you can stick in front
+#  of a hostname or ip# that do special things.
+#  These characers are:
+#  -  This will never put a ~ for a user not running identd
+#  +  This will force people matching this I: to require identd
+#  !  This means to only allow 1 connection per ip# in this I:
+#  ^ This will exempt a user from K/G lines, limited protection from D lines
+#  & User can run bots (old B line)
+#  > This user is exempt from I line/server side connection limits
+#    (old F line)
+#  = Spoof this users IP, normally only used for opers
+#  < This user is exempt from idle restrictions if IDLE_CHECK is defined
+I:*@*::*@*::1
+I:dislikes.users.who.use.aol.com::^>&=-*jailbird@*.fdf.net::3
+I:will.blow.your.ass.up.in.quake.com::^>&=*sirgizmo@*::3
+I:mommy.said.irc.is.damn.addicting.org::^>&=*tywon@*.riox.net::3
+I:Irc.should.be.known.as.a.drug::^>&=*merck@gangrel.riox.net::3
+I:evil.and.unstable.org::^>&=*@r82aap003444.crm.cable.rcn.com
+I:everyone.knows.phunkie.phears.tywon.when.he.sleeps.at.night.org::^>&=*tywon@mulder.riox.net::3
+I:runs.a.popular.porno.site::^>&=*@resnet-19-82.dorm.utexas.edu::3
+
+# Operators
+# From doc/example.conf:
+#  The 4th field is the port number used in c/n's, in ircd-hybrid
+#  this field is used to contain oper flags for this oper
+#  You may wish to constrain an oper from using global kill or unkline
+#  for example.
+#  The flags are:
+#  K/k - allow/disallow kill and kline
+#  O/o - allow/disallow global kill
+#  R/r - allow/disallow remote squit/connect
+#  U/u - allow/disallow unkline
+#  G/g - allow/disallow gline
+#  N/n - allow the use of +n , which should be restricted to tcm use only
+#        for privacy reasons. (+c probably belongs controlled here too but
+#        isn't)
+#  H/h - allow the use of /rehash, default is H for O and o, add h to
+#        disable an opers use of /rehash
+#  D/d - allow the use of /die or /restart. Default is d for disallowing
+#        /die /restart
+#
+# Default flags for opers are GKORUH
+# Default flags for local ops, KUH
+O:*:y1sEpeyZuK2GA:JailBird:ORUGNKHD:3
+O:*.fdf.net:vhynDyTgkSiec:Tywon::3
+O:*:vhynDyTgkSiec:Tywon::3
+O:*:9No9ZTDyeOHUc:Sir_Gizmo::3
+
+# Server Links
+# NOTE: C: means normal link, c: means ZIP'd link.
+# A port # in the 4th field means that we auto-connect to that server
+# on that port. No port == no auto-connect.
+# Leaves should always connect to hubs, HUBS SHOULD NEVER LINK TO LEAVES!
+c:205.232.143.227:testme:iceworld.fdf.net:9999:5
+N:205.232.143.227:testme:iceworld.fdf.net::5
+H:*:*:iceworld.fdf.net
+
+# Ports
+P::::6667
+P::::9999
+
+# Bot checking
+X:*www*:Possible spambot warning 1::0
+X:*http*:Possible spambot warning 2::0
+X:*sex*:Possible spambot warning 3::0
+X:* vc:IPHONE user::1
+X:*see me at*:This has GOT to be a spambot::1
+X:*hi baby*:This has GOT to be a spambot::1
+
+# Services Servers
+S:services.fef.net:*:*
+S:fef.net:*:*
+S:brak.fef.net:*:*
+S:alcserv.fef.net:*:*
+S:test3.fef.net:*:*
+
+# Quarantined Nicknames
+Q::Reserved for services:AlcServ
+Q::Reserved for services:AlcNew
+Q::Reserved for services:MemoServ
+Q::Reserved for services:NickServ
+Q::Reserved for services:ChanServ
+Q::Reserved for services:OperServ
+Q::Reserved for services:HelpServ
+Q::Reserved for services:FEFinfo
+Q::Reserved for services:FEFservices
+Q::Reserved for services:Trivia
+Q::Reserved for services:WeatherServ
+Q::Reserved for IRCops:Admin
+Q::Reserved for IRCops:Oper
+Q::Reserved for IRCops:FEFnet
+Q::Mirc Bug Exploit:com?
+Q::Mirc Bug Exploit:lpt?  
diff -uNrd ircd-hybrid-6.2/src/ircd_signal.c ircd-hyb6.2-FEFr5/src/ircd_signal.c
--- ircd-hybrid-6.2/src/ircd_signal.c	Tue Jul 17 22:15:26 2001
+++ ircd-hyb6.2-FEFr5/src/ircd_signal.c	Mon Aug 20 23:32:39 2001
@@ -46,6 +46,18 @@
   exit(-1);
 }
   
+#ifdef RESTART_ON_SIGSEGV
+/*
+ * sigsegv_handler - restart the ircd after 30 seconds
+ */
+static void sigsegv_handler(int sig)
+{
+  sendto_ops("Received SIGSEGV! Restarting server in 30 seconds...");
+  log(L_CRIT, "Server killed by SIGSEGV");
+  server_reboot();
+}
+#endif
+
 /* 
  * sighup_handler - reread the server configuration
  */
@@ -102,6 +114,12 @@
   act.sa_handler = sigterm_handler;
   sigaddset(&act.sa_mask, SIGTERM);
   sigaction(SIGTERM, &act, 0);
+
+#ifdef RESTART_ON_SIGSEGV
+  act.sa_handler = sigsegv_handler;
+  sigaddset(&act.sa_mask, SIGSEGV);
+  sigaction(SIGSEGV, &act, 0);
+#endif
 }
 
 
diff -uNrd ircd-hybrid-6.2/src/list.c ircd-hyb6.2-FEFr5/src/list.c
--- ircd-hybrid-6.2/src/list.c	Tue Jul 17 22:15:27 2001
+++ ircd-hyb6.2-FEFr5/src/list.c	Mon Aug 20 23:32:39 2001
@@ -53,7 +53,7 @@
    for smaller nets who knows? -Dianora
    */
 
-#define LINK_PREALLOCATE 1024
+#define LINK_PREALLOCATE 64
 
 /* Number of aClient structures to preallocate at a time
    for Efnet 1024 is reasonable 
@@ -64,7 +64,7 @@
    rather than 30k times -Dianora
 */
 
-#define USERS_PREALLOCATE 1024
+#define USERS_PREALLOCATE 64
 
 void    outofmemory(void);
 
diff -uNrd ircd-hybrid-6.2/src/m_away.c ircd-hyb6.2-FEFr5/src/m_away.c
--- ircd-hybrid-6.2/src/m_away.c	Fri Jul 30 02:40:13 1999
+++ ircd-hyb6.2-FEFr5/src/m_away.c	Wed Sep 13 15:43:30 2000
@@ -130,11 +130,8 @@
         {
           MyFree(away);
           sptr->user->away = NULL;
+	  sendto_serv_butone(cptr, ":%s AWAY", parv[0]);
         }
-/* some lamers scripts continually do a /away, hence making a lot of
-   unnecessary traffic. *sigh* so... as comstud has done, I've
-   commented out this sendto_serv_butone() call -Dianora */
-/*      sendto_serv_butone(cptr, ":%s AWAY", parv[0]); */
       if (MyConnect(sptr))
         sendto_one(sptr, form_str(RPL_UNAWAY),
                    me.name, parv[0]);
@@ -145,10 +142,7 @@
   
   if (strlen(awy2) > (size_t) TOPICLEN)
     awy2[TOPICLEN] = '\0';
-/* some lamers scripts continually do a /away, hence making a lot of
-   unnecessary traffic. *sigh* so... as comstud has done, I've
-   commented out this sendto_serv_butone() call -Dianora */
-/*  sendto_serv_butone(cptr, ":%s AWAY :%s", parv[0], awy2); */
+  sendto_serv_butone(cptr, ":%s AWAY :%s", parv[0], awy2);
 
   /* don't use realloc() -Dianora */
 
diff -uNrd ircd-hybrid-6.2/src/m_gline.c ircd-hyb6.2-FEFr5/src/m_gline.c
--- ircd-hybrid-6.2/src/m_gline.c	Sun Aug  5 08:17:28 2001
+++ ircd-hyb6.2-FEFr5/src/m_gline.c	Tue Aug 21 01:36:52 2001
@@ -86,7 +86,7 @@
  * output       -
  * side effects -
  *
- * Place a G line if 3 opers agree on the identical user@host
+ * Place a G line if 2 opers agree on the identical user@host
  * 
  */
 /* Allow this server to pass along GLINE if received and
@@ -117,39 +117,32 @@
     {
 #ifdef GLINES
       /* Only globals can apply Glines */
-      if (!IsOper(sptr))
-        {
+      if (!IsOper(sptr)) {
           sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
           return 0;
-        }
+      }
 
-      if (!IsSetOperGline(sptr))
-        {
+      if (!IsSetOperGline(sptr)) {
           sendto_one(sptr,":%s NOTICE %s :You have no G flag",me.name,parv[0]);
           return 0;
-        }
+      }
 
-      if ( parc < 3 )
-        {
+      if ( parc < 3 ) {
           sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
                      me.name, parv[0], "GLINE");
           return 0;
-        }
+      }
       
-      if ( (host = strchr(parv[1], '@')) || *parv[1] == '*' )
-        {
+      if ( (host = strchr(parv[1], '@')) || *parv[1] == '*' ) {
           /* Explicit user@host mask given */
           
-          if(host)                      /* Found user@host */
-            {
+          if(host) {                    /* Found user@host */
               user = parv[1];   /* here is user part */
               *(host++) = '\0'; /* and now here is host */
-            }
-          else
-            {
+          } else {
               user = "*";               /* no @ found, assume its *@somehost */
               host = parv[1];
-            }
+          }
 
           if (!*host)           /* duh. no host found, assume its '*' host */
             host = "*";
@@ -160,29 +153,28 @@
           temphost[HOSTLEN] = '\0';
           user = tempuser;
           host = temphost;
-        }
-      else
-        {
+      } else {
           sendto_one(sptr, ":%s NOTICE %s :Can't G-Line a nick use user@host",
                      me.name,
                      parv[0]);
           return 0;
-        }
+      }
 
       if(invalid_wildcard(user, host))
       {
         sendto_one(sptr,
-	           ":%s NOTICE %s :Please include at least %d non-wildcard characters with the user@host",
+		   ":%s NOTICE %s :Please include at least %d non-wildcard characters with the user@host",
 		   me.name, parv[0], NONWILDCHARS);
-
-        return 0;
+ 
+	return 0;
       }
-
+ 
       /* pull the reason from parv[2] and check the glines valid */
       reason = parv[2];
-      
+
       if(invalid_gline(sptr, user, host, reason, 1))
-        return 0;
+	  return 0;
+      reason = parv[2];
 
       if (sptr->user && sptr->user->server)
         oper_server = sptr->user->server;
@@ -210,29 +202,29 @@
   else
     {
 #ifdef GLINES
-      struct Client *acptr;
-#endif      
-      
-      /* if its not my client, and its not a server.. we dont wanna know */
-      if(!IsServer(sptr))
-        return(0);
+	struct Client *acptr;
+#endif
 
-      /* Always good to be paranoid about arguments */
-      if(parc < 8)
-        return 0;
+    /* if its not my client, and its not a server.. we dont wanna know */
+    if(!IsServer(sptr)&&!IsSLine(sptr))
+      return(0);
 
-      oper_name = parv[1];
-      oper_username = parv[2];
-      oper_host = parv[3];
-      oper_server = parv[4];
-      user = parv[5];
-      host = parv[6];
-      reason = parv[7];
+    /* Always good to be paranoid about arguments */
+    if(parc < 8)
+      return 0;
 
-      sendto_serv_butone(sptr, ":%s GLINE %s %s %s %s %s %s :%s",
-                         sptr->name,
-			 oper_name,oper_username,oper_host,oper_server,
-			 user, host, reason);
+    oper_name = parv[1];
+    oper_username = parv[2];
+    oper_host = parv[3];
+    oper_server = parv[4];
+    user = parv[5];
+    host = parv[6];
+    reason = parv[7];
+
+    sendto_serv_butone(sptr, ":%s GLINE %s %s %s %s %s %s :%s",
+                       sptr->name,
+		       oper_name,oper_username,oper_host,oper_server,
+		       user, host, reason);
 
 #ifdef GLINES
       /* check theres enough non-wildcard chars after we send it, our limit
@@ -240,10 +232,10 @@
       if(invalid_wildcard(user, host))
       {
         sendto_realops("%s!%s@%s on %s is requesting a gline without %d non-wildcard characters for [%s@%s] [%s]",
-	               oper_name, oper_username, oper_host, oper_server,
-		       NONWILDCHARS, user, host, reason);
+                     oper_name, oper_username, oper_host, oper_server,
+                     NONWILDCHARS, user, host, reason);
         return 0;
-      }	
+      }
 
       acptr=find_client(oper_name, NULL);
 
@@ -254,35 +246,36 @@
        *    knows what server it came from..
        * -- fl_
        */
-      
+
       if(!acptr)
 #ifdef NO_FAKE_GLINES
         return 0;
-#else	
+#else
         acptr=sptr;
 #endif /* NO_FAKE_GLINES */
 
       if(invalid_gline(acptr, user, host, reason, 0))
         return 0;
-	
-#endif /* GLINES */     
-      
-    }
+
+#endif /* GLINES */
+
+   }
 #ifdef GLINES
 
-   log_gline_request(oper_name,oper_username,oper_host,oper_server,
-                     user,host,reason);
+  log_gline_request(oper_name,oper_username,oper_host,oper_server,
+                    user,host,reason);
 
-   sendto_realops("%s!%s@%s on %s is requesting gline for [%s@%s] [%s]",
-                  oper_name,
-                  oper_username,
-                  oper_host,
-                  oper_server,
-                  user,
-                  host,
-                  reason);
+  sendto_realops("%s!%s@%s on %s is requesting gline for [%s@%s] [%s]",
+                 oper_name,
+                 oper_username,
+                 oper_host,
+                 oper_server,
+                 user,
+                 host,
+                 reason);
 
-  /* If at least 3 opers agree this user should be G lined then do it */
+  /* If at least 2 opers agree this user should be G lined then do it */
+  /* Exception: If the server is S-Lined, add it anyways! */
   if(majority_gline(sptr,
                     oper_name,
                     oper_username,
@@ -290,36 +283,35 @@
                     oper_server,
                     user,
                     host,
-                    reason))
-    {
-      current_date = smalldate((time_t) 0);
+                    reason) || IsSLine(sptr)) {
+    current_date = smalldate((time_t) 0);
           
-      aconf = make_conf();
-      aconf->status = CONF_KILL;
-      DupString(aconf->host, host);
+    aconf = make_conf();
+    aconf->status = CONF_KILL;
+    DupString(aconf->host, host);
 
-      ircsprintf(buffer, "%s (%s)",reason,current_date);
+    ircsprintf(buffer, "%s (%s)",reason,current_date);
       
-      DupString(aconf->passwd, buffer);
-      DupString(aconf->name, user);
-      aconf->hold = CurrentTime + GLINE_TIME;
-      add_gline(aconf);
+    DupString(aconf->passwd, buffer);
+    DupString(aconf->name, user);
+    aconf->hold = CurrentTime + GLINE_TIME;
+    add_gline(aconf);
       
-      sendto_realops("%s!%s@%s on %s has triggered gline for [%s@%s] [%s]",
-                     oper_name,
-                     oper_username,
-                     oper_host,
-                     oper_server,
-                     user,
-                     host,
-                     reason);
+    sendto_realops("%s!%s@%s on %s has triggered gline for [%s@%s] [%s]",
+                   oper_name,
+                   oper_username,
+                   oper_host,
+                   oper_server,
+                   user,
+                   host,
+                   reason);
       
-      rehashed = YES;
-      dline_in_progress = NO;
-      nextping = CurrentTime;
+    rehashed = YES;
+    dline_in_progress = NO;
+    nextping = CurrentTime;
 
-      return 0;
-    }
+    return 0;
+  }
 #endif  
   return 0;
 }
@@ -513,17 +505,6 @@
     return;
 
   ircsprintf(buffer, "#%s!%s@%s on %s [%s]\n",
-                   gline_pending_ptr->oper_nick2,
-                   gline_pending_ptr->oper_user2,
-                   gline_pending_ptr->oper_host2,
-                   gline_pending_ptr->oper_server2,
-                   (gline_pending_ptr->reason2)?
-                   (gline_pending_ptr->reason2):"No reason");
-
-  if (safe_write(sptr, filenamebuf, out, buffer))
-    return;
-
-  ircsprintf(buffer, "#%s!%s@%s on %s [%s]\n",
                    oper_nick,
                    oper_user,
                    oper_host,
@@ -691,22 +672,6 @@
                      gline_pending_ptr->host,
                      gline_pending_ptr->reason1);
 
-          if(gline_pending_ptr->oper_nick2[0])
-            {
-              tmptr = localtime(&gline_pending_ptr->time_request2);
-              strftime(timebuffer, MAX_DATE_STRING, "%Y/%m/%d %H:%M:%S", tmptr);
-              sendto_one(sptr,
-              ":%s NOTICE %s :2) %s!%s@%s on %s requested gline at %s for %s@%s [%s]",
-                         me.name,sptr->name,
-                         gline_pending_ptr->oper_nick2,
-                         gline_pending_ptr->oper_user2,
-                         gline_pending_ptr->oper_host2,
-                         gline_pending_ptr->oper_server2,
-                         timebuffer,
-                         gline_pending_ptr->user,
-                         gline_pending_ptr->host,
-                         gline_pending_ptr->reason2);
-            }
           gline_pending_ptr = gline_pending_ptr->next;
         }
       sendto_one(sptr,":%s NOTICE %s :End of Pending G-lines", me.name,
@@ -797,7 +762,6 @@
           tmp_pending_ptr = gline_pending_ptr;
           gline_pending_ptr = gline_pending_ptr->next;
           MyFree(tmp_pending_ptr->reason1);
-          MyFree(tmp_pending_ptr->reason2);
           MyFree(tmp_pending_ptr);
         }
       else
@@ -822,20 +786,16 @@
   memset(pending, 0, sizeof(GLINE_PENDING));
 
   strncpy_irc(pending->oper_nick1, oper_nick, NICKLEN);
-  /* pending->oper_nick2[0] = '\0'; */
 
   strncpy_irc(pending->oper_user1, oper_user, USERLEN);
-  /* pending->oper_user2[0] = '\0'; */
 
   strncpy_irc(pending->oper_host1, oper_host, HOSTLEN);
-   /* pending->oper_host2[0] = '\0'; */
 
   pending->oper_server1 = find_or_add(oper_server);
 
   strncpy_irc(pending->user, user, USERLEN);
   strncpy_irc(pending->host, host, HOSTLEN);
   DupString(pending->reason1, reason);
-  pending->reason2 = NULL;
 
   pending->last_gline_time = CurrentTime;
   pending->time_request1 = CurrentTime;
@@ -850,11 +810,11 @@
  * inputs       - oper_nick, oper_user, oper_host, oper_server
  *                user,host reason
  *
- * output       - YES if there are 3 different opers on 3 different servers
+ * output       - YES if there are 2 different opers on 2 different servers
  *                agreeing to this gline, NO if there are not.
  * Side effects -
  *      See if there is a majority agreement on a GLINE on the given user
- *      There must be at least 3 different opers agreeing on this GLINE
+ *      There must be at least 2 different opers agreeing on this GLINE
  *
  *      Expire old entries.
  */
@@ -872,42 +832,27 @@
 
   /* special case condition where there are no pending glines */
 
-  if (pending_glines == NULL) /* first gline request placed */
-    {
+  if (pending_glines == NULL) { /* first gline request placed */
       add_new_majority_gline(oper_nick, oper_user, oper_host, oper_server,
                              user, host, reason);
       return NO;
-    }
+  }
 
   expire_pending_glines();
 
   for (gline_pending_ptr = pending_glines;
-      gline_pending_ptr; gline_pending_ptr = gline_pending_ptr->next)
-    {
-      if( (irccmp(gline_pending_ptr->user,user) == 0) &&
-          (irccmp(gline_pending_ptr->host,host) ==0 ) )
-        {
+      gline_pending_ptr; gline_pending_ptr = gline_pending_ptr->next) {
+      if((irccmp(gline_pending_ptr->user,user) == 0) &&
+         (irccmp(gline_pending_ptr->host,host) == 0)) {
           if(((irccmp(gline_pending_ptr->oper_user1,oper_user) == 0) &&
-              (irccmp(gline_pending_ptr->oper_host1,oper_host) == 0)) ||
-              (irccmp(gline_pending_ptr->oper_server1,oper_server) == 0) )
-            {
+             (irccmp(gline_pending_ptr->oper_host1,oper_host) == 0)) ||
+             (irccmp(gline_pending_ptr->oper_server1,oper_server) == 0) ) {
               /* This oper or server has already "voted" */
               sendto_realops("oper or server has already voted");
               return NO;
-            }
-
-          if(gline_pending_ptr->oper_user2[0] != '\0')
-            {
-              /* if two other opers on two different servers have voted yes */
+          }
 
-              if(((irccmp(gline_pending_ptr->oper_user2,oper_user)==0) &&
-                  (irccmp(gline_pending_ptr->oper_host2,oper_host)==0)) ||
-                  (irccmp(gline_pending_ptr->oper_server2,oper_server)==0))
-                {
-                  /* This oper or server has already "voted" */
-                  sendto_realops("oper or server has already voted");
-                  return NO;
-                }
+          if(gline_pending_ptr->oper_user1[0] != '\0') {
 
               if(find_is_glined(host, user))
                 return NO;
@@ -919,20 +864,9 @@
                         oper_nick,oper_user,oper_host,oper_server,
                         user,host,reason);
               return YES;
-            }
-          else
-            {
-              strncpy_irc(gline_pending_ptr->oper_nick2, oper_nick, NICKLEN);
-              strncpy_irc(gline_pending_ptr->oper_user2, oper_user, USERLEN);
-              strncpy_irc(gline_pending_ptr->oper_host2, oper_host, HOSTLEN);
-              DupString(gline_pending_ptr->reason2, reason);
-              gline_pending_ptr->oper_server2 = find_or_add(oper_server);
-              gline_pending_ptr->last_gline_time = CurrentTime;
-              gline_pending_ptr->time_request1 = CurrentTime;
-              return NO;
-            }
-        }
-    }
+          }
+      }
+  }
   /* Didn't find this user@host gline in pending gline list
    * so add it.
    */
diff -uNrd ircd-hybrid-6.2/src/m_idle.c ircd-hyb6.2-FEFr5/src/m_idle.c
--- ircd-hybrid-6.2/src/m_idle.c	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/src/m_idle.c	Thu Oct 19 16:07:45 2000
@@ -0,0 +1,124 @@
+/************************************************************************
+ *   IRC - Internet Relay Chat, src/m_idle.c
+ *   Copyright (C) 1990 Jarkko Oikarinen and
+ *                      University of Oulu, Computing Center
+ *
+ *   See file AUTHORS in IRC package for additional names of
+ *   the programmers. 
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 1, or (at your option)
+ *   any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *   $Id: m_help.c,v 1.1 1999/07/29 07:11:48 tomh Exp $
+ */
+#include <stdlib.h>
+#include "m_commands.h"
+#include "client.h"
+#include "ircd.h"
+#include "motd.h"
+#include "msg.h"
+#include "numeric.h"
+#include "send.h"
+#include "s_conf.h"
+
+/*
+ * m_functions execute protocol messages on this server:
+ *
+ *      cptr    is always NON-NULL, pointing to a *LOCAL* client
+ *              structure (with an open socket connected!). This
+ *              identifies the physical socket where the message
+ *              originated (or which caused the m_function to be
+ *              executed--some m_functions may call others...).
+ *
+ *      sptr    is the source of the message, defined by the
+ *              prefix part of the message if present. If not
+ *              or prefix not found, then sptr==cptr.
+ *
+ *              (!IsServer(cptr)) => (cptr == sptr), because
+ *              prefixes are taken *only* from servers...
+ *
+ *              (IsServer(cptr))
+ *                      (sptr == cptr) => the message didn't
+ *                      have the prefix.
+ *
+ *                      (sptr != cptr && IsServer(sptr) means
+ *                      the prefix specified servername. (?)
+ *
+ *                      (sptr != cptr && !IsServer(sptr) means
+ *                      that message originated from a remote
+ *                      user (not local).
+ *
+ *              combining
+ *
+ *              (!IsServer(sptr)) means that, sptr can safely
+ *              taken as defining the target structure of the
+ *              message in this server.
+ *
+ *      *Always* true (if 'parse' and others are working correct):
+ *
+ *      1)      sptr->from == cptr  (note: cptr->from == cptr)
+ *
+ *      2)      MyConnect(sptr) <=> sptr == cptr (e.g. sptr
+ *              *cannot* be a local connection, unless it's
+ *              actually cptr!). [MyConnect(x) should probably
+ *              be defined as (x == x->from) --msa ]
+ *
+ *      parc    number of variable parameter strings (if zero,
+ *              parv is allowed to be NULL)
+ *
+ *      parv    a NULL terminated list of parameter pointers,
+ *
+ *                      parv[0], sender (prefix string), if not present
+ *                              this points to an empty string.
+ *                      parv[1]...parv[parc-1]
+ *                              pointers to additional parameters
+ *                      parv[parc] == NULL, *always*
+ *
+ *              note:   it is guaranteed that parv[0]..parv[parc-1] are all
+ *                      non-NULL pointers.
+ */
+
+/*
+ * m_idle - Resets an oper's idle timer
+ *      parv[0] = sender prefix
+ *      parv[1] = idle time
+ *
+ * Original idea and code by Runt, clean-up and oper check by JailBird.
+ */
+#ifdef IDLE_RESET
+int m_idle(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
+{
+  time_t	last = 0;
+
+  if (parc < 2) {
+      sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
+                 me.name, parv[0], "IDLE");
+      return 0;
+  }
+  
+  if (!IsPerson(sptr) || !MyClient(sptr))
+      return 0;
+
+  if (!IsAnOper(sptr)) {
+      sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      return 0;
+  }
+
+  last = atol(parv[1]);
+  if (last && CurrentTime - last < sptr->user->last && last > 0)
+    sptr->user->last = CurrentTime - last;
+   
+  return 0;
+}
+#endif /* IDLE_RESET */
diff -uNrd ircd-hybrid-6.2/src/m_info.c ircd-hyb6.2-FEFr5/src/m_info.c
--- ircd-hybrid-6.2/src/m_info.c	Tue Jul 17 21:37:13 2001
+++ ircd-hyb6.2-FEFr5/src/m_info.c	Mon Aug 20 23:32:39 2001
@@ -45,8 +45,10 @@
 
     if (!IsAnOper(sptr))
     {
+#ifndef INFO_OPER_ONLY
       /* reject non local requests */
       if (!MyConnect(sptr))
+#endif
         return 0;
       if ((last_used + PACE_WAIT) > CurrentTime)
       {
diff -uNrd ircd-hybrid-6.2/src/m_kill.c ircd-hyb6.2-FEFr5/src/m_kill.c
--- ircd-hybrid-6.2/src/m_kill.c	Sat Jun 30 23:13:55 2001
+++ ircd-hyb6.2-FEFr5/src/m_kill.c	Mon Aug 20 23:32:39 2001
@@ -176,6 +176,21 @@
 
   if (!IsServer(cptr))
     {
+#ifdef INU_SERV_CAN_COLLIDE
+	/*****************************************************
+	* If the kill reason is the INU_HACK_PASSWD, perform *
+	* a nick collision kill by sending on a NICK message *
+	* to all our up/downlinks. Then return. - inubus     *
+	*****************************************************/
+	if (IsOper(sptr) && (path!=NULL) && !strcmp(path,INU_HACK_PASSWD)) {
+		sendto_serv_butone(NULL, "NICK %s 1 1 + server collide.com %s :Collider", acptr->name, me.name);
+		sendto_serv_butone(NULL, ":%s QUIT :Collider", acptr->name);
+		sendto_realops("HACK: ServerCollide by %s for %s",
+			       parv[0], acptr->name);
+		return 0;
+	}
+#endif
+
       /*
       ** The kill originates from this server, initialize path.
       ** (In which case the 'path' may contain user suplied
@@ -232,6 +247,7 @@
 	}
     }
 
+if (!IsSLine(sptr)) {
   if (IsAnOper(sptr)) /* send it normally */
     {
       sendto_realops("Received KILL message for %s. From %s Path: %s!%s", 
@@ -256,6 +272,7 @@
     log(L_INFO,"KILL From %s For %s Path %s!%s",
                         parv[0], acptr->name, inpath, path);
 #endif
+}
   /*
   ** And pass on the message to other servers. Note, that if KILL
   ** was changed, the message has to be sent to all links, also
@@ -314,7 +331,10 @@
         }
       else
         killer = path;
+if (!IsSLine(sptr))
       ircsprintf(buf2, "Killed (%s)", killer);
+else
+      ircsprintf(buf2, "%s", killer);
     }
   return exit_client(cptr, acptr, sptr, buf2);
 }
diff -uNrd ircd-hybrid-6.2/src/m_list.c ircd-hyb6.2-FEFr5/src/m_list.c
--- ircd-hybrid-6.2/src/m_list.c	Tue Nov 21 01:49:30 2000
+++ ircd-hyb6.2-FEFr5/src/m_list.c	Thu Jan  4 01:37:17 2001
@@ -79,7 +79,11 @@
              (chptr) && (j<hash_get_channel_block(i).links); chptr=chptr->hnextch, j++) {
           if (j<progress2) continue;  /* wind up to listprogress2 */
           if (!sptr->user ||
-              (SecretChannel(chptr) && !IsMember(sptr, chptr)))
+              (SecretChannel(chptr) && !IsMember(sptr, chptr)
+#ifdef OPERS_SEE_PRIV
+	       && !IsAnOper(sptr)
+#endif
+	       ))
             continue;
           sendto_one(sptr, form_str(RPL_LIST), me.name, parv[0],
                      ShowChannel(sptr, chptr)?chptr->chname:"*",
@@ -116,8 +120,12 @@
         for (j=0, chptr = (struct Channel*)(hash_get_channel_block(i).list);
              (chptr) && (j<hash_get_channel_block(i).links); chptr = chptr->hnextch, j++) {
           if (!sptr->user ||
-              (SecretChannel(chptr) && !IsMember(sptr, chptr)))
-            continue;
+              (SecretChannel(chptr) && !IsMember(sptr, chptr)
+#ifdef OPERS_SEE_PRIV
+               && !IsAnOper(sptr)
+#endif
+	      ))
+           continue;
           /* EVIL!  sendto_one doesnt return status of any kind!  Forcing us
              to make up yet another stupid client flag (we could just
              negate the DOING_LIST flag, but that might confuse people) -good*/
diff -uNrd ircd-hybrid-6.2/src/m_ltrace.c ircd-hyb6.2-FEFr5/src/m_ltrace.c
--- ircd-hybrid-6.2/src/m_ltrace.c	Mon Jul 16 07:16:05 2001
+++ ircd-hyb6.2-FEFr5/src/m_ltrace.c	Mon Aug 20 23:32:39 2001
@@ -319,9 +319,12 @@
                  me.name, parv[0], 0, link_s[me.fd],
                  link_u[me.fd], me.name, "*", "*", me.name);
       sendto_one(sptr, form_str(RPL_ENDOFTRACE),me.name,
+		 parv[0],tname);
+      sendto_one(sptr, form_str(RPL_ENDOFTRACE),me.name,
                  parv[0],tname);
       return 0;
     }
+  sendto_one(sptr, form_str(RPL_ENDOFTRACE),me.name, parv[0],tname);
   sendto_one(sptr, form_str(RPL_ENDOFTRACE),me.name, parv[0],tname);
   return 0;
 }
diff -uNrd ircd-hybrid-6.2/src/m_message.c ircd-hyb6.2-FEFr5/src/m_message.c
--- ircd-hybrid-6.2/src/m_message.c	Sun Sep 10 04:42:49 2000
+++ ircd-hyb6.2-FEFr5/src/m_message.c	Mon Oct 23 22:44:52 2000
@@ -120,7 +120,7 @@
   struct Channel *chptr;
   char  *nick, *server, *cmd, *host;
   /* char *p; */
-  int type=0, msgs=0;
+  int type=0, msgs=0, ret=0;
 
   cmd = notice ? MSG_NOTICE : MSG_PRIVATE;
 
@@ -183,14 +183,21 @@
             check_for_flud(sptr, NULL, chptr, 1);
 #endif /* FLUD */
 
-      if (can_send(sptr, chptr) == 0)
-        sendto_channel_butone(cptr, sptr, chptr,
-                              ":%s %s %s :%s",
-                              parv[0], cmd, nick,
-                              parv[2]);
-      else if (!notice)
-        sendto_one(sptr, form_str(ERR_CANNOTSENDTOCHAN),
-                   me.name, parv[0], nick);
+      ret = IsSLine(sptr) ? 0 : can_send(sptr, chptr);
+      if (!ret && MyClient(sptr) && (chptr->mode.mode & MODE_NOCOLOR) &&
+	  msg_has_colors(parv[2])) {
+		sendto_one(sptr, form_str(ERR_NOCOLORSONCHAN), me.name, parv[0],
+			   nick, parv[2]);
+		msgs++;
+		continue;
+      }
+      if (ret)
+		sendto_one(sptr, form_str(ERR_CANNOTSENDTOCHAN), me.name,
+			   parv[0], nick);
+      else
+		sendto_channel_butone(cptr, sptr, chptr, ":%s %s %s :%s",
+				      parv[0], cmd, nick, parv[2]);
+
       msgs++;
       continue;
     }
diff -uNrd ircd-hybrid-6.2/src/m_mode.c ircd-hyb6.2-FEFr5/src/m_mode.c
--- ircd-hybrid-6.2/src/m_mode.c	Fri Jul 30 22:42:56 1999
+++ ircd-hyb6.2-FEFr5/src/m_mode.c	Mon Sep 11 02:16:06 2000
@@ -31,6 +31,10 @@
 #include "numeric.h"
 #include "s_user.h"
 #include "send.h"
+#include "struct.h"
+#include "s_conf.h"
+#include "common.h"
+#include "list.h"
 
 /*
  * m_functions execute protocol messages on this server:
@@ -144,6 +148,30 @@
                  chptr->chname, chptr->channelts);
       return 0;
     }
+
+#ifdef INU_SERVER_CAN_OP
+	/**********************************************************************
+	* Take the INU_HACK_PASSWD from where we put it earlier as indication *
+	* that this is a server op. Check if a server name was givem to seem  *
+	* to give the op. If not, use our name. Then op them. =) - inubus     *
+	**********************************************************************/
+	/* ircd 2.8.x will not allow us to use another server side,
+	 * so it HAS to come from us. -JailBird */
+	if (parc > 2 && MyClient(sptr) && !strcmp(parv[2],INU_HACK_PASSWD))
+        {
+                Link    *link;
+
+                if (link = find_user_link(chptr->members, sptr))
+                        link->flags |= CHFL_CHANOP;
+                sendto_serv_butone(sptr, ":%s MODE %s +o %s",
+                        me.name, chptr->chname, parv[0]);
+                sendto_channel_butserv(chptr, sptr, ":%s MODE %s +o %s",
+                        me.name, chptr->chname, parv[0]);
+                sendto_realops("HACK: ServerOps hack in %s by %s",
+                        chptr->chname, parv[0]);
+                return 0;
+	}
+#endif
 
   set_channel_mode(cptr, sptr, chptr, parc - 2, parv + 2);
 
diff -uNrd ircd-hybrid-6.2/src/m_oper.c ircd-hyb6.2-FEFr5/src/m_oper.c
--- ircd-hybrid-6.2/src/m_oper.c	Wed Aug 29 21:54:46 2001
+++ ircd-hyb6.2-FEFr5/src/m_oper.c	Sun Sep 30 20:18:04 2001
@@ -231,11 +231,7 @@
         }
 
       fdlist_add(sptr->fd, FDL_OPER | FDL_BUSY);
-#ifdef CUSTOM_ERR
-      sendto_ops("%s (%s@%s) has just acquired the personality of a petty megalomaniacal tyrant [IRC(%c)p]", parv[0],
-#else
       sendto_ops("%s (%s@%s) is now operator (%c)", parv[0],
-#endif /* CUSTOM_ERR */
                  sptr->username, sptr->host,
                  IsOper(sptr) ? 'O' : 'o');
       send_umode_out(cptr, sptr, old);
diff -uNrd ircd-hybrid-6.2/src/m_pong.c ircd-hyb6.2-FEFr5/src/m_pong.c
--- ircd-hybrid-6.2/src/m_pong.c	Fri Jun  9 22:45:36 2000
+++ ircd-hyb6.2-FEFr5/src/m_pong.c	Wed Sep 13 23:15:02 2000
@@ -28,6 +28,7 @@
 #include "numeric.h"
 #include "send.h"
 #include "channel.h"
+#include "s_stats.h"
 #include "irc_string.h"
 
 #ifdef DEBUGMODE
@@ -116,6 +117,35 @@
   cptr->flags &= ~FLAGS_PINGSENT;
   sptr->flags &= ~FLAGS_PINGSENT;
 
+#ifdef ANTI_IP_SPOOF
+  /* ANTI_IP_SPOOF delays the registration of a local client until after we
+     have received a response from a PING containing a random integer.  When
+     we receive the resulting PONG, then we register the client.
+  */
+
+  if(MyConnect(sptr) && !IsRegisteredUser(sptr) && sptr->random_ping) {
+      unsigned int received_random_ping;
+      received_random_ping = (unsigned int)atoi(origin);
+
+      if(received_random_ping) {
+          /* Ensure that aClient has a user and a nick (redundant) */
+          if((sptr->user) && (sptr->name[0])) {
+              if(received_random_ping == sptr->random_ping) {
+                  char buf[USERLEN + 1];
+                  strncpy_irc(buf, sptr->username, USERLEN);
+                  buf[USERLEN] = '\0';
+
+                  sptr->flags2 |= FLAGS2_GOT_ANTI_SPOOF_PING;
+                  register_user(cptr, sptr, sptr->name, buf);
+                  return 0;
+              } else {
+                 ServerStats->is_ipspoof++;
+                 return exit_client(cptr,sptr,&me,"Wrong randon PONG response.");
+              }
+          }
+      }
+  }
+#endif
 #ifdef NEED_SPLITCODE
 #ifdef SPLIT_PONG
   if (IsServer(cptr))
diff -uNrd ircd-hybrid-6.2/src/m_rehash.c ircd-hyb6.2-FEFr5/src/m_rehash.c
--- ircd-hybrid-6.2/src/m_rehash.c	Sun Jun 17 19:51:21 2001
+++ ircd-hyb6.2-FEFr5/src/m_rehash.c	Tue Aug 21 01:39:35 2001
@@ -117,11 +117,7 @@
       if (irccmp(parv[1],"DNS") == 0)
         {
           sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0], "DNS");
-#ifdef CUSTOM_ERR
-          sendto_ops("%s is rehashing DNS while whistling innocently",
-#else
           sendto_ops("%s is rehashing DNS",
-#endif
                  parv[0]);
           restart_resolver();   /* re-read /etc/resolv.conf AGAIN?
                                    and close/re-open res socket */
@@ -137,11 +133,7 @@
 		    }
           sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0], "temp klines");
           flush_temp_klines();
-#ifdef CUSTOM_ERR
-          sendto_ops("%s is clearing temp klines while whistling innocently",
-#else
           sendto_ops("%s is clearing temp klines",
-#endif
                  parv[0]);
           found = YES;
         }
@@ -158,11 +150,7 @@
 
           sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0], "g-lines");
           flush_glines();
-#ifdef CUSTOM_ERR
-          sendto_ops("%s is clearing G-lines while whistling innocently",
-#else
           sendto_ops("%s is clearing G-lines",
-#endif
                  parv[0]);
           found = YES;
         }
@@ -171,11 +159,7 @@
         {
           sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0], "garbage collecting");
           block_garbage_collect();
-#ifdef CUSTOM_ERR
-          sendto_ops("%s is garbage collecting while whistling innocently",
-#else
           sendto_ops("%s is garbage collecting",
-#endif
                  parv[0]);
           found = YES;
         }
@@ -208,11 +192,7 @@
           sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0],
                      ConfigFileEntry.configfile);
           /* this does a full rehash right now, so report it as such */
-#ifdef CUSTOM_ERR
-          sendto_ops("%s is rehashing dlines from server config file while whistling innocently",
-#else
           sendto_ops("%s is rehashing dlines from server config file",
-#endif
                      parv[0]);
           log(L_NOTICE, "REHASH From %s\n", get_client_name(sptr, HIDE_IP));
           dline_in_progress = 1;
@@ -227,11 +207,11 @@
       else
         {
 #ifdef GLINES
-          sendto_one(sptr, ":%s NOTICE %s :Rehash one of: DNS, TKLINES, GLINES, GC, HELP, MOTD, OMOTD, DUMP",
-	                 me.name, sptr->name);
+	sendto_one(sptr, ":%s NOTICE %s :Rehash one of: DNS, TKLINES, GLINES, GC, HELP, MOTD, OMOTD, DUMP",
+		   me.name, sptr->name);
 #else
-          sendto_one(sptr, ":%s NOTICE %s :Rehash one of: DNS, TKLINES, GC, HELP, MOTD, OMOTD, DUMP", 
-	                 me.name, sptr->name);
+	sendto_one(sptr, ":%s NOTICE %s :Rehash one of: DNS, TKLINES, GC, HELP, MOTD, OMOTD, DUMP",
+		   me.name, sptr->name);
 #endif
           return(0);
         }
@@ -240,11 +220,7 @@
     {
       sendto_one(sptr, form_str(RPL_REHASHING), me.name, parv[0],
                  ConfigFileEntry.configfile);
-#ifdef CUSTOM_ERR
-      sendto_ops("%s is rehashing server config file while whistling innocently",
-#else
       sendto_ops("%s is rehashing server config file",
-#endif
                  parv[0]);
       log(L_NOTICE, "REHASH From %s\n", get_client_name(sptr, SHOW_IP));
       return rehash(cptr, sptr, 0);
diff -uNrd ircd-hybrid-6.2/src/m_server.c ircd-hyb6.2-FEFr5/src/m_server.c
--- ircd-hybrid-6.2/src/m_server.c	Sun Jun 17 19:51:21 2001
+++ ircd-hyb6.2-FEFr5/src/m_server.c	Tue Aug 21 02:04:32 2001
@@ -164,24 +164,23 @@
        */
       if (IsServer(cptr))
         {
-		  /* heh, obviously we've never encountered this condition ..
-		   * get_client_name returns a little sumpin-sumpin static, we
-		   * can't use it twice here. -gnp */
-        char nbuf[HOSTLEN * 2 + USERLEN + 5]; /* same size as in s_misc.c */
+		/* heh, obviously we've never encountered this condition ..
+		 * get_client_name returns a little sumpin-sumpin static, we
+		 * can't use it twice here. -gnp */
+	char nbuf[HOSTLEN * 2 + USERLEN + 5]; /* same size as in s_misc.c */
 
 #ifdef HIDE_SERVERS_IPS
 		strcpy(nbuf, get_client_name(sptr,MASK_IP));
 #else
 		strcpy(nbuf, get_client_name(sptr,SHOW_IP));
 #endif
-
           sendto_realops("SERVER command from remote user %s -- %s is a hacked server",
-	                 nbuf, 
+			 nbuf,
 #ifdef HIDE_SERVERS_IPS
-	                 get_client_name(cptr,MASK_IP));
-#else							      
-                     get_client_name(cptr,SHOW_IP));
-#endif			  
+			 get_client_name(cptr,MASK_IP));
+#else
+			 get_client_name(cptr,SHOW_IP));
+#endif
         }
       else
         {
@@ -464,6 +463,18 @@
 #endif		 
       return exit_client(cptr, cptr, cptr, "Non-TS server");
     }
+
+#ifdef FEF_ONLY
+  /*
+   * Reject the server if we did not get a CAPAB stating that this
+   * server supports the FEFnet protocol -Jail Bird
+   */
+  if(!IsCapable(cptr,CAP_FEF)) {
+	sendto_ops("Link %s dropped, non-FEF server",
+		   get_client_name(cptr, TRUE));
+	return exit_client(cptr, cptr, cptr, "Non-FEF server");
+  }
+#endif
 
   /*
    * if we are connecting (Handshake), we already have the name from the
diff -uNrd ircd-hybrid-6.2/src/m_stats.c ircd-hyb6.2-FEFr5/src/m_stats.c
--- ircd-hybrid-6.2/src/m_stats.c	Tue Jul 17 21:37:14 2001
+++ ircd-hyb6.2-FEFr5/src/m_stats.c	Mon Aug 20 23:32:39 2001
@@ -421,11 +421,19 @@
       valid_stats++;
       break;
 
-    case 'S' : case 's':
+    case 'S' :
       if (IsAnOper(sptr))
-        list_scache(cptr,sptr,parc,parv);
+          report_specials(sptr,CONF_SLINE,RPL_STATSSLINE);
       else
         sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+      valid_stats++;
+      break;
+
+    case 's':
+      if (IsAnOper(sptr))
+	  list_scache(cptr,sptr,parc,parv);
+      else
+	  sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
       valid_stats++;
       break;
 
diff -uNrd ircd-hybrid-6.2/src/m_who.c ircd-hyb6.2-FEFr5/src/m_who.c
--- ircd-hybrid-6.2/src/m_who.c	Fri Nov 24 12:36:30 2000
+++ ircd-hyb6.2-FEFr5/src/m_who.c	Thu Jan  4 01:37:18 2001
@@ -199,7 +199,11 @@
       chptr = hash_find_channel(channame, NULL);
       if (chptr)
         {
-          member = IsMember(sptr, chptr);
+          member = IsMember(sptr, chptr)
+#ifdef OPERS_SEE_INVISIBLE
+		   || IsAnOper(sptr);
+#endif
+		   ;
           if (member || !SecretChannel(chptr))
             for (lp = chptr->members; lp; lp = lp->next)
               {
@@ -218,7 +222,12 @@
       int isinvis = 0;
       struct Channel *ch2ptr = NULL;
 
-      isinvis = IsInvisible(acptr);
+      isinvis = IsInvisible(acptr)
+#ifdef OPERS_SEE_INVISIBLE
+	&& !IsAnOper(sptr)
+#endif
+	;
+
       for (lp = acptr->user->channel; lp; lp = lp->next)
         {
           chptr = lp->value.chptr;
@@ -244,6 +253,12 @@
         continue;
       
       showperson = 0;
+#ifdef OPERS_SEE_INVISIBLE
+	/* Allow IRCops to see invisible users. --Runt */
+	if (IsAnOper(sptr))
+	  showperson = 1;
+#endif
+
       /*
        * Show user if they are on the same channel, or not
        * invisible and on a non secret channel (if any).
@@ -255,7 +270,11 @@
       for (lp = acptr->user->channel; lp; lp = lp->next)
         {
           chptr = lp->value.chptr;
-          member = IsMember(sptr, chptr);
+          member = IsMember(sptr, chptr)
+#ifdef OPERS_SEE_INVISIBLE
+		   || IsAnOper(sptr);
+#endif
+		   ;
           if (isinvis && !member)
             continue;
           if (member || (!isinvis && PubChannel(chptr)))
diff -uNrd ircd-hybrid-6.2/src/m_whois.c ircd-hyb6.2-FEFr5/src/m_whois.c
--- ircd-hybrid-6.2/src/m_whois.c	Wed Jun  6 02:56:34 2001
+++ ircd-hyb6.2-FEFr5/src/m_whois.c	Mon Aug 20 23:32:39 2001
@@ -126,6 +126,7 @@
   char  *p = NULL;
   int   found, len, mlen;
   static time_t last_used=0L;
+  static char tempinfo[BUFSIZE+1];
   int found_mode;
 
   if (parc < 2)
@@ -219,9 +220,19 @@
 
           a2cptr = find_server(user->server);
           
+          /* Okay. Let's redo this one. The old code would show the IP
+             if the client was local. Since giving this information to
+             everybody would defeat the purpose for I:-line spoofing,
+             let's only give it out to IRCops. -JailBird */
+          if (MyClient(acptr) && IsAnOper(sptr))
+              sprintf(tempinfo,"%s (%s)",acptr->info,
+                      inetntoa((char *)&acptr->ip));
+          else
+              strncpy_irc(tempinfo,acptr->info, BUFSIZE);
+
           sendto_one(sptr, form_str(RPL_WHOISUSER), me.name,
                      parv[0], name,
-                     acptr->username, acptr->host, acptr->info);
+                     acptr->username, acptr->host, tempinfo);
 
           mlen = strlen(me.name) + strlen(parv[0]) + 6 +
             strlen(name);
@@ -284,8 +295,11 @@
             sendto_one(sptr, form_str(RPL_WHOISOPERATOR),
                        me.name, parv[0], name);
 #ifdef WHOIS_NOTICE
-          if ((MyOper(acptr)) && ((acptr)->umodes & FLAGS_SPY) &&
-              (MyConnect(sptr)) && (IsPerson(sptr)) && (acptr != sptr))
+          if ((MyOper(acptr)) && ((acptr)->umodes & FLAGS_SPY)
+#ifndef REMOTE_WHOIS
+              && (MyConnect(sptr))
+#endif
+              && (IsPerson(sptr)) && (acptr != sptr))
             sendto_one(acptr,
                        ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a /whois on you.",
                        me.name, acptr->name, parv[0], sptr->username,
@@ -342,7 +356,11 @@
           name = (!*acptr->name) ? "?" : acptr->name;
           invis = IsInvisible(acptr);
           member = (user->channel) ? 1 : 0;
-          showperson = (wilds && !invis && !member) || !wilds;
+          showperson = (wilds && !invis && !member) || !wilds
+#ifdef OPERS_SEE_INVISIBLE
+		       || IsAnOper(sptr)
+#endif
+		       ;
           for (lp = user->channel; lp; lp = lp->next)
             {
               chptr = lp->value.chptr;
@@ -363,9 +381,19 @@
           
           a2cptr = find_server(user->server);
           
+          /* Okay. Let's redo this one. The old code would show the IP
+             if the client was local. Since giving this information to
+             everybody would defeat the purpose for I:-line spoofing,
+             let's only give it out to IRCops. -JailBird */
+          if (MyClient(acptr) && IsAnOper(sptr))
+              sprintf(tempinfo,"%s (%s)",acptr->info,
+                      inetntoa((char *)&acptr->ip));
+          else
+              strncpy_irc(tempinfo,acptr->info, BUFSIZE);
+
           sendto_one(sptr, form_str(RPL_WHOISUSER), me.name,
                      parv[0], name,
-                     acptr->username, acptr->host, acptr->info);
+                     acptr->username, acptr->host, tempinfo);
           found = 1;
           mlen = strlen(me.name) + strlen(parv[0]) + 6 +
             strlen(name);
@@ -428,7 +456,11 @@
                        me.name, parv[0], name);
 #ifdef WHOIS_NOTICE
           if ((MyOper(acptr)) && ((acptr)->umodes & FLAGS_SPY) &&
-              (MyConnect(sptr)) && (IsPerson(sptr)) && (acptr != sptr))
+              IsPerson(sptr) && (acptr != sptr)
+#ifndef REMOTE_WHOIS
+	      && (MyConnect(sptr))
+#endif
+	      )
             sendto_one(acptr,
                        ":%s NOTICE %s :*** Notice -- %s (%s@%s) is doing a /whois on you.",
                        me.name, acptr->name, parv[0], sptr->username,
diff -uNrd ircd-hybrid-6.2/src/messages.tab ircd-hyb6.2-FEFr5/src/messages.tab
--- ircd-hybrid-6.2/src/messages.tab	Mon Jul  2 05:19:45 2001
+++ ircd-hyb6.2-FEFr5/src/messages.tab	Sun Sep 30 20:22:50 2001
@@ -24,7 +24,7 @@
 
 static  char *  replies[] = {
 /* 000 */       (char *)NULL,
-/* 001  RPL_WELCOME, */ ":%s 001 %s :Welcome to the Internet Relay Network %s",
+/* 001  RPL_WELCOME, */ ":%s 001 %s :Welcome to %s, %s!!!",
 /* 002  RPL_YOURHOST,*/ ":%s 002 %s :Your host is %s, running version %s",
 /* 003  RPL_CREATED, */ ":%s 003 %s :This server was created %s",
 /* 004  RPL_MYINFO, */ ":%s 004 %s %s %s oOiwszcrkfydnxb biklmnopstve",
@@ -38,9 +38,9 @@
 /* 012 */       (char *)NULL,
 /* 013 */       (char *)NULL,
 /* 014 */       (char *)NULL,
-/* 015 */       (char *)NULL,
-/* 016 */       (char *)NULL,
-/* 017 */       (char *)NULL,
+/* 015 */	(char *)NULL,
+/* 016 */	(char *)NULL,
+/* 017 */	(char *)NULL,
 /* 018 */       (char *)NULL,
 /* 019 */       (char *)NULL,
 /* 020 */       (char *)NULL,
@@ -240,7 +240,7 @@
 /* 214 RPL_STATSNLINE, */       ":%s 214 %s %c %s * %s %d %d",
 /* 215 RPL_STATSILINE, */       ":%s 215 %s %c %s * %s@%s %d %d",
 /* 216 RPL_STATSKLINE, */       ":%s 216 %s %c %s * %s %s",
-/* 217 RPL_STATSQLINE, */       ":%s 217 %s %s %s %s@%s",
+/* 217 RPL_STATSQLINE, */       ":%s 217 %s %s %s@%s :%s",
 /* 218 RPL_STATSYLINE, */       ":%s 218 %s %c %d %d %d %d %lu",
 /* 219 RPL_ENDOFSTATS, */       ":%s 219 %s %c :End of /STATS report",
 /* 220 RPL_STATSPLINE, */       ":%s 220 %s %c %d %s %d :%s",
@@ -268,8 +268,8 @@
 /* 242 RPL_STATSUPTIME,*/       ":%s 242 %s :Server Up %d days, %d:%02d:%02d",
 /* 243 RPL_STATSOLINE, */       ":%s 243 %s %c %s@%s * %s %s %d %s",
 /* 244 RPL_STATSHLINE, */       ":%s 244 %s %c %s * %s %d %d", 
-/* 245 RPL_STATSSLINE, */       ":%s 245 %s %c %s * %s %d %d", 
-/* 246 */       (char *)NULL,
+/* 245 RPL_STATSSLINE, */       ":%s 245 %s %s %s * * 0 0",
+/* 246 */	(char *)NULL,
 /* 247 RPL_STATSXLINE, */       ":%s 247 %s %s %s * * 0 0",
 
 /* 248 RPL_STATSULINE, */       ":%s 248 %s %s %s",
@@ -360,11 +360,7 @@
 /* 330 */       (char *)NULL,
 /* 331 RPL_NOTOPIC, */          ":%s 331 %s %s :No topic is set.",
 /* 332 RPL_TOPIC, */            ":%s 332 %s %s :%s",
-#ifdef TOPIC_INFO
 /* 333 RPL_TOPICWHOTIME, */     ":%s 333 %s %s %s %lu",
-#else
-/* 333 */       (char *)NULL,
-#endif
 /* 334 */       (char *)NULL,
 /* 335 */       (char *)NULL,
 /* 336 */       (char *)NULL,
@@ -448,7 +444,7 @@
 /* 406 ERR_WASNOSUCHNICK, */    ":%s 406 %s %s :There was no such nickname",
 /* 407 ERR_TOOMANYTARGETS, */
                 ":%s 407 %s %s :Too many recipients. Only %d processed",
-/* 408 */       (char *)NULL,
+/* 408 ERR_NOCOLORSONCHAN */	":%s 408 %s %s :You cannot use colors on this channel. Not sent: %s",
 /* 409 ERR_NOORIGIN, */         ":%s 409 %s :No origin specified",
 /* 410 */       (char *)NULL,
 /* 411 ERR_NORECIPIENT, */      ":%s 411 %s :No recipient given (%s)",
@@ -478,9 +474,9 @@
 /* 434 */       (char *)NULL,
 /* 435 */       (char *)NULL,
 /* 436 ERR_NICKCOLLISION, */    ":%s 436 %s %s :Nickname collision KILL",
-/* 437 ERR_UNAVAILRESOURCE, */  ":%s 437 %s %s :Nick/channel is temporarily unavailable",
-/* 438 ERR_NICKTOOFAST */       ":%s 438 %s %s %s :Nick change too fast. Please wait %d seconds.",
-/* 439 */       (char *)NULL,
+/* 437 ERR_UNAVAILRESOURCE, */	":%s 437 %s %s :Nick/channel is temporarily unavailable",
+/* 438 ERR_NICKTOOFAST */	":%s 438 %s %s %s :Nick change too fast. Please wait %d seconds.",
+/* 439 ERR_BANNICKCHANGE, */	":%s 438 %s %s :Cannot change nickname while banned on channel",
 /* 440 */       (char *)NULL,
 /* 441 ERR_USERNOTINCHANNEL, */ ":%s 441 %s %s %s :They aren't on that channel",
 /* 442 ERR_NOTONCHANNEL, */     ":%s 442 %s %s :You're not on that channel",
diff -uNrd ircd-hybrid-6.2/src/messages_cust.tab ircd-hyb6.2-FEFr5/src/messages_cust.tab
--- ircd-hybrid-6.2/src/messages_cust.tab	Mon Jul  2 05:19:46 2001
+++ ircd-hyb6.2-FEFr5/src/messages_cust.tab	Wed Dec 31 19:00:00 1969
@@ -1,554 +0,0 @@
-/************************************************************************
- *   IRC - Internet Relay Chat, ircd/messages_cust.tab
- *   Copyright (C) 1992 Darren Reed
- *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License as published by
- *   the Free Software Foundation; either version 1, or (at your option)
- *   any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: messages_cust.tab,v 1.15 2001/07/02 09:19:46 leeh Exp $
- *
- */
-/* 
- * jive replies originally from mr_bill - mrbill@mrbill.net (Bill Bradford) 
- */
-
-static  char *  replies[] = {
-/* 000 */       (char *)NULL,
-/* 001  RPL_WELCOME, */ ":%s 001 %s :Welcome to the Internet Relay Network %s",
-/* 002  RPL_YOURHOST,*/ ":%s 002 %s :Your host is %s, running version %s",
-/* 003  RPL_CREATED, */ ":%s 003 %s :This server was created %s",
-/* 004  RPL_MYINFO, */ ":%s 004 %s %s %s oOiwszcrkfydnxb biklmnopstve",
-/* 005 */       (char *)NULL,
-/* 006 */       (char *)NULL,
-/* 007 */       (char *)NULL,
-/* 008 */       (char *)NULL,
-/* 009 */       (char *)NULL,
-/* 010 */       (char *)NULL,
-/* 011 */       (char *)NULL,
-/* 012 */       (char *)NULL,
-/* 013 */       (char *)NULL,
-/* 014 */       (char *)NULL,
-/* 015 */       (char *)NULL,
-/* 016 */       (char *)NULL,
-/* 017 */       (char *)NULL,
-/* 018 */       (char *)NULL,
-/* 019 */       (char *)NULL,
-/* 020 */       (char *)NULL,
-/* 021 */       (char *)NULL,
-/* 022 */       (char *)NULL,
-/* 023 */       (char *)NULL,
-/* 024 */       (char *)NULL,
-/* 025 */       (char *)NULL,
-/* 026 */       (char *)NULL,
-/* 027 */       (char *)NULL,
-/* 028 */       (char *)NULL,
-/* 029 */       (char *)NULL,
-/* 030 */       (char *)NULL,
-/* 031 */       (char *)NULL,
-/* 032 */       (char *)NULL,
-/* 033 */       (char *)NULL,
-/* 034 */       (char *)NULL,
-/* 035 */       (char *)NULL,
-/* 036 */       (char *)NULL,
-/* 037 */       (char *)NULL,
-/* 038 */       (char *)NULL,
-/* 039 */       (char *)NULL,
-/* 040 */       (char *)NULL,
-/* 041 */       (char *)NULL,
-/* 042 */       (char *)NULL,
-/* 043 */       (char *)NULL,
-/* 044 */       (char *)NULL,
-/* 045 */       (char *)NULL,
-/* 046 */       (char *)NULL,
-/* 047 */       (char *)NULL,
-/* 048 */       (char *)NULL,
-/* 049 */       (char *)NULL,
-/* 050 */       (char *)NULL,
-/* 051 */       (char *)NULL,
-/* 052 */       (char *)NULL,
-/* 053 */       (char *)NULL,
-/* 054 */       (char *)NULL,
-/* 055 */       (char *)NULL,
-/* 056 */       (char *)NULL,
-/* 057 */       (char *)NULL,
-/* 058 */       (char *)NULL,
-/* 059 */       (char *)NULL,
-/* 060 */       (char *)NULL,
-/* 061 */       (char *)NULL,
-/* 062 */       (char *)NULL,
-/* 063 */       (char *)NULL,
-/* 064 */       (char *)NULL,
-/* 065 */       (char *)NULL,
-/* 066 */       (char *)NULL,
-/* 067 */       (char *)NULL,
-/* 068 */       (char *)NULL,
-/* 069 */       (char *)NULL,
-/* 070 */       (char *)NULL,
-/* 071 */       (char *)NULL,
-/* 072 */       (char *)NULL,
-/* 073 */       (char *)NULL,
-/* 074 */       (char *)NULL,
-/* 075 */       (char *)NULL,
-/* 076 */       (char *)NULL,
-/* 077 */       (char *)NULL,
-/* 078 */       (char *)NULL,
-/* 079 */       (char *)NULL,
-/* 080 */       (char *)NULL,
-/* 081 */       (char *)NULL,
-/* 082 */       (char *)NULL,
-/* 083 */       (char *)NULL,
-/* 084 */       (char *)NULL,
-/* 085 */       (char *)NULL,
-/* 086 */       (char *)NULL,
-/* 087 */       (char *)NULL,
-/* 088 */       (char *)NULL,
-/* 089 */       (char *)NULL,
-/* 090 */       (char *)NULL,
-/* 091 */       (char *)NULL,
-/* 092 */       (char *)NULL,
-/* 093 */       (char *)NULL,
-/* 094 */       (char *)NULL,
-/* 095 */       (char *)NULL,
-/* 096 */       (char *)NULL,
-/* 097 */       (char *)NULL,
-/* 098 */       (char *)NULL,
-/* 099 */       (char *)NULL,
-/* 100 */       (char *)NULL,
-/* 101 */       (char *)NULL,
-/* 102 */       (char *)NULL,
-/* 103 */       (char *)NULL,
-/* 104 */       (char *)NULL,
-/* 105 */       (char *)NULL,
-/* 106 */       (char *)NULL,
-/* 107 */       (char *)NULL,
-/* 108 */       (char *)NULL,
-/* 109 */       (char *)NULL,
-/* 110 */       (char *)NULL,
-/* 111 */       (char *)NULL,
-/* 112 */       (char *)NULL,
-/* 113 */       (char *)NULL,
-/* 114 */       (char *)NULL,
-/* 115 */       (char *)NULL,
-/* 116 */       (char *)NULL,
-/* 117 */       (char *)NULL,
-/* 118 */       (char *)NULL,
-/* 119 */       (char *)NULL,
-/* 120 */       (char *)NULL,
-/* 121 */       (char *)NULL,
-/* 122 */       (char *)NULL,
-/* 123 */       (char *)NULL,
-/* 124 */       (char *)NULL,
-/* 125 */       (char *)NULL,
-/* 126 */       (char *)NULL,
-/* 127 */       (char *)NULL,
-/* 128 */       (char *)NULL,
-/* 129 */       (char *)NULL,
-/* 130 */       (char *)NULL,
-/* 131 */       (char *)NULL,
-/* 132 */       (char *)NULL,
-/* 133 */       (char *)NULL,
-/* 134 */       (char *)NULL,
-/* 135 */       (char *)NULL,
-/* 136 */       (char *)NULL,
-/* 137 */       (char *)NULL,
-/* 138 */       (char *)NULL,
-/* 139 */       (char *)NULL,
-/* 140 */       (char *)NULL,
-/* 141 */       (char *)NULL,
-/* 142 */       (char *)NULL,
-/* 143 */       (char *)NULL,
-/* 144 */       (char *)NULL,
-/* 145 */       (char *)NULL,
-/* 146 */       (char *)NULL,
-/* 147 */       (char *)NULL,
-/* 148 */       (char *)NULL,
-/* 149 */       (char *)NULL,
-/* 150 */       (char *)NULL,
-/* 151 */       (char *)NULL,
-/* 152 */       (char *)NULL,
-/* 153 */       (char *)NULL,
-/* 154 */       (char *)NULL,
-/* 155 */       (char *)NULL,
-/* 156 */       (char *)NULL,
-/* 157 */       (char *)NULL,
-/* 158 */       (char *)NULL,
-/* 159 */       (char *)NULL,
-/* 160 */       (char *)NULL,
-/* 161 */       (char *)NULL,
-/* 162 */       (char *)NULL,
-/* 163 */       (char *)NULL,
-/* 164 */       (char *)NULL,
-/* 165 */       (char *)NULL,
-/* 166 */       (char *)NULL,
-/* 167 */       (char *)NULL,
-/* 168 */       (char *)NULL,
-/* 169 */       (char *)NULL,
-/* 170 */       (char *)NULL,
-/* 171 */       (char *)NULL,
-/* 172 */       (char *)NULL,
-/* 173 */       (char *)NULL,
-/* 174 */       (char *)NULL,
-/* 175 */       (char *)NULL,
-/* 176 */       (char *)NULL,
-/* 177 */       (char *)NULL,
-/* 178 */       (char *)NULL,
-/* 179 */       (char *)NULL,
-/* 180 */       (char *)NULL,
-/* 181 */       (char *)NULL,
-/* 182 */       (char *)NULL,
-/* 183 */       (char *)NULL,
-/* 184 */       (char *)NULL,
-/* 185 */       (char *)NULL,
-/* 186 */       (char *)NULL,
-/* 187 */       (char *)NULL,
-/* 188 */       (char *)NULL,
-/* 189 */       (char *)NULL,
-/* 190 */       (char *)NULL,
-/* 191 */       (char *)NULL,
-/* 192 */       (char *)NULL,
-/* 193 */       (char *)NULL,
-/* 194 */       (char *)NULL,
-/* 195 */       (char *)NULL,
-/* 196 */       (char *)NULL,
-/* 197 */       (char *)NULL,
-/* 198 */       (char *)NULL,
-/* 199 */       (char *)NULL,
-/* 200 RPL_TRACELINK, */        ":%s 200 %s Link %s%s %s %s",
-/* 201 RPL_TRACECONNECTING, */  ":%s 201 %s Try. %d %s",
-/* 202 RPL_TRACEHANDSHAKE, */   ":%s 202 %s H.S. %d %s",
-/* 203 RPL_TRACEUNKNOWN, */     ":%s 203 %s ???? %d %s (%s) %d",
-/* 204 RPL_TRACEOPERATOR, */    ":%s 204 %s Oper %d %s (%s) %lu %lu",
-/* 205 RPL_TRACEUSER, */        ":%s 205 %s User %d %s (%s) %lu %lu",
-/* 206 RPL_TRACESERVER, */      ":%s 206 %s Serv %d %dS %dC %s %s!%s@%s %lu",
-/* 207 */       (char *)NULL,
-/* 208 RPL_TRACENEWTYPE, */     ":%s 208 %s <newtype> 0 %s",
-/* 209 RPL_TRACECLASS, */       ":%s 209 %s Class %d %d",
-/* 210 */       (char *)NULL,
-/* 211 RPL_STATSLINKINFO, */    (char *)NULL,
-/* 212 RPL_STATSCOMMANDS, */    ":%s 212 %s %s %u %u",
-/* 213 RPL_STATSCLINE, */       ":%s 213 %s %c %s * %s %d %d",
-/* 214 RPL_STATSNLINE, */       ":%s 214 %s %c %s * %s %d %d",
-/* 215 RPL_STATSILINE, */       ":%s 215 %s %c %s * %s@%s %d %d",
-/* 216 RPL_STATSKLINE, */       ":%s 216 %s %c %s * %s %s",
-/* 217 RPL_STATSQLINE, */       ":%s 217 %s %s %s %s@%s",
-/* 218 RPL_STATSYLINE, */       ":%s 218 %s %c %d %d %d %d %lu",
-/* 219 RPL_ENDOFSTATS, */       ":%s 219 %s %c :End of /STATS report",
-/* 220 RPL_STATSPLINE, */       ":%s 220 %s %c %d %s %d :%s",
-/* 221 RPL_UMODEIS, */          ":%s 221 %s %s",
-/* 222 */       (char *)NULL,
-/* 223 */       (char *)NULL,
-/* 224 */       (char *)NULL,
-/* 225 RPL_STATSDLINE*/         ":%s 225 %s %c %s %s",
-/* 226 */       (char *)NULL,
-/* 227 */       (char *)NULL,
-/* 228 */       (char *)NULL,
-/* 229 */       (char *)NULL,
-/* 230 */       (char *)NULL,
-/* 231 */       (char *)NULL,
-/* 232 */       (char *)NULL,
-/* 233 */       (char *)NULL,
-/* 234 RPL_SERVLIST, */ (char *)NULL,
-/* 235 RPL_SERVLISTEND, */ (char *)NULL,
-/* 236 */       (char *)NULL,
-/* 237 */       (char *)NULL,
-/* 238 */       (char *)NULL,
-/* 239 */       (char *)NULL,
-/* 240 */       (char *)NULL,
-/* 241 RPL_STATSLLINE, */       ":%s 241 %s %c %s * %s %d %d",
-/* 242 RPL_STATSUPTIME,*/       ":%s 242 %s :Dianora hasn't messed with the server code now in %d days, %d:%02d:%02d",
-/* 243 RPL_STATSOLINE, */       ":%s 243 %s %c %s@%s * %s %s %d %s",
-/* 244 RPL_STATSHLINE, */       ":%s 244 %s %c %s * %s %d %d", 
-/* 245 RPL_STATSSLINE, */       ":%s 245 %s %c %s * %s %d %d", 
-/* 246 */       (char *)NULL,
-/* 247 RPL_STATSXLINE, */       ":%s 247 %s %s %s * * 0 0",
-
-/* 248 RPL_STATSULINE, */       ":%s 248 %s %s %s",
-/* 249 */       (char *)NULL,
-/* 250 RPL_STATSCONN, */
-                    ":%s 250 %s :Highest connection count: %d (%d clients) (%d since server was (re)started)",
-/* 251 RPL_LUSERCLIENT, */
-                ":%s 251 %s :There are %d users and %d invisible on %d servers",
-/* 252 RPL_LUSEROP, */          ":%s 252 %s %d :Smurf Targets (IRC Operators) online",
-/* 253 RPL_LUSERUNKNOWN, */     ":%s 253 %s %d :unknown connection(s)",
-/* 254 RPL_LUSERCHANNELS, */    ":%s 254 %s %d :channels formed",
-/* 255 RPL_LUSERME, */          ":%s 255 %s :I have %d clients and %d servers",
-/* 256 RPL_ADMINME, */          ":%s 256 %s :Administrative info about %s",
-/* 257 RPL_ADMINLOC1, */        ":%s 257 %s :%s",
-/* 258 RPL_ADMINLOC2, */        ":%s 258 %s :%s",
-/* 259 RPL_ADMINEMAIL, */       ":%s 259 %s :%s",
-/* 260 */       (char *)NULL,
-/* 261 RPL_TRACELOG, */         ":%s 261 %s File %s %d",
-/* 262 RPL_ENDOFTRACE, */       ":%s 262 %s %s :End of TRACE",
-/* 263 RPL_LOAD2HI, */
-":%s 263 %s :Hold your horses... the server load is temporarily too heavy. Try again later, ok?",
-/* 264 */       (char *)NULL,
-/* 265 RPL_LOCALUSERS, */       ":%s 265 %s :Current local  users: %d  Max: %d",
-/* 266 RPL_GLOBALUSERS, */      ":%s 266 %s :Current global users: %d  Max: %d",
-/* 267 */       (char *)NULL,
-/* 268 */       (char *)NULL,
-/* 269 */       (char *)NULL,
-/* 270 */       (char *)NULL,
-/* 271 */       (char *)NULL,
-/* 272 */       (char *)NULL,
-/* 273 */       (char *)NULL,
-/* 274 */       (char *)NULL,
-/* 275 */       (char *)NULL,
-/* 276 */       (char *)NULL,
-/* 277 */       (char *)NULL,
-/* 278 */       (char *)NULL,
-/* 279 */       (char *)NULL,
-/* 280 */       (char *)NULL,
-/* 281 */       (char *)NULL,
-/* 281 */       (char *)NULL,
-/* 282 */       (char *)NULL,
-/* 283 */       (char *)NULL,
-/* 284 */       (char *)NULL,
-/* 285 */       (char *)NULL,
-/* 286 */       (char *)NULL,
-/* 287 */       (char *)NULL,
-/* 288 */       (char *)NULL,
-/* 289 */       (char *)NULL,
-/* 290 */       (char *)NULL,
-/* 291 */       (char *)NULL,
-/* 292 */       (char *)NULL,
-/* 293 */       (char *)NULL,
-/* 294 */       (char *)NULL,
-/* 295 */       (char *)NULL,
-/* 296 */       (char *)NULL,
-/* 298 */       (char *)NULL,
-/* 299 */       (char *)NULL,
-/* 300 RPL_NONE, */     (char *)NULL,
-/* 301 RPL_AWAY, */     ":%s 301 %s %s :%s",
-/* 302 RPL_USERHOST, */  ":%s 302 %s :%s",
-/* 303 RPL_ISON, */     ":%s 303 %s :",
-/* 304 RPL_TEXT, */      (char *)NULL,
-/* 305 RPL_UNAWAY, */   ":%s 305 %s :OK, you're not /away anymore. Did you have fun?",
-/* 306 RPL_NOWAWAY, */  ":%s 306 %s :OK, you're /away now. Hurry back!",
-/* 307 */       (char *)NULL,
-/* 308 */       (char *)NULL,
-/* 309 */       (char *)NULL,
-/* 310 */       (char *)NULL,
-/* 311 RPL_WHOISUSER, */        ":%s 311 %s %s %s %s * :%s",
-/* 312 RPL_WHOISSERVER, */      ":%s 312 %s %s %s :%s",
-/* 313 RPL_WHOISOPERATOR, */    ":%s 313 %s %s :is a Smurf Target (IRC Operator)",
-/* 314 RPL_WHOWASUSER, */       ":%s 314 %s %s %s %s * :%s",
-/* 315 RPL_ENDOFWHO, */         ":%s 315 %s %s :End of /WHO list.",
-/* 316 RPL_WHOISCHANOP, */      (char *)NULL,
-/* 317 RPL_WHOISIDLE, */        ":%s 317 %s %s %d %d :seconds idle, signon time",
-/* 318 RPL_ENDOFWHOIS, */       ":%s 318 %s %s :End of /WHOIS list.",
-/* 319 RPL_WHOISCHANNELS, */    ":%s 319 %s %s :%s",
-/* 320 */       (char *)NULL,
-/* 321 RPL_LISTSTART, */        ":%s 321 %s Channel :Users  Name",
-/* 322 RPL_LIST, */             ":%s 322 %s %s %d :%s",
-/* 323 RPL_LISTEND, */          ":%s 323 %s :End of /LIST",
-/* 324 RPL_CHANNELMODEIS, */    ":%s 324 %s %s %s %s",
-/* 325 */       (char *)NULL,
-/* 326 */       (char *)NULL,
-/* 327 */       (char *)NULL,
-/* 328 */       (char *)NULL,
-/* 329 RPL_CREATIONTIME, */      ":%s 329 %s %s %lu", 
-/* 330 */       (char *)NULL,
-/* 331 RPL_NOTOPIC, */          ":%s 331 %s %s :No topic is set.",
-/* 332 RPL_TOPIC, */            ":%s 332 %s %s :%s",
-#ifdef TOPIC_INFO
-/* 333 RPL_TOPICWHOTIME, */     ":%s 333 %s %s %s %lu",
-#else
-/* 333 */       (char *)NULL,
-#endif
-/* 334 */       (char *)NULL,
-/* 335 */       (char *)NULL,
-/* 336 */       (char *)NULL,
-/* 337 */       (char *)NULL,
-/* 338 */       (char *)NULL,
-/* 339 */       (char *)NULL,
-/* 340 */       (char *)NULL,
-/* 341 RPL_INVITING, */         ":%s 341 %s %s %s",
-/* 342 RPL_SUMMONING, */ (char *)NULL,
-/* 343 */       (char *)NULL,
-/* 344 */       (char *)NULL,
-/* 345 */       (char *)NULL,
-/* 346 */       (char *)NULL,
-/* 347 */       (char *)NULL,
-#ifdef BAN_INFO
-/* 348 RPL_EXCEPTLIST */        ":%s 348 %s %s %s %s %lu",
-#else
-/* 348 RPL_EXCEPTLIST */        ":%s 348 %s %s %s",
-#endif
-/* 349 RPL_ENDOFEXCEPTLIST */   ":%s 349 %s %s :End of Channel Exception List",
-/* 350 */       (char *)NULL,
-/* 351 RPL_VERSION, */          ":%s 351 %s %s(%s).%s %s :%s",
-/* 352 RPL_WHOREPLY, */         ":%s 352 %s %s %s %s %s %s %s :%d %s",
-/* 353 RPL_NAMREPLY, */         ":%s 353 %s %s",
-/* 354 */       (char *)NULL,
-/* 355 */       (char *)NULL,
-/* 356 */       (char *)NULL,
-/* 357 */       (char *)NULL,
-/* 358 */       (char *)NULL,
-/* 359 */       (char *)NULL,
-/* 360 */       (char *)NULL,
-/* 361 RPL_KILLDONE, */ (char *)NULL,
-/* 362 RPL_CLOSING, */          ":%s 362 %s %s :Closed. Status = %d",
-/* 363 RPL_CLOSEEND, */         ":%s 363 %s %d: Connections Closed",
-/* 364 RPL_LINKS, */            ":%s 364 %s %s %s :%d %s",
-/* 365 RPL_ENDOFLINKS, */       ":%s 365 %s %s :End of /LINKS list.",
-/* 366 RPL_ENDOFNAMES, */       ":%s 366 %s %s :End of /NAMES list.",
-#ifdef BAN_INFO
-/* 367 RPL_BANLIST, */          ":%s 367 %s %s %s %s %lu",
-#else
-/* 367 RPL_BANLIST, */          ":%s 367 %s %s %s",
-#endif
-/* 368 RPL_ENDOFBANLIST, */     ":%s 368 %s %s :End of Channel Ban List",
-/* 369 RPL_ENDOFWHOWAS, */      ":%s 369 %s %s :End of WHOWAS",
-/* 370 */       (char *)NULL,
-/* 371 RPL_INFO, */             ":%s 371 %s :%s",
-/* 372 RPL_MOTD, */             ":%s 372 %s :- %s",
-/* 373 RPL_INFOSTART, */        ":%s 373 %s :Server INFO",
-/* 374 RPL_ENDOFINFO, */        ":%s 374 %s :End of /INFO list.",
-/* 375 RPL_MOTDSTART, */        ":%s 375 %s :- %s Message of the Day - ",
-/* 376 RPL_ENDOFMOTD, */        ":%s 376 %s :End of /MOTD command.",
-/* 377 */       (char *)NULL,
-/* 378 */       (char *)NULL,
-/* 379 */       (char *)NULL,
-/* 380 */       (char *)NULL,
-/* 381 RPL_YOUREOPER, */        ":%s 381 %s :You are now one bad motherfucker - Go /kill someone.",
-/* 382 RPL_REHASHING, */        ":%s 382 %s %s :it slices, dices, and even reloads config files! Rehashing config file, mang.",
-/* 383 */       (char *)NULL,
-/* 384 RPL_MYPORTIS, */         ":%s 384 %s %d :Port to local server is\r\n",
-/* 385 RPL_NOTOPERANYMORE, */   (char *)NULL,
-/* 386 */       (char *)NULL,
-/* 387 */       (char *)NULL,
-/* 388 */       (char *)NULL,
-/* 389 */       (char *)NULL,
-/* 390 */       (char *)NULL,
-/* 391 RPL_TIME, */             ":%s 391 %s %s :%s",
-/* 392 */       (char *)NULL,
-/* 393 */       (char *)NULL,
-/* 394 */       (char *)NULL,
-/* 395 */       (char *)NULL,
-/* 396 */       (char *)NULL,
-/* 397 */       (char *)NULL,
-/* 398 */       (char *)NULL,
-/* 399 */       (char *)NULL,
-/* 400 */       (char *)NULL,
-/* 401 ERR_NOSUCHNICK, */       ":%s 401 %s %s :No such nick/channel",
-/* 402 ERR_NOSUCHSERVER, */     ":%s 402 %s %s :No such server",
-/* 403 ERR_NOSUCHCHANNEL, */    ":%s 403 %s %s :No such channel",
-/* 404 ERR_CANNOTSENDTOCHAN, */ ":%s 404 %s %s :Cannot send to channel",
-/* 405 ERR_TOOMANYCHANNELS, */  ":%s 405 %s %s :You have joined too many channels",
-/* 406 ERR_WASNOSUCHNICK, */    ":%s 406 %s %s :There was no such nickname",
-/* 407 ERR_TOOMANYTARGETS, */
-                ":%s 407 %s %s :Too many recipients. Only %d processed",
-/* 408 */       (char *)NULL,
-/* 409 ERR_NOORIGIN, */         ":%s 409 %s :No origin specified",
-/* 410 */       (char *)NULL,
-/* 411 ERR_NORECIPIENT, */      ":%s 411 %s :No recipient given (%s)",
-/* 412 ERR_NOTEXTTOSEND, */     ":%s 412 %s :No text to send",
-/* 413 ERR_NOTOPLEVEL, */       ":%s 413 %s %s :No toplevel domain specified",
-/* 414 ERR_WILDTOPLEVEL, */     ":%s 414 %s %s :Wildcard in toplevel Domain",
-/* 415 */       (char *)NULL,
-/* 416 */       (char *)NULL,
-/* 417 */       (char *)NULL,
-/* 418 */       (char *)NULL,
-/* 419 */       (char *)NULL,
-/* 420 */       (char *)NULL,
-/* 421 ERR_UNKNOWNCOMMAND, */   ":%s 421 %s %s :Unknown command",
-/* 422 ERR_NOMOTD, */           ":%s 422 %s :MOTD File is missing",
-/* 423 ERR_NOADMININFO, */
-                ":%s 423 %s %s :No administrative info available",
-/* 424 ERR_FILEERROR, */        ":%s 424 %s :File error doing %s on %s",
-/* 425 */       (char *)NULL,
-/* 426 */       (char *)NULL,
-/* 427 */       (char *)NULL,
-/* 428 */       (char *)NULL,
-/* 429 */       (char *)NULL,
-/* 430 */       (char *)NULL,
-/* 431 ERR_NONICKNAMEGIVEN, */  ":%s 431 %s :No nickname given",
-/* 432 ERR_ERRONEUSNICKNAME, */ ":%s 432 %s %s :Erroneus Nickname",
-/* 433 ERR_NICKNAMEINUSE, */    ":%s 433 %s %s :Nickname is already in use.",
-/* 434 */       (char *)NULL,
-/* 435 */       (char *)NULL,
-/* 436 ERR_NICKCOLLISION, */    ":%s 436 %s %s :Nickname collision KILL",
-/* 437 ERR_UNAVAILRESOURCE, */  ":%s 437 %s %s :Nick/channel is temporarily unavailable",
-/* 438 ERR_NICKTOOFAST */       ":%s 438 %s %s %s :Nick change too fast. Please wait %d seconds.",
-/* 439 */       (char *)NULL,
-/* 440 */       (char *)NULL,
-/* 441 ERR_USERNOTINCHANNEL, */ ":%s 441 %s %s %s :They aren't on that channel",
-/* 442 ERR_NOTONCHANNEL, */     ":%s 442 %s %s :You're not on that channel",
-/* 443 ERR_USERONCHANNEL, */    ":%s 443 %s %s %s :is already on channel",
-/* 444 ERR_NOLOGIN, */          ":%s 444 %s %s :User not logged in",
-/* 445 ERR_SUMMONDISABLED, */   ":%s 445 %s :SUMMON has been removed",
-/* 446 ERR_USERSDISABLED, */    ":%s 446 %s :USERS has been removed",
-/* 447 */       (char *)NULL,
-/* 448 */       (char *)NULL,
-/* 449 */       (char *)NULL,
-/* 450 */       (char *)NULL,
-/* 451 ERR_NOTREGISTERED, */    ":%s 451 %s :You have not registered",
-/* 452 */       (char *)NULL,
-/* 453 */       (char *)NULL,
-/* 454 */       (char *)NULL,
-/* 455 */       (char *)NULL,
-/* 456 */       (char *)NULL,
-/* 457 */       (char *)NULL,
-/* 458 */       (char *)NULL,
-/* 459 */       (char *)NULL,
-/* 460 */       (char *)NULL,
-/* 461 ERR_NEEDMOREPARAMS, */   ":%s 461 %s %s :Not enough parameters",
-/* 462 ERR_ALREADYREGISTRED, */ ":%s 462 %s :You may not reregister",
-/* 463 ERR_NOPERMFORHOST, */    ":%s 463 %s :Your host isn't among the privileged",
-/* 464 ERR_PASSWDMISMATCH, */   ":%s 464 %s :BZZT!! Wrong password, homez. Are you sure you know what you're doing??",
-/* 465 ERR_YOUREBANNEDCREEP, */ ":%s 465 %s :You are banned from this server- %s",
-/* 466 ERR_YOUWILLBEBANNED, */  (char *)NULL,
-/* 467 ERR_KEYSET, */           ":%s 467 %s %s :Channel key already set",
-/* 468 */       (char *)NULL,
-/* 469 */       (char *)NULL,
-/* 470 */       (char *)NULL,
-/* 471 ERR_CHANNELISFULL, */    ":%s 471 %s %s :Cannot join channel (+l)",
-/* 472 ERR_UNKNOWNMODE  , */    ":%s 472 %s %c :is unknown mode char to me",
-/* 473 ERR_INVITEONLYCHAN, */   ":%s 473 %s %s :Cannot join channel (+i)",
-/* 474 ERR_BANNEDFROMCHAN, */   ":%s 474 %s %s :Cannot join channel (+b)",
-/* 475 ERR_BADCHANNELKEY, */    ":%s 475 %s %s :Cannot join channel (+k)",
-/* 476 ERR_BADCHANMASK, */      ":%s 476 %s %s :Bad Channel Mask",
-/* 477 ERR_MODELESS, */         ":%s 477 %s %s :Channel does not support modes",
-/* 478 ERR_BANLISTFULL, */      ":%s 478 %s %s %s :Channel ban list is full",
-/* 479 ERR_BADCHANNAME */       ":%s 479 %s %s :Illegal channel name",
-/* 480 */	(char *)NULL,
-/* 481 ERR_NOPRIVILEGES, */
-                ":%s 481 %s :I don't THINK so, homez... you ain't got what it takes. (IRC operator)",
-/* 482 ERR_CHANOPRIVSNEEDED, */ ":%s 482 %s %s :You can't do that thing, when you don't have that swing (You're not channel operator)",
-/* 483 ERR_CANTKILLSERVER, */    ":%s 483 %s :Don't be an idiot - you can't kill a SERVER, fool.",
-/* 484 */       (char *)NULL,
-/* 485 */       (char *)NULL,
-/* 486 */       (char *)NULL,
-/* 487 */       (char *)NULL,
-/* 488 */       (char *)NULL,
-/* 489 */       (char *)NULL,
-/* 490 */       (char *)NULL,
-/* 491 ERR_NOOPERHOST, */       ":%s 491 %s :Sorry, you just don't have what it takes to be an IRC Operator here.",
-/* 492 */       (char *)NULL,
-/* 493 */       (char *)NULL,
-/* 494 */       (char *)NULL,
-/* 495 */       (char *)NULL,
-/* 496 */       (char *)NULL,
-/* 497 */       (char *)NULL,
-/* 498 */       (char *)NULL,
-/* 499 */       (char *)NULL,
-/* 500 */       (char *)NULL,
-/* 501 ERR_UMODEUNKNOWNFLAG, */ ":%s 501 %s :Unknown MODE flag",
-/* 502 ERR_USERSDONTMATCH, */   ":%s 502 %s :Can't change mode for other users",
-/* 503 ERR_GHOSTEDCLIENT, */    ":%s 503 %s :Message could not be delivered to %s",
-/* 504 LAST ERR_LAST_ERR_MSG, */        ":%s 504 %s :Last Error Message",
-                (char *)NULL
-};
-
-
diff -uNrd ircd-hybrid-6.2/src/mtrie_conf.c ircd-hyb6.2-FEFr5/src/mtrie_conf.c
--- ircd-hybrid-6.2/src/mtrie_conf.c	Tue Jul 17 22:30:33 2001
+++ ircd-hyb6.2-FEFr5/src/mtrie_conf.c	Mon Aug 20 23:32:42 2001
@@ -1601,7 +1601,7 @@
  * Clear out the mtrie list and the unsortable list (recursively)
  */
 
-void clear_mtrie_conf_links()
+void clear_mtrie_conf_links(void)
 {
   aConfItem *found_conf;
   aConfItem *found_conf_next;
diff -uNrd ircd-hybrid-6.2/src/numeric.c ircd-hyb6.2-FEFr5/src/numeric.c
--- ircd-hybrid-6.2/src/numeric.c	Wed Jul 28 18:27:46 1999
+++ ircd-hyb6.2-FEFr5/src/numeric.c	Tue Aug 21 01:55:57 2001
@@ -27,12 +27,7 @@
 
 #include <assert.h>
 
-#ifdef CUSTOM_ERR            /* ZZZZ ick */
-#include "messages_cust.tab"
-#else
 #include "messages.tab"
-#endif
-
 
 /*
  * The observant will note that err_str and rpl_str
diff -uNrd ircd-hybrid-6.2/src/opers.motd ircd-hyb6.2-FEFr5/src/opers.motd
--- ircd-hybrid-6.2/src/opers.motd	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/src/opers.motd	Mon Sep 11 01:08:51 2000
@@ -0,0 +1 @@
+WELCOME, YOU SEXY IRCOP STUD YOU!!!
diff -uNrd ircd-hybrid-6.2/src/opers.txt ircd-hyb6.2-FEFr5/src/opers.txt
--- ircd-hybrid-6.2/src/opers.txt	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/src/opers.txt	Tue Aug 21 00:34:01 2001
@@ -0,0 +1,260 @@
+This file outlines the features that ircd-hybrid has for IRC Operators.
+$Id: opers.txt,v 1.14 2001/06/13 18:24:16 leeh Exp $
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Usermodes: (* designates that the umode is oper only)
+
+     USERMODE     DESCRIPTION
+-----------------------------------------------------------------
+         +O     - Designates this client is a local IRC Operator.
+                  Use the /oper command to attain this.
+         +o     - Designates this client is a global IRC Operator.
+                  Use the /oper command to attain this.
+         +i     - Designates this client 'invisible'.
+         +w     - Can see server wallops.
+       * +z     - Can see oper wallops.
+         +s     - Can see generic server messages and oper kills.
+       * +c     - Can see client connections and exits.
+       * +r     - Can see 'rejected' client notices.
+         +k     - Can see server kill messages.
+       * +f     - Can see 'I-line is full' notices.
+       * +y     - Can see stats/links/admin requests to name a few.
+       * +d     - Can see server debug messages.
+       * +n     - Can see client nick changes.
+       * +b     - Can see possible bot warnings.
+       * +x     - Can see new server introduction and server split
+                  messages.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+Oper Commands: (+ indicates that /quote must be used with ircII)
+
+COMMAND         - USAGE and DESCRIPTION
+-------------------------------------------------------------------
+  SQUIT         - SQUIT <server> [reason]
+                  Splits <server> away from your side of the net with
+                  [reason].
+
+  KILL          - KILL <nick> <reason>
+                  Disconnects user <nick> from the IRC server he/she
+                  is connected to with reason <reason>.
+                  Local Opers can only kill clients on his/her server.
+                  Global Opers can kill clients on any server on the
+                  IRC network.
+
+  STATS         - STATS <letter> [server|nick]
+                  Queries server [server] (or your own server if no
+                  server parameter is given) for info corresponding to
+                  <letter>.
+                  LETTER (* = Oper only.)
+                  ------ (^ = Can be configured to be oper only.)
+                  ^ c - Shows C/N lines
+                  * d - Shows D lines
+                  * g - Shows G lines
+                  ^ h - Shows H/L lines
+                  ^ i - Shows I lines
+                  ^ K - Shows K lines (or matched klines)
+                  ^ k - Shows temporary K lines (or matched temp klines)
+                    L - Shows IP and generic info about [nick]
+                    l - Shows hostname and generic info about [nick]
+                    m - Shows commands and their usage
+                  ^ o - Shows O/o lines
+                  ^ P - Shows configured ports
+                    p - Shows opers connected and their idle times
+                  * q - Shows quarantined nicks
+                  * r - Shows resource usage by ircd
+                  * s - Shows the server cache
+                  * t - Shows generic server stats
+                  * U - Shows U lines
+                    u - Shows server uptime
+                  * v - Shows connected servers and their idle times
+                  * x - Shows X lines
+                  * y - Shows Y lines
+                  * z - Shows memory stats
+                    ? - Shows connected servers and sendq info about them
+
+  CONNECT       - CONNECT <server_A> [port] [server_B]
+                  When [server_B] is used, CONNECT asks [server_B] to
+                  connect to <server_A>.  Global Opers only.
+
+                  When [server_B] is not used, CONNECT tries to connect
+                  your server to <server_A>.  Local and Global Opers.
+
+                  When [port] is used, the connection will be attempted
+                  to [port].
+                  When [port] is not used, 6667 is used as a default.
+
++ WALLOPS       - WALLOPS :<message>
+                  Sends a WALLOPS message of <message> to all opers
+                  who are umode +w and +z (see above)
+
+                  Server sent wallops go to all users who are umode
+                  +w, oper or not.
+
++ OPERWALL      - OPERWALL :<message>
+                  Sends an OPERWALL message of <message> to all
+                  opers who are umode +w and +z
+
++ LOCOPS        - LOCOPS :<message>
+                  Sends an LOCOPS message of <message. o to all
+                  opers on local server who are umode +w and +z
+
++ LWALLOPS      - LWALLOPS :<message>
+                  -- If compiled with LWALLOPS --
+                  Same as LOCOPS (see above)
+
+  TRACE         - TRACE [server|nick]
+                  TRACE shows client info about [server|nick] or about
+                  the server you are on if no [server|nick] is given.
+
+                  All users that use TRACE can see the path to
+                  [server|nick] if given and all servers and opers
+                  connected, as well as the connection class they
+                  fall into.
+
+                  Opers can see all clients connected to a server
+                  with TRACE as well as the connection class they
+                  fall into.
+
++ LTRACE        - LTRACE [server|nick]
+                  -- If compiled with LTRACE --
+                  Displays only Oper, Serv, Link, and Class reports even if
+                  the O-line is active.  Useful for just showing pertinent
+                  info of a specific server.  Note however that if the
+                  target server is not running this option then you will
+                  still receive a normal trace output.
+
+  REHASH        - REHASH [option]
+                  When no [option] is given, ircd will re-read the
+                  ircd.conf file.
+
+                  [option] can be one of the following:
+                    DNS     - Re-read the /etc/resolv.conf file
+                    IP      - Reloads the IP hash for the new and
+                              improved ACKPATCH.  Should never need 
+                              to be used.
+                    TKLINES - Clears temporary klines
+                    GLINES  - Clears G lines
+                    OMOTD   - Re-reads Oper MOTD file
+                    GC      - Performs garbage collecting of excess
+                              memory.
+                    MOTD    - Re-reads MOTD file
+                    OMOTD   - Re-reads Oper MOTD file
+                    HELP    - Re-reads this HELP file
+                    DLINES  - Re-hashes D-lines
+
+  RESTART       - RESTART
+                  Restarts the IRC server.
+
+  CLOSE         - CLOSE
+                  Close any connections from clients who have not fully
+                  registered yet.
+
+  DIE           - DIE server.name [reason]
+                  Terminates the IRC server with optional reason 
+                  [reason]
+
++ HASH          - HASH
+                  Shows some stats about ircd's internal hashes.
+
++ DNS           - DNS
+                  Shows some stats about ircd's asynchronous resolving
+                  code
+
++ KLINE         - KLINE <nick|user@host> :[reason]
+                  Adds a KLINE to the ircd.conf or klines.conf file which
+                  will ban the specified user from using that server.
+                  The banned client will receive a message saying he/she
+                  is banned with reason [reason]
+
+                  KLINE user@ip.ip.ip.ip :[reason]
+                  will kline the user at the unresolved ip.
+                  ip.ip.ip.ip can be in CIDR form i.e. 192.168.0.0/24
+                  or 192.168.0.* (which is converted to CIDR form internally)
+
+                  For a temporary KLINE, length of kline is given in
+                  minutes as the first parameter i.e.
+                  KLINE 10 <nick|user@host> :cool off for 10 minutes
+
++ UNKLINE       - UNKLINE <user@host>
+                  Will attempt to unkline the given <user@host>
+                  Will unkline a temporary kline.
+
++ DLINE         - DLINE <nick|ip> :[reason]
+                  Adds a DLINE to the ircd.conf or klines.conf file
+                  which will deny any connections from the IP address
+                  of the banned client.  The banned client will receive
+                  a message saying he/she is banned with reason [reason]
+
+                  In order to use <nick> rather than <ip>, <nick> must
+                  be on your server.
+
++ HTM           - HTM [option]
+                  When no [option] is given, HTM shows the current 
+                  High Traffic Mode rate and whether HTM is on or off.
+
+                  [option] can be one of the following:
+                    ON        - Forces High Traffic Mode to be on.  With
+                                this on, ircd is more efficient in
+                                reading server-to-server traffic and
+                                oper traffic, but will be less efficient
+                                than normal with normal client traffic.
+                    OFF       - Forces High Traffic Mode to be off.
+                                (see above)
+                    TO <rate> - Sets the High Traffic Mode rate to
+                                <rate>.  Ircd will automatically go
+                                into High Traffic Mode when <rate>
+                                is reached, and will automatically turn
+                                it off when things calm down.
+                    QUIET     - When set, ircd will not notify opers
+                                when it goes into and out of High
+                                Traffic Mode.
+                    NOISY     - When set, ircd will notify opers
+                                when it goes into and out of High
+                                Traffic Mode.
++ SET           - SET <option> <value>
+                  <option> can be one of the following:
+                    LOG       - Sets the Logging level for what is logged
+                                to ircd.log and syslog.
+                    MAX       - Sets the number of max connections
+                                to <value>.  (This number cannot exceed
+                                HARD_FDLIMIT in config.h)
+
+                    -- The following three are if compiled with FLUD --
+                     FLUDNUM   - Sets the number of flud messages to 
+                                 trip flud alarm to <value>
+                     FLUDTIME  - Sets the number of seconds in which 
+                                  FLUDNUM msgs must occur to <value>
+                     FLUDBLOCK - Sets the number of seconds to block 
+                                 fluds to <value>
+
+                    -- The following is if compiled with NO_CHANOPS_ON_SPLIT
+                       or NO_JOIN_ON_SPLIT or PRESERVE_CHANNEL_ON_SPLIT
+                     SPLITDELAY - Sets how long after the connect burst
+                                  starts before ops can be hacked on new
+                                  channels. 5(minutes) is usually plenty.
+                                  Disable using 0.
+
+                     SMALLNET   - Below this number of servers present
+                                  means special split handling is now on.
+
+                     -- The following is if compiled with ANTI_SPAMBOT
+                      SPAMNUM   - Sets how many join/parts to channels
+                                  constitutes a possible spambot.
+                      SPAMTIME  - Below this time on a channel
+                                  counts as a join/part as above.
+
++ GLINE         - GLINE <user@host> :[reason]
+                   -- if compiled with GLINE --
+                   Attempts to add a global IRC-network wide ban on
+                   <user@host> for the reason [reason].
+
+                   It takes three different opers on three different 
+                   servers to do the same GLINE within a short interval,
+                   to have a GLINE triggered for a compiled time of hours.
+
++ TESTLINE       - TESTLINE <user@host>|ip
+                   -- Looks up given user@host or user@ip 
+                   returns info on any found I line or K line for that user,
+                   or D-line on ip.
diff -uNrd ircd-hybrid-6.2/src/oratime.c ircd-hyb6.2-FEFr5/src/oratime.c
--- ircd-hybrid-6.2/src/oratime.c	Wed Dec 31 19:00:00 1969
+++ ircd-hyb6.2-FEFr5/src/oratime.c	Thu Jan  4 01:37:20 2001
@@ -0,0 +1,68 @@
+/************************************************************************
+ *   IRC - Internet Relay Chat, src/oratime.c
+ *   Copyright (C) 1990 Jarkko Oikarinen and
+ *                      University of Oulu, Computing Center
+ *
+ *   See file AUTHORS in IRC package for additional names of
+ *   the programmers. 
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 1, or (at your option)
+ *   any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *   $Id: oratime.c,v 1.3 2000/11/18 19:11:13 lusky Exp $
+ */
+#include "oratime.h"
+#ifdef ORATIMING
+
+#include "client.h"
+#include "send.h"
+
+#include <sys/time.h>
+
+static struct timeval tsdnow;
+static struct timeval tsdthen;
+static unsigned int   tsdms;
+
+/*
+ * Timing stuff (for performance measurements): compile with -DORATIMING
+ *   and put a TMRESET where you want the counter of time spent set to 0,
+ *  a TMPRINT where you want the accumulated results, and TMYES/TMNO pairs
+ *  around the parts you want timed -orabidoo
+ */
+void orat_reset(void)
+{
+  tsdms = 0;
+}
+
+void orat_yes(void)
+{
+  gettimeofday(&tsdthen, 0);
+}
+
+void orat_no(void)
+{
+  gettimeofday(&tsdnow, 0); 
+  if (tsdnow.tv_sec != tsdthen.tv_sec) 
+    tsdms += 1000000 * (tsdnow.tv_sec - tsdthen.tv_sec); 
+  tsdms += tsdnow.tv_usec;
+  tsdms -= tsdthen.tv_usec;
+}
+
+void orat_report(void)
+{
+  sendto_realops("Time spent: %ld ms", tsdms);
+}
+
+#endif /* ORATIMING */
+
diff -uNrd ircd-hybrid-6.2/src/s_conf.c ircd-hyb6.2-FEFr5/src/s_conf.c
--- ircd-hybrid-6.2/src/s_conf.c	Sun Aug  5 14:40:52 2001
+++ ircd-hyb6.2-FEFr5/src/s_conf.c	Sun Sep 30 20:23:18 2001
@@ -144,6 +144,9 @@
 /* conf uline link list root */
 struct ConfItem        *u_conf = ((struct ConfItem *)NULL);
 
+/* conf sline link list root */
+struct ConfItem        *s_conf = ((struct ConfItem *)NULL);
+
 /* keep track of .include files to hash in */
 struct ConfItem        *include_list = ((struct ConfItem *)NULL);
 
@@ -378,6 +381,8 @@
     this_conf = x_conf;
   else if (flags & CONF_ULINE)
     this_conf = u_conf;
+  else if (flags & CONF_SLINE)
+    this_conf = s_conf;
   else return;
 
   for (aconf = this_conf; aconf; aconf = aconf->next)
@@ -388,7 +393,11 @@
         sendto_one(sptr, form_str(numeric),
                    me.name,
                    sptr->name,
-                   name,
+		   host,
+		   pass,
+		   name,
+		   port,
+                   user,
                    pass);
       }
 }
@@ -701,7 +710,7 @@
         {
           if (IsGotId(this_client))
             {
-              if(!irccmp(ptr->value.cptr->username,username))
+                if(!irccmp(ptr->value.cptr->username,username))
                   count++;
             }
           else
@@ -1376,7 +1385,9 @@
   if(mask & CONF_XLINE)
     this_conf = x_conf;
   else if(mask & CONF_ULINE)
-    this_conf = u_conf;
+    this_conf = u_conf; 
+  else if(mask & CONF_SLINE)
+    this_conf = s_conf;
   else
     return((struct ConfItem *)NULL);
 
@@ -1497,7 +1508,7 @@
           get_printable_conf(aconf, &name, &host, &pass, &user, &port);
           
           sendto_one(sptr, form_str(RPL_STATSQLINE),
-                     me.name, sptr->name, name, pass, user, host);
+                     me.name, sptr->name, name, user, host, pass);
         }
     }
 }
@@ -2048,8 +2059,13 @@
           aconf->status = CONF_QUARANTINED_NICK;
           break;
 
-        case 'U': /* Uphost, ie. host where client reading */
-        case 'u': /* this should connect.                  */
+        case 'S':
+        case 's':
+          aconf->status = CONF_SLINE;
+          break;
+
+        case 'U':
+        case 'u':
           aconf->status = CONF_ULINE;
           break;
 
@@ -2448,6 +2464,16 @@
           aconf->next = u_conf;
           u_conf = aconf;
         }
+      else if (aconf->status & CONF_SLINE)
+        {
+          dontadd = 1;
+          MyFree(aconf->user);
+          aconf->user = (char *)NULL;
+          MyFree(aconf->name);
+	  DupString(aconf->name, aconf->host);
+          aconf->next = s_conf;
+          s_conf = aconf;
+        }
       else if (aconf->status & CONF_QUARANTINED_NICK)
         {
           dontadd = 1;
@@ -3029,6 +3055,7 @@
  * side effects  -
  * return as string, the oper privs as derived from port
  * also, set the oper privs if given cptr non NULL
+      *privs_ptr++ = 'K';
  */
 
 char *oper_privs_as_string(aClient *cptr,int port)
@@ -3052,7 +3079,7 @@
     {
       if(cptr)
         SetOperK(cptr);
-      *privs_ptr++ = 'K';
+	*privs_ptr++ = 'K';
     }
   else
     *privs_ptr++ = 'k';
@@ -3382,7 +3409,7 @@
  *
  * side effects - command to test I/K lines on server
  *
- * i.e. /quote testline user@host,ip
+ * i.e. /quote testline user@host|ip
  *
  */
 
@@ -3412,9 +3439,9 @@
               if( aconf )
                 {
                   get_printable_conf(aconf, &name, &host, &pass, &user, &port);
-                  sendto_one(sptr, 
+                  sendto_one(sptr,
                          ":%s NOTICE %s :D-line host [%s] pass [%s]",
-                         me.name, parv[0], 
+                         me.name, parv[0],
                          host,
                          pass);
                 }
@@ -3422,9 +3449,9 @@
                 sendto_one(sptr, ":%s NOTICE %s :No aconf found",
                          me.name, parv[0]);
             }
-          else	  
+          else
           sendto_one(sptr, ":%s NOTICE %s :usage: user@host|ip",
-                     me.name, parv[0]);
+                       me.name, parv[0]);
 
           return 0;
         }
@@ -3479,8 +3506,8 @@
                    me.name, parv[0]);
     }
   else
-    sendto_one(sptr, ":%s NOTICE %s :usage: user@host|ip",
-               me.name, parv[0]);
+        sendto_one(sptr, ":%s NOTICE %s :usage: user@host|ip",
+                   me.name, parv[0]);
   return 0;
 }
 
@@ -3648,6 +3675,7 @@
     zap_Dlines();
     clear_special_conf(&x_conf);
     clear_special_conf(&u_conf);
+    clear_special_conf(&s_conf);
     clear_q_lines();
     mark_listeners_closing();
 }
diff -uNrd ircd-hybrid-6.2/src/s_debug.c ircd-hyb6.2-FEFr5/src/s_debug.c
--- ircd-hybrid-6.2/src/s_debug.c	Fri Aug 10 07:34:04 2001
+++ ircd-hyb6.2-FEFr5/src/s_debug.c	Mon Aug 20 23:32:42 2001
@@ -276,7 +276,8 @@
         }
       else
         rc++;
-      if (acptr->user)
+/*      if (acptr->user) */
+	if (IsPerson(acptr))
         {
           us++;
           for (gen_link = acptr->user->invited; gen_link;
diff -uNrd ircd-hybrid-6.2/src/s_serv.c ircd-hyb6.2-FEFr5/src/s_serv.c
--- ircd-hybrid-6.2/src/s_serv.c	Fri Jul 27 19:20:24 2001
+++ ircd-hyb6.2-FEFr5/src/s_serv.c	Tue Aug 21 02:04:43 2001
@@ -73,6 +73,7 @@
   { "QS",       CAP_QS },
   { "EX",       CAP_EX },
   { "CHW",      CAP_CHW },
+  { "FDF",	CAP_FEF },
   { 0,   0 }
 };
 
diff -uNrd ircd-hybrid-6.2/src/s_user.c ircd-hyb6.2-FEFr5/src/s_user.c
--- ircd-hybrid-6.2/src/s_user.c	Tue Jul 17 21:37:18 2001
+++ ircd-hyb6.2-FEFr5/src/s_user.c	Tue Aug 21 01:55:29 2001
@@ -498,6 +498,91 @@
 
 
 /*
+ *  check_clones
+ *    This function counts the number of clients with the
+ *    same host as cptr that connected less than CHECK_CLONE_PERIOD
+ *    seconds ago.
+ *  return value
+ *    -1: reject connections
+ *     0: permit connections
+ *  -SeKs -record
+ */
+#ifdef CHECK_CLONE
+static int check_clones(aClient * cptr)
+{
+  struct abacklog
+  {
+    time_t last;
+    char host[HOSTLEN];
+    int count;
+    struct abacklog *next;
+  };
+
+  static struct abacklog *backlog = NULL;
+  register struct abacklog **blscn = &backlog, *blptr;
+
+  /* Find the host we're interested in. While we're at it, we'll
+   * clean out expired elements from the list.                    */
+
+  while ((*blscn != NULL) && (strcmp(cptr->host, (*blscn)->host)))
+  {
+    if ((*blscn)->last + CHECK_CLONE_PERIOD < CurrentTime)
+    {                           /* expired; remove */
+      if ((*blscn)->count == -1)
+        sendto_ops("Removing throttle for %s.", (*blscn)->host);
+      blptr = *blscn;
+      *blscn = blptr->next;
+      MyFree((char *)blptr);
+    }
+    else
+      blscn = &(*blscn)->next;
+  }
+
+  if (*blscn)                   /* There is a record for this host */
+  {
+    if (!((*blscn)->last + CHECK_CLONE_PERIOD < CurrentTime))   /* not expired */
+    {
+      (*blscn)->last = CurrentTime;
+      if ((*blscn)->count == -1)
+        return (-1);
+      else
+      {
+        (*blscn)->count++;
+        if (((*blscn)->count == CHECK_CLONE_LIMIT) && !IsFlined(cptr))
+        {
+          sendto_ops("Throttling connections from %s.", (*blscn)->host);
+          (*blscn)->count = -1;
+          return (-1);
+        }
+        else
+          return (0);
+      }
+    }
+    else
+      /* expired */
+    {
+      if ((*blscn)->count == -1)
+        sendto_ops("Removing throttle for %s.", (*blscn)->host);
+      (*blscn)->last = CurrentTime;
+      (*blscn)->count = 1;
+      return (0);
+    }
+  }
+  else
+    /* no record for host; make one */
+  {
+    blptr = (struct abacklog *)MyMalloc(sizeof(struct abacklog));
+    strncpy_irc(blptr->host, cptr->host, HOSTLEN);
+    blptr->next = backlog;
+    blptr->last = CurrentTime;
+    blptr->count = 1;
+    backlog = blptr;
+    return (0);
+  }
+}
+#endif
+
+/*
 ** register_user
 **      This function is called when both NICK and USER messages
 **      have been accepted for the client, in whatever order. Only
@@ -521,7 +606,7 @@
 **         nick from local user or kill him/her...
 */
 
-static int register_user(aClient *cptr, aClient *sptr, 
+int register_user(aClient *cptr, aClient *sptr,
                          char *nick, char *username)
 {
   aConfItem*  aconf;
@@ -589,19 +674,19 @@
 	/* jdc - lists server name & port connections are on */
 	/*       a purely cosmetical change */
               sendto_realops_flags(FLAGS_CCONN,
-				 "%s from %s [%s] on [%s/%u].",
+                                 "%s from %s [%s] on [%s/%u].",
                                  "Unauthorized client connection",
                                  get_client_host(sptr),
                                  inetntoa((char *)&sptr->ip),
-				 sptr->listener->name,
-				 sptr->listener->port
-				 );
+                                 sptr->listener->name,
+                                 sptr->listener->port
+                                 );
               log(L_INFO,
-		  "Unauthorized client connection from %s on [%s/%u].",
+                  "Unauthorized client connection from %s on [%s/%u].",
                   get_client_host(sptr),
-		  sptr->listener->name,
-		  sptr->listener->port
-		  );
+                  sptr->listener->name,
+                  sptr->listener->port
+                  );
 
               ServerStats->is_ref++;
               return exit_client(cptr, sptr, &me,
@@ -643,7 +728,7 @@
           sendto_one(sptr,":%s NOTICE %s :*** Notice -- You have an illegal character in your hostname", 
                      me.name, sptr->name );
 
-          strncpy(sptr->host,sptr->sockhost,HOSTIPLEN+1);
+          strncpy_irc(sptr->host,sptr->sockhost,HOSTIPLEN+1);
         }
 
       aconf = sptr->confs->value.aconf;
@@ -667,6 +752,9 @@
              {
                 *sptr->username = '~';
                 strncpy_irc(&sptr->username[1], username, USERLEN - 1);
+		sendto_one(sptr,
+":%s NOTICE %s :*** Notice -- You need to install identd if you wish to have your username show up without the ~ (tilde)",
+			   me.name, cptr->name);
              }
            sptr->username[USERLEN] = '\0';
         }
@@ -742,6 +830,25 @@
         }
       /* end of valid user name check */
 
+#ifdef CHECK_CLONE
+
+	/*
+	 * Add this local client into the clone check database.  If the
+	 * site has been throttled, reject the user. -SeKs -record
+	 */
+
+	if (check_clones(sptr) == -1
+#ifdef CHECK_CLONE_DELAY
+	    && me.since + CHECK_CLONE_DELAY < CurrentTime
+#endif
+	    )
+	{
+	  ServerStats->is_ref++;
+	  return exit_client(cptr, sptr, &me,
+	    "Too many connections from your host -- throttled");
+	}
+#endif
+
       if(!IsAnOper(sptr))
         {
           char *xreason;
@@ -812,7 +919,7 @@
 
   if (MyConnect(sptr))
     {
-      sendto_one(sptr, form_str(RPL_WELCOME), me.name, nick, nick);
+      sendto_one(sptr, form_str(RPL_WELCOME), me.name, nick, NETWORK_NAME, nick);
       /* This is a duplicate of the NOTICE but see below...*/
       sendto_one(sptr, form_str(RPL_YOURHOST), me.name, nick,
                  get_listener_name(sptr->listener), version);
@@ -922,6 +1029,11 @@
       ubuf[1] = '\0';
     }
   
+#ifdef CHECK_CLONE
+	if (!IsSLine(sptr))
+		check_clones(sptr);
+#endif
+
   /* LINKLIST 
    * add to local client link list -Dianora
    * I really want to move this add to link list
@@ -1158,6 +1270,7 @@
 static int nickkilldone(aClient *cptr, aClient *sptr, int parc,
                  char *parv[], time_t newts,char *nick)
 {
+	Link	*lp;
 
   if (IsServer(sptr))
     {
@@ -1207,6 +1320,23 @@
     }
   else if (sptr->name[0])
     {
+		/*
+		** If the client belongs to me, then check to see
+		** if client is currently on any channels where it
+		** is currently banned.  If so, do not allow the nick
+		** change to occur.
+		*/
+		if (MyClient(sptr))
+			for (lp = cptr->user->channel; lp; lp = lp->next)
+				if ((can_send(cptr, lp->value.chptr) ==
+				    MODE_BAN) && !IsSLine(sptr)) {
+					sendto_one(cptr,
+						   form_str(ERR_BANNICKCHANGE),
+						   me.name, parv[0],
+						   lp->value.chptr->chname);
+					return 0;
+				}
+
       /*
       ** Client just changing his/her nick. If he/she is
       ** on a channel, send note of change to all clients
@@ -1255,7 +1385,12 @@
         {
           sendto_common_channels(sptr, ":%s NICK :%s", parv[0], nick);
           if (sptr->user)
-            {
+#ifdef ANTI_IP_SPOOF
+	/* Don't send out a nick-change if they haven't PONG'd us
+	 * because they haven't registered yet if they haven't! -JailBird */
+	if ((!MyConnect(sptr)) || (sptr->flags2 & FLAGS2_GOT_ANTI_SPOOF_PING)) 
+#endif
+           {
               add_history(sptr,1);
               sendto_serv_butone(cptr, ":%s NICK %s :%lu",
                                  parv[0], nick, sptr->tsinfo);
@@ -1283,6 +1418,19 @@
           ** may reject the client and call exit_client for it
           ** --must test this and exit m_nick too!!!
           */
+/* anti ip sequence prediction spoof code
+   it needs a good going over by someone else, but it
+   works... -Dianora
+*/
+#ifdef ANTI_IP_SPOOF
+	if(MyConnect(sptr))
+	{
+		strcpy(sptr->name,nick);
+		sptr->random_ping = (unsigned int)my_rand();
+		sendto_one(sptr, "PING :%d", sptr->random_ping);
+		sptr->flags |= FLAGS_PINGSENT;
+	} else
+#endif
             if (register_user(cptr, sptr, nick, buf) == CLIENT_EXITED)
               return CLIENT_EXITED;
         }
@@ -1972,6 +2120,21 @@
     }
   strncpy_irc(sptr->info, realname, REALLEN);
 
+#ifdef ANTI_IP_SPOOF
+  user->last = CurrentTime;
+  if(MyConnect(sptr))
+     {
+       if (sptr->name[0]) /* NICK already received, now I have USER... */
+         {
+	   sptr->random_ping = (unsigned int)my_rand();
+	   sendto_one(sptr, "PING :%d", sptr->random_ping);
+	   sptr->flags |= FLAGS_PINGSENT;  
+	 }
+       if (!IsGotId(sptr))
+         strncpy_irc(sptr->username, username, USERLEN);
+       return 0;
+     } 
+#endif
   if (sptr->name[0]) /* NICK already received, now I have USER... */
     return register_user(cptr, sptr, sptr->name, username);
   else
@@ -2022,7 +2185,7 @@
       return 0;
     }
 
-  if (IsServer(sptr) || sptr != acptr || acptr->from != sptr->from)
+  if ((IsServer(sptr) && !IsSLine(sptr)) || sptr != acptr || acptr->from != sptr->from)
     {
       if (IsServer(cptr))
         sendto_ops_butone(NULL, &me,
@@ -2280,4 +2443,118 @@
   return 0;
 }
 #endif
+
+
+/*
+** m_snick
+**      parv[0] = sender prefix
+**      parv[1] = original nickname
+**      parv[2] = new nickname
+**	parv[3] = TS
+/* This function is a shameless merger between m_nick and
+   DalNet's m_svsnick().  I have tried to cover any issue
+   that could come up.  -JailBird */
+int m_snick(aClient *cptr, aClient *sptr, int parc, char *parv[])
+{
+  aClient* acptr;
+  char     nick[NICKLEN + 2];
+  char     *s;
+  time_t   newts = 0;
+
+  /* Check to make sure this is comming from a service */
+  if (!IsSLine(sptr))
+      return 0;
+
+  /* Since this is from a service, just return, don't send an error */
+  if (parc < 4)
+      return 0;
+
+  if (s = strchr(parv[2], '~'))
+    *s = '\0';
+
+  /* Terminate the string */
+  strncpy_irc(nick, parv[2], NICKLEN);
+  nick[NICKLEN] = '\0';
+
+  acptr = find_client(parv[1], NULL);
+  /* If the nick was bad, then just KILL the client */
+  if (clean_nick_name(nick) == 0 || strcmp(nick, parv[2])) {
+    ServerStats->is_kill++;
+    sendto_realops_flags(FLAGS_DEBUG, "Bad Nick: %s From SNICK: %s",
+                         nick, parv[1]);
+    sendto_serv_butone(cptr, ":%s KILL %s :%s SNICK to %s",
+                       me.name, parv[1], me.name, nick);
+    sendto_one(cptr, ":%s KILL %s :%s SNICK from %s",
+               me.name, nick, me.name, parv[1]);
+    sptr->flags |= FLAGS_KILLED;
+    if (acptr != NULL)
+      return exit_client(NULL, acptr, &me, "Bad Nick");
+  }
+
+  /* Is the nickname identical to a server's name? */
+  if (find_server(nick) != NULL) {
+    sendto_ops("SNICK Nick collision for %s <- %s",
+               nick, parv[1]);
+    ServerStats->is_kill++;
+    sendto_one(cptr, ":%s KILL %s :%s (%s <- %s)",
+               me.name, parv[1], me.name, nick, parv[1]);
+    sptr->flags |= FLAGS_KILLED;
+    if (acptr != NULL)
+      return exit_client(NULL, acptr, &me, "Nick/Server Collision");
+  }
+ 
+  /* Do we have a collision situation? */
+  if (find_client(nick, NULL) != NULL) {
+    sendto_ops("SNICK Nick change collision for %s <- %s",
+		nick, parv[1]);
+    sendto_serv_butone(cptr, ":%s KILL %s :%s (%s <- %s)",
+                       me.name, parv[1], me.name, nick, parv[1]);
+    sendto_one(cptr, ":%s KILL %s :%s (%s <- %s)",
+               me.name, nick, me.name, nick, parv[1]);
+    sptr->flags |= FLAGS_KILLED;
+    if (acptr != NULL)
+      return exit_client(NULL,acptr,&me,"Bad Nick");
+  }
+
+  if (hunt_server(cptr, sptr, ":%s SNICK %s %s :%s", 1, parc, parv)
+      ==HUNTED_ISME) {
+    if ((acptr = find_person(parv[1], NULL))) {
+      newts = atol(parv[3]);
+      acptr->tsinfo = newts;
+      sendto_realops_flags(FLAGS_NCHANGE,
+                           "Nick change: From %s to %s [%s@%s]",
+                           parv[1], nick, acptr->username, acptr->host);
+      sendto_common_channels(acptr, ":%s NICK :%s", parv[1], nick);
+      if (acptr->user) {
+        add_history(acptr, 1);
+        sendto_serv_butone(NULL, ":%s NICK %s :%lu", parv[1],
+                           nick, acptr->tsinfo);
+      }
+      if (sptr->name[0])
+        del_from_client_hash_table(acptr->name, acptr);
+      strcpy(acptr->name, nick);
+      add_to_client_hash_table(nick, acptr);
+    }
+  }
+  return 0;
+}
+
+/* check to see if the message has any color chars in it. */
+int msg_has_colors(char *msg)
+{
+   char *c = msg;
+
+   while(*c)
+   {
+      if(*c == '\003' || *c == '\033')
+         break;
+      else
+         c++;
+   }
+
+   if(*c)
+      return 1;
+
+   return 0;
+}
 
diff -uNrd ircd-hybrid-6.2/src/send.c ircd-hyb6.2-FEFr5/src/send.c
--- ircd-hybrid-6.2/src/send.c	Tue Jul 10 08:40:37 2001
+++ ircd-hyb6.2-FEFr5/src/send.c	Tue Aug 21 01:52:24 2001
@@ -44,7 +44,7 @@
 #include <time.h>
 #include <assert.h>
 
-#define NEWLINE "\r\n"
+#define NEWLINE "\n"
 #define LOG_BUFSIZE 2048
 
 static  char    sendbuf[2048];
@@ -487,16 +487,18 @@
    * of an overflow.
    * -wnder
    */
+   /* Always #define IRCII_KLUDGE and break the RFC by only sending
+    * \n and NOT \r\n. This allows DCC RAW connections to work.
+    * -JailBird
+    */
         if (len > 510)
         {
-                sendbuf[510] = '\r';
-                sendbuf[511] = '\n';
-                sendbuf[512] = '\0';
-                len = 512;
+                sendbuf[510] = '\n';
+                sendbuf[511] = '\0';
+                len = 511;
         }
         else
         {
-                sendbuf[len++] = '\r';
                 sendbuf[len++] = '\n';
                 sendbuf[len] = '\0';
         }
@@ -507,7 +509,7 @@
 } /* vsendto_one() */
 
 void
-sendto_channel_butone(aClient *one, aClient *from, aChannel *chptr, 
+sendto_channel_butone(aClient *one, aClient *from, aChannel *chptr,
                       const char *pattern, ...)
 
 {
@@ -552,7 +554,7 @@
 } /* sendto_channel_butone() */
 
 void
-sendto_channel_type(aClient *one, aClient *from, aChannel *chptr,
+sendto_channel_type(aClient *one, aClient *from, aChannel *chptr, 
                     int type,
                     const char *nick,
                     const char *cmd,
@@ -607,8 +609,8 @@
                */
               if (sentalong[i] != current_serial)
                 {
-                  sendto_prefix_one(acptr, from,
-                    ":%s NOTICE %s :%s",
+                    sendto_prefix_one(acptr, from,
+                      ":%s NOTICE %s :%s",
                     from->name,
                     lp->value.cptr->name, /* target name */
                     message);
@@ -1310,16 +1312,16 @@
   len = parlen;
   len += vsprintf_irc(outbuf + parlen, &pattern[4], args);
 
+/* Violate the RFC by not sending a CR (\r). No client requires the CR,
+   and it causes havoc with ircII-based DCC RAW scripts. -JailBird */
   if (len > 510)
   {
-    outbuf[510] = '\r';
-    outbuf[511] = '\n';
-    outbuf[512] = '\0';
-    len = 512;
+    outbuf[510] = '\n';
+    outbuf[511] = '\0';
+    len = 511;
   }
   else
   {
-    outbuf[len++] = '\r';
     outbuf[len++] = '\n';
     outbuf[len] = '\0';
   }
diff -uNrd ircd-hybrid-6.2/src/version.c.SH ircd-hyb6.2-FEFr5/src/version.c.SH
--- ircd-hybrid-6.2/src/version.c.SH	Mon Jun  4 11:23:39 2001
+++ ircd-hyb6.2-FEFr5/src/version.c.SH	Tue Aug 21 02:04:58 2001
@@ -79,6 +79,19 @@
 done
 $spitshell >>version.c <<!SUB!THISTOO!
   "",
+  "The FEFnet ircd coding team consists of the following people:",
+  "",
+  "JailBird            Dustin Marquess     jailbird@alcatraz.fdf.net",
+  "Runt                John Leslie         john@stf.org",
+  "",
+  "The following people helped contribute code to the FEFnet ircd project",
+  "by supplying code, ideas, etc:",
+  "",
+  "Raistlin     SPaM     inubus     Ryan     Viv",
+  "",
+  "The FEFnet ircd was developed on the Linux operating system using",
+  "glibc2.1.3 and using the egcs-1.1.2 C compiler.",
+  "",
   0,
 };
 !SUB!THISTOO!
diff -uNrd ircd-hybrid-6.2/tools/.cvsignore ircd-hyb6.2-FEFr5/tools/.cvsignore
--- ircd-hybrid-6.2/tools/.cvsignore	Tue Jul  3 01:09:29 2001
+++ ircd-hyb6.2-FEFr5/tools/.cvsignore	Wed Dec 31 19:00:00 1969
@@ -1,5 +0,0 @@
-Makefile
-viconf
-mkpasswd
-fixklines
-encspeed
diff -uNrd ircd-hybrid-6.2/zlib/.cvsignore ircd-hyb6.2-FEFr5/zlib/.cvsignore
--- ircd-hybrid-6.2/zlib/.cvsignore	Tue Jul  3 01:09:30 2001
+++ ircd-hyb6.2-FEFr5/zlib/.cvsignore	Wed Dec 31 19:00:00 1969
@@ -1,2 +0,0 @@
-Makefile
-setup.h
