Mon, Dec 30, 2002 -- dave (df-1.2.0.b1)
* Removed the remains of the token send function (replaced by formatting in
	in the new send functions)
* A few more optimizations, namely binary's changes to accomodate C++ compilers
* Removed the connection rule patch (crule)
* Removed unnecessary send.c functions in favor of the existing sendto_umode()
* Cleaned up several messages
* Modularized server linking functions and new user registration
* Updated mode list in 004 numeric (usermodes, channel flags, channel modes)
* Modified do_join to elimate channel timestamps of 0 and to more accruately
	sync network timestamps. It is better to have the same "wrong" TS than
	to have different TS values that are more accurate. Join from servers
	now includes channelts.
* Added WKILL function, a hybrid of /who and /mkill. Takes a who pattern as the
	first argument and a reason. Note: /wkill <nick> is the same as
	/kill <nick>, not /mkill <nick>
* Secret channels in /whois are now designated as * to IRC Operators, % means
	halfops, not secret.
* Added halfops support (may be disabled via include/config.h). Shows in whois
	as %#channel. Halfops can set modes (except add/removing ops or 
	halfops), set the topic, kick regular and voiced users, and invite
	users.

Fri, Dec 27, 2002 -- dave (df-1.2.0.a3)
Happy Holidays!
* Added new user mode 't' (TS_NOTICE) for various Timestamp notices. Similar
	to the priority of junkops, but may be useful at times
* Changed behavior of autoconnect again (due to floods on some platforms)
	Only connect to 1 server at a time.
	Highest class wins. Set your hubs to class x, leafs to class less than
	x, etc. (i.e. 40 and 30) Be sure to define Y:lines!
	MaxLinks still applies on a per-class basis! 0 for no max
* Added autoconnect flood limit
* Only allow /samode when services are down (via SERVICES_NAME)
* Supported AKILL reasons in AKILL (from services) but not required. Akill
	reason may be given in RAKILL but is not necessary (match function
	ignores this field)
* Redesigned include/config.h
* Added SA /akill command, see /akill ? for more info. Available only when
	services are down.
* Display akill reasons in /stats k
* Rewrote akill function to support old and new syntax:
	OLD: AKILL <host> <user>[ :comment]
	NEW: AKILL user@host <seconds to expire>[ :comment]
	When an operator uses /akill, comment must be given (only available
	when services are offline)
* Changed add_temp_conf syntax (added hold field for akill expires)
* Added expire_akills, will run no more than once a minute (config.h), at the
	most efficient time possible
* Remote kline and remote rehash are now the DEFAULT. Saying no to the
	questions in config enables NO_REMOTE_KLINE and/oror NO_REMOTE_REHASH
* Removed duplicate preproc declarations
* Completely removed R lines (some references still remained!)
* Implemented many changes from binary's df-1.1.1: designed as [df-1.1.1]
* Removed chkconf from the CVS tree (outdated)
* [df-1.1.1] Renamed usermode +R (SRA) to +S, and +L (LimitReg) to +R to 
	conform with chanmode +R (also forward to other servers)
* [df-1.1.1] Invite allows users to join in all circumstances
* [df-1.1.1] Implemented Protocol Levels. Each protocol is assumed to be a
	part of a chain. If a server has complex protocols, it must also
	support the earlier features
* Added protocol level 4 (PROLEV_COMPACT and PROLEV_AKILL) for new protocols in
	df-1.2.0. Older version of 1.2.0 will act like 1.1.0 servers until they
	are upgraded (no cjoin, no new akill, no modes in nick)
* [df-1.1.1] Made /who show real host to opers. Response will contain the 'd'
	flag to designate that the host is diguised
* [df-1.1.1] Fixed cmode +f to be less sensitive at first and harsher on
	likely offenders
* [df-1.1.1] Touched up exit_client() and close_connection()
* Various optimizations
* Fixed misc. compile warnings
* Show protocol level in /version
* [df-1.1.1] Integrated m_kill and m_fquit into do_kill() which takes a flag to
	determine whether its a kill or an fquit. Removed path accumulation
* [df-1.1.1] Updated sending functions to more easily implement protocols such
	as token and be more efficient when sending channel messages
* [df-1.1.1] Readded support for sending numerics to channels
* [df-1.1.1] Implemented sptr caching (PROLEV_CACHE)
* [df-1.1.1] Improved channel dcc block so that users can send a few DCCs. If
	the user sends a certain number over a certain period of time, the
	user's ability to send dccs is revoked for a period of time

Tue, Dec 17, 2002 -- dave (df-1.2.0.a2)
* New sending functions for protos and mode formats
* NICK command now includes +modes in place of depricated hopcount when
	sent to any SERVHASH or SERVJOIN server (not services). New ircds will
	look for this from any SERVJOIN server.
* register_user sends modes to non-servjoin servers
* Various optimizations
* Rewrote SVSNOOP code (m_svsnoop) to set CONF_NOOP_GLOBAL or CONF_NOOP_LOCAL
	on conf lines affected by a +NOOP, and reset to CONF_OPERATOR or
	CONF_LOCOP on a -NOOP.
	SVSNOOP <server mask> :[+|-]<oline name>
	SVSNOOP <server mask> :[+|-]<oline mask>
	"server mask" can be a server name (i.e. darkfire.oh.us.darkfire.net)
	or a wildcard (i.e. *.net or *) "oline name" is the exact name on the 
	oline (aconf->name), as used in /oper. "oline mask" permits wildcards, 
	and matches against the host of the oline The command must be issued 
	by a ULined server
* Added /stats N to list SVSNOOP'd O:lines. Uses same format as /stats O
* Added alternate /who sytnax (/who mask;flags) for use with broken clients
* Implemented CJOIN sending to replace send_user_joins (send joins by channel)
 	Users and modes sent with initial CJOIN, following CJOINs have no
	modes, bans sent as MODE once finished
* Fixed RMBAN to allow services to use it to unban users
	:ChanServ RMBAN #darkfire dave
* Removed all NOSPOOF code from IRCd
* Removed all server ips from public view (i.e. sendout_wallops and 
	sendto_ops)
* Renamed the SERVJOIN protocol to a more appropriate name -- COMPACT
	Now affects more than just net syncs
* Seperated PROTOCTL for users and servers. Server protocol now in SERV_CAPAB
* Added m_cjoin to parse incoming CJOIN replies. Handles modes, parameters,
	and users based on @+name syntax. Uses TS handling similar to upcoming
	changes, may not be completely compatable.
* Created seperate /info and /contrib
* Changed autoconnect behavior. If MaxLinks is 0 for the CONNECT conf line is,
	a connection attempt is made. Otherwise, check Links in the given class
	against MaxLinks before connecting.
* Fixed numerous CJOIN bugs (wrong calls to channel funtions, undefined
	ints, missing params, mb_init)

Tue, Nov 26, 2002 -- dave (df-1.2.0.a1)
* Added SAJOIN command to allow SAdmins to force join a channel in which they
	could not normally join (banned, invite only, etc.) The command
	centralizes the old m_join into do_join, having m_join and m_sajoin
	forward that function. If SAJOIN is used and the oper could have
	used JOIN, no notice will be sent. Otherwise, a WALLOPS is sent.
* Fixed MyFree/Free in DEBUGMODE
* Require services aliases to verify that the target is ULined
* Migrated to autoconf and new config script
* Opers automatically get +A and/or +a depending upon their access when they
	become an operator
* Fixed bug in socket loop which broke autoconnect
* Moved die/restart notices to WALLOPS rather than local +s (sendto_ops)
* Changed autoconnect behavior to act differently on leafs than on hubs. The
	preivous behavior now applies only to leafs:
		Loop through the CONNECT confs. Find a server to attempt to
		connect to and move it to the end of the conf list. Then
		attempt to connect to it.
	New behavior for hubs:
		Loop through the CONNECT confs and connect to all servers
		that can be connected to. Hold times still apply. This can
		grealty speed up split recovery and is more efficient when
		linking the network/rebooting the ircd.
* All opers can see +s channels in /whois and /list
* Added 2 new compile options
	- TOKEN_ONLY sends all messages in TOKEN format, reducing bandwidth.
	  Suitable for most leafs and some hubs.
	- NO_TOKENS sends all messages in standard format, using more 
	  bandwidth but compatable with services.
	  Suitable for hubs with many servers that also host services.
	- If neither option is enabled, tokens will be sent to servers who
	  say they support it. This requires extra processing for many
	  broadcast-type commands.
	  Suitable for hubs with few amounts of servers that host services,
	  but NO_TOKENS may be must as beneficial depending on resources.
	- If both options are enabled, we pretend neither are enabled.
	debug: T = TOKEN_ONLY, t = NO_TOKENS (in version reply)
* Implemented token sends via sendto_serv_butone_token (replacing
	sendto_serv_butone)
* Cleaned out s_debug.c
* Re-implemented and updated the identify command

Wed, Jan  2, 2001 -- binary (ver df-1.1.0.c9)
*	More changes, optimizations, as usual.
*	/who and /whowas without parameters or simply a single question mark
		parameter will now display a help description of the command.
*	Unix sockets removed from Config.
*	New disguise algorithms can now be inserted via a secret.h file.
		The Config script asks if the user has a secret.h file to be
		used.  The options are using the default disguise algorithm
		and making a dummy secret.h file, using one already there if
		there is one, and copying one from another location.
*	Added back ability of opers to see what channel a user is in via /who
		if the user is in only in hidden channels
*	Flood protection placed into IRCD.  New mode +f takes an integer
		argument, which corresponds loosely to a number of tenths of
		a second, and smaller arguments correspond to more sensitive
		flood controls.  Numbers from 30-100 work well.  The flood
		detection determines one of these: no flood, probable flood,
		definite flood.  The flood algorithm works like the algorithm
		used to delay message processing for users  -- it penalizes
		them a certain time period per message, greater for larger
		messages.  A definite flood is when the user is unable to
		send before the user receives a penalty, and the user receives
		a fairly severe penalty, like placing them in a "hole" where
		the depth to climb corresponds to the rate at which they
		try to send more messages.  Probable floods are when the user
		will almost certainly receive a definite flood if another
		message is sent -- there is a small penalty for this to help
		the user get into the hole.
*	Fixed bugs.  Since svskill used hunt_server, it seems that servers
		were relaying the message as :NickServ SVSKILL <servername>
		and when the servers tried to kill themselves they realized
		that it wouldn't work, so it went crash.  Fixed SVSKILL not
		to use hunt server and put protections in exit_client so as
		not to try to close connections marked as IsMe().
*	"Link cancelled - server exists" and "Unauthorized connection"
		give only a junkop notice, no wallops or globops.

Wed, Nov 28, 2001 -- binary (ver df-1.1.0.c8)
*	Lots of stuff fixed and touched up...
*	Going to put zalloc library into ircd -- it also allocates memory in
		blocks, but it makes efforts to crystalize unused areas
		in order to free them.  The old dalloc will stay, since
		zalloc puts 4 extra bytes of memory in each item as a
		pointer to the block it belongs to right before the memory is
		dealt out to avoid searching huge lists. These extra 4 bytes
		are not desirable for both small item sizes or when the usage
		is fairly constant.  Since dbufs are often allocated
		massively in bursts, huge lag, etc, it's desirable to be able
		to free them when usage drops down to its usually extremely
		low number.
*	Fixed get_client_name so that it works right.  And don't let normal
		users do stats L to see user's ip's.
*	More fixes in m_who.  Also added a help screen invoked by /who
		with no parameters.
*	Changed behavior of not putting the *@* in the I:line: ident always
		takes priority, but only by putting *@* rather than * in the
		I:line will a tilde(~) be inserted into users without ident.


Thu, Jul 12, 2001 -- binary (ver df-1.1.0.c2 to .c5)
*	Added block allocation in dalloc.c ; this hangs onto memory after it's
		supposedly "freed" to prevent malloc waste, and because it's
		simply a little more efficient.
*	Lots of minor changes I probably have forgotten to document.
*	Made a short sweet version of sprintf and vsprintf called mysprintf
		and myvsprintf now used throughout ircd.
*	Now send.c is fine-tuned a little bit to use mysprintf and myvsprintf
		and is utilizing varargs in some functions, but not all.
*	Users can't send part messages if user cannot send to channel.
*	A user trying to quit will send out a PART in channels to which he
		can't send.
*	Rewrote parse(), do_numeric(), and zapped s_numeric.c
*	New channel mode +d: prohibits members without +o or +v from sending
		DCC's while joined to the channel (autojoin DCC virus prots)
*	m_whowas reworked, masks can be specified:
		nick		host.name	nick!user
		nick!host.name	user@host.name	nick!user@host.name
		$nick_currently_online (trace current user's hostname)
*	m_who done some reworking...for masks it works like this:
		nickname -- match nickname exact using hashes
		nick*mask -- match nickmask, or realname if sender is IRCop
		host.mask -- match hostname
		user@host.name -- match user and host
		nick!user@host.name -- match nick user and host
		.serv -- match server name using first 4 characters of
			the server's name (.schizy.* and longer will work too)
		#channel -- oh yes of course, /who #channel
*	m_mode changed to allow an unlimited number of parameters from the
		user end.  however each line sent out will be limited to only
		12 mode parameters per line.
*	channel names now must begin with only #
*	userload module removed -- perhaps a more efficient replacement will
		be added sometime later.
*	m_fquit fixed to prevent certain kinds of desnycs
*	maximum key length downed to 11
*	regular m_whowas and m_whois contain disguised host and a separate
		line for real host (only shown to opers)
*	revised m_map() to be nonrecursive; map now also displays hopcount
*	if user is ircop it says:
		nick is {an IRC operator|a Server Administrator}
		({global|local|Services Administrator|CSop|SRA})
*	made m_who more efficient: /who no longer checks joint membership
*	new server list implemented, i was lazy so the base is me.s->next
*	when connecting, the PROTOCTL is not sent before the SERVER
		(why wasn't it done that way earlier?!?!)
*	channel keys are now actually case sensitive...
*	do not truncate the /whois channels list for nonopers
*	m_who reworked, again, check out new syntax:
		nick -- match nick
		user@host -- match user@host
		nick!user@host -- match nick!user@host
		/realname -- match realname
		.serv -- first four characters of server name
*	/whois channels not truncated for opers
*	changed "who limit exceeded" to a numeric (same one used in hybrid
		for more compatability)
*	Ay, dbuf's working as supposed to; no longer the need to allocate
		huge buffers during resyncs!  We try to send the sendq
		each time 2000 bytes is added to the queue.
*	redid match(); new function qmatch() that expects all masks to be
		preformatted by collapse(), match2() as well only takes
		collapsed masks
*	collapse() forces all characters to be lowercase and changes any
		string of ?*?*???** to equal the total number of questions
		followed by one asterisk; no collapsed mask will have a
		* followed directly by a ? or another *
*	new function send_num, replaces sendto_one(sptr, rpl_str(RPL_BLAH),
		me.name, sptr->name, ...) with sned_num(sptr, RPL_BLAH, ...);
		and also uses server hashes when possible ;)
*	do_numeric redone to allow server hashes
*	for channel modes an array, chan_modemap[256] is used for efficiency!
*	changed the way the modetab works, again, look at mode.c for info
*	/stats z expanded to allow an abridged version (ie, not counting
		bans or res memory but including the da stats) for nonopers
*	who restructured again, new function who_match; nick, user, host, real
		moved to static global variables w_nick, w_user, w_host, w_real
*	m_who supports new syntax, nick!user@host:serv/realname
		which can be combined in just about any reasonable way
		except ! always requires presence of @ (just watch out -- you
		can't do /who :serv because of the ':' character's special meaning)
*	dns/auth resolution lowered much lower so it doesn't take 90 seconds
		to connect...
*	sort of progressive 1-at-a-time bubble sort in message parsing; once
		a command is hit, its count is checked with the one before it
		and swapped if necessary :)
*	Part and quit messages are properly color filtered; parting is now
		done within m_quit
*	Little ircd fix for bad scripts... when someone tries
		/mode #channel +b *!*10chrident@*.blah.com it normally gets
		cut to *!*10chriden@*.blah.com and thus does not serve its
		purpose at all...instead, just scrap the leading * and then
		it'll fit.
*	Added a mode handler for channel mode +h though it won't do anything,
		in case we want to implement it in the future without
		confusing clients.
*	Adding a ban is now super-efficient!  Rather than blindly clearing
		the unbanned flag for all members, if chan is unmoderated
		we do this:
			1. check if the user has the unban flag
			2. if it's my client...
				a. if we have already done more ban matches
				than needed for 4 is_banned calls, go ahead
				and blindly clear the unban flag for the rest
				b. if the new ban doesn't affect this member
				then go on to next member
				c. set this user as banned
			3. remove the unbanned flag for this user 

Fri, Jun 15, 2001 -- binary (ver df-1.1.0.c)
*	Finally changed disguise method for ip's (*.od doesn't have this tho)
*	Command /kline accepts a max of 2 parameters, a : is no longer
		necessary in front of the reason.
*	Hopefully klines should now get all people the first time they're
		added.
*	Ahh yes!  That's why all users who are klined aren't disconnected
		immediately.  The call to check_pings() went up the list
		of fd's.  If a user was found to be klined, it was
		disconnected.  However, when the user is disconnected, the
		user applying to that SAME fd is a DIFFERENT user, and
		in the past, the new user was NOT properly checked! That's
		the cause!!!  YAY!
*	Separate function check_kills() made, check_pings() no longer does
		kline checking.  Excuse the pun... rlines are also zapped.
*	Opers see real host in /who now.  Yay!
*	IP's such as 24.100.23.90.stupidisp.com will now disguise to
		xxxx.stupidisp.com; previously, just the least variable
		part(s) were disguised.
*	New whowas feature: /whowas $nickname_currently_online will do a
		search for all users in the past using the host of the
		user currently online.
*	All helpop-forwarding crap has been zapped.  That also takes with
		it an obnoxious usermode.  Basically, for help, a user
		can enter the appropriate help channel.
*	Anti-ghost: let's say we get a ghosted user on one of our links.
		Then, that link introduces another user of the same name.
		Instead of seeing the greater timestamp and expecting the
		other user to lose to itself, we kill the ghost on our side
*	New server-hashing tables based on first four characters of server's
		name.  The algorithm uses a u_int32_t translation of the first
		four characters of the server's name and the hash table's size
		is prime so all four characters should significantly affect
		the bucket number.  Note: No two servers may begin with the
		same first four letters anymore!!
*	Users without op/voice in +m channels now cannot change nick.
*	New function can_member_send does a quick check -- returns 0 if user
		has op/voice, or is unbanned in an unmoderated channel.

Mon, Apr 16, 2001 -- binary (ver df-1.1.0.b10)
*	Mode changes made by servers are relayed without a prefix to save
		bandwith users.  When these server modes are relayed to
		users, a fictional server m.sync will appear as the server
		setting the modes; this dramatically reduces the size of
		the buffers sent to users.
*	Similarly, topic cmds sent by servers (not including U:lined ones)
		will have the sender be replaced by fictional server "t.sync"
*	Disguising now avoids buffer overflow potential... also, if you have a
		host like f.c61.up.smark.net, in which the leftmost segment
		isn't very informative, disguise will combine the first two
		when making the mask.
*	Nospoof now uses a much simpler randomizing algorithm; the extensive
		md5 stuff was totally unnecessary.
*	Fixed something with the disguise...
*	Mode +0 now clears bans.  Messed with the semantics of m_unbanme
		a little, and also moved it into mode.c
*	m_unbanme modified a little to allow extra functionality; is not
		only for SA's anymore.  However only SA's may use this
		command without having op status in the specified channel.
		This may be someday useful for unbanning a person if
		the mode +d might have caused some problem...
		Anyway, here are some examples of how it'd be used:
		- /unbanme #channel <-- unban the sender from #channel
		- /unbanme #channel fred <-- unban fred from #channel
		- /unbanme #channel * <-- remove all bans from #channel
		- /unbanme #channel *!*@*.mx <-- remove all Mexican bans
*	Fixed bug that prevented the relay of /topic commands
*	Watch lists ALWAYS show the disguised host because upon logon
		users are not initially +d, and this allows one to easily
		find someone's disgusied host.
*	After the help ignore list is freed the pointer to the beginning
		is set to NULL, so as not to try to delete the same
		thing twice ......
*	Fixed something with make_nick_user_host that caused ban probs...
*	+ channels dont give ops to anyone...oops!
*	Next mass upgrade will include code so disguised IP's will contain
		all digits, because many scripts freak out if duisguising
		puts letters into the ip addies.  The last term of the IP
		address will consist of a number ranging from 300-999,
		completely out of the normal 0-255 range.
*	Unbanme alias made called "rmban" that calls the same function...
*	Fixed something with mode that allowed ocasionally a 13th mode
		parameter to be sent out when doing mass-unbans...

Sat, Apr 07, 2001 -- binary (ver df-1.1.0.b9)
*	Okay, doing some streamlining..... the modebufs in mode.c now belong
		to a struct to help it be more modular.  Maybe in the future
		we might want this to work with >1 modebufs.
*	All those functions in send.c have been majorly shortened.  We had
		long ago lost hope of putting in varargs, and if we find some
		way to avoid the chain limitation, it wouldn't be too hard
		to put them back in.  The defines got a little too cumbersome
		and unsightly.  About one-third of the file was deleted
		(1536 lines to 1009 lines) and hopefully it's more flexible.
*	More send.c reforms (for channel notices and such a buffer is pre-made
		and instead of calling sendto_one each time, a simple
		send_message is utilized instead)
*	Reformed member lists again.  Now assumed that we won't have bots
		joining thousands of channels.
*	Made new struct for hushes containing both the time and the reason --
		no need for user->hushend when user is not hushed.
*	User and server structs are put directly into the client in the form
		of a union; sptr->user will now be sptr->u and sptr->serv
		will now be sptr->s.  However neither of these will ever be
		NULL, so the status macros must be used instead of null-tests.
*	IRCD *FINALLY* stores a tree of server links!
*	Mode restructured so if there is a potential risk of overflowing
		mode buffers, the mode will be split into separate lines.
*	Timestamps for local users somehow were becoming 0...now properly set.

Sat, Mar 24, 2001 -- binary (ver df-1.1.0.b8)
*	Fixes fixes fixes...let's hope this will work right!!!!!
*	Use of privmsg and notice from remote hushed users will be ignored
		because previously lag time allowed a few extra messages to
		get sent out.
*	The umode command streamlined a little... now when an oper goes -o
		he/she will keep +hb and be able to reset them as long as
		*both* modes are not removed
*	Fixed some stuff dealing with exit_client.  Turned out that
		close_connection reset cptr->fd to NULL and so that when
		exit_one_client was called, cptr == cptr->from resulted in
		FALSE and thus the notify tables etc. were not properly
		removed.  No more sending notifies after exit!
*	Well, glad that svsnick problem was fixed...some reason svsnick
		was taking the user parv[1] and trying to change his nick
		right back to parv[1], decreasing the effectiveness...fixed!

Wed, Mar 21, 2001 -- binary (ver df-1.1.0.b7)
*	Put all the channel mode stuff into mode.c for increased convenience
		and modularity.  Made functions that add stuff to the mode
		buffers, etc. which can be used relatively easily.
*	Mode syncing is optimized so that only the last MODE command will have
		less than 8 parameters.
*	Members who are both +o and +v will now have both modes synced.
*	Some fixes made to some various functions; hopefully there should
		be much fewer bugs.
*	Hopefully hash table will be better.... hashyell.c (one with extensive
		testing of table integrity) is currently implemented.

Mon, Mar 19, 2001 -- binary (ver df-1.1.0.b6)
*	Rewrote client/channel hash functions... the old ones were starting
		to break down and the functions were simple enough to rewrite.
*	Some other touchups...
*	Channel mode +z (MODE_PRIVMSGSONLY) prohibits sending of notices
		or CTCP's other than action for those without ops/voice.
		Added because /notice is often used to avoid antiflood scripts
		and also because mass CTCP's can often crash clients or use
		unnecessary bandwidth.

Tue, Mar 13, 2001 -- binary (ver df-1.1.0.b5)
*	Seems to work pretty well... various cleanups.
*	Function m_ison was cleaned a little, the old had some bugs and
		the code was kinda strange.
*	Made function check_params that automatically checked params and
		sent necessary "Not enough params" message.  Also made
		implementation for simply sending the message in a return.
*	Split quit messages are now shorter and copy the Quit: prefix for 
		regular /quit's.  New sample quit message from a split
		between schizy.ca.us.darkfire.net and
		semisolid.ga.us.test.darkfire.net would be
		unlucky_user has left IRC (Split: schizy <-> semisolid)

Mon, Mar  5, 2001 -- binary (ver df-1.1.0.b4)
*	And now this is nice and peachy clean and just everything you want
		in an IRCD.  Syncing with +l, +k, and +a are now picture
		perfect as on syncs the larger one is taken.
*	IRCD will not reject nicknames from other servers for having illegal
		characters.  If someone is dumb and makes nicks containing
		bells, tokens, etc. allowed on a server, then well let them
		suffer from inability for others to /msg them etc.
*	IRCops see real host in /whowas now.
*	Now /whowas will search by hostnames.  For regular users, the real
		host will be checked, and disguise host only if the person
		was +d when he exited.  For opers, both realhost and dishost
		are tested regardless.
*	New function made called change_nick that handles *EVERYTHING* that
		goes on when a user changes nicks (after I found an
		inconsistency between that in m_nick and m_svsnick)
*	Removed support for chans with server masks such as
		#mychan:server.* because now they'll only cause problems.
*	IRCops can do /names and /who for secret channels etc, assuming
		they know the name of the channel.
*	Changed disguise method on IP's to prevent the endings from looking
		like TLD's: now the end will consist of one letter followed
		by a number.
*	Fixed quit messages generated by fquit.

Wed, Feb 28, 2001 -- binary (ver df-1.1.0.b2 and .b3)
*	Basically, this will be the bug-free version.
*	Whowas struct no longer replies on users online.  Adds to static
		memory use but nothing really bad.
*	Servers are now included in the whowas database.
*	Now whowas struct's server name storage points either to the live
		server, or the location of the server's name in the whowas
		list.
*	Fix made against bouncing +k if both chans have the same key.
*	Mode command touched up a little for efficiency
*	On mode resyncs... the lexicographically greater channel key is taken
		to prevent desyncs.
*	Made m_map()'s output a little more visually pleasing.
*	Sync mode negotiation now actually refuses to set the mode in the
		first place... basically, it's effective now.

Sat, Feb 24, 2001 -- binary (ver df-1.1.0.b1)
*	Removed various antiquities from m_user, m_nick, and register_user.
*	Changed cptr->user->server to a pointer to cptr->srvptr->name to
		avoid excess memory waste.
*	Disguising for ip's will now include 0 as a digit...
*	Got the \ thing in match() to work properly.
*	And now \ is removed from match().  Once it started working properly,
		horrible bugs appeared dealing with the \ char in nicks.
*	Non-opered U-lined users can use fquit and kill again
*	Cleaned up exit_client and exit_one_client_backend of old junk.
*	Removed some stuff out of free_user into exit_one_client_backend
		so that user the struct will be bared at time of quit
		rather than at deletion of whowas entry.
*	Made separate exit_server function to do the recursive server split
		handling.  Finally got it to display the *CORRECT* server
		names in split messages.  Aye aye aye...

Tue, Feb 20, 2001 -- binary (ver df-1.1.0.a13)
*	Optimized ban checking
*	Refurbished remove_user_from_channel
*	Removed some antiquities from s_user.c
*	Changed some members of certain structs to be smaller sizes
*	User is informed if /who list is truncated
*	MASSIVE cleanup in m_who.  Removed lots of unneeded variables.
*	Banchecking with +d is faster.  For this, new function match2 was
		written, which returns the first char at which a nonmatch
		was found.  ONLY if the nonmatch happens beyond the dot
		will the disguised host be checked separately.
*	Removing bans with -b will now scan with matching for local users
		if a literal match is not found.  If someone does something
		like mode #chan -b *!*@* and there is no ban on *!*@*, the
		first ban in the list will be removed, for example.  The
		message will be relayed using the original mask.

Tue, Feb 13, 2001 -- binary (ver df-1.1.0.a12)
*	Basically fixed some bugs
*	Now mode +l syncs better; if timestamps are equal and there are
    two different user limits, the larger one is taken.  (Also applies to +a)
*	Made a separate function for displaying whois info for a user.
    Accordingly, if the user specifies no wildcards, then the user's name
    will be looked for in the HASH rather than searching *all* the clients. 
*	Since /stats z is EXTREMELY CPU INTENSIVE (counts up all ram in use)
    it is now limited to use by opers only.
*	If someone is /hush'ed while already /hush'd, the user's old hush
    reason is now freed from ram.

Thu, Feb 8, 2001 -- binary (ver df-1.1.0.a11)
* FINALLY restructured channel member lists and user channel lists...
  - New struct called "Member" contains:
        chptr(channel) cptr(user) flags(guess)
        nextu(next user in chan's member list)
        nextc(next chan in user's chan list)
  - Rather than having two separate linked lists, one storing the channels
   a user is in and the other storing the users in a channel, each join
   is stored in a single struct, all of which are interconnected in a web.
  - Benefits:
    (1) Allows addition of more data for member info rather than being
     restricted by the inflexible Link struct
    (2) Takes less ram and less separate structs are allocated.
    (3) If you're going through the user's channel list, you don't have to
     look up the user's position in the chan to find his/her chanflags.
    (4) Member lookups are done so that chptr and cptr are passed.  It is
     checked whether the channel's member list or the user's channel list
     is smaller, and searches in whichever list is smaller.
* REPEAT PROTECTION via channel mode +a [x] (antirepeat)
  - Local users' messages are stamped.  Stamp is compared with that
   of previous message.  If stamps are equal, see if user has exceeded
   the set limit of messages in a row.
  - Protection can be enabled via channel mode +a (only 1 identical
   line) or +a x (where x is the max # of identical lines.)
  - Protection can be disengaged via mode -a.
  - Once the user meets the max # of identical lines, subsequent
   identical messages will simply be ignored.  Non-verbose to prevent
   unnecessary load and disruption.
* Members with ops and voice aren't prone to repeat protection.
* Appeased obsolete architecture worshiper's demands and make disguise
	u_char and u_int32_t rather than char and int.

Wed, Jan 31, 2001 -- binary (ver df-1.1.0.a10)
*	now not possible to ban evade by going umode -d
*	whowas matches masks now
*	/who is patched a little to run better
*	after discovering ircd's strtoken has an O(n^2) (a while loop kept
		going until index didn't find a ',') I made haste to remove
		that from m_whois.
*	m_whois now doesn't use next_client and now traverses more sanely
*	removed numerous possibilities in m_whois for redundant checks...
		ie. searching for common channels if showperson is already
		known to be 1 (really stupid, I'd say!)
*	fixed bug with hostnames, caused only 3 chars to be registered
		because sizeof(user->host) returned the size of the pointer,
		which is 4 bytes, rather than that of the array to which it
		points.
*	OPCanZline NOW checks OFLAG_ZLINE instead of OFLAG_SADMIN.
*	a user sees his real host when doing /userhost on himself

Wed, Jan 17, 2001 -- binary (ver df-1.1.0.a9)
*	tested on network--some misplaced "features" fixed
*	can_send testing is now again performed for remote users in case
		of severe lag; a k/b'd user on a lagged server could send
*	reverse added to list of chars to strip
*	disguise skips hosts such as microsoft.com or henry.net
*	added feature for forcible mode +d for users that services sets
		svsmode +D to affect ISP's which are likely to have users
		vulnerable to attacks

Thu, Aug 10, 2000 -- binary (ver df-1.1.0.a8)
*	removed nick/server collisions which are now impossible
*	removed various checks associated with the old nick/user protocol
*	when bouncing a user mode, don't deop the user if not in the chan --
		kick the user instead.
*	only check Q:lines for local users
*	slight, non-detectable changes in m_join and sento_serv_butone
*	oops, +s should dominate over +p, as it does as of now.
*	fixed general insanities in m_unbanme
*	trying to get local channels to work again!
*	removed null-traps from PubChannel etc macros
*	revised m_who just a little, and implemented the idea of setting
		a limit on /who replies -- should opers have higher limits?
*	created is_member_banned that checks if a member link is banned --
		sets the flags if not already set
*	bans now store a pointer to the hostname part of the banid, so that
		we need not check the entire mask when we do the
		disguised-user retest with sptr->user->realhost.

Fri, Aug 4, 2000 -- binary (ver df-1.1.0.a7)
*	fixed various flaws in the mode command
*	removed obsolete and nonsupported CLIENT_COMPILE stuff
*	reimproved bouncing code
*	always relay sender to U:lined servers because they run more
		protocol-sensitive software and still expect normal IRCD
		servers to automatically insert the sender name.
*	re-included the sender in RELAYING server modes, repealed old decision
*	channel mode +r is synced on net.join
*	now all param-less modes supported in m_mode are shown to user in
		/mode #channel except +r
*	fixed protocol bug by making +p exclusive over +s
*	removed old code that sent a comma-separated /part list to other
		servers using multiple part commands
*	U:lined bans still pass through the server to prevent desyncs
		which can easily happen when a channel is recreated on
		one server but not recreated on another server
*	servers can now send FQUIT's successfully
*	this change allows servers to fquit unknowns, and fixes some bug with
		desyncs caused when services enforce a forbidden nick

Fri, Jul 28, 2000 -- binary (ver df-1.1.0.a6)
*	re-applied the concept of truncating the server name after
		the first dot in /fquit paths
*	fixed bug in /who where for a nonoper, if a non-invisible user
		was in a secret channel, the user would not be shown
*	channel flood protection added but is currently commented out
*	timestamp is sent for calls to sendmodeto_one even if there is no
		op being done
*	drop the sender on server modes to help alleviate some net.burst lag
*	drop the sender on bounces
*	rearranged some code to prevent coring
*	only strip color in channel messages coming from *local* users
*	removed the old outdated service stuff
*	made the :'s not mandatory on several commands which aren't supported
		by IRC clients to prevent having to add one manually

Thu, Jul 20, 2000 -- binary (ver df-1.1.0.a5)
*	color stripping also ignores bold and underline too
*	opers now can see +s chans in /who
*	ban code optimized -- a user checked for a ban checks to see if
		the ban flags are set, and if not, it checks for a ban match
		and then sets the flag.  Only applies to members.
*	fixed the m_unhush sender drop (used to send server name as the sender)
*	shortened the method for IP address disguising
*	in m_mode, if chptr->creationtime is 0 and the other server supplied
		a valid timestamp, then we should change chptr->creationtime
		to that value.  For some reason, that code didn't exist,
		but it didn't seem to be causing any major problems.

Tue, Jul 18, 2000 -- binary (ver df-1.1.0.a4)
*	m_kick was touched up likewise
*	all traces of zombies have been wiped out
*	made m_who less repetitive and more clean-looking
*	fixed various redundancies in m_mode

Sat, Jul 16, 2000 -- binary (ver df-1.1.0.a3)
*	The old m_names was large and cumbersome, and by eliminating using
		/names without any channel specified, IRCD does not need
		to go through unnecessary steps and also, nowadays, networks
		are getting to the size where listing all clients would
		probably flood most users off.
*	Optimized m_invite a little.  Made it easier to read.

Mon, Jul 10, 2000 -- binary (ver df-1.1.0.a2)
*	Fixed the bug where a : was ommitted and you couldn't use spaces at
		all in global k:lines.
*	Added option channel mode +c.  It strips colors from channel messages
		that people send.
*	Reworked the code for mode +d.  It came to my attention that for the
		mask du-148-223-40-*.prodigy.net.mx, when used with +d, only
		the last character would change.  The new method forms a
		4-character hash instead rather than whatever it used to do.
*	Supported svsmode disguise by using +X (d was already taken).
		The regular code wouldn't have supported it anyway because it
		just set the mode but didn't actually disguise the user.
		Also, disguise() was moved to s_misc.c because it was
		rather unnecessary in its previous location in s_user.c

Mon, Jun 26, 2000 -- binary (ver df-1.1.0.a1)
*	Added logging of K:lines, at request of Kloud421.  This feature is
		optional, now a question in the Config file.  This features
		logs the use of /kline, /unkline, /zline, and /unzline in
		a file called kline.log in the DPATH dir along with ircd.conf.
		The format is something along the line of
	    "opernick!user@host [remotely ]added/removed a temp k/z:line for
			user@host (reason) date -- time"
*	Fixed most warnings reported with -Wall except for implicit decls
		and /* within comment because of their overabundance.

Sun, Jan 16, 2000 -- binary (ver df-1.0.4.b7)
*	Fixed another bug!  Before, once you identified to NickServ and your
		"registered nick" flag was set on, you kept your flag even
		when you changed nicks.  Now, you lose your special status
		at having a registered nick when you /nick, but don't
		worry -- you'll get it back when you identify to NickServ
		again.
*	In the reply that says "you must have a reg'd nick to join" for +R
		channels, it now tells you that you must also be identified,
		how to identify, and to see /msg nickserv help for further
		info.  We must be friendly to newbies and people who don't
		know every single nuance!

Sat, Jan 1, 2000 -- binary (ver df-1.0.4.b6.nc.ncts.ntb)
*	Removed the 19- prefix to the date in /time.  EEK THE BUG!
 BTW, HAPPY NEW YEAR

Sun, Jul 25, 1999 -- binary (ver df-1.0.4.b6.nc.ncts.ntb)
*	Verbose timestamp fixing will not be shown for newly created channels
		anymore.  Yay!
*	Got rid of topic bouncing.  Topic bouncing is probably
		unnecessary, but if it happens to be needed, then something
		is probably wrong with the existing code.

Fri, Jul 23, 1999 -- binary (ver df-1.0.4.b6.nc)
*	Patched up nick collision code some.  Killing the user on the *other*
		server is now taboo.  Let *them* take care of it, because
		you will get excessive nick collisions with instantaneous
		reconnects.

Wed, Jul 7, 1999 -- binary (ver df-1.0.4.b6)
*	In h.h, sendto_failops_whoare_opers is now spelled correctly; it used
		to be spelled "opsers"
*	Dreaded bug with Linux and dn_skipname FIXED!  For some reason, the
		#if that enclosed the definition of dn_skipname in sys.h
		did not have the "|| defined(__linux__)" in it like it was
		supposed to.

Sun, Feb 7, 1999 -- binary (ver df-1.0.4.b5)
*	Fixed SAMODE, and found a slight bug where U:lined mode timestamps
		aren't relayed.
*	Topic now accepts topics with equal timestamps, but ignores all
		topics if the topics are the same.  Topics are also bounced
		now, but with the equivalent-topic checking, most of the
		time they won't get very far.
*	Verbose timestamp fixing for +j people, shows when we fix timestamps
		or when we do bounces.
*	Before, during unhush, the local server  name was always relayed as the
		sender instead of the user/server doing the unhush.

Thu, Jan 28, 1999 -- binary (ver df-1.0.4.b4)
*	Fixed various /hush and /unhush bugs
*	Hopefully fixed this "always-bounce" thing that servers do

Thu, Jan 21, 1999 -- binary (ver df-1.0.4.b3)
*	Fixed a bug with /hush - it checked for MyConnect(acptr) before acptr
		was set, causing it to crash.  Not anymore.

Sun, Jan 17, 1999 -- binary (ver df-1.0.4.b2.dfix.w32fix)
*	Now fixed to compile better in win32
*	Situations where a double bounce may occur *should* happen less frequently.

Sat, Jan 2, 1999 -- binary (ver df-1.0.4.b2)
*	Touched up on various things to make them run faster

Fri, Jan 1, 1999 -- binary (ver df-1.0.4.twilight.b1.rh.para.tts)
  HAPPY NEW YEAR !!!!!!!!!!!!!!!!!!!!!
*	Redundant bans can't be added anymore, for example, if *!*@*.x.net
		is already banned, then *!*janedoe@*.x.net can't be banned
		because it is already covered by the broader ban.

Wed, Dec 30, 1998 -- binary (ver df-1.0.4.twilight.b1.rh.para.tts)
*	Michael's RedHat fix implemented - now works on RedHat Linux
*	parv[] only contains valid pointers or NULL - no more possibilities
		for old pointers left over from old calls to parse()
*	Topic timestamps are presumed to be 0 if no timestamp is specified
*	NS ghost now works right - a fix to the bug where fquit() didn't
		check for proper privileges didn't allow U:lined clients
		to use FQUIT without opering.  Now they can.
*	Old QUIT fake direction bug fixed
*	Miscellaneous other bugs fixed

Tuesday, December 29, 1998 -- binary (version df-1.0.4.twilight)
*	Changed version name to cause less confusion
*	Opers can't fake kills with SQUIT anymore
*	"Erroneous" is now spelled correctly instead of "Erroneus"

Tuesday, December 22, 1998 -- binary (version df-1.0.3.twilight)
*	In nick collisions, if the server with the new user is the same as
		the server with the old user, the new user will rule out.
		This will help relieve problems with ghosts.
*	A new command, /rkill, will be used by opers to override the normal
		switch to fquit that happens when m_kill is called.
		This will be used to get rid of ghosts, because the server
		with the ghost won't have the ghost.
*	QUIT's are not going to be sent to the server with the user who is
		quitting or being killed.  The old backwards QUIT caused
		unnecessary load and maybe some confusion from the fake
		directions.  It was a bug in send.c/sendto_common_channels
		where it did not check if the user was a local user.  Remote
		users are normally taken care of by sendto_serv_butone, so this
		redundant sending is not needed and can cause confusion.
		That bug was *FINALLY* fixed!

Wednesday, December 16, 1998 -- binary (version df-1.0.3.twilight)
*	If an oper is away but also a helpop, their helpop status will no
		longer be shown in the oper's /whois.  This will cause less
		fuss when trying to find helpful opers.

Wednesday, December 2, 1998 -- binary (version df-1.0.3.twilight)
*	Map command added, and working (but not very "clean"-looking)
		It shows a detailed branched map of the servers on the
		work for clients that do not have a /links parser.  The
		current map isn't very "smart" - lines continue downards
		even if the last server on that level was already reached.
		Also, it goes through the whole list of clients a number
		of times, which will be changed to some kind of linked list
		later.  But at least it works.

Sunday, November 29, 1998 -- binary (version df-1.0.3.twilight)
*	Hush and unhush commands added.  /quote hush nick seconds :reason
		done by an IRC operator hushes a user, and /quote unhush
		nick unhushes the user.  A hushed user cannot use most
		commands that effect others, like privmsg, notice, join,
		kick, mode, and nick.  When the time period is over, the
		user is unhushed, unless the user is indefinitely hushed
		if the seconds field is specified as being zero.  The only
		way for an indefinitely hushed user to become unhushed is
		through an oper doing /unhush or by quitting IRC.  Also, a
		hushed user has an extra line in their /whois saying
		"nick is hushed (TheHusher (flooding))"
*	/unoline can no longer remove global O:lines

Friday, November 27, 1998 -- binary (version df-1.0.2.twilight)
*	Kills (fquits) are now working like they should, no mess-ups
*	Topics are relayed properly, bug in which only topics with lesser
		timestamps were accepted, not lesser OR equal to

Saturday, October 10, 1998 -- binary (version df-1.0.2.twilight)
*	Double-bounces are a thing of the past.  The mode string of a bounce
		is preceeded by an "&" sign.  If the server wants to bounce
		a mode and the string begins with an "&", it won't bounce
		it.  That'll fix mode fights, but this shouldn't happen in
		the first place.  It'll send a server notice to +j when it
		prevents a potential double-bounce.
*	+C and +R for CSops and SRA's.  These can only be set via svsmode.
		Unlike +a, this mode is never on unless services sets it --
		not where the user sets it and services make sure they're
		authorized.
*	Best possible /quote help response

Sunday, September 13, 1998 -- binary (version df-1.0.1.twilight)
*	More bugfixes!  Modes should now sync properly.

Tuesday, September 8, 1998 -- binary (version df-1.0.1.twilight)
*	/quote help does not flood the user any more with the available
		commands from _all_ servers.  Before it was relaying the
		help even if the command list sending took care of it, so
		the user ended up getting flooded by every server on the
		net.

Monday, September 7, 1998 -- binary (version df-1.0.1.twilight)
*	More bugfixes!  Yay!!!
*	No more "Q-lined nick NickServ from <unknown> on services.*" anymore!

Sunday, September 6, 1998 -- binary (version df-1.0.1.twilight)
*	/list now lists channels with only one user in them

Thursday, September 3, 1998 -- binary (version df-1.0.1.twilight)
*	Fixed various bugs that would cause ircd to core, such as buffer
		overflowing in m_mode, by setting a char to '\0' without
		checking if the string is long enough
*	New /who flags:
		a - list only admins (+A)
		s - list only services admins (+a)
		& - list only local clients
*	QOTD command now writes to a file "ircd.qotd"
*	Brushed up on remote klines, unklines, and rehashes.  They now work
		MUCH better

Saturday, August 29, 1998 -- binary (version df-1.0.twilight)
*	Remote klines and rehashes are working fully, and access is now
		restricted to opers with "s" in their oflags.  Also, the
		owner of a server can disable remote klines and rehashes,
		meaning that remote klines and rehashes will not EFFECT
		their server, BUT it can go THROUGH the server.  This is
		done with the REMOTE_KLINE and REMOTE_REHASH defines, or via
		the Config script.

Wednesday, August 26, 1998 -- binary (version df-1.0.twilight)
*	match() rewritten to work faster, and now both match() and mycmp() use
		registers, not RAM for the major variables.
*	The unoline command will not de-oper any opers using that O:line,
		because of an odd bug that makes ircd crash when you /rehash.

Monday, August 17, 1998 -- binary (version df-1.0.twilight)
*	Added command called qotd, standing for Quote of the Day.  Server
		admins can type "/qotd new quote of the day" to change the
		quote of the day or "/qotd" to delete it.  The quote of the
		day is stored in memory and displayed at the end of /motd.
		Is this useful???
*	Added new command called FQUIT:
	-	This is a forced quit.  Unlike kill, it just sends an fquit
		notice, and when the server with the victim receives the
		fquit, it forces the user to quit.  With kill, it would
		remove the user once the kill message is received, but that
		would cause desyncs.
	-	When an oper on the local server does a /kill, it is
		automatically aliased to /fquit.  It appears to be exactly
		the same as a kill to the user, but it is propagated to
		other servers as an fquit.
	-	NOTE: It is only forwarded for _opers_ that are _on this
		server_, because some servers may not yet support fquit, and
		also for nick collisions, where the user must be removed
		immediately with no wait.
*	ChanServ may now re-op users multiple times, because I was asked to
		do that.
*	Fixed svsnoop.  Now it actually works.  It didn't work before because
		!hunt_server(blah) != HUNTED_ISME is NOT the same as
		!(hunt_server(blah) != HUNTED_ISME)

Friday, August 14, 1998 -- binary (version df-1.0.twilight)
*	The UNOLINE command will deoper anyone using the particular O:line
		that was removed.  Now, server admins can also remove even
		perm global O:lines.  It's their server anyway.

Tuesday, August 11, 1998 -- binary (version df-1.0.twilight)
*	Added command mkill: /mkill nickname reason will kill nickname and
		all of its clones, and /mkill ppp1.isp.com will kill all
		users with the exact hostname, not hostmask.  This will NOT
		kill IRC operators.

Sunday, August 9, 1998 -- binary (version df-1.0.twilight)
*	m_unbanme - /unbanme #channel will remove all ban masks against them
		from the channel they specify.
*	Nick collision stuff rewritten. 
	-	Before, if two clones with the same
			nick collided on a net_rejoin, they would get killed
			every time they do a /nick after they reconnect, and
			the server would have to be restarted.  Not anymore.
	-	Also, when the nick on "our" side of the net wins, we WILL
			kill the other user, instead of hoping that the
			other server will kill it off.  This plan is more
			foolproof.  Redundant, but more foolproof.
*	Usermode +d hides a user's exact hostname, so their hostname would
		be converted from ppp1.isp.com -> kla1sjg4.isp.com or
		123.123.123.123 -> 123.123.123.7yg2 (not real conversions)

Friday, August 7, 1998 -- binary (version df-1.0.twilight)
*	Completely rewrote m_mode().  This should be MUCH easier to read and
		"hack".  Every "section" of the mode command is together,
		instead of 500 lines apart as in the old one.
*	m_mode's bounce filtering is better.  If a non-U:Lined server is
		setting a mode and the timestamp is greater, you bounce it.
		A timestamp of 0 always overrules others.  If a remote nonopped
		user changes the channel mode, it'll bounce them. For local
		nonoped users, you just tell them "You don't have chanops"
		and exit.
*	/oline and /unoline commands -
		/oline user@host.mask opername password
			adds a temp o:line, accessed by /oper opername password
		/unoline opername
			removes all temp o: and O:lines with "opername" as
				the oper name
*	Remote /klines and /unklines -
		/kline user@host:server.mask [comment]
		/unkline user@host:server.mask
*	Added umode +j which makes the server send you "annoying" server
		notices that are now ignored from just +s.

Tuesday, Aug 4, 1998 -- binary (version df-1.0.twilight)
*	/who flags, only show:
		o - opers
		w - umode +w
		h - helpops
		i - invisible users (for IRCops only)
		G - gone/away
		H - here/not away
		@ - channel op
		+ - voiced
*	/who mask interpreting:
		- nick!user@host.mask	- matches nick AND user AND host
		- user@host.mask	- matches username AND hostname
		- something.with.dot	- matches host OR ident OR server
		- nickname		- don't go through the /who thing,
					just show the info on that one nick.
					Like /whois, it shows invisible users
					if the exact nick is specified.
		- anyothermask		- searches for nick OR ident; no
					dots are in it, and searching realname
					is pointless and wastes CPU cycles.
*	/who now shoes helpop status with a lowercase 'h'
*	Remote /rehashes: /rehash server.mask


Saturday February 21st, 1998 10:42am GMT dal4.6.5.DreamForge -DuffJ
* basically bug fix release of dreamforge
* SCO UNIX and Red Hat 5.0 Linux should now compile df smoothly
* help files updated and expanded
* casetable high-bit flipping bug (oh no!) fixed *phew!*
* df will now compile on boxes without snprintf
* other bug fixes - unkline readded, kill path
  truncation bug fixed

Monday January 19 1998 -- 20:02 -08:00 dal4.6.3.DreamForge -wd
* Finally, release dreamforge!
* Various minor bugfixes, changes, etc.
* Added 'dalnet-keys.pgp' file containing DALnet PGP keys.

Sunday December 28 1997 4:20pm dal4.6.2.DreamForge -wd
* Rolling the first "Release" of dreamforge.
* Added wd-lusers patch, sacrifice 100% accuracy of lusers for performance
  gain.
* Added the script.ini supressor patch, along with it a Config option
  to enable/disable, and a token letter in the version reply to signify
  its inclusion/exclusion.
* Added wd-malloc patch, should slightly boost performance for FreeBSD
  2.2.2+ DALnet servers (anything below 2.2.2 is untested, i don't even
  know if the patch will work, but it won't hurt)
* Added X:line patch via NikB (See doc/example.conf)

Saturday Dec 27th 12:15am dal4.6.1.DreamForge -DuffJ
* completely separated flags and usermodes.
  sptr->flags is now
  sptr->flags for flags, and sptr->umodes for usermodes

Friday Dec 26th (Merry Christmas!) 12:05am df-r4-fix4 -DuffJ
* bug fix in m_join() that allowed desynchs due to incomplete
  channelname length checking. Fix by Dianora via Barubary
* /whois reply now returns this format:
  "foo is an IRC operator" OR
  "foo is an IRC operator - Services Administrator" OR
  "foo is an IRC operator - Server Administrator"
* when an admin sets usermode +A, he is now automatically
  set +a aswell.
* /notice @+#channel implemented
* connect time notices \r added, improved wording.
* ns,cs,ms + os shortcut aliases removed (thanks ns)
* help.c updated
* chatops implemented (from darkrot)
  /mode JoeOper +b
  /chatops blahblahblah
  identical to globops
* restart and die removed from * and global oper flags
	
Thu Nov 20 22:09:14 EET 1997 Donwulff (donwulff@iki.fi)
* fixed merge-conflict with resync-burst NICK's
* FREEMODE changed, see channel.h for remarks

Wed Nov 19 21:53:31 EET 1997 Donwulff (donwulff@iki.fi)
* fixed an old bug involving remote modes with > 6 parameters
* added in #definable FREEMODE to allow "unlimited" sized resync-burst
  MODE's - this would improve throughput, but requires the above fix first
  propagated
* made m_oper now reject saltless passwords
* msgmap is now an array of pointers to msgtab entries; fixed a bug
* added in the changes-list for dal4.4.17
* QUIT-comments no longer buffer-overflow...
* /whois now doesn't display extra dots
* removed extra newlines from the end of HelpOp replies

Mon Nov 17 16:36:27 EET 1997 Donwulff (donwulff@iki.fi) for dreamforge-r4
* fixed the version number, now 'dal4.5.17.r4' instead of dal4.4.17...
* tried to mark the authors of biggest changes in code as per GNU license
* changed my own e-mail address references to donwulff@iki.fi...

Tue Nov  4 18:48:41 EET 1997 Donwulff (donwulff@iki.fi)
* Nuked find_userserv() function completely, nick@server now relies on hash
* Added in Wizzu's patch to fix the PASS->services interface as intended
* Included taz's preliminary code to shorten /whois
* Removed the preliminary support for server timestamps; not finished
* Oops, donwulff-dbuffix ended up twice there; removed the other one
* Imported in the fastbuf-branch, tested code from Undernet

Tue Oct 14 16:36:21 EDT 1997 Donwulff (donwulff@iki.fi)
* Imported changes from between dal4.4.12 and dal4.4.13:
  + parse.c on 4.4.13's favour, return 0 from fake dir
  + s_serv.c m_server() server-collide: combined
  + s_user.c m_kill() saw no difference in anUnknownUser
* aliased HELP to HELPOP so that it's usable without scripts

dreamforge-r3:
* moved TRACE from 'A' to 'b', leaving 'A' and 'a' free
* dbuf_put() returns if nothing to do
* fixed a relapse of nospoof 'unreg-client-nick-change' crash

Fri Aug 22 10:13:07 EDT 1997 Donwulff <donwulff@iki.fi>
* Now default to very streamlined hash-function instead of the ELF-hash
* Added in some of the Undernet optimizations for dopacket()
* Fixed a bug in debugmode hashtable rehashing memory allocation
* Added in a notify for invites thru bans etc.
* m_hash now requires IrcOp privs
* Removed 'hashv' from both channel and client-structs, we don't use raw hashes

Thu Aug 21 23:03:38 PDT 1997 darkrot, entered by Cabal95
	* Masskill patch to let opers /kill nick1,nick2,nick3
	* Kill messages now display the user@host of the user killed

Wed Aug 20 17:44:24 EDT 1997 Donwulff <donwulff@iki.fi>
* Invites by channel-ops (or U-lined) now allow passing thru +b and +l too
* Now enforce a limit for invites-per-channel too
* Add invites to the _top_ of list in all cases, expire from _bottom_

Wed Aug 20 13:43:42 EDT 1997 Donwulff <donwulff@iki.fi>
* Link-slab allocator, allocate 4k of Links at time, reuse
* Break Bans out of Link-structures for further memory savings
* Put flush_connections() back at the end of the mainloop
* Add some blocking-checking, now use #defines for those
* Remove an extra space from resync-burst modes
* Move to use PJW/ELF hashing-routine, slightly slower but better
* Fix display of memory used by bans in /stats z
* Add elementary ignores to HelpOp system
* Add over-rides to HelpOp system
* Add a "frontpage" to HelpOp system
* Moved make_nick_user_host() and check_string() to s_misc.c
* HelpOps now use numerics to avoid errors from "buggy" clients.
* sendto_common_channels() streamlined now that zombies are removed
* Double-insert checking in DEBUGMODE or if INSERTCHECK defined
* Bytes counter for /stats m fixed? (No idea what the old code tried...)
* Numerics-handler now has debug code to try to catch weirdness
* userid@server-messages now *forwarded* for non-IrcOp's
* The new Hash-function now "documented" better...
* /rehash will now empty the global HelpOp ignore-list on server
* HelpOp ignore-list now uses properly DupSring() & make_link()
* The /list handler has been made to scan thru topics as well
* IsService now made to return 0 and let the optimizer sort it out
* Same thing with zombie-stuff, since we don't use zombies anymore

Sun Aug 10 12:13:34 PDT 1997
	* client structures now keep track of related whowas entries
	  themselves.  off_history was eating up the most CPU, now it
	  doesn't.
	* /stats l   correctly displays server connections, again.

Thu Aug  7 22:50:41 PDT 1997 Cabal95
	* Added new undernet-like /list handler by Rakarra
	* Removed fake direction notices/splits

Wed Aug  6 16:58:22 PDT 1997 Cabal95
	* Many misc changes
	* Removed alarm() calls; some bugs in Config script running in
	  auto config mode; nickchange delay(3 seconds)
	* Increased hash table sizes

Tue Aug  5 17:52:10 PDT 1997 Cabal95
	* PROTOCTL - changed it back to =. :P  Apperently Undernet is only
	  talking about it and hasn't done it yet.  I like = better :-)
	* WATCH system appears to be working under some mild testing.

Tue Aug  5 00:26:42 PDT 1997 Cabal95
	* Added Donwulff's WATCH system in, untested as of yet.
	* Changed PROTOCTL to use : instead of = for Undernet(?)
	  compatibility.

Mon Aug  4 19:49:41 PDT 1997 Cabal95
	* Heard from them, general agreement. PROTOCTL msg now is sent
	  only after the connection logs in, servers get "PROTOCTL" and
	  clients get numeric 005.
	* Token system setup and working - yeah! :-) (Donwulff)

Sun Aug  3 22:35:25 PDT 1997 Cabal95
	* First draft of protoctl finished, waiting to hear from others
	  on making a change in the way PROTOCTL is communicated.
	* SQUIT is (hopefully) completed, appears to work fine, so that
	  is a good thing. :-) (Aetobatus)

Changes from 4.4.15 to 4.4.17:
        * SVSNOOP is restricted to services, not *from* services and allowed by
          everyone else.. Anyone can disable all your O: lines in 4.4.15.
        * Temporary K-lines are able to be removed again.
        * Users cannot set themselves -r as they could before.
        * +R channels show more than "Cannot join channel."
        * Users off channel cannot change topic on -t channels.
        * Nickname changes not affected if nickname to change to is already in
          use.
        * Config option to specify whether or not users can see /stats o.
        * Other minor bug fixes.

Sun Oct  27 21:34:21 EDT 1997 Various, entered by David Kopstain
	* Changes for 4.4.15
	* New user modes. 'a', 'A,' 'r' and 'R'
	  - 'a' represents a services admin. This is set by the server 
            upon opering. This +a allows ircops to do any normal command 
            that a services admin can do.
	  - 'A' represents a server admin. This flag shows that you are
            the owner of your server.
	  - 'r' means that you are identified to acc2 of a registered 
            nick.
	  - 'R' means acc3
          - a and A are settable O:flags in ircd.conf
	* New channel modes. 'r' and 'R'. 
	  - 'R' is for users to close the channel to only registered
	    nicks.
	  - 'r' set by services to track registered nicks
	* New NICK protocol
          - server<->server protocol changes in the aspect that right
	  before the gecos is displayed, a services tracking number is put
	  in place.
	  - client<->server protocol changes in the aspect of when an
	  initial client connects, if it sends a 2nd argument in the nick
	  line (NICK taz JIM), "JIM" is sent to services as a nick
	  password and if the password matches, services will reply.
	* New SAMODE command
	  - IRC Operators with the 'a' flag can now change channel modes
	    with the SAMODE command
	* Nick Flood protection
	  - Normal users cant nick flood anymore. This does not apply to
	    opers
	* Mass invite/mass message protection
	  - Normal users can only message/invite 20 targets withing 120
	    seconds. This does not apply to opers.
	* donwulff's dbuf check. 
	* SVSNOOP command
	  - Services can remotely disable a servers O:lines
	* SQLINE command
	  - Services can send out a common set of qlines to all servers
	* New /whois information
	  - New fields for SA's, admins and registered nicks
	* /ns, /cs, /os, /ms, /nickserv, /chanserv, /operserv, /memoserv
	  aliases
	*  /identify
	   - Automatically parsed to the appropriate service.
	* /stats q
	  - Shows all Services QLines
	* /LUSERS addition
	  - Current local users:  69  Max: 1243
	  - Current global users:  12362  Max:18004
	* SVSKILL command
	  - Used by services to send a non nick chasing kill directly to
	    the clients server.
	* SVSNICK command
	  - User by services to change a clients nickname. This will be
            used instead of killing the client when nick kill is enforced.
	* allowance for normal users to /msg nick@full.server.dal.net
	  for security purposes.
	* SVSMODE command
	  - Used by services to change certain user modes, like +r for
	    registered nicks, or +d to set a services timestamp. ONLY
	    U:Lined servers can use this command.
	* Changes in Config to define your network services name, etc.
	* The Quit: patch. All quitting clients exit with "Quit: <reason>"
	* Rakarra's opernick patch.  Shows the o-line that the person used
	  to /oper: *** Notice -- NickInOline (CurrentNick!user@host) is
	  now operator (O)
	* New, more efficient command parsing routine (JK, Cabal95,
	  Donwulff, taz)


Sun Oct  5 20:17:51 EDT 1997 Various, entered by Mikko Hnninen
	* Changes for 4.4.13
	* Changes to the connect time notices:
          - connect problems contact resource shown always if defined,
            either an URL (CONNECT_URL define) or email address
            (CONNECT_EMAIL define), old nospoof message (and NS_ADDRESS
            define) removed
          - nospoof CTCP version request "from" field changed to
            %X!nospoof@servername format
          - numeric 001 shows Nick!user@host instead of just nick
	* /stats m, l and w show additional info (cpu time) when
          compiled in debug mode (the checkload3 patch): 
          - /stats m shows CPU cycles used by command
          - /stats l shows CPU cycles used by connection, replacing
            the idle time
          - /stats w shows estimated ircd CPU usage
	* Server exists -errors report show additional info: where the
          existing server is connected from
	* Invisible opers (+io) no longer shown with /trace for
          non-opers (-o)
	* /kill allows multiple targets (nick1,nick2,nick3) and show
	  the killed client's address in the Nick!user@host format
          (the mkil6 patch)
        * Kill patch truncated to first . on servernames.
        * example.conf's Y:Line section has been updated to what the
          routing team has requested
        * Config script has the right version in it now :)
        * Fixed bug in operflag system, wallop and locop access used
          the same flag bit, oops
        * Fixed compile errors for the WIN32 platform, now is error
          free
        * Fake direction notices removed, fake direction splits removed

Sun Sep 21 18:21:52 EDT 1997 Various, entered by Mikko Hnninen
	* Changes for 4.4.12
	* Fix for crashing bug in the /server command

	* Changes for 4.4.11
	* Win32 compiling support

Mon May  5 13:52:37 HST 1997 Cabal95, entered by Michael Sawyer
	* Changes for 4.4.10
	* Minor bug fixes for /stats L and a test to disallow
	  funky host names (with @'s in them).

Sun May  4 20:20:44 HST 1997 Various, entered by Michael Sawyer
	* Changes for 4.4.9
	* JK's qualify-match patch
	* Fix to K-line message in quit message
	* Some new additional modes (CLIENT, KILL, FLOOD)
	* Timed k-line patch
	* Hostile username patch
	* LOCOPS

Mon Feb 10 21:07:03 EST 1997 Michael Sawyer <aetobat@dal.net>
	* Fix problem in password testing of SERVER command
	* Add ability to use different case tables, safely
	* Prohibit most commands beforeregistration complete.

Fri Nov 29 04:16:15 1996  Michael Graff  <Michael Graff <explorer@flame.org>>

	* Changes for 3.2.6:

	* Make it almost unnecessary to edit the Makefile or include/config.h
	anymore.  Config now asks questions, and stores the answers in
	a file called Options.  The theory is this file can be copied into
	a new version and pathnames and other options will get defaults
	from it.

	* Make nospoof code optional.  Many servers do NOT need it, and
	some clients break badly with it.  Thank you, Netscrape...

Changes for 3.2.5
Sun Nov 24 04:39:57 1996  Michael Graff <explorer@flame.org>
	* Remove 2-second client connect delay.
	* Print "Client exited" not "error 0"

Changes with dal4.3.3 (Barubary - barubary@dal.net,
                       Donwulff - donwulff@iki.fi)
Bugfix version and anti-hacking/spoofing

* Spaces in kline comments (not akills!) are converted to _ instead of 
hiding them totally.  find_kill exits for a non-akill kline the message 
*** You are not welcome on this server: reason  Email kline@dal.net...
* Deleted #wallops from the source code completely
* Added md5-based anti-spoofing system
* Fixed channel mode hacking
* Fixed various memory leaks
* Stopped certain commands while unregistered
* Fixed WHOWAS bugs
* Fixed problem with PONG (part of nospoof)
* Fixed "ghost kline" bug
* Added dn_skipname for BSDI systems (check src/Makefile)
* chkconf now shows line error is on (Magel)
* Config - script now tries to set up libraries properly (Magel)
* Made dropping out USER server<->server protocol messages mandatory

Changes with dal4.3.2 (Russell - russell@dal.net)
Port of Fake Direction fix to dal4.3; special thanks to 
Roddy for pointing out that it wasn't in there already

* Fixed Fake Direction caused by m_error

Changes with dal4.3.1 (Donwulff - donwulff@iki.fi)

* Fixed @-in-username bug

Changes with dal4.3 (Donwulff - donwulff@iki.fi)
Alpha on performance fixes while waiting for dal4.5

* Added Roddy's ircd.doc into doc/ directory
* Tripled hash table sizes in hash.c and hash.h
* Optimized hashing function in hash.c
* Removed extraneous debug data from hash.c in non-debugmode
* Numerous minor performance increases in hash.c
* Added /hash m in DEBUGMODE for getting list.c memory usage summary
* Removed maximum nickname limit from USERHOST
* Added optionally matched address part to ISON - no wildcards in nick
* Optionally drops USER protocol messages from server-server (Barubary)
* Ident replies with @ are now refused
* Added +h mode that can be set when you're opered
* Parameters following /quote help are sent to all +h
* Starting writing a help database to /quote help
* Improved version control

Changes with 2.8.21.mu3.dal4.2 (Russell - Russell@dal.net)
Minor bugfix revision

* Removed hack and netride wallops - and finally did it *right*
* Users can no longer hide from opers by joining an invisible channel
* Only hubs will send out the connection established global
* Connect globals are now working right.
* Miscellanous bugs are fixed.

Changes with 2.8.21.mu3.dal4 (Russell - Russell@dal.net)

* Added new user mode "g" that does the following:
	*notices all +og users with failed and/or succesful oper attempts 
	on all servers
	*notices all +og users with failed server connection attempts
	*moves miscellanous other things anyone can see.
* RAKILL command that allows ulined servers to remove an autokill as 
	easily as it adds one.
* Added support for temporary klines.
* defined new A: class of klines (for autokill).  These are meant to
	be services managed.
* UNKLINE command allowing opers to remove k:lines by address.
* Allow quote KLINE by address
* Hacked STATS K to distinguish between permanent and temporary klines.
* GOPER command allows a ulined client to broadcast all opers whether or not
        any other flags are enabled.
* GLOBOPS command allows opers to broadcast over GLOBAL messages, thereby 
	depreciating wallops.  Wallops behavior stays the same though.
* patch to allow the proper propagation of autokills.
* Masks server notices that show PRIVMSGs
* Masks the password from the failed oper attempt messages
* Removed those annoying NET.RIDE and HACK notices
* Allow opers to take quarantined nicks.
* Fixed away bug that sends blank away messages on netjoin
* Patch to allow opers to see invisible users on a /who
* any oper can see all connections on any server in a /trace
* Miscellaneous bug fixes.

Changes with 2.8.21.mu3.dal3 (Lefler - lefler@dal.net):

* Added modeless channels (starting with character +)
* Now allows comments on channel parts
* Changed TOPIC timestamp code to avoid unneccessary changes [NOTE: 
  TOPICs are now incompatible with versions prior to dal2]
* Q line can now exclude nicks (from the local server only)
* Added a STATS X function that shows what C lines are not currently
  active (i.e. missing servers)
* Will now WALLOP all +w users when a server connects or disconnects
  from the network
* Added AKILL command, which allows U lined servers to establish
  temporary global K lines.
* New KLINE command; operators can now temporarily add K lines to
  the server
* Fixed a missing feature (bug?) where you could change nicks while banned
  if the channel was moderated. Side effect of this fix is that noone
  can now change nicks when banned, even chanops.
* NOTE is gone for good. May it rest in peace.
* Tidied up STATS K to work with spaces in the comment field (it turns the
  field into a * if there are spaces), so you can use ircii's /stats k
  handler as well as spaces.
* New example.conf file with DALnet defaults

Changes with 2.8.21.mu3.dal2a (Lefler - lefler@dal.net):

* Fixed bug in AWAY resynch where only the first word would be shown.
* New Solaris IRCDLIBS defnition in the Makefile [Pipis]

Changes with 2.8.21.mu3.dal2 (Lefler - lefler@dal.net):

* Allows users behind U lined servers to make mode changes, topic changes,
  invites and kicks regardless of whether the user is allowed to or not.
* Gets rid of HACK notices for mode changes from U lined servers.
* Sends AWAY info in response to SERVER message where appropirate.
* Resynchs TOPICs on net rejoins. Resvoles conflicts using the older topic
  (using time/date stamp info).
* Makes NPATH (the NOTE function) #undef by default.
* Some tidying up of code distribution.
* New features from irc2.8.21 and mu3.2.

Changes with 2.8.20.mu2+Dal (Dalvenjah - dalvenjah@dal.net):

* Allows non-chanops to see bans.
