Author: Kev <klmitch@mit.edu>
authorKevin L. Mitchell <klmitch@mit.edu>
Wed, 8 Jan 2003 03:17:20 +0000 (03:17 +0000)
committerKevin L. Mitchell <klmitch@mit.edu>
Wed, 8 Jan 2003 03:17:20 +0000 (03:17 +0000)
Log message:

Polishing this forward-port.  This won't compile--map.c assumes that the
head-in-sand stuff is still in preprocessor macros, rather than features.
Files that remain to be reviewed:

* ChangeLog.11 (probably moves to doc/history, but might should be synced
  with the ChangeLog in .11)

* doc/example.conf (probably needs a full rewrite)

* include/ircd_alloc.h

* ircd/channel.c

* ircd/chkconf.c (maybe we should just shoot it and put it out of its
  misery)

* ircd/ircd_alloc.c

* ircd/m_burst.c

* ircd/m_destruct.c

* ircd/m_endburst.c

* ircd/m_join.c

* ircd/m_server.c (this one needs a rewrite, *bad*)

* ircd/map.c

* ircd/s_conf.c (I haven't yet sat down and figured out the new .conf
  processor)

git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@901 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

55 files changed:
BUGS [deleted file]
ChangeLog
ChangeLog.07 [deleted file]
ChangeLog.10 [deleted file]
INSTALL
README
README.FreeBSD [new file with mode: 0644]
README.Solaris [new file with mode: 0644]
RELEASE.NOTES
TODO [deleted file]
configure.in
doc/history/ChangeLog.07 [new file with mode: 0644]
doc/history/ChangeLog.10 [new file with mode: 0644]
doc/readme.asll [new file with mode: 0644]
doc/readme.features
doc/readme.log
include/channel.h
include/handlers.h
include/ircd_defs.h
include/ircd_policy.h [deleted file]
include/jupe.h
include/msgq.h
include/numeric.h
include/s_stats.h
ircd/Makefile.in
ircd/engine_poll.c
ircd/ircd.c
ircd/ircd_features.c
ircd/ircd_relay.c
ircd/m_account.c
ircd/m_clearmode.c
ircd/m_create.c
ircd/m_gline.c
ircd/m_kick.c
ircd/m_lusers.c
ircd/m_map.c
ircd/m_nick.c
ircd/m_opmode.c
ircd/m_privmsg.c
ircd/m_settime.c
ircd/m_squit.c
ircd/m_userhost.c
ircd/m_wallvoices.c
ircd/m_who.c
ircd/m_whois.c
ircd/s_bsd.c
ircd/s_debug.c
ircd/s_err.c
ircd/s_misc.c
ircd/s_stats.c
ircd/s_user.c
ircd/table_gen.c
ircd/whocmds.c
tools/linesync/linesync.conf [new file with mode: 0644]
tools/linesync/linesync.sh [new file with mode: 0755]

diff --git a/BUGS b/BUGS
deleted file mode 100644 (file)
index 31bb985..0000000
--- a/BUGS
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# BUGS file for ircu2.10
-#
-# $Id: BUGS,v 1.7 2000-07-15 01:31:23 isomer Exp $
-#
-* crule parser coredumps on invalid input
-* throttle
-  * gets corrupted data when adding a new server.
-  * looses count and assert()'s frequently?
index 6e38436358eb485dda8cb169e342ee27cfe5274c..97d34c7155798b08713ecb1550aabf03c9e4c1b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,135 @@
+2003-01-07  Kevin L Mitchell  <klmitch@mit.edu>
+
+       * BUGS: removed from distribution
+
+       * ChangeLog.07: moved into doc/history
+
+       * ChangeLog.10: moved into doc/history
+
+       * INSTALL: pulled up from u2.10.11.04
+
+       * README: pulled up from u2.10.11.04
+
+       * README.FreeBSD: pulled up from u2.10.11.04
+
+       * README.Solaris: pulled up from u2.10.11.04
+
+       * RELEASE.NOTES: add sysctl note from u2.10.11.04
+
+       * TODO: removed from distribution
+
+       * configure.in: add extra check for res_mkquery; remove
+       --disable-headinsand since it no longer has any effect; pull up
+       "Enable" vs. "Disable" changes from u2.10.11.04
+
+       * doc/readme.asll: pulled up from u2.10.11.04
+
+       * doc/readme.features: pull up missing documentation, including a
+       couple of corrections
+
+       * doc/readme.log: correct text to read FACILITY instead of SYSLOG
+       in the documentation for configuring syslog facility
+
+       * include/channel.h: declare IsInvited()
+
+       * include/handlers.h: do some minor reorderings
+
+       * include/ircd_defs.h: remove deprecated NETWORK and URL_CLIENTS
+       #define's
+
+       * include/ircd_policy.h: removed from the distribution
+
+       * include/jupe.h: declare jupe_memory_count()
+
+       * include/msgq.h: remove MsgCounts structure
+
+       * include/numeric.h: add a blank line after RPL_STATSQLINE; add
+       RPL_HOSTHIDDEN
+
+       * include/s_stats.h: include ircd_features.h for definition of the
+       enum; remove extraneous declarations
+
+       * ircd/Makefile.in: add LDFLAGS to table_gen
+
+       * ircd/engine_poll.c: remove commented-out assertion
+
+       * ircd/ircd.c: include s_stats.h and call stats_init()
+
+       * ircd/ircd_features.c: feature names have to be case-sensitive
+       because of some of the HIS features
+
+       * ircd/ircd_relay.c: reorder includes
+
+       * ircd/m_account.c: include string.h for strlen()
+
+       * ircd/m_clearmode.c: remove extraneous clean_channelname(); make
+       sure to refer to chname, not parv[1]
+
+       * ircd/m_create.c: remove the broken code that squits servers that
+       are >5 minutes fast; fix "badop || CHFL_CHANOP" bug that caused op
+       desyncs
+
+       * ircd/m_gline.c: if it's a server, force the gline; don't
+       gline_find() before determining if the oper had the privilege
+
+       * ircd/m_kick.c: kicks by servers should appear to be from the
+       local server thanks to HIS
+
+       * ircd/m_lusers.c: needs ircd_features.h, not ircd_policy.h
+
+       * ircd/m_map.c: needs ircd_features.h, not ircd_policy.h
+
+       * ircd/m_nick.c: added an assertion and some explanatory comments
+       pulled up from u2.10.11.04
+
+       * ircd/m_opmode.c: no longer requiring oper to be on the channel;
+       search for quarantines before allowing ops
+
+       * ircd/m_privmsg.c: one character typo that probably means nothing
+
+       * ircd/m_settime.c: add back comments I left in the code
+
+       * ircd/m_squit.c: remove protocol_violation() notices
+
+       * ircd/m_userhost.c: return realhost if user is an oper
+
+       * ircd/m_wallvoices.c: only m_wallvoices() should add a +
+
+       * ircd/m_who.c: add handling for the 'a' field
+
+       * ircd/m_whois.c: correct a typo of FEAT_HIS_SERVERNAME for
+       FEAT_HIS_SERVERINFO
+
+       * ircd/s_bsd.c: close file descriptors 0, 1, and 2; pull up some
+       ancient bug fixes from the u2.10.11 branch
+
+       * ircd/s_debug.c: include gline.h, jupe.h, motd.h, and s_stats.h;
+       call motd_memory_count(), gline_memory_count(), and
+       jupe_memory_count() when reporting memory usage; add back a
+       comment regarding "DBuf caveats"
+
+       * ircd/s_err.c: add RPL_STATSQLINE, RPL_HOSTHIDDEN, and pull up
+       change to ERR_NOPRIVILEGES wording
+
+       * ircd/s_misc.c: include ircd_features.h and not ircd_policy.h
+
+       * ircd/s_stats.c: count from 0 and not 1 when initializing the
+       stats
+
+       * ircd/s_user.c: comment out assertion; remove extraneous
+       definition of FLAGS_HOST_HIDDEN; add in hikari's "your host is now
+       hidden" reply; don't detach oper confs unless sptr is not an oper
+
+       * ircd/table_gen.c: pull up change to NTL_CHPFX (removing +);
+       change channel name character range to be from '\041' (!) to
+       UCHAR_MAX
+
+       * ircd/whocmds.c: pull up fix to /who idle time from u2.10.11.04
+
+       * tools/linesync/linesync.conf: pull up from u2.10.11.04
+
+       * tools/linesync/linesync.sh: pull up from u2.10.11.04
+
 2003-01-07 Andrew Miller <a1kmm@mware.virtualave.net>
        * almost everything: Forward ported numerous changes from .11 to .12
        
diff --git a/ChangeLog.07 b/ChangeLog.07
deleted file mode 100644 (file)
index f5ceb2e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# ChangeLog for Undernet ircu Servers
-#
-# $Id: ChangeLog.07,v 1.1 2000-03-18 05:20:28 bleep Exp $
-#
-# Please insert new entries on the top of the list, a one or two line comment
-# is sufficient. Please include your name on the entries we know who to blame.
-# Please keep lines < 80 chars.
-#-------------------------------------------------------------------------------
-* Added hostname hiding compatible with ircu2.10.10 to allow host hiding
-  for transitioning services, back out pline8 for now. --Bleep
-* Fixed default behavior for BADCHAN. supposed to DEFAULT yes, however
-  should not change each time a make config is done. -- WT
-* doc/readme.www: add Runs link update patch for linux info. --Bleep
-* channel.c, channel.h: add David M's fixup for local channel oper overrides.
-  --Bleep
-* s_misc.c (date): add Runs Y2K patch --Bleep
-* hash.c (hChangeClient): bug fix. If the client pointer matched the first
-  pointer in the bucket, the change was ignored (returned 0), leaving stale
-  values in the hash table, eventually causing the server to die for mysterious
-  reasons. Bug discovered by Quant and Isomer --Bleep
-* config-sh.in, channel.h, numeric.h, channel.c, s_debug.c, s_err.c:
-  add lchanmode patch by CaptJay, add symbols to incredibly long
-  feature string. Bump patchlevel to .03 --Bleep
-* list.h list.c s_conf.h s_conf.c opercmds.c:
-  badchan patch 2 seperate settings, allow global, and allow local.
-  currently allow_local is 'unapproved' for use on undernet. --WildThang
-* ircd.h, s_serv.h, s_debug.h, ircd.c, s_user.c, s_bsd.c:
-  removed STAT_MASTER/BOOT_OPER code, original patch by Isomer --Bleep
-* s_user.c (m_nick): removed redundant check for acptr --Bleep
-* ChangeLog (file): added ChangeLog, and BUGS files, import to ircu2.10 --Bleep
-
diff --git a/ChangeLog.10 b/ChangeLog.10
deleted file mode 100644 (file)
index 6841b04..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-#
-# ChangeLog for ircu2.10.10
-#
-# $Id: ChangeLog.10,v 1.10 2001-07-28 16:57:33 kev Exp $
-#
-# Insert new changes at beginning of the change list.
-#
--------------------------- Released 2.10.10.pl15
-* Fiddle with /KILL and various exits to make the user experience uniform,
-  no matter who's doing the killing or where.  Previously, differences in
-  QUITs and in the messages sent to the killed client could help make a
-  partial map of the network; now that these messages are all uniform, there
-  is no way to tell. -Kev
-* Split ISUPPORT numeric into two numerics, so as not to exceed the 15
-  parameter limit imposed by the RFC -Kev
-* Turn on HEAD_IN_SAND_REMOTE...oops -Kev
-* Send prefixed error messages to other servers, so ERROR doesn't get
-  interpreted as a prefix -Kev
-* Reverse sense of HEAD_IN_SAND_WHO_HOPCOUNT to do what was intended; use a
-  hopcount of 0 if user is using /who on him/herself -Kev
-* Allow a user to see his/her own idle time without having to do
-  /whois <nick> <nick>; correct spelling of HEAD_IN_SAND_IDLETIME to
-  HEAD_IN_SAND_WHOIS_IDLETIME -Kev
-* Fix a missing ')' in the idle time stuff -Kev
-* Include ircd_policy.h in whocmds.c -Kev
-* Fixed bug in idle time, thanks hektik -- Isomer
-* Update 005 to be compliant with other networks -- Isomer
-* Hide hop count -- Isomer
-* Hide idletime unless you explicitly ask for it -- Isomer
-* /wallops and /wallusers would dump core because of the previous change--my
-  bad.  Now only include user@host when sptr is a client. -Kev
-* /wallops and /wallusers would leave out the user@host--noticed because
-  pl14 broke my script.  Fixed. -Kev
-* Fix several compile warnings, including the one in table_gen.c -Kev
-* Fix a bug in m_silence.c that rendered it uncompilable -Kev
-* Hopefully make mode clears during bursts appear to originate from local
-  server -Kev
-* Fix several things to send server<->server protocol messages with numeric
-  origins -Kev
-* Rework directed notices and mass-messages to use numerics and tokens
-  as appropriate; the latter required the modifications to
-  sendto_match_butone() -Kev
-* Redefined how sendto_match_butone() works, since it's only used with
-  PRIVMSG or NOTICE -Kev
-* Bumped patchlevel to pl15(development) -Kev
-* Corrected reverse-sense of HEAD_IN_SAND_REMOTE test in m_whois() -Kev
-* Clean up logic in m_whowas(), corrected numeric reply -Kev
-* Finally fixed /whois to tell you what your own server is -Kev
-* Clean up logic in add_banid() with some well-placed DupString()'s -Kev
-* Hide which server performed a nick collision kill -- Isomer
-* To allow for remote whois not giving away the remote server, all remote 
-  numerics to clients are remapped to come from the local server :/ -- Isomer
-* All remote queries are disabled for users, except /whois -- Isomer
-  (/whois now uses the second parameter for which server to use, ie:
-   /whois <ignored> <nick> will query <nick>'s server.)
-* Fixed /who showing server name -- Isomer
-* Fixed burst showing linking server -- Isomer
-* Fixed burst bans showing linked server -- Isomer
-* Fixed /whowas showing server name -- Isomer
--------------------------- Released 2.10.10.pl14 (You got any issues with that punk?)
-* Changed (then fixed) /LINKS to output an empty links list -- Isomer
-* Make netsplit server notice say the right thing
-* Final fix for HEAD_IN_SAND_WHOIS_SERVERNAME
-* Fix a bug with implementation of HEAD_IN_SAND_NETSPLIT
-* Permit users to find out what server they're on, since they already
-  know -- Kev
-* Added HEAD_IN_SAND_WHO_SERVERNAME to cover final source of server
-  names -- Kev
-* Fixed wallops, wallusers now sends wallops to local clients,
-  wallusers to servers.
-* Added host to /kill messages -- Isomer
-* Fixed whois (opers can see server names) -- Isomer
-* Implement walluser -- Bleep
-* stats fixed -- Isomer
-* trace disabled from non opers -- Isomer
-* server name removed from whois (but not /who, shrug!) -- Isomer
-* netsplits are now represented with "*.net *.split" -- Isomer
-* Done /links -- Isomer
-* Modifications to map as suggested by nighty -- Isomer
-* Wallops is the only code that uses sendto_ops_butone now, this
-  isolates wallops entirely. No server notices sent by wallops.
-* HEAD_IN_SAND_SNOTICES done -- Bleep
-* HEAD_IN_SAND_WALLOPS done -- Bleep
-* HEAD_IN_SAND_DESYNC done -- Bleep
-* HEAD_IN_SAND_MAP done -- Isomer
-* According to CFV-165, buring our head in the sand to try and
-* hide from DoS - First pass -- Isomer
-* As requested by hop: hidden keys are shown as "*" not "" -- Isomer
-* As requested by Buff: allow admins to *disable* below behavour -- Isomer
-* As requested by Adriel, compile time option to disable mo_wallops 
- -- Isomer
--------------------------- Released 2.10.10.pl13
-* Don't allow two copies of the server to start -- Isomer/Kev
--------------------------- Released 2.10.10.pl12
-* Release 2.10.10.pl12 before Mr_RIP threatens physical violence -- Isomer
-* Don't 'hubhide' nick's in /trace (oops!) -- Isomer
-* Allow K:line by realname, updated client connection logging -- Gte-
-* ircd/m_join.c: use ERR_BANNEDFROMCHAN instead of ERR_BADCHANNAME -- Kev
---------------------------- Released 2.10.10.pl11.(release)
-* Fixed G-lined (reason), thanks to dfx -- Isomer
-* Added reason to the "G-lined (reason)" quit messages. -- Isomer
-* Removed 'for nick[1.2.3.4]' from quit messages, they're redundant
-  and make hub hiding more reliable --Isomer
-* ircd/s_user.c (hunt_server): add 'No such server' message back 
-  --Isomer
-* ircd/s_bsd.c: remove ALWAYSFLUSH - the problem wasn't ircu's fault 
-  -- Isomer
-* ircd/m_names.c (m_names): don't add a space if the user's a
-  zombie; fixes an overrun where we generate a huge number of spaces
-  in the names reply without length-checking them properly -- Kev
-* added 'ALWAYSFLUSH', if you thought the furgeson flusher was bad...
-  --Isomer
-* Fixed /USERHOST again.  Horribly embarrased.  Thanks again Liandrin 
-  --Isomer
-* Added extra field to /stats Y showing how many people are in that class.
-  Information was previously available via /trace, however tended to flood
-  you off if you weren't on a good connection.  Requested by Mr_RIP
-  -- Isomer
-* Fixed 'BADCHAN' resetting itself to 'Y', reported by Gator --Isomer
---------------------------- Released 2.10.10.pl10
-* Released 2.10.10.pl10
-* Backported /names optimisation from 2.10.11.
-  '/names 0' now returns verbose listing, '/names' simply returns
-  ENDOFNAMES. Disallow harmfull /names usage. --Gte
-* Fixed ERR_NOSUCHNICK bug in userhost, thanks to Liandrin --Isomer
-* Conceal more bugs in IPcheck --Isomer
-* Add 'POST' as a unregistered command to disconnect people abusing web
-  proxies --Isomer.
-* Conceal bugs in IPcheck --Isomer
-* Fix for changing the wrong define --Isomer
-* Fix for the easter buggy. --Isomer
-* Fix for rpong --Run
-* Fix for other IPcheck bug, thanks BLMet. --Bleep
-* Fix for IPcheck bug, rewrite IPcheck from scratch (mostly),
-  add changes for new code to s_user.c, ircd.c --Bleep
-* Shorten connection timeout for auth queries to 60 seconds
-  If connection is from localhost use the server alias for the
-  client host. --Bleep
-* Fix for ident bug --Isomer
-* Fix for rping/rpong --Gte
-* Add m_pong to parser handler --Bleep
-* Fix for EXTENDED_NUMERICS bug doh!!! --Bleep
-* Fix for Max Undernet Server bug --Bleep
-* Fix for PRIVMSG<->NOTICE translation from hubs --Bleep
-* Fix for Bogus protocol strings for P9 servers --Bleep
-* Hookup UPING code again, cleanups --Bleep
-* Convert numerics back to mask and shift extended numerics
-  follow same mechanism --Bleep
-* Fixed bogus errno return on Solaris --Bleep
-* Fixed core on RPING bug, tokenized RPING --Bleep
-* Remove add_local_domain entirely, unused --Bleep
-* Merge u2_10_10_beta06 create branch u2_10_10_beta07 --Bleep
-* Remove size_t from socket calls, audit usage of size_t
-  values. --Bleep
-* Fix for OSF1, RES_NOALIASES not defined there. --Bleep
-* Don't bother doing hostname lookup or setting me.sockhost
-  since we never want to display it there is really no reason
-  to have the info. --Bleep
-* Bugfix broken N:line check in chkconf --Maniac
-* Bugfix, fix clients occasionally getting stuck in IPcheck
-  code. Add note to members in client struct that aren't used
-  for any remote client code, didn't want to actually move them
-  this close to release (paranoia) --Bleep
-* A few little cleanups in check_pings, removed yet another
-  address display. --Bleep
-* Bugfix, autoconnects displaying server IP address to opers.
-  --Bleep
-* Remove names from /stats p, since its always the server
-  name from the M:line anyhow, (redundant information)
-  --Bleep
-* Unborked throttling. --Bleep
-* Fix two stupid bugs, related to IP mismatch kills. --Bleep
-* Clean up configuration, make it a bit easier for admins to
-  turn off asserts and heap checking code. Moved host name dns
-  query for listener virtual host ports to dead code and use
-  me.name for the listener name (no sense in looking up the name
-  if we don't want to display it). Change direct bump of unknowns
-  in s_bsd.c to Count_newunknowns(UserStats) for consistency.
-  --Bleep
-* Added option to kill any connecting client with a forward and
-  reverse DNS mismatch. Fixed bug in s_auth that that caused
-  incorrect counts for unknown clients. Replaced missing server
-  notice for SNO_IPMISMATCH. --Bleep
-* Added a few more little name tweaks, no sense in looking up
-  the hostname in the conf if no one knows it. --Bleep
-* Moved to beta archive, bumped patchlevel, fixed message for
-  lost C:line in s_conf.c (I don't think I've ever seen this happen)
-  --Bleep
-* Finished host hiding changes, it should not be possible for any
-  online user to discover the real hostname or IP address of any
-  connected or unconnected server listed in the configuration. This
-  applies to opers and regular users. The name in the M:line is the
-  name used for connecting and all informational messages. --Bleep
-* Removed code in dbuf.c that flushes the dbufs if the server runs out
-  it looks like a fully loaded server may not be able to handle a net
-  break without shedding a few clients. --Bleep
-* Finish IP address cleanup, alpha should be clean for not displaying
-  server hosts or IP addresses to users now. This needs to be verified.
-  Changed version to u2.10.10 per Isomers suggestion. --Bleep
-* Remove server IP address from info line for connecting servers.  
-  This almost completes the IP address hiding changes for alpha, there
-  are still a few stats commands available to users that will show the
-  server addresses, but they can be easily disabled or only show '*'s
-  to non-opers.  --Bleep
-* Fix possible (but not likely) memory leak in debug allocator, couldn't
-  find the "meg a minute" problem, using the debug allocator on the
-  production network with more than 1000 clients on a server may cause
-  problems if you don't have a lot of memory. (This does not seem to
-  be a problem with non-debug builds) --Bleep
-* Captialisation fixes, just to keep certain ppl quiet. --Isomer
-* Removed +s channels from /list.  They were shown sometimes, but not
-  others, and the information that was shown about them was inconsistant.
-  list is not an effective way to gain information anyway. Reformatted
-  and touched up readme.who as well.  --Isomer
-* Added MAP to ISUPPORT, added doc/features.txt --Isomer
-* Added suggestions made by scripters. more info for ISUPPORT, and
-  added stuff to 'TODO' --Isomer
-* More TODO items 'done'.  P:'s now ignore '*'s.  ping shouldn't do funky
-  stuff with mirc anymore, needs discussion --Isomer
-* Typo fixed. Now I'm annoyed.  --Isomer
-* Right, Makefile's gonna work now or I'm going to get REALLY annoyed at it.
-  --Isomer
-* TODO, m_ping, ircd/Makefile.in: Added note to TODO, added info to
-  m_ping, and fixed Makefile bug using bsdmake. --Isomer
-* s_bsd.c, listener.c, s_user.c, s_serv.c, s_bsd.h:
-  Set receive and send buffers in correct order to enable flow
-  control for clients and support fat pipes better for servers.
-  Finally got it right :)
-  See Stevens "Unix Network Programming" v1 p 191-193
-  --Bleep
-* ircd.c (main): added idiot checking to make sure MAXCONNECTIONS
-  is sane. --Bleep
-* send.c: Don't let negative fd's break stuff, audit sentalong
-  usage for sillyness. --Bleep
-* send.c (sendto_common_channels): bug fix, code assumed client
-  local, file descriptor is only in local client struct
-  --Bleep
-* table_gen.c, channel.c: make FIXME changes, removed
-  FIXME code from table_gen, readd FIXME code to channel.c,
-  I hope I got this right. --Bleep
-* Makefile.in: Add purify def, fix so CFLAGS don't error
-  off when using Solaris compiler --Bleep
-* fda.c (fda_free): fix compile error on Solaris --Bleep
-* configure.in: add SunOS case to detect Solaris --Bleep
-* os_solaris.c (os_send_nonb): fix solaris compile error --Bleep
-* exaconf.2: add file from conf design to docs directory to
-  have it available for new conf parser development --Bleep
-* fda.c (fda_free): fix memory leak, doh!!! --Bleep
-* hash.c (addNickJupes): fix buffer overrun --Bleep
-* s_bsd.c (read_message(poll)): fix uninitialized memory read
-  bogosity in poll macros. --Bleep
-* channel.c (send_user_modes): change to send XXX:ov instead
-  of XXX:o:v doesn't send XXX: if no modes set. --Bleep
-* s_bsd.c (connect_server): bugfix for connect/rehash/connect
-  multiple outstanding dns query core. --Bleep
-* channel.c (send_user_modes): bugfix for burst not sending modes
-  when burst line is created. --Gte
-* m_gline.c: change NumServ(cptr) to NumServ(sptr) found by Gte
-  --Bleep
-* config-sh.in: add WildThangs BADCHAN config fix --Bleep
-* config-sh.in: add Runs restart bugfix --Bleep
-* Makefile.in: make sure version.c gets regenerated when checksums
-  change --Bleep
-* Makefile.in: remove hash.c/crypt/sums idiocy, all of the ridiculous
-  anti-hack stuff is already done in version.c anyhow.
-  "Shhh..., don't tell the admins ( .)( .) you're being watched"
-  --Bleep
-* hash.c (m_hash): fix count bugs --Bleep
-* m_squit.c (mo_squit): fix off by one, /quote SQUIT bug --Bleep
-* ircd_relay.c: oops, changed the wrong one.  Fixed previous fix. --Isomer
-* Makefile.in, ircd_relay.c: Fixed 'make depend', added dependancies, fixed
-  bug where server would core on sending a server notice --Isomer
-* m_kick.c (ms_kick): fix core on kick message coming from
-  server --Bleep
-* config.in: remove CRYPT_LINK_PASSWORD option --Bleep
-* doc/readme.www: Applied Runs' doc patch --Bleep
-* client.h: Add member to client struct to try to aggravate the
-  bug found by Jesus --Bleep
-* client.h: Remove IsListening macros and flags, add FLAGS_UPUNG
-  and IsUPing/GetUPing/SetUPing macros --Bleep
-* m_silence.c, m_create.c: check for IsServer(sptr) don't
-  allow X SILENCE X +*@*.com or X C #blah 947477407 core the
-  server. --Bleep
-* os_*.c, res.c: clean interface for os_recvfrom_nonb --Bleep
-* uping.c, uping.h: new files for UDP pings, these aren't hooked up yet, or
-  finished or tested.
-  --Bleep
-* channel.c: find_member_link(): Fail fast for Servers, prevents core when
-  servers set a channel mode. --Isomer
-* channel.c, channel.h, various.c: Changed find_member_link() to take
-  a chptr instead of the first member, and special case'd +k users
-  (see comment in code for more details) --Isomer
-* ircd/Makefile.in: Changed gnu specific $^ for $< in table_gen
-  rules --Bleep
-* INSTALL: Explained about CVS --Isomer
-* example.conf: Point to coder-com@ for help configuring the server. --Isomer
-* INSTALL: Make things a bit more plain.  --Isomer
-* s_bsd.c (read_message (poll)): removed local_cptr array using
-  this temp made possible a bug where if a client lower in the list
-  managed to exit a client higher in the list, a dangling reference
-  to the already exited client would be left in the local_cptr array.
-  Found by Quantum by loading 100's of clones with the same nick.
-  --Bleep
-* INSTALL: Added instructions for -lcrypt FAQ --Isomer
-* INSTALL: Added instructions for -lresolv FAQ --Isomer
-* INSTALL: Added instructions for making ./configure executable --Isomer
-* numeric.h: Merged in some more numerics that other ircds user --Isomer
-* IPcheck.c: Fix gramatical error to keep pedants happy. --Isomer
-* IPcheck.c: Allow -DNOTHROTTLE for debugging purposes.  --Isomer
-* m_stats.c: make stats c available to opers only, TEMP_HACK --Bleep
-* IPcheck.c: Fixed outdated comment.  Thanks Quantum --Isomer
-* ircd_reply.c: Fix the fix, silly typo.  thanks Bleep --Isomer
-* ircd_reply.c: added check for people without nicks.  --Isomer
-* doc/Authors, ircd/version.c.SH: updated /info and maintainer 
-  lists. --Isomer
-* channel.h, channel.c, m_join.c, m_mode.c: add David M's
-  lchanmode patch update --Bleep
-* s_auth.c: fix ident bug, comment code for rule. --Bleep
-* m_invite.c (m_invite): Fix syntax error, missing ')'. -- Isomer.
-* m_invite.c (m_invite): tokenize invites, change from accidental
-  broadcast to directed message (bug fix). --Bleep
-* m_time.c (m_time): send tokenized time messages --Bleep
-* s_user.c (set_user_mode): Send wallops to everyone by default
-  allow compile option WALLOPS_OPER_ONLY for networks that want
-  to disable wallops for users. --Bleep
-* s_misc.c (exit_one_client): tokenize client quit message to other servers.
-  --Gte
-* m_kick.c: you would have thought I'd fix all of them the first time, but
-  no... -- Isomer
-* m_kick.c: Fixed missing space after TOK_KICK -- Isomer
-* m_burst.c: Fixed netrider kick bugs -- Isomer
-* s_user.c: Bug fix --Bleep
-* s_user.c: only send wallops to opers --Bleep
-* s_user.c: enforced undernet policy. -- Isomer
-* s_user.c: replace user_modes with struct UserMode array
-  change code to use new struct. --Bleep
-* s_user.c (set_user_mode): clean up switch statement --Bleep
-* channel.c (set_mode): fixed -k foo bug, extra == 0 typo in
-  conditional. --Bleep
-* dbuf.c (dbuf_alloc): fixed count bug, we _have_ to count it in
-  the branches. --Bleep
-* dbuf.c, send.c, s_bsd.c, send.h: bahh finally did it right,
-  if a dbuf allocation fails, attempt to flush all send buffers except
-  for the one we are trying to build (we're twiddling with the list etc..)
-  if the allocation fails a second time, _then_ bail. --Bleep
-* s_bsd.c, send.c: if dbuf_put fails for send or receive buffers,
-  call flush connections to free up some buffers (safe here). --Bleep
-* dbuf.c (dbuf_put): back out previous change, afaict it would fail
-  spectacularly --Bleep
-* dbuf.c (dbuf_put): call flush_connections(0) if we can't allocate
-  a dbuf the first time, this may prevent the server from dropping
-  connections during netbursts. --Bleep
-* m_privmsg.c: fix IDLE_ON_MSG fix -- Isomer
-* m_privmsg.c, parse.c: fix IDLE_ON_MSG bug --Bleep
-* m_ison.c (m_ison): Temp hack to fix missing null terminator. --Bleep
-* m_nick.c (m_nick): fix null nick reply bug --Bleep
-* ircd_string.c, match.c: fix a couple possible issues with
-  the character attribute changes --Bleep
-* s_auth.c, ircd.c: turn off connection status messages for
-  connections to server ports. --Bleep
-* ircd.c, s_conf.c, m_server.c, ircd.h, s_conf.h:
-  removed portnum and server_port global variables, server port
-  in M:lines is ignored, server ports now need to be defined in
-  the P:lines. Add SERVER_PORT config option to allow:
-  '/connect server.net.dom' without specifying the port. --Bleep
-* config-sh.in: change PORTNUM to SERVER_PORT now used for
-  default server port for outgoing connections in m_connect.
-  --Bleep
-* example.conf: document changes to M:line for server port --Bleep
-* ircd_chattr.h, ircd_string.h, ircd_string.c, table_gen.c:
-  put Nemesi's table generation code and macros back in, the
-  tables are now automagically generated whenever the table_gen.c
-  file is modified, use a slightly different mechanism to get the
-  tables in the executable. Add reference data file to test dir
-  for character attributes. --Bleep
-* s_auth.c (check_ident_reply): add function that implements
-  auth reply undernet rules checking. --Bleep
-* s_misc.c (date): added Runs Y2K patch --Bleep
-* m_privmsg.c: work on server handlers, hookup new code to parser,
-  test, fixed a couple bugs, fixed username bug in server NICK
-  processing --Bleep
-* ircd_chattr.c, m_privmsg.c: Work on privmsg code a bit more,
-  commit for review, still a bit more to do --Bleep
-* os_bsd.c, configure.in: add os dependency file for bsd
-  --Bleep
-* m_privmsg.c, ircd_string.c: little cleanups for privmsg
-  work on prototype handler for new parser. --Bleep
-* m_connect.c, s_conf.c: clean up /connect handling code
-  --Bleep
-* m_away.c, m_admin.c, m_close.c, m_connect.c:
-  start cleaning up handlers --Bleep
-* whocmds.c, whowas.c, *.c: split out handlers from whocmds.c
-  and whowas.c --Bleep
-* s_serv.c, m_*.c: split out handlers from s_serv.c
-  --Bleep
-* querycmds.c, m_*.c: split out handlers from querycmds.c
-  --Bleep
-* opercmds.c, m_stats.c, m_connect.c, parse.c, handlers.h, *.c
-  add new command handlers --Bleep
-* channel.c, m_names.c: new file for names handler --Bleep
-* channel.c, m_list.c: new file for list handler --Bleep
-* channel.c, m_topic.c: new file for topic handler --Bleep
-* channel.c, m_burst.c: new file for burst handler --Bleep
-* channel.c, m_create.c: new file for create handler --Bleep
-* channel.c, m_destroy.c: new file for destroy handler --Bleep
-* channel.c, send.c, m_join.c: new file for join handler,
-  const fixups for send.c --Bleep
-* channel.c, m_mode.c: new file for mode command handler,
-  clean up file scope buffer mess. --Bleep
-* m_silence.c: split out SILENCE handler to a new file,
-  cleanup --Bleep
-* m_ison.c: split out ISON handler to a new file, cleanup --Bleep
-* m_userip.c: split out to new file, change userhost and userip
-  to use same algorithm with different formatting functions --Bleep
-* m_userhost.c: split out to new file --Bleep
-* send.c: add new function send_buffer, cleanup godemode ick a bit
-  --Bleep
-* m_wallchops.c: split out wallchops handler --Bleep
-* m_cprivmsg.c: split out m_cprivmsg and m_cnotice.
-* m_pass.c, s_user.c: split out m_pass, pass message handler
-  --Bleep
-* m_oper.c: split out m_oper.c from s_user.c, setup to use
-  new parser. --Bleep
-* m_pong.c, m_ping.c, parse.c, s_user.c, channel.c:
-  Add new file for pong messages, convert ping and pong to use
-  numerics. Test pings and pongs on testnet. Fix numeric
-  nick bug in channel.c. --Bleep
-* m_ping.c, s_serv.c, parse.c: new file for pings, fixed a 
-  minor bug in ping handling. --Bleep
-* m_nick.c, m_kill.c: clean up nick code for servers, still needs work
-  fix string formatting bug in m_kill --Bleep
-* m_nick.c, s_user.c, ircd_chattr.c: add new file for NICK command,
-  clean up local client registration for nicks. --Bleep
-* m_away.c, s_user.c, parse.c: split out m_away handlers for client,
-  add user_set_away function. --Bleep
-* m_kill.c, ircd_reply: Rework handling of kill from server, add new error
-  message formatter. --Bleep
-* m_kill.c (mo_kill): Rework handling for kill from operator on server
-  kill originated from --Bleep
-* m_kill.c: new message handler file for kill --Bleep
-* configure.in, ircd/Makefile.in: added automatic os checking to autoconf
-  checked --Gte
-* m_quit.c: new message handler file for quit --Bleep
-* m_privmsg.c: new message handler file for privmsg --Bleep
-* ircd_string.c, support.c, support.h, *.c: moved strtoken to ircd_string
-  and renamed ircd_strtok --Bleep
-* channel.c, s_user.c, s_debug.c, send.c, channel.h: finish membership code
-  --Bleep
-* channel.c, more cleanups of membership code and macros --Bleep
-* channel.c, s_misc.c: more cleanup in channel link code, most likely
-  still a bit broken yet, more to come. --Bleep
-* querycmds.h (Count_remoteclientquits): fix minor bug --Bleep
-* ircd.h, querycmds.h, struct.h, channel.c, list.c, map.c, opercmds.c,
-  s_err.c, s_serv.c, s_user.c, s_misc.c: Add Isomers passivelag0-1.patch
-  fixed minor bug in macros --Bleep
-* channel.h, channel.c, s_user.c, s_debug.c, s_user.c:
-  added Membership struct for channel associations, change user/channel
-  lookups to use new struct. --Bleep
-* channel.c, channel.h, s_user.c: cleanup channel and user code
-  a bit, new function find_no_nickchange_channel --Bleep
-* parse.c, m_defaults.c: added default handlers and hooked up new
-  message handlers --Bleep
-* *.c, struct.h: added Isomer's passivelag patch and, the second
-  p10 patch --Bleep
-* ircd_reply.[ch]: new files for commonly used replies --Bleep
-* m_proto.[ch]: new file for protocol command support, needed for zip
-  links --Bleep
-* client.h, parse.c, msg.h: add code to support multiple message handlers
-  depending on client status. --Bleep
-* s_bsd.c, packet.c: code cleanup prep for zip links --Bleep
-* channel.c, opercmds.c, ircd.c, s_serv.c, s_user.c, querycmds.c, 
-  whocmds.c, whowas.c: Add Isomers p10ify patch, tokenize server to
-  server commands --Bleep
-* s_user.c (m_nick): killed goto --Bleep
-* client.h, *.c: moved client stuff to client.h --Bleep
-* version.c.SH, patchlevel.h, .patches: change version string
-  generation, patch level is now set in patchlevel.h by simply
-  bumping the number in the PATCHLEVEL string. --Bleep
-* ircd_alloc.c, channel.c: fixup warnings in release build (NDEBUG)
-  --Bleep
-* fda.h, ircd_alloc.h, fda.c, ircd_alloc.c, fda_t.c: new files,
-  runmalloc was core dumping on squits and unable to handle or
-  detect double frees, the memory debug code can be disabled by
-  compiling with NDEBUG defined --Bleep
-* channel.c (remove_user_from_channel): refactor function --Bleep
-* channel.c (m_kick): refactor function a bit, put all checks at top
-  move code out to new function (make_zombie) --Bleep
-* s_bsd.c (completed_connection): fixed stupid
-  "Write error to blah: Socket not connected" bug --Bleep
-* struct.h, send.h, send.c, s_bsd.c, IPcheck.c, s_user.c, *:
-  More socket code cleanup, move file descriptor to local part of
-  client struct, use cptr->error to handle the errno of any socket
-  error, fix bug in IPcheck that ends up only disallowing every
-  256th clone, Add more ipcheck forgiveness to s_user.c (needs work).
-  Changed IPcheck_local_connect and IPcheck_connect_fail interfaces to
-  use struct in_addrs instead of client structs to allow delaying the
-  allocation of the client struct till after the check was done.
-  Added can_send function to send.c (should be called before work is done
-  but right now it's called just before trying to send (needs work))
-* channel.c: Added Isomers netride2.patch, still needs a config option
-  to turn it on (NO_INVITE_NETRIDE) --Bleep
-* parse.c, msg.h: Added silent ignores for notices so connect progress
-  messages do not cause connecting server to spew ERR_REGISTER_FIRST
-  messages at the server it's connecting to. --Bleep
-* s_serv.c, s_user.c, channel.c, send.c: Tokenised BURST, NICK,
-  END_OF_BURST, EOB_ACK, PRIVMSG and NOTICE Server to Server.
-  About 8-10% Bandwidth saving on BURSTS. --Gte
-* channel.c (m_join): servjoin patch --Isomer
-* ircd_osdep.h, os_*.c, s_bsd.c, send.c: more cleanups in socket code,
-  use enumeration for IO results. --Bleep
-* s_bsd.c: clean up select and poll code a bit more, fixed message pacing bug
-  in poll. --Bleep
-* supported.h, numeric.h, s_user.c, s_err.c: Added Isomers features
-  patch. Use numeric 005 RPL_ISSUPPORT to convey server features to
-  clients. --Bleep
-* s_user.c (m_nick): IP differ patch, use IP address instead of host
-  name to determine different user@host for nick collides. --Isomer
-* hash.c (hChangeClient): Bug fix. Fixed bug that caused stale entries
-  to be left in client hash table after a name change. Discovered by
-  Quant and Isomer. --Bleep
-* hash.c (hSeekClient): fixed bug I introduced when reversing my hash
-  table code changes, thanks Quant and Isomer --Bleep
-* opercmds.c (m_lusers): send limited luser info to remote
-  clients --Isomer
-* numeric.h, channel.c, s_err.c: Changed invite list numerics
-  from 283/284 to 346/347 to match IRCnet numerics --Bleep
-* config-sh.in, gline.h, numeric.h, gline.c, opercmds.c, s_debug.c, s_err.c:
-  Add badchan patch by WildThang --Bleep
-* config-sh.in, channel.h, numeric.h, channel.c, s_debug.c, s_err.c:
-  Add lchanmode patch by David M --Bleep
-* channel.c (cancel_mode): removed incorrect assert --Bleep
-* *.c: removed P9 support, not everything is completely gone but most
-  of it is, the server builds and connects to other servers, but thats
-  as far as it's been tested so far. --Bleep
-* ircd.h, ircd.c, s_bsd.c:
-  removed BOOT_INETD/BOOT_CONSOLE code, unused non-functional --Bleep
-* struct.h, ircd.h, ircd.c, s_user.c, s_bsd.c:
-  removed BOOT_OPER/STAT_MASTER code, original patch by Isomer --Bleep
-* s_user.c (m_nick): removed redundant check for acptr
-* hash.c (hSeekClient, hSeekChannel): roll back some of hash.c changes
-* hash.c (hSeekClient, hSeekChannel): removed unused variable from previous
-   changes.
-* hash.c (hSeekClient, hSeekChannel): fix compile error from status changes,
-   fix logic bug that caused the first client that matched the mask to be
-   returned regardless of whether or not it's name matched, this can result
-   in wierd problems where the wrong server/client could be returned from the
-   hash table lookup. Removed code that moved client to head of hash table
-   chain for it's bucket when it's looked up, if the hash table is working
-   reasonably well this just wastes cpu.
-* hash.c, list.c: added code to zero out cptr->hnext when client removed
-   from hash table, added assert for hnext == 0 in list.c to make sure that
-   client was actually removed from the hash table before freeing it's memory.
-* various: misc cleanups
-* support.c: removed dead code
-* configure.in: remove unneeded checks for minix, aix, ansi/posix headers
-   these things are handled by porting layer code.
-* res.c: remove calls to add_local_domain, these were causing incorrect
-   behavior
-* opercmds.c: cleanups in gline code
-* s_bsd.c: increase socket buffers to 65535 for server connections
-* crypt/mkpasswd.c: mutter correct runes to get file to compile without warnings
-* gline.c, gline.h: add new files to attempt to encapsulate glines a bit,
-   some code from opercmds.c needs to be moved here still
-* opercmds.c (m_gline): fix local gline bug
-* s_conf.c (initconf): add password change on rehash fix
-* s_conf.c (rehash): fix rehash freeing and reloading the motd/rmotd files for
-   every client connected.
-* ircd_log.c: use 2K fixed buffer instead of vsnprintf, nothing we write to
-   the log should ever exceed 512 bytes, but it doesn't hurt to be paranoid.
-* res.c: change resolver timeouts to 5 seconds, per RFC1123
-* channel.c: more little cleanups, no code changes
-* channel.c: a) stops iterating over /invite list
-    b) adds /invite to list the channels you're currently invited to.
-    c) adds lotsa new numerics --Isomer
-* ircd_signal.c, ircd.c: fix bug in signals
-* channel.c (can_send) add Isomer's changes
-* channel.c: add send_ban_list, cleanup a few names, reformat some parts to make
-    more readable, fix bug introduced by name changes
-* ircd_chattr.[ch]: add new macro for checking K:line time chars vs comments
-* listener.c (show_ports): add code to show client/server and hidden status
-* s_conf.c: bug fixes, cleanups, add code to set server port and hidden
-    status for listeners (P:lines)
-* s_conf.c (initconf): add interface selection code to P:lines so ports can
-    be set on a single interface or multiple interfaces (multi-homed hosts)
-* s_conf.c: rewrote C/N line code, removed N:lines entirely, clean up server
-    conf line code.
-* s_conf.c (check_server): move ip checks out of resolved or not so they can
-    be checked for worse case situations on server connects
-* res.c (resolver_read): add Isomer's debug info for failed resolver queries
-* opercmds.c (m_stats): remove call to time(0) for each local client in 
-    stats l command, use CurrentTime instead
-* s_conf.c (initconf): only do lookups on C:lines instead of both C/N lines
-* res.c: fix resolver hang bugs
-* s_conf.c (rehash): remove extra semicolin that was causing c/n lines to
-    accumulate
-* s_conf.c (rehash): add portnum back to the listener list so we don't loose
-    the server port on a rehash
-* s_auth.c, listener.c: remove warnings for normal errors
-* s_auth.c, listener.c: use osdep non-blocking calls instead of locals
-* s_auth.c, listener.c: add code for non-blocking recovery for listeners and
-    auth queries
-* s_auth.c (auth_error): call IPcheck_connect_fail if the client socket dies
-    during the auth check so the reference count doesn't get borked in the
-    IPcheck code.
-* numnicks.c: yet another extended numerics bug fix... sheesh
-* s_bsd.c, s_conf.c: move conf line code from s_bsd.c to s_conf.c, cleanup
-    cleanup check_server, check_client (still not completely tested, may be
-    a bit buggy yet).
-* parse.h, parse.c, s_debug.c: remove privmsg logging code
-* numnicks.c (FindXNServer): fix off by one bug
-* common.h, common.c: removed unused files
-* s_bsd.c (net_connect_completed): new function, called after connection
-    establishment for servers and clients, release reference count for
-    the dns reply and set the socket buffer size to IRCD_READBUF_SIZE 
-    for servers and 2K for clients.
-* channel.c, crule.c: cleanup bogus casts
-* listener.h (add_listener): fix bug that caused server a server port listener
-    to think it was a client port listener.
-* s_user.c, s_serv.c: release reference to dns_reply when connection is
-    established.
-* s_bsd.c (completed_connection): removed call to start_auth for connects
-    the auth module expects connections not to be linked anywhere and owns
-    the client struct until it's done.
-* listener.c (release_listener): fix inverted assert client exit bug
-* ircd_chattr.c: fix signed/unsigned warnings with Sun Workshop (+w)
-* ircd_chattr.c, ircd_chattr.h: new files for character attributes and case
-    translation, hopefully they will be a bit easier to maintain.
-* s_conf.c (rehash): fixed logic bug that caused and infinite loop, 
-    fix port update bug (needed to call mark_listeners_closing before initconf)
-* *.c, runmalloc.[ch]: change the way the server deals with out of memory
-    conditions. On server startup a no-memory handler is installed which
-    calls server_restart if an allocation fails. Allocations are now checked
-    in the memory allocation functions. Added asserts after every allocation
-    to verify for debug.
-* *.c *.h: move authentication and dns to authentication module rename a few
-    globals, const correctness fixes, add ircd_string code, rework network
-    code, use dns callbacks, removed a lot of redundant code 
-* s_bsd.c: finish this stage of net code work
-* *.c, *.h: rewrite select and poll code, add listener.[ch] net.code overhaul
-    in progress, prepare for adding auth module
-* s_bsd.h, struct.h: moved client struct macros back into struct.h for now,
-    the last place they belonged was in the network code... feh
-* ircd.c (open_debugfile): removed client for debug file
-* ircd_string.h, ircd_string.c: new files for string processing, add
-    ircd_strncpy function
-* *.c, *.h: rename ircstp to ServerStats
-* *.c, *.h: rename now to CurrentTime
-* listener.h, listener.c: new files for listener ports
-* include/ircd_defs.h: new file for global definitions (HOSTLEN, USERLEN)
-* struct.h: add local_flag to client struct, to make local/remote detection simpler
-* s_bsd.c (read_message): split out separate versions for select and poll
-* s_bsd.h, various source files: remove the rest of the unix domain socket 
-    support this removes a number of comparisons that were unneeded in 
-    code that should run reasonably fast.
-* os_*.c, res.c, ircd_osdep.h: add os_recvfrom_nonb for resolver
-* os_*.c, s_bsd.c, s_auth.c, ircd_osdep.h: add os_get_sockname, os_get_peername
-* bsd.h, bsd.c: merge into s_bsd
-* ircd_osdep.h, os_generic.c, os_linux.c, ircd_osdep.h: move os variable stuff
-    to separate compilation units, os generic contains the original code
-    (start here). 
-* s_bsd.c, send.c, struct.h: remove pyr (pyramid) finally
-* res.h, res.c, s_misc.c: cleanup headers/dependencies in res.h
-* match.h: include sys/types.h before netinet/in.h, broken BSD system headers
-* ircd/Makefile.in: remove CFLAGS from link line, use LDFLAGS instead
-* ircd.c: add missing include for sys/socket.h
-* common.h (strChattr, strCasediff): remove pointless non-portable inline
-    decls. The functions are complex enough that inlining just bloats the code
-* ircd_xopen.h, ircd_xopen.c, s_user.c, s_serv.c: porting layer for crypt and
-    other xopen library calls, moved crypt to ircd_xopen.
-* s_uping.c, s_uping.h, s_bsd.c, s_misc.c, s_bsd.h, ircd.c, s_debug.c:
-    Removed s_ping. There are much better tools available that actually work
-    correctly. The s_ping code was a waste of resources, and has historically
-    given incorrect results (it never worked correctly).
-* ircd/s_bsd.c, res.c, s_user.c, s_serv.c: little fixups to allow code to
-    build on Solaris, still have some warnings there.
-    TODO: wrap crypt and things that depend on _XOPEN_SOURCE in their own
-    file so it doesn't bother the network code.
-* ircd/s_bsd.c: cast option arg to const char* for setsockopt (solaris)
-* ircd/Makefile.in: removed hard coded dependencies for hash.o chkconfig.o,
-    let the automatic stuff take care of it, it does it better than humans.
-* *.c *.h: remove register keywords, attribute macro junk, cleanup
-    dependencies, rename MIN and MAX to IRCD_MIN IRCD_MAX all headers in
-    C files are sorted, removed as many duplicate includes as I could find
-    (dozens) general cleanups. Mutter the correct runes to get the protoype
-    for crypt included where it was needed.
-* *.c *.h: dependency cleanups up to querycmds.c
-* ircd.c, bsd.c, s_bsd.c: move signal handling code to ircd_signal.c
-* ircd_signal.c, ircd_signal.h: new files, use only POSIX signals remove
-    support for unreliable signals.
-* *.h *.c: include guards, dependency cleanups
-* Configure.in, setup-sh.in: include guards, config.h includes setup.h
-    add config dir to include path
-* sys.h: include guards, remove hard coded path to config.h
-* s_user.c (hunt_server): fix logic bug
-* numnicks.c (SetServerYXX): fix off by one error
-* multiple files (n2k patch): add code to handle extended numerics
diff --git a/INSTALL b/INSTALL
index 1bff47f33a77ffa7a13ed2dabebb494965400445..e6827a6ca6826c00c45cf8321dcadb5160999295 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-INSTALL file        by Run <carlo@runaway.xs4all.nl>
-            Updated by Isomer <isomer@coders.net>
-            Updated for u2.10.11 by Kev <klmitch@mit.edu>
 
-This is the UnderNet IRC daemon.
+ircu - INSTALL
+  Original by Run <carlo@runaway.xs4all.nl>,
+  Isomer <isomer@coders.net>, and Kev <klmitch@mit.edu>
+  Rewritten by Sengaia <sengaia@undernet.org> 
 
-The installation of the IRC daemon (ircd) exists of the following steps:
+Compiling and installing ircu should be a fairly straightforward process,
+if you have obtained this software as a (.tar.gz) package, please consider
+using CVS (described below). Using CVS will make updating your installation
+much easier. 
 
-1) Retrieve the package.
-2) cd into the base directory.
-3) "./configure"
-4) "make"
-5) "make install"
+After obtaining the latest version of the ircu source code, change into the
+source directory (ircu2.10), and run "./configure". To see the various ways
+in which you can customize your installation, run "./configure --help".
 
-1) Retrieve the package.
-========================
+The configure process will check your environment and prepare itself for
+compiling the source code. If one or more of the prerequisites cannot be
+found, configure will terminate with an error. You will need to resolve
+this and run configure again.
 
-The recommended way to get the ircu package now is to use CVS.  CVS makes
-upgrades a lot less painful and lets you get the latest package.
-
-1.1) The first thing you need to do is "authenticate" yourself against the
-server.  
-
-This is done with:
-
-cvs -d :pserver:anoncvs@coder-com.undernet.org:/home/coder-com/cvs login
-
-(we recommend that you cut and paste the above line to use it :)
-When it prompts you for a password enter "anoncvs".
-
-1.2) The module you will check out is ircu2.10.  There are three branches
-you can check out.
-
-stable - This branch is always the recommended version for use on the
-       Undernet.  To check out the stable tree, add "-r u2_10_11" to
-       the CVS command line.
-
-beta - This branch is undergoing testing before being promoted to the
-       stable branch.  It may be buggy.  Use on the Undernet's production
-       network is prohibited, except for certain authorized servers.  The
-       "-r" flag you need to check this branch out is documented on the
-       Coder Committee's web site, http://coder-com.undernet.org.
-
-alpha - This is the development branch.  It is not guaranteed to even
-       compile, and should be considered HIGHLY unstable.  It is NOT
-       intended for production use.  If you wish to play with the server,
-       you may wish to investigate the test network.  To check this branch
-       out, use no "-r" flags.
-
-
-to check out the tree, type:
-
-cvs -d :pserver:anoncvs@coder-com.undernet.org:/home/coder-com/cvs checkout
-   -P ircu2.10
-
-The above two lines shouldn't have an enter between them.  If you want to
-use another branch, place the appropriate "-r" flag after the "checkout"
-command.  This will create a directory ircu2.10, and put all the files in
-there.
-
-To get the latest version, from within the tree type "cvs update -dP".
-
-For more information see the coder-com website at
-http://coder-com.undernet.org/
-
-The old (tried and true) method that works even when the website isn't being
-DoS'd (sigh) is included below.  Using the method below means you can't
-just type 'cvs update -dP' to get the latest version.
+If configure runs without error(s), you are ready to compile. To compile ircu,
+run "make". Please use GNU make and gcc. If the source code does not compile,
+make sure your environment is setup correctly. If you are convinced the source
+of the failure is ircu, gather all relevant information about your system such
+as the Architecture, OS version, the configure statement you used, etc. and
+contact coder-com@undernet.org.
 
- The name of the package is something like `ircu2.x.y.z.tgz', where
- "x.y.z" is the current release (at the time of writing we have
- ircu2.10.00.beta3.tgz).
+Once ircu is compiled, install it by running "make install".
 
- You need `gzip', the GNU unzip command, to uncompress this package.
- You can download this from every GNU ftp site for almost any Operating system.
- If you have GNU tar, type:
- tar xzf ircu2.x.y.z.tgz
- where "ircu2.x.y.z.tgz" is the name of the package.
- If your tar doesn't support the 'z' flag, you can type alternatively:
- gzip -dc ircu2.x.y.z.tgz | tar xf -
- Both methods result in a directory "ircu2.x.y.z" in your current directory.
-2) cd into the base directory
-=============================
+Next, you will have to configure your IRC server by setting up your ircd.conf
+file. Use the included doc/ircd.conf.sample as a starting point. 
+Setting up ircd.conf can be a bit tricky, so if this is your first time doing
+it, begin with a bare-bones configuration and extend it as you go.
 
-Make this directory your current directory by typing:
+If you are upgrading from ircu2.10.10, use the tools/transition script to
+convert your existing configuration file(s).
 
-cd ircu2.x.y.z
+Good Luck!
 
-or ircu2.10 if you used cvs.
+RETRIEVING IRCU VIA CVS
 
-where "ircu2.x.y.z" is the name of the unpacked directory.
-
-3) "./configure"
-================
-
-This will generate "config.h", your operating system-dependent
-configuration.
-
-If this produces a "Permission Denied" error message, then try typing
-"chmod a+x ./configure" first to give yourself permission to run the file.
-
-For information on configure command line options, type "./configure --help".
-
-4) "make"
-=========
-
-Type:
-
-make
-
-in the base directory.  It should compile without errors or warnings.
-Please mail any problem to the maintainer, but only AFTER you made sure
-you did everything the right way.  If you want your operating system
-to be supported in future releases, you best make a patch that
-actually fixes the problem.
-
-5) "make install"
-=================
-
-This should install the ircd and the man page. Please recheck the
-permissions of the binary.
-
-Of course, you need a syntactically correct ircd.conf in DPATH.  See the
-docs for some info on this.  Also create an ircd.motd with the text of
-your MOTD.  And finally create a remote.motd with three lines of text
-as the remote MOTD.  Again, all of these files should be readable by the
-ircd, and the logfiles should be writeable.
-
-
-In case of problems
-===================
-
-If you have problems configuring the server you might consider installing
-GNU make in your PATH.  In some cases a brain-dead /bin/sh is causing the
-problem, in which case I suggest to install "bash" and use that (as sh ->
-bash).  Finally, any other compile problem should be solved when you install
-gcc.
+The recommended way to get the ircu package now is to use CVS.  CVS makes
+upgrades a lot less painful and lets you get the latest package.
 
-If you have problems with starting the ircd, run "./configure" again
-and give it the "--enable-debug" command line option.  Recompile the ircd,
-and run it by hand as:
+The first thing you need to do is login to the cvs server:
+# cvs -d :pserver:anoncvs@coder-com.undernet.org:/home/coder-com/cvs login
 
-ircd -t -x9
+(we recommend that you cut and paste the above line to use it :)
+When it prompts you for a password enter "anoncvs".
 
-This will write debug output to your screen, probably showing why it
-doesn't start.
+To check out the the last stable version of ircu, use:
+# cvs -d :pserver:anoncvs@coder-com.undernet.org:/home/coder-com/cvs checkout -P ircu2.10
 
-DO NOT USE A SERVER WITH DEBUGGING ENABLED ON A PRODUCTION NETWORK.  Doing
-so is a severe privacy risk.
+To update your source tree to the latest version, run "cvs update -dP" from within the
+ircu2.10 directory. For more information, see http://coder-com.undernet.org.
 
-If things still don't work, try emailing coder-com@undernet.org
diff --git a/README b/README
index 4472da3f3bc3ae2212387d687bde34f26b6896f2..9cff13a0f4f4fb1d2d9ca8df92a07426ba2294cc 100644 (file)
--- a/README
+++ b/README
@@ -1,36 +1,74 @@
-README for the ircu2.10.11 series
-PLEASE READ THIS COMPLETELY BEFORE RUNNING THE SERVER!
-
-The u2.10.11 is the most advanced version of Undernet ircd to date.
-There are still plenty of rough edges, but many things have been
-cleaned up and redone.  The major changes for this version are
-documented in RELEASE.NOTES, in this directory.  A good description of
-compiling and installing the server is included in INSTALL.  Further
-documentation on many aspects of ircu is contained in the doc
-subdirectory.
-
-IF YOU ARE PLANNING ON USING IRCU IN A CHROOT "JAIL," YOU MUST READ
-doc/readme.chroot!  This document describes the intricacies of using
-the Undernet ircd daemon in such an environment.
-
-This version of ircd no longer has the "make compile" step; most
-compile-time options have become features which can be set in the
-configuration file, or on the fly online through the SET and RESET
-commands; the current values may be obtained with GET.  The remaining
-compile-time options are set through arguments to ./configure.  A list
-of the compile-time options may be obtained with "./configure --help";
-see RELEASE.NOTES for a more comprehensive description of each
-option.  All features are documented in doc/readme.features, and log
-configuration is documented in doc/readme.log.
-
-This server version is not compatible with Undernet ircd releases
-prior to u2.10.10, nor is it compatible with any other version of
-ircd.  Also note that this version incorporates the features requested
-by the Undernet administrators in CFV 165; if you don't want these
-hiding features enabled, you must add -DINCLUDED_ircd_policy_h to
-CFLAGS prior to running ./configure.
-
-For more information on the changes in this release, see RELEASE.NOTES
-and ChangeLog, both in this directory.  You may also reference the CVS
-log on the Undernet Coder Committee web page at
-http://coder-com.undernet.org/.
+
+       Welcome to ircu2.10.11, the Undernet IRC daemon
+
+Version u2.10.11 of the Undernet ircd incorporates many new features
+over its predecessor, and we feel that using it will make you very
+happy indeed.
+
+New features include:
+  - A completely rewritten network event engine, which make full use
+    of the asynchronous event engines available in FreeBSD (kqueue)
+    and Solaris (/dev/poll), resulting in dramaticaly improved
+    performance.
+  - New F: (feature) lines in ircd.conf, and the GET/SET commands allow
+    many settings to be changed dynamically, rather than by with compile-
+    time configuration.
+  - The new "account" feature added to the P10 protocol, allows people to
+    remain logged in to service bots (i.e., gnuworld) during a netsplit.
+    This means people will not have to login again once the network rejoins.
+
+INSTALLATION
+
+Please see the INSTALL file for installation instructions, for hints on how
+to best configure your OS for running ircu under high load, see the various
+README.<platform> files.
+
+COMPATIBILITY
+
+This version of ircu will only work with servers that use the P10 protocol,
+some of the new features will only work between ircu2.10.11 servers.
+
+GENERAL PERFORMANCE HINTS
+
+For platform-specific notes and hints, see the various README.<platform>
+files included in this distribution. The notes below apply to servers that
+will serve large numbers (thousands) of clients simultaneously. If your
+server serves a small amount of users, you will not really have to do much
+of anything about performance tuning.
+
+ - Run an OS that supports an asynchronous network event engine; currently
+   these are FreeBSD (kqueue), and Solaris (/dev/poll); possibly other BSDs
+   will also support kqueue. This will have a dramatic effect on performance.
+ - Make things as lean as possible: Make your server dedicated to ircu,
+   disable anything that is not neccesary, and build a custom kernel (where
+   possible). 
+ - Tune kernel parameters; see the various README.<platform> files as well
+   as your OS documentation for more information.
+ - With many clients connecting each second, ircu will be doing lots of DNS
+   lookups. Make sure that the DNS server(s) in your /etc/resolv.conf are as
+   close as possible, or run a local caching DNS server on your IRC server.
+
+TIME SYNCHRONIZATION
+
+Many things can and will go horribly wrong when the clocks on the servers
+on your network become (too far) out of sync. It is therefore highly
+recommended that all servers run a version of ntpd that will keep their
+clocks from going astray.
+
+INFORMATION HIDING
+
+As per undernet-admins CFV-165, this server contains code that will,
+by default, hide certain information from ordinary users. If you do
+not want this, please make sure you add -DINCLUDED_ircd_policy_h to
+CFLAGS prior to running ./configure, like in:
+
+> CFLAGS=-DINCLUDED_ircd_policy_h ./configure
+
+MORE INFORMATION
+
+For more information on this software, see the included documentation
+in the doc/ directory, as well as http://coder-com.undernet.org.
+
+For general information on the Undernet, vist http://www.undernet.org
+
+Happy IRCing!
diff --git a/README.FreeBSD b/README.FreeBSD
new file mode 100644 (file)
index 0000000..2534ec5
--- /dev/null
@@ -0,0 +1,37 @@
+Running ircu2.10.11 on FreeBSD
+
+When running on FreeBSD, ircu can make use of the kqueue() event engine, which
+results in much improved performance over the old poll()-based method. kqueue
+is included in the more recent 4.x releases of FreeBSD.
+
+In order for ircu to be able to serve many clients simultaneously, you need
+to increase the maximum allowable number of open files in the system. To do
+this, add commands such as the following during your system's boot sequence:
+
+sysctl -w kern.maxfiles=16384
+sysctl -w kern.maxfilesperproc=16384
+
+Unless you will be serving thousands of clients simultaneously, you will not
+need to do the following, unless of course you just can't stand having a
+system that is not optimized to its limits :)
+
+Build a custom kernel: Make your kernel as lean as possible by removing all
+drivers and options you will not need. The following parameters will affect
+performance, they are listed with suggested values only. For more information
+on what they do exactly, see FreeBSD's documentation.
+
+maxusers        2048
+options         NMBCLUSTERS=65535
+options         ICMP_BANDLIM
+
+Also, you may wish to run the following at system startup (from /etc/rc.local,
+or whichever other method you prefer):
+
+sysctl -w net.inet.tcp.rfc1323=1
+sysctl -w net.inet.tcp.delayed_ack=0
+sysctl -w net.inet.tcp.restrict_rst=1
+sysctl -w kern.ipc.maxsockbuf=2097152
+sysctl -w kern.ipc.somaxconn=2048
+
+Created by Sengaia <sengaia@undernet.org>, July 20 2002.
+
diff --git a/README.Solaris b/README.Solaris
new file mode 100644 (file)
index 0000000..565260a
--- /dev/null
@@ -0,0 +1,20 @@
+
+Running ircu2.10.11 on Solaris
+
+When running on Solaris, ircu can make use of the /dev/poll event engine, which
+results in much improved performance over the old poll()-based method. Solaris
+versions 8 and 9 include /dev/poll out of the box, for Solaris 7 you will have
+to grab and install Patch-ID 106541-21.
+
+In order to increase the number of clients ircu can handle, add lines such as
+the following to /etc/system:
+
+* set hard limit on file descriptors
+set rlim_fd_max = 16384
+* set soft limit on file descriptors
+set rlim_fd_cur = 8192
+
+For more useful hints see http://www.sean.de/Solaris/soltune.html
+
+Created by Sengaia <sengaia@undernet.org> on July 20, 2002.
+
index 2b6dfc854b7d378922ba4f67bf091da221eeb716..5016e618243e11232a0b183f6f64c517b9b6016d 100644 (file)
@@ -268,6 +268,8 @@ OPEN_MAX=4096
 FD_SETSIZE=4096
 NMBCLUSTERS=8096
 
+If you have trouble connecting *out* from your machine try:
+ sysctl -w net.inet.ip.portrange.last=10000
 
 Solaris 2.6  --Tar
 
diff --git a/TODO b/TODO
deleted file mode 100644 (file)
index 09bdc45..0000000
--- a/TODO
+++ /dev/null
@@ -1,44 +0,0 @@
-
-Undernet Server TODO List
-This list contains things that still need to be done.
-
-Remember:
-Premature optimisation is the root of all evil - Knuth
-Debugging is at least twice as difficult as programming.  So if you
-write a program that uses all of your ability, you'll never be able
-to debug it all.
-
-Current Bugs:
-* privmsg doesn't work because of bugs in unique_vector
-
-High Priority:
-
-* something is leaking "a meg a minute" with heap debugging on
-  with 1300+ clients
-  (No idea)
-* add_Target in s_user.c turns pointers to ints
-  this doesn't make much sence on alpha where sizeof(void *) != sizeof(int)
-
-Medium Priority:
-* crule parser coredumps on invalid input
-* why do the allocation counts change the first time you rehash
-  after a server boot without changing the conf file:
-  *** Allocations:  416(41848)
-  *** ircd.conf : Rehashing
-  *** Allocations:  424(42006)
-  *** ircd.conf : Rehashing
-  *** Allocations:  424(42006)
-
-* Use numeric nicks for numeric replies to remote clients
-* Finish message handlers.
-* Clean up ircd.conf processing, lots of sub issues.
-* Implement PROTOCOL handshaking
-  http://www.xs4all.nl/~carlo17/irc/prot.html
-* Prepare network code to handle even more connections:
-  http://www.kegel.com/c10k.html
-* Implement zlib compression for server links.
-* Cleanups, lots of them.
-* Document undernet protocol as it is used in
-  doc/rfc1459.unet
-* Finish tokenization.
-
index 4e0149445830e37f6250621de248d2dddb8e1b5e..81bda6c283b9319c9d3aa8cd9d10bb8747d42dc8 100644 (file)
@@ -106,6 +106,11 @@ AC_SEARCH_LIBS(crypt, descrypt crypt, ,
 dnl Do all the checks necessary to figure out -lnsl / -lsocket stuff
 AC_LIBRARY_NET
 
+dnl Look for res_mkquery.  Done after AC_LIBRARY_NET in case res_mkquery
+dnl is in one of those libraries somewhere.
+AC_SEARCH_LIBS(res_mkquery, resolv, ,
+[AC_MSG_ERROR([Unable to find library containing res_mkquery()])])
+
 dnl Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS(poll.h sys/devpoll.h sys/event.h)
@@ -284,19 +289,6 @@ if test x"$unet_cv_enable_symbols" = xyes; then
     CFLAGS="-g $CFLAGS"
 fi
 
-dnl Check for --disable-headinsand
-AC_MSG_CHECKING([whether to enable head in sand 'features'])
-AC_ARG_ENABLE([headinsand],
-[  --disable-headinsand      Disable head in sand (-DNO_HEAD_IN_SAND)],
-[unet_cv_enable_headinsand=$enable_headinsand],
-[AC_CACHE_VAL(unet_cv_enable_headinsand,
-[unet_cv_enable_headinsand=yes])])
-AC_MSG_RESULT([$unet_cv_enable_headinsand])
-
-if test x"$unet_cv_enable_headinsand" = xno; then
-    CFLAGS="-DNO_HEAD_IN_SAND $CFLAGS"
-fi
-
 dnl Now check for --enable-profile
 AC_MSG_CHECKING([whether to enable profiling support (gprof)])
 AC_ARG_ENABLE([profile],
@@ -352,7 +344,7 @@ fi
 dnl --disable-devpoll check...
 AC_MSG_CHECKING([whether to enable the /dev/poll event engine])
 AC_ARG_ENABLE([devpoll],
-[  --disable-devpoll       Enable the /dev/poll-based engine],
+[  --disable-devpoll       Disable the /dev/poll-based engine],
 [unet_cv_enable_devpoll=$enable_devpoll],
 [AC_CACHE_VAL(unet_cv_enable_devpoll,
 [unet_cv_enable_devpoll=yes])])
@@ -371,7 +363,7 @@ fi
 dnl --disable-kqueue check...
 AC_MSG_CHECKING([whether to enable the kqueue event engine])
 AC_ARG_ENABLE([kqueue],
-[  --disable-kqueue        Enable the kqueue-based engine],
+[  --disable-kqueue        Disable the kqueue-based engine],
 [unet_cv_enable_kqueue=$enable_kqueue],
 [AC_CACHE_VAL(unet_cv_enable_kqueue,
 [unet_cv_enable_kqueue=yes])])
diff --git a/doc/history/ChangeLog.07 b/doc/history/ChangeLog.07
new file mode 100644 (file)
index 0000000..0b3204b
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# ChangeLog for Undernet ircu Servers
+#
+# $Id: ChangeLog.07,v 1.2 2003-01-08 03:17:18 klmitch Exp $
+#
+# Please insert new entries on the top of the list, a one or two line comment
+# is sufficient. Please include your name on the entries we know who to blame.
+# Please keep lines < 80 chars.
+#-------------------------------------------------------------------------------
+* Added hostname hiding compatible with ircu2.10.10 to allow host hiding
+  for transitioning services, back out pline8 for now. --Bleep
+* Fixed default behavior for BADCHAN. supposed to DEFAULT yes, however
+  should not change each time a make config is done. -- WT
+* doc/readme.www: add Runs link update patch for linux info. --Bleep
+* channel.c, channel.h: add David M's fixup for local channel oper overrides.
+  --Bleep
+* s_misc.c (date): add Runs Y2K patch --Bleep
+* hash.c (hChangeClient): bug fix. If the client pointer matched the first
+  pointer in the bucket, the change was ignored (returned 0), leaving stale
+  values in the hash table, eventually causing the server to die for mysterious
+  reasons. Bug discovered by Quant and Isomer --Bleep
+* config-sh.in, channel.h, numeric.h, channel.c, s_debug.c, s_err.c:
+  add lchanmode patch by CaptJay, add symbols to incredibly long
+  feature string. Bump patchlevel to .03 --Bleep
+* list.h list.c s_conf.h s_conf.c opercmds.c:
+  badchan patch 2 seperate settings, allow global, and allow local.
+  currently allow_local is 'unapproved' for use on undernet. --WildThang
+* ircd.h, s_serv.h, s_debug.h, ircd.c, s_user.c, s_bsd.c:
+  removed STAT_MASTER/BOOT_OPER code, original patch by Isomer --Bleep
+* s_user.c (m_nick): removed redundant check for acptr --Bleep
+* ChangeLog (file): added ChangeLog, and BUGS files, import to ircu2.10 --Bleep
+
diff --git a/doc/history/ChangeLog.10 b/doc/history/ChangeLog.10
new file mode 100644 (file)
index 0000000..9869776
--- /dev/null
@@ -0,0 +1,696 @@
+#
+# ChangeLog for ircu2.10.10
+#
+# $Id: ChangeLog.10,v 1.2 2003-01-08 03:17:18 klmitch Exp $
+#
+# Insert new changes at beginning of the change list.
+#
+-------------------------- Released 2.10.10.pl15
+* Fiddle with /KILL and various exits to make the user experience uniform,
+  no matter who's doing the killing or where.  Previously, differences in
+  QUITs and in the messages sent to the killed client could help make a
+  partial map of the network; now that these messages are all uniform, there
+  is no way to tell. -Kev
+* Split ISUPPORT numeric into two numerics, so as not to exceed the 15
+  parameter limit imposed by the RFC -Kev
+* Turn on HEAD_IN_SAND_REMOTE...oops -Kev
+* Send prefixed error messages to other servers, so ERROR doesn't get
+  interpreted as a prefix -Kev
+* Reverse sense of HEAD_IN_SAND_WHO_HOPCOUNT to do what was intended; use a
+  hopcount of 0 if user is using /who on him/herself -Kev
+* Allow a user to see his/her own idle time without having to do
+  /whois <nick> <nick>; correct spelling of HEAD_IN_SAND_IDLETIME to
+  HEAD_IN_SAND_WHOIS_IDLETIME -Kev
+* Fix a missing ')' in the idle time stuff -Kev
+* Include ircd_policy.h in whocmds.c -Kev
+* Fixed bug in idle time, thanks hektik -- Isomer
+* Update 005 to be compliant with other networks -- Isomer
+* Hide hop count -- Isomer
+* Hide idletime unless you explicitly ask for it -- Isomer
+* /wallops and /wallusers would dump core because of the previous change--my
+  bad.  Now only include user@host when sptr is a client. -Kev
+* /wallops and /wallusers would leave out the user@host--noticed because
+  pl14 broke my script.  Fixed. -Kev
+* Fix several compile warnings, including the one in table_gen.c -Kev
+* Fix a bug in m_silence.c that rendered it uncompilable -Kev
+* Hopefully make mode clears during bursts appear to originate from local
+  server -Kev
+* Fix several things to send server<->server protocol messages with numeric
+  origins -Kev
+* Rework directed notices and mass-messages to use numerics and tokens
+  as appropriate; the latter required the modifications to
+  sendto_match_butone() -Kev
+* Redefined how sendto_match_butone() works, since it's only used with
+  PRIVMSG or NOTICE -Kev
+* Bumped patchlevel to pl15(development) -Kev
+* Corrected reverse-sense of HEAD_IN_SAND_REMOTE test in m_whois() -Kev
+* Clean up logic in m_whowas(), corrected numeric reply -Kev
+* Finally fixed /whois to tell you what your own server is -Kev
+* Clean up logic in add_banid() with some well-placed DupString()'s -Kev
+* Hide which server performed a nick collision kill -- Isomer
+* To allow for remote whois not giving away the remote server, all remote 
+  numerics to clients are remapped to come from the local server :/ -- Isomer
+* All remote queries are disabled for users, except /whois -- Isomer
+  (/whois now uses the second parameter for which server to use, ie:
+   /whois <ignored> <nick> will query <nick>'s server.)
+* Fixed /who showing server name -- Isomer
+* Fixed burst showing linking server -- Isomer
+* Fixed burst bans showing linked server -- Isomer
+* Fixed /whowas showing server name -- Isomer
+-------------------------- Released 2.10.10.pl14 (You got any issues with that punk?)
+* Changed (then fixed) /LINKS to output an empty links list -- Isomer
+* Make netsplit server notice say the right thing
+* Final fix for HEAD_IN_SAND_WHOIS_SERVERNAME
+* Fix a bug with implementation of HEAD_IN_SAND_NETSPLIT
+* Permit users to find out what server they're on, since they already
+  know -- Kev
+* Added HEAD_IN_SAND_WHO_SERVERNAME to cover final source of server
+  names -- Kev
+* Fixed wallops, wallusers now sends wallops to local clients,
+  wallusers to servers.
+* Added host to /kill messages -- Isomer
+* Fixed whois (opers can see server names) -- Isomer
+* Implement walluser -- Bleep
+* stats fixed -- Isomer
+* trace disabled from non opers -- Isomer
+* server name removed from whois (but not /who, shrug!) -- Isomer
+* netsplits are now represented with "*.net *.split" -- Isomer
+* Done /links -- Isomer
+* Modifications to map as suggested by nighty -- Isomer
+* Wallops is the only code that uses sendto_ops_butone now, this
+  isolates wallops entirely. No server notices sent by wallops.
+* HEAD_IN_SAND_SNOTICES done -- Bleep
+* HEAD_IN_SAND_WALLOPS done -- Bleep
+* HEAD_IN_SAND_DESYNC done -- Bleep
+* HEAD_IN_SAND_MAP done -- Isomer
+* According to CFV-165, buring our head in the sand to try and
+* hide from DoS - First pass -- Isomer
+* As requested by hop: hidden keys are shown as "*" not "" -- Isomer
+* As requested by Buff: allow admins to *disable* below behavour -- Isomer
+* As requested by Adriel, compile time option to disable mo_wallops 
+ -- Isomer
+-------------------------- Released 2.10.10.pl13
+* Don't allow two copies of the server to start -- Isomer/Kev
+-------------------------- Released 2.10.10.pl12
+* Release 2.10.10.pl12 before Mr_RIP threatens physical violence -- Isomer
+* Don't 'hubhide' nick's in /trace (oops!) -- Isomer
+* Allow K:line by realname, updated client connection logging -- Gte-
+* ircd/m_join.c: use ERR_BANNEDFROMCHAN instead of ERR_BADCHANNAME -- Kev
+--------------------------- Released 2.10.10.pl11.(release)
+* Fixed G-lined (reason), thanks to dfx -- Isomer
+* Added reason to the "G-lined (reason)" quit messages. -- Isomer
+* Removed 'for nick[1.2.3.4]' from quit messages, they're redundant
+  and make hub hiding more reliable --Isomer
+* ircd/s_user.c (hunt_server): add 'No such server' message back 
+  --Isomer
+* ircd/s_bsd.c: remove ALWAYSFLUSH - the problem wasn't ircu's fault 
+  -- Isomer
+* ircd/m_names.c (m_names): don't add a space if the user's a
+  zombie; fixes an overrun where we generate a huge number of spaces
+  in the names reply without length-checking them properly -- Kev
+* added 'ALWAYSFLUSH', if you thought the furgeson flusher was bad...
+  --Isomer
+* Fixed /USERHOST again.  Horribly embarrased.  Thanks again Liandrin 
+  --Isomer
+* Added extra field to /stats Y showing how many people are in that class.
+  Information was previously available via /trace, however tended to flood
+  you off if you weren't on a good connection.  Requested by Mr_RIP
+  -- Isomer
+* Fixed 'BADCHAN' resetting itself to 'Y', reported by Gator --Isomer
+--------------------------- Released 2.10.10.pl10
+* Released 2.10.10.pl10
+* Backported /names optimisation from 2.10.11.
+  '/names 0' now returns verbose listing, '/names' simply returns
+  ENDOFNAMES. Disallow harmfull /names usage. --Gte
+* Fixed ERR_NOSUCHNICK bug in userhost, thanks to Liandrin --Isomer
+* Conceal more bugs in IPcheck --Isomer
+* Add 'POST' as a unregistered command to disconnect people abusing web
+  proxies --Isomer.
+* Conceal bugs in IPcheck --Isomer
+* Fix for changing the wrong define --Isomer
+* Fix for the easter buggy. --Isomer
+* Fix for rpong --Run
+* Fix for other IPcheck bug, thanks BLMet. --Bleep
+* Fix for IPcheck bug, rewrite IPcheck from scratch (mostly),
+  add changes for new code to s_user.c, ircd.c --Bleep
+* Shorten connection timeout for auth queries to 60 seconds
+  If connection is from localhost use the server alias for the
+  client host. --Bleep
+* Fix for ident bug --Isomer
+* Fix for rping/rpong --Gte
+* Add m_pong to parser handler --Bleep
+* Fix for EXTENDED_NUMERICS bug doh!!! --Bleep
+* Fix for Max Undernet Server bug --Bleep
+* Fix for PRIVMSG<->NOTICE translation from hubs --Bleep
+* Fix for Bogus protocol strings for P9 servers --Bleep
+* Hookup UPING code again, cleanups --Bleep
+* Convert numerics back to mask and shift extended numerics
+  follow same mechanism --Bleep
+* Fixed bogus errno return on Solaris --Bleep
+* Fixed core on RPING bug, tokenized RPING --Bleep
+* Remove add_local_domain entirely, unused --Bleep
+* Merge u2_10_10_beta06 create branch u2_10_10_beta07 --Bleep
+* Remove size_t from socket calls, audit usage of size_t
+  values. --Bleep
+* Fix for OSF1, RES_NOALIASES not defined there. --Bleep
+* Don't bother doing hostname lookup or setting me.sockhost
+  since we never want to display it there is really no reason
+  to have the info. --Bleep
+* Bugfix broken N:line check in chkconf --Maniac
+* Bugfix, fix clients occasionally getting stuck in IPcheck
+  code. Add note to members in client struct that aren't used
+  for any remote client code, didn't want to actually move them
+  this close to release (paranoia) --Bleep
+* A few little cleanups in check_pings, removed yet another
+  address display. --Bleep
+* Bugfix, autoconnects displaying server IP address to opers.
+  --Bleep
+* Remove names from /stats p, since its always the server
+  name from the M:line anyhow, (redundant information)
+  --Bleep
+* Unborked throttling. --Bleep
+* Fix two stupid bugs, related to IP mismatch kills. --Bleep
+* Clean up configuration, make it a bit easier for admins to
+  turn off asserts and heap checking code. Moved host name dns
+  query for listener virtual host ports to dead code and use
+  me.name for the listener name (no sense in looking up the name
+  if we don't want to display it). Change direct bump of unknowns
+  in s_bsd.c to Count_newunknowns(UserStats) for consistency.
+  --Bleep
+* Added option to kill any connecting client with a forward and
+  reverse DNS mismatch. Fixed bug in s_auth that that caused
+  incorrect counts for unknown clients. Replaced missing server
+  notice for SNO_IPMISMATCH. --Bleep
+* Added a few more little name tweaks, no sense in looking up
+  the hostname in the conf if no one knows it. --Bleep
+* Moved to beta archive, bumped patchlevel, fixed message for
+  lost C:line in s_conf.c (I don't think I've ever seen this happen)
+  --Bleep
+* Finished host hiding changes, it should not be possible for any
+  online user to discover the real hostname or IP address of any
+  connected or unconnected server listed in the configuration. This
+  applies to opers and regular users. The name in the M:line is the
+  name used for connecting and all informational messages. --Bleep
+* Removed code in dbuf.c that flushes the dbufs if the server runs out
+  it looks like a fully loaded server may not be able to handle a net
+  break without shedding a few clients. --Bleep
+* Finish IP address cleanup, alpha should be clean for not displaying
+  server hosts or IP addresses to users now. This needs to be verified.
+  Changed version to u2.10.10 per Isomers suggestion. --Bleep
+* Remove server IP address from info line for connecting servers.  
+  This almost completes the IP address hiding changes for alpha, there
+  are still a few stats commands available to users that will show the
+  server addresses, but they can be easily disabled or only show '*'s
+  to non-opers.  --Bleep
+* Fix possible (but not likely) memory leak in debug allocator, couldn't
+  find the "meg a minute" problem, using the debug allocator on the
+  production network with more than 1000 clients on a server may cause
+  problems if you don't have a lot of memory. (This does not seem to
+  be a problem with non-debug builds) --Bleep
+* Captialisation fixes, just to keep certain ppl quiet. --Isomer
+* Removed +s channels from /list.  They were shown sometimes, but not
+  others, and the information that was shown about them was inconsistant.
+  list is not an effective way to gain information anyway. Reformatted
+  and touched up readme.who as well.  --Isomer
+* Added MAP to ISUPPORT, added doc/features.txt --Isomer
+* Added suggestions made by scripters. more info for ISUPPORT, and
+  added stuff to 'TODO' --Isomer
+* More TODO items 'done'.  P:'s now ignore '*'s.  ping shouldn't do funky
+  stuff with mirc anymore, needs discussion --Isomer
+* Typo fixed. Now I'm annoyed.  --Isomer
+* Right, Makefile's gonna work now or I'm going to get REALLY annoyed at it.
+  --Isomer
+* TODO, m_ping, ircd/Makefile.in: Added note to TODO, added info to
+  m_ping, and fixed Makefile bug using bsdmake. --Isomer
+* s_bsd.c, listener.c, s_user.c, s_serv.c, s_bsd.h:
+  Set receive and send buffers in correct order to enable flow
+  control for clients and support fat pipes better for servers.
+  Finally got it right :)
+  See Stevens "Unix Network Programming" v1 p 191-193
+  --Bleep
+* ircd.c (main): added idiot checking to make sure MAXCONNECTIONS
+  is sane. --Bleep
+* send.c: Don't let negative fd's break stuff, audit sentalong
+  usage for sillyness. --Bleep
+* send.c (sendto_common_channels): bug fix, code assumed client
+  local, file descriptor is only in local client struct
+  --Bleep
+* table_gen.c, channel.c: make FIXME changes, removed
+  FIXME code from table_gen, readd FIXME code to channel.c,
+  I hope I got this right. --Bleep
+* Makefile.in: Add purify def, fix so CFLAGS don't error
+  off when using Solaris compiler --Bleep
+* fda.c (fda_free): fix compile error on Solaris --Bleep
+* configure.in: add SunOS case to detect Solaris --Bleep
+* os_solaris.c (os_send_nonb): fix solaris compile error --Bleep
+* exaconf.2: add file from conf design to docs directory to
+  have it available for new conf parser development --Bleep
+* fda.c (fda_free): fix memory leak, doh!!! --Bleep
+* hash.c (addNickJupes): fix buffer overrun --Bleep
+* s_bsd.c (read_message(poll)): fix uninitialized memory read
+  bogosity in poll macros. --Bleep
+* channel.c (send_user_modes): change to send XXX:ov instead
+  of XXX:o:v doesn't send XXX: if no modes set. --Bleep
+* s_bsd.c (connect_server): bugfix for connect/rehash/connect
+  multiple outstanding dns query core. --Bleep
+* channel.c (send_user_modes): bugfix for burst not sending modes
+  when burst line is created. --Gte
+* m_gline.c: change NumServ(cptr) to NumServ(sptr) found by Gte
+  --Bleep
+* config-sh.in: add WildThangs BADCHAN config fix --Bleep
+* config-sh.in: add Runs restart bugfix --Bleep
+* Makefile.in: make sure version.c gets regenerated when checksums
+  change --Bleep
+* Makefile.in: remove hash.c/crypt/sums idiocy, all of the ridiculous
+  anti-hack stuff is already done in version.c anyhow.
+  "Shhh..., don't tell the admins ( .)( .) you're being watched"
+  --Bleep
+* hash.c (m_hash): fix count bugs --Bleep
+* m_squit.c (mo_squit): fix off by one, /quote SQUIT bug --Bleep
+* ircd_relay.c: oops, changed the wrong one.  Fixed previous fix. --Isomer
+* Makefile.in, ircd_relay.c: Fixed 'make depend', added dependancies, fixed
+  bug where server would core on sending a server notice --Isomer
+* m_kick.c (ms_kick): fix core on kick message coming from
+  server --Bleep
+* config.in: remove CRYPT_LINK_PASSWORD option --Bleep
+* doc/readme.www: Applied Runs' doc patch --Bleep
+* client.h: Add member to client struct to try to aggravate the
+  bug found by Jesus --Bleep
+* client.h: Remove IsListening macros and flags, add FLAGS_UPUNG
+  and IsUPing/GetUPing/SetUPing macros --Bleep
+* m_silence.c, m_create.c: check for IsServer(sptr) don't
+  allow X SILENCE X +*@*.com or X C #blah 947477407 core the
+  server. --Bleep
+* os_*.c, res.c: clean interface for os_recvfrom_nonb --Bleep
+* uping.c, uping.h: new files for UDP pings, these aren't hooked up yet, or
+  finished or tested.
+  --Bleep
+* channel.c: find_member_link(): Fail fast for Servers, prevents core when
+  servers set a channel mode. --Isomer
+* channel.c, channel.h, various.c: Changed find_member_link() to take
+  a chptr instead of the first member, and special case'd +k users
+  (see comment in code for more details) --Isomer
+* ircd/Makefile.in: Changed gnu specific $^ for $< in table_gen
+  rules --Bleep
+* INSTALL: Explained about CVS --Isomer
+* example.conf: Point to coder-com@ for help configuring the server. --Isomer
+* INSTALL: Make things a bit more plain.  --Isomer
+* s_bsd.c (read_message (poll)): removed local_cptr array using
+  this temp made possible a bug where if a client lower in the list
+  managed to exit a client higher in the list, a dangling reference
+  to the already exited client would be left in the local_cptr array.
+  Found by Quantum by loading 100's of clones with the same nick.
+  --Bleep
+* INSTALL: Added instructions for -lcrypt FAQ --Isomer
+* INSTALL: Added instructions for -lresolv FAQ --Isomer
+* INSTALL: Added instructions for making ./configure executable --Isomer
+* numeric.h: Merged in some more numerics that other ircds user --Isomer
+* IPcheck.c: Fix gramatical error to keep pedants happy. --Isomer
+* IPcheck.c: Allow -DNOTHROTTLE for debugging purposes.  --Isomer
+* m_stats.c: make stats c available to opers only, TEMP_HACK --Bleep
+* IPcheck.c: Fixed outdated comment.  Thanks Quantum --Isomer
+* ircd_reply.c: Fix the fix, silly typo.  thanks Bleep --Isomer
+* ircd_reply.c: added check for people without nicks.  --Isomer
+* doc/Authors, ircd/version.c.SH: updated /info and maintainer 
+  lists. --Isomer
+* channel.h, channel.c, m_join.c, m_mode.c: add David M's
+  lchanmode patch update --Bleep
+* s_auth.c: fix ident bug, comment code for rule. --Bleep
+* m_invite.c (m_invite): Fix syntax error, missing ')'. -- Isomer.
+* m_invite.c (m_invite): tokenize invites, change from accidental
+  broadcast to directed message (bug fix). --Bleep
+* m_time.c (m_time): send tokenized time messages --Bleep
+* s_user.c (set_user_mode): Send wallops to everyone by default
+  allow compile option WALLOPS_OPER_ONLY for networks that want
+  to disable wallops for users. --Bleep
+* s_misc.c (exit_one_client): tokenize client quit message to other servers.
+  --Gte
+* m_kick.c: you would have thought I'd fix all of them the first time, but
+  no... -- Isomer
+* m_kick.c: Fixed missing space after TOK_KICK -- Isomer
+* m_burst.c: Fixed netrider kick bugs -- Isomer
+* s_user.c: Bug fix --Bleep
+* s_user.c: only send wallops to opers --Bleep
+* s_user.c: enforced undernet policy. -- Isomer
+* s_user.c: replace user_modes with struct UserMode array
+  change code to use new struct. --Bleep
+* s_user.c (set_user_mode): clean up switch statement --Bleep
+* channel.c (set_mode): fixed -k foo bug, extra == 0 typo in
+  conditional. --Bleep
+* dbuf.c (dbuf_alloc): fixed count bug, we _have_ to count it in
+  the branches. --Bleep
+* dbuf.c, send.c, s_bsd.c, send.h: bahh finally did it right,
+  if a dbuf allocation fails, attempt to flush all send buffers except
+  for the one we are trying to build (we're twiddling with the list etc..)
+  if the allocation fails a second time, _then_ bail. --Bleep
+* s_bsd.c, send.c: if dbuf_put fails for send or receive buffers,
+  call flush connections to free up some buffers (safe here). --Bleep
+* dbuf.c (dbuf_put): back out previous change, afaict it would fail
+  spectacularly --Bleep
+* dbuf.c (dbuf_put): call flush_connections(0) if we can't allocate
+  a dbuf the first time, this may prevent the server from dropping
+  connections during netbursts. --Bleep
+* m_privmsg.c: fix IDLE_ON_MSG fix -- Isomer
+* m_privmsg.c, parse.c: fix IDLE_ON_MSG bug --Bleep
+* m_ison.c (m_ison): Temp hack to fix missing null terminator. --Bleep
+* m_nick.c (m_nick): fix null nick reply bug --Bleep
+* ircd_string.c, match.c: fix a couple possible issues with
+  the character attribute changes --Bleep
+* s_auth.c, ircd.c: turn off connection status messages for
+  connections to server ports. --Bleep
+* ircd.c, s_conf.c, m_server.c, ircd.h, s_conf.h:
+  removed portnum and server_port global variables, server port
+  in M:lines is ignored, server ports now need to be defined in
+  the P:lines. Add SERVER_PORT config option to allow:
+  '/connect server.net.dom' without specifying the port. --Bleep
+* config-sh.in: change PORTNUM to SERVER_PORT now used for
+  default server port for outgoing connections in m_connect.
+  --Bleep
+* example.conf: document changes to M:line for server port --Bleep
+* ircd_chattr.h, ircd_string.h, ircd_string.c, table_gen.c:
+  put Nemesi's table generation code and macros back in, the
+  tables are now automagically generated whenever the table_gen.c
+  file is modified, use a slightly different mechanism to get the
+  tables in the executable. Add reference data file to test dir
+  for character attributes. --Bleep
+* s_auth.c (check_ident_reply): add function that implements
+  auth reply undernet rules checking. --Bleep
+* s_misc.c (date): added Runs Y2K patch --Bleep
+* m_privmsg.c: work on server handlers, hookup new code to parser,
+  test, fixed a couple bugs, fixed username bug in server NICK
+  processing --Bleep
+* ircd_chattr.c, m_privmsg.c: Work on privmsg code a bit more,
+  commit for review, still a bit more to do --Bleep
+* os_bsd.c, configure.in: add os dependency file for bsd
+  --Bleep
+* m_privmsg.c, ircd_string.c: little cleanups for privmsg
+  work on prototype handler for new parser. --Bleep
+* m_connect.c, s_conf.c: clean up /connect handling code
+  --Bleep
+* m_away.c, m_admin.c, m_close.c, m_connect.c:
+  start cleaning up handlers --Bleep
+* whocmds.c, whowas.c, *.c: split out handlers from whocmds.c
+  and whowas.c --Bleep
+* s_serv.c, m_*.c: split out handlers from s_serv.c
+  --Bleep
+* querycmds.c, m_*.c: split out handlers from querycmds.c
+  --Bleep
+* opercmds.c, m_stats.c, m_connect.c, parse.c, handlers.h, *.c
+  add new command handlers --Bleep
+* channel.c, m_names.c: new file for names handler --Bleep
+* channel.c, m_list.c: new file for list handler --Bleep
+* channel.c, m_topic.c: new file for topic handler --Bleep
+* channel.c, m_burst.c: new file for burst handler --Bleep
+* channel.c, m_create.c: new file for create handler --Bleep
+* channel.c, m_destroy.c: new file for destroy handler --Bleep
+* channel.c, send.c, m_join.c: new file for join handler,
+  const fixups for send.c --Bleep
+* channel.c, m_mode.c: new file for mode command handler,
+  clean up file scope buffer mess. --Bleep
+* m_silence.c: split out SILENCE handler to a new file,
+  cleanup --Bleep
+* m_ison.c: split out ISON handler to a new file, cleanup --Bleep
+* m_userip.c: split out to new file, change userhost and userip
+  to use same algorithm with different formatting functions --Bleep
+* m_userhost.c: split out to new file --Bleep
+* send.c: add new function send_buffer, cleanup godemode ick a bit
+  --Bleep
+* m_wallchops.c: split out wallchops handler --Bleep
+* m_cprivmsg.c: split out m_cprivmsg and m_cnotice.
+* m_pass.c, s_user.c: split out m_pass, pass message handler
+  --Bleep
+* m_oper.c: split out m_oper.c from s_user.c, setup to use
+  new parser. --Bleep
+* m_pong.c, m_ping.c, parse.c, s_user.c, channel.c:
+  Add new file for pong messages, convert ping and pong to use
+  numerics. Test pings and pongs on testnet. Fix numeric
+  nick bug in channel.c. --Bleep
+* m_ping.c, s_serv.c, parse.c: new file for pings, fixed a 
+  minor bug in ping handling. --Bleep
+* m_nick.c, m_kill.c: clean up nick code for servers, still needs work
+  fix string formatting bug in m_kill --Bleep
+* m_nick.c, s_user.c, ircd_chattr.c: add new file for NICK command,
+  clean up local client registration for nicks. --Bleep
+* m_away.c, s_user.c, parse.c: split out m_away handlers for client,
+  add user_set_away function. --Bleep
+* m_kill.c, ircd_reply: Rework handling of kill from server, add new error
+  message formatter. --Bleep
+* m_kill.c (mo_kill): Rework handling for kill from operator on server
+  kill originated from --Bleep
+* m_kill.c: new message handler file for kill --Bleep
+* configure.in, ircd/Makefile.in: added automatic os checking to autoconf
+  checked --Gte
+* m_quit.c: new message handler file for quit --Bleep
+* m_privmsg.c: new message handler file for privmsg --Bleep
+* ircd_string.c, support.c, support.h, *.c: moved strtoken to ircd_string
+  and renamed ircd_strtok --Bleep
+* channel.c, s_user.c, s_debug.c, send.c, channel.h: finish membership code
+  --Bleep
+* channel.c, more cleanups of membership code and macros --Bleep
+* channel.c, s_misc.c: more cleanup in channel link code, most likely
+  still a bit broken yet, more to come. --Bleep
+* querycmds.h (Count_remoteclientquits): fix minor bug --Bleep
+* ircd.h, querycmds.h, struct.h, channel.c, list.c, map.c, opercmds.c,
+  s_err.c, s_serv.c, s_user.c, s_misc.c: Add Isomers passivelag0-1.patch
+  fixed minor bug in macros --Bleep
+* channel.h, channel.c, s_user.c, s_debug.c, s_user.c:
+  added Membership struct for channel associations, change user/channel
+  lookups to use new struct. --Bleep
+* channel.c, channel.h, s_user.c: cleanup channel and user code
+  a bit, new function find_no_nickchange_channel --Bleep
+* parse.c, m_defaults.c: added default handlers and hooked up new
+  message handlers --Bleep
+* *.c, struct.h: added Isomer's passivelag patch and, the second
+  p10 patch --Bleep
+* ircd_reply.[ch]: new files for commonly used replies --Bleep
+* m_proto.[ch]: new file for protocol command support, needed for zip
+  links --Bleep
+* client.h, parse.c, msg.h: add code to support multiple message handlers
+  depending on client status. --Bleep
+* s_bsd.c, packet.c: code cleanup prep for zip links --Bleep
+* channel.c, opercmds.c, ircd.c, s_serv.c, s_user.c, querycmds.c, 
+  whocmds.c, whowas.c: Add Isomers p10ify patch, tokenize server to
+  server commands --Bleep
+* s_user.c (m_nick): killed goto --Bleep
+* client.h, *.c: moved client stuff to client.h --Bleep
+* version.c.SH, patchlevel.h, .patches: change version string
+  generation, patch level is now set in patchlevel.h by simply
+  bumping the number in the PATCHLEVEL string. --Bleep
+* ircd_alloc.c, channel.c: fixup warnings in release build (NDEBUG)
+  --Bleep
+* fda.h, ircd_alloc.h, fda.c, ircd_alloc.c, fda_t.c: new files,
+  runmalloc was core dumping on squits and unable to handle or
+  detect double frees, the memory debug code can be disabled by
+  compiling with NDEBUG defined --Bleep
+* channel.c (remove_user_from_channel): refactor function --Bleep
+* channel.c (m_kick): refactor function a bit, put all checks at top
+  move code out to new function (make_zombie) --Bleep
+* s_bsd.c (completed_connection): fixed stupid
+  "Write error to blah: Socket not connected" bug --Bleep
+* struct.h, send.h, send.c, s_bsd.c, IPcheck.c, s_user.c, *:
+  More socket code cleanup, move file descriptor to local part of
+  client struct, use cptr->error to handle the errno of any socket
+  error, fix bug in IPcheck that ends up only disallowing every
+  256th clone, Add more ipcheck forgiveness to s_user.c (needs work).
+  Changed IPcheck_local_connect and IPcheck_connect_fail interfaces to
+  use struct in_addrs instead of client structs to allow delaying the
+  allocation of the client struct till after the check was done.
+  Added can_send function to send.c (should be called before work is done
+  but right now it's called just before trying to send (needs work))
+* channel.c: Added Isomers netride2.patch, still needs a config option
+  to turn it on (NO_INVITE_NETRIDE) --Bleep
+* parse.c, msg.h: Added silent ignores for notices so connect progress
+  messages do not cause connecting server to spew ERR_REGISTER_FIRST
+  messages at the server it's connecting to. --Bleep
+* s_serv.c, s_user.c, channel.c, send.c: Tokenised BURST, NICK,
+  END_OF_BURST, EOB_ACK, PRIVMSG and NOTICE Server to Server.
+  About 8-10% Bandwidth saving on BURSTS. --Gte
+* channel.c (m_join): servjoin patch --Isomer
+* ircd_osdep.h, os_*.c, s_bsd.c, send.c: more cleanups in socket code,
+  use enumeration for IO results. --Bleep
+* s_bsd.c: clean up select and poll code a bit more, fixed message pacing bug
+  in poll. --Bleep
+* supported.h, numeric.h, s_user.c, s_err.c: Added Isomers features
+  patch. Use numeric 005 RPL_ISSUPPORT to convey server features to
+  clients. --Bleep
+* s_user.c (m_nick): IP differ patch, use IP address instead of host
+  name to determine different user@host for nick collides. --Isomer
+* hash.c (hChangeClient): Bug fix. Fixed bug that caused stale entries
+  to be left in client hash table after a name change. Discovered by
+  Quant and Isomer. --Bleep
+* hash.c (hSeekClient): fixed bug I introduced when reversing my hash
+  table code changes, thanks Quant and Isomer --Bleep
+* opercmds.c (m_lusers): send limited luser info to remote
+  clients --Isomer
+* numeric.h, channel.c, s_err.c: Changed invite list numerics
+  from 283/284 to 346/347 to match IRCnet numerics --Bleep
+* config-sh.in, gline.h, numeric.h, gline.c, opercmds.c, s_debug.c, s_err.c:
+  Add badchan patch by WildThang --Bleep
+* config-sh.in, channel.h, numeric.h, channel.c, s_debug.c, s_err.c:
+  Add lchanmode patch by David M --Bleep
+* channel.c (cancel_mode): removed incorrect assert --Bleep
+* *.c: removed P9 support, not everything is completely gone but most
+  of it is, the server builds and connects to other servers, but thats
+  as far as it's been tested so far. --Bleep
+* ircd.h, ircd.c, s_bsd.c:
+  removed BOOT_INETD/BOOT_CONSOLE code, unused non-functional --Bleep
+* struct.h, ircd.h, ircd.c, s_user.c, s_bsd.c:
+  removed BOOT_OPER/STAT_MASTER code, original patch by Isomer --Bleep
+* s_user.c (m_nick): removed redundant check for acptr
+* hash.c (hSeekClient, hSeekChannel): roll back some of hash.c changes
+* hash.c (hSeekClient, hSeekChannel): removed unused variable from previous
+   changes.
+* hash.c (hSeekClient, hSeekChannel): fix compile error from status changes,
+   fix logic bug that caused the first client that matched the mask to be
+   returned regardless of whether or not it's name matched, this can result
+   in wierd problems where the wrong server/client could be returned from the
+   hash table lookup. Removed code that moved client to head of hash table
+   chain for it's bucket when it's looked up, if the hash table is working
+   reasonably well this just wastes cpu.
+* hash.c, list.c: added code to zero out cptr->hnext when client removed
+   from hash table, added assert for hnext == 0 in list.c to make sure that
+   client was actually removed from the hash table before freeing it's memory.
+* various: misc cleanups
+* support.c: removed dead code
+* configure.in: remove unneeded checks for minix, aix, ansi/posix headers
+   these things are handled by porting layer code.
+* res.c: remove calls to add_local_domain, these were causing incorrect
+   behavior
+* opercmds.c: cleanups in gline code
+* s_bsd.c: increase socket buffers to 65535 for server connections
+* crypt/mkpasswd.c: mutter correct runes to get file to compile without warnings
+* gline.c, gline.h: add new files to attempt to encapsulate glines a bit,
+   some code from opercmds.c needs to be moved here still
+* opercmds.c (m_gline): fix local gline bug
+* s_conf.c (initconf): add password change on rehash fix
+* s_conf.c (rehash): fix rehash freeing and reloading the motd/rmotd files for
+   every client connected.
+* ircd_log.c: use 2K fixed buffer instead of vsnprintf, nothing we write to
+   the log should ever exceed 512 bytes, but it doesn't hurt to be paranoid.
+* res.c: change resolver timeouts to 5 seconds, per RFC1123
+* channel.c: more little cleanups, no code changes
+* channel.c: a) stops iterating over /invite list
+    b) adds /invite to list the channels you're currently invited to.
+    c) adds lotsa new numerics --Isomer
+* ircd_signal.c, ircd.c: fix bug in signals
+* channel.c (can_send) add Isomer's changes
+* channel.c: add send_ban_list, cleanup a few names, reformat some parts to make
+    more readable, fix bug introduced by name changes
+* ircd_chattr.[ch]: add new macro for checking K:line time chars vs comments
+* listener.c (show_ports): add code to show client/server and hidden status
+* s_conf.c: bug fixes, cleanups, add code to set server port and hidden
+    status for listeners (P:lines)
+* s_conf.c (initconf): add interface selection code to P:lines so ports can
+    be set on a single interface or multiple interfaces (multi-homed hosts)
+* s_conf.c: rewrote C/N line code, removed N:lines entirely, clean up server
+    conf line code.
+* s_conf.c (check_server): move ip checks out of resolved or not so they can
+    be checked for worse case situations on server connects
+* res.c (resolver_read): add Isomer's debug info for failed resolver queries
+* opercmds.c (m_stats): remove call to time(0) for each local client in 
+    stats l command, use CurrentTime instead
+* s_conf.c (initconf): only do lookups on C:lines instead of both C/N lines
+* res.c: fix resolver hang bugs
+* s_conf.c (rehash): remove extra semicolin that was causing c/n lines to
+    accumulate
+* s_conf.c (rehash): add portnum back to the listener list so we don't loose
+    the server port on a rehash
+* s_auth.c, listener.c: remove warnings for normal errors
+* s_auth.c, listener.c: use osdep non-blocking calls instead of locals
+* s_auth.c, listener.c: add code for non-blocking recovery for listeners and
+    auth queries
+* s_auth.c (auth_error): call IPcheck_connect_fail if the client socket dies
+    during the auth check so the reference count doesn't get borked in the
+    IPcheck code.
+* numnicks.c: yet another extended numerics bug fix... sheesh
+* s_bsd.c, s_conf.c: move conf line code from s_bsd.c to s_conf.c, cleanup
+    cleanup check_server, check_client (still not completely tested, may be
+    a bit buggy yet).
+* parse.h, parse.c, s_debug.c: remove privmsg logging code
+* numnicks.c (FindXNServer): fix off by one bug
+* common.h, common.c: removed unused files
+* s_bsd.c (net_connect_completed): new function, called after connection
+    establishment for servers and clients, release reference count for
+    the dns reply and set the socket buffer size to IRCD_READBUF_SIZE 
+    for servers and 2K for clients.
+* channel.c, crule.c: cleanup bogus casts
+* listener.h (add_listener): fix bug that caused server a server port listener
+    to think it was a client port listener.
+* s_user.c, s_serv.c: release reference to dns_reply when connection is
+    established.
+* s_bsd.c (completed_connection): removed call to start_auth for connects
+    the auth module expects connections not to be linked anywhere and owns
+    the client struct until it's done.
+* listener.c (release_listener): fix inverted assert client exit bug
+* ircd_chattr.c: fix signed/unsigned warnings with Sun Workshop (+w)
+* ircd_chattr.c, ircd_chattr.h: new files for character attributes and case
+    translation, hopefully they will be a bit easier to maintain.
+* s_conf.c (rehash): fixed logic bug that caused and infinite loop, 
+    fix port update bug (needed to call mark_listeners_closing before initconf)
+* *.c, runmalloc.[ch]: change the way the server deals with out of memory
+    conditions. On server startup a no-memory handler is installed which
+    calls server_restart if an allocation fails. Allocations are now checked
+    in the memory allocation functions. Added asserts after every allocation
+    to verify for debug.
+* *.c *.h: move authentication and dns to authentication module rename a few
+    globals, const correctness fixes, add ircd_string code, rework network
+    code, use dns callbacks, removed a lot of redundant code 
+* s_bsd.c: finish this stage of net code work
+* *.c, *.h: rewrite select and poll code, add listener.[ch] net.code overhaul
+    in progress, prepare for adding auth module
+* s_bsd.h, struct.h: moved client struct macros back into struct.h for now,
+    the last place they belonged was in the network code... feh
+* ircd.c (open_debugfile): removed client for debug file
+* ircd_string.h, ircd_string.c: new files for string processing, add
+    ircd_strncpy function
+* *.c, *.h: rename ircstp to ServerStats
+* *.c, *.h: rename now to CurrentTime
+* listener.h, listener.c: new files for listener ports
+* include/ircd_defs.h: new file for global definitions (HOSTLEN, USERLEN)
+* struct.h: add local_flag to client struct, to make local/remote detection simpler
+* s_bsd.c (read_message): split out separate versions for select and poll
+* s_bsd.h, various source files: remove the rest of the unix domain socket 
+    support this removes a number of comparisons that were unneeded in 
+    code that should run reasonably fast.
+* os_*.c, res.c, ircd_osdep.h: add os_recvfrom_nonb for resolver
+* os_*.c, s_bsd.c, s_auth.c, ircd_osdep.h: add os_get_sockname, os_get_peername
+* bsd.h, bsd.c: merge into s_bsd
+* ircd_osdep.h, os_generic.c, os_linux.c, ircd_osdep.h: move os variable stuff
+    to separate compilation units, os generic contains the original code
+    (start here). 
+* s_bsd.c, send.c, struct.h: remove pyr (pyramid) finally
+* res.h, res.c, s_misc.c: cleanup headers/dependencies in res.h
+* match.h: include sys/types.h before netinet/in.h, broken BSD system headers
+* ircd/Makefile.in: remove CFLAGS from link line, use LDFLAGS instead
+* ircd.c: add missing include for sys/socket.h
+* common.h (strChattr, strCasediff): remove pointless non-portable inline
+    decls. The functions are complex enough that inlining just bloats the code
+* ircd_xopen.h, ircd_xopen.c, s_user.c, s_serv.c: porting layer for crypt and
+    other xopen library calls, moved crypt to ircd_xopen.
+* s_uping.c, s_uping.h, s_bsd.c, s_misc.c, s_bsd.h, ircd.c, s_debug.c:
+    Removed s_ping. There are much better tools available that actually work
+    correctly. The s_ping code was a waste of resources, and has historically
+    given incorrect results (it never worked correctly).
+* ircd/s_bsd.c, res.c, s_user.c, s_serv.c: little fixups to allow code to
+    build on Solaris, still have some warnings there.
+    TODO: wrap crypt and things that depend on _XOPEN_SOURCE in their own
+    file so it doesn't bother the network code.
+* ircd/s_bsd.c: cast option arg to const char* for setsockopt (solaris)
+* ircd/Makefile.in: removed hard coded dependencies for hash.o chkconfig.o,
+    let the automatic stuff take care of it, it does it better than humans.
+* *.c *.h: remove register keywords, attribute macro junk, cleanup
+    dependencies, rename MIN and MAX to IRCD_MIN IRCD_MAX all headers in
+    C files are sorted, removed as many duplicate includes as I could find
+    (dozens) general cleanups. Mutter the correct runes to get the protoype
+    for crypt included where it was needed.
+* *.c *.h: dependency cleanups up to querycmds.c
+* ircd.c, bsd.c, s_bsd.c: move signal handling code to ircd_signal.c
+* ircd_signal.c, ircd_signal.h: new files, use only POSIX signals remove
+    support for unreliable signals.
+* *.h *.c: include guards, dependency cleanups
+* Configure.in, setup-sh.in: include guards, config.h includes setup.h
+    add config dir to include path
+* sys.h: include guards, remove hard coded path to config.h
+* s_user.c (hunt_server): fix logic bug
+* numnicks.c (SetServerYXX): fix off by one error
+* multiple files (n2k patch): add code to handle extended numerics
diff --git a/doc/readme.asll b/doc/readme.asll
new file mode 100644 (file)
index 0000000..a48470b
--- /dev/null
@@ -0,0 +1,25 @@
+AsLL preliminary documentation, last updated 13 Jun 2002
+
+Server-to-server ping format:
+
+<prefix> G !<local-ts> <target> <local-ts>
+
+prefix = origin server numeric
+local-ts = local timestamp, as "seconds.miliseconds"
+target = target server numeric
+
+The local-ts is also sent instead of the origin field,
+so RTT information can be collected from non-AsLL servers,
+while preserving backward compatibility.
+
+
+Server-to-server pong format:
+
+<prefix> Z <origin> <target> <remote-ts> <diff> <local-ts>
+
+prefix = origin server numeric
+origin = origin server numeric
+target = target server numeric
+remote-ts = remote timestamp as received from an AsLL PING
+diff = difference between local-ts and remote-ts in miliseconds (integer)
+local-ts = local timestamp, as "seconds.miliseconds"
index 5d9aea641d87b75f8cd66407061a6bec55861190..597f458cd9af6597eccd8a086fdaa0351f575d55 100644 (file)
@@ -1,7 +1,9 @@
 Many of the old compile-time options are now configured through the
 server configuration file, ircd.conf.  This file is intended to
 document each of these features.  Logging, although also configured
-through the use of F-lines, is documented in doc/readme.log.
+through the use of F-lines, is documented in doc/readme.log.  NOTE
+THAT THESE NAMES ARE CASE SENSITIVE!  Values are not case sensitive
+unless stated otherwise in the documentation for that feature.
 
 DOMAINNAME
  * Type: string
@@ -126,6 +128,13 @@ MOTD_BANNER
 If you enable NODEFAULTMOTD, this specifies a one-line banner to be sent
 to the client in addition to the instructions mentioned above.
 
+PROVIDER
+ * Type: string
+ * Default: NULL
+
+This string as added to the 001 numeric prefixed with "via" before the nick.
+It's used for providing promotional space to providers as per CFV-202
+
 KILL_IPMISMATCH
  * Type: boolean
  * Default: FALSE
@@ -223,7 +232,7 @@ number of clients" / 25.
 
 HOST_HIDING
  * Type: boolean
- * Default: FALSE
+ * Default: TRUE
 
 This selects whether local users can set umode +x, thus allowing them
 to hide their hostname if they have also registered with a channel
@@ -242,6 +251,20 @@ HIDDEN_IP
 This selects a fake IP to be shown on /USERIP and /WHO %i when the
 target has a hidden host (see HOST_HIDING).
 
+AUTOHIDE
+ * Type: boolean
+ * Default: TRUE
+
+If enabled, local users get umode +x by default when they connect.
+
+CONNEXIT_NOTICES
+ * Type: boolean
+ * Default: FALSE
+
+This feature controls the generation of server notices when a user
+connects to or disconnects from the server.  Enabling this feature may
+have a performance impact.
+
 KILLCHASETIMELIMIT
  * Type: integer
  * Default: 30
@@ -606,6 +629,20 @@ OPER_LOPMODE
 This selects whether global IRC operators on this server are permitted
 to use /OPMODE and /CLEARMODE on local ("&") channels.
 
+OPER_FORCE_OPMODE
+ * Type: boolean
+ * Default: TRUE
+
+This selects whether global IRC operators on this server are permitted
+to override Q-lines set for /OPMODE and /CLEARMODE on ordinary ("#") channels
+
+OPER_FORCE_LOPMODE
+ * Type: boolean
+ * Default: TRUE
+
+This selects whether global IRC operators on this server are permitted
+to override Q-lines set for /OPMODE and /CLEARMODE on local ("&") channels
+
 OPER_BADCHAN
  * Type: boolean
  * Default: FALSE
@@ -703,6 +740,13 @@ LOCOP_LOPMODE
 This selects whether local IRC operators are permitted to use /OPMODE
 and /CLEARMODE on local ("&") channels.
 
+LOCOP_FORCE_LOPMODE
+ * Type: boolean
+ * Default: TRUE
+
+This selects whether local IRC operators on this server are permitted
+to override Q-lines set for /OPMODE and /CLEARMODE on local ("&") channels
+
 LOCOP_LBADCHAN
  * Type: boolean
  * Default: FALSE
@@ -743,3 +787,290 @@ LOCOP_LIST_CHAN
 This selects whether local IRC operators are permitted to list secret 
 (+s) channels.
 
+HIS_MAP
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /MAP from users.
+
+HIS_SNOTICES
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server notices from users.
+HIS_SNOTICES_OPER_ONLY
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server notices from users.
+HIS_DESYNCS
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server wallops from users.
+
+HIS_DEBUG_OPER_ONLY
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server wallops from users.
+
+HIS_WALLOPS
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes operator wallops from users.
+
+HIS_LINKS
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /LINKS from users.
+
+HIS_TRACE
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /TRACE from users.
+
+HIS_STATS_l
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS l from users.
+
+HIS_STATS_c
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS c from users.
+
+HIS_STATS_g
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS g from users.
+
+HIS_STATS_h
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS h from users.
+
+HIS_STATS_k
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS k from users.
+
+HIS_STATS_f
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS f from users.
+
+HIS_STATS_i
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS i from users.
+
+HIS_STATS_j
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS j from users.
+
+HIS_STATS_M
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS M from users.
+
+HIS_STATS_m
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS m from users.
+
+HIS_STATS_o
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS o from users.
+
+HIS_STATS_p
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS p from users.
+
+HIS_STATS_q
+ * Type: boolean
+ * Default: TRUE
+As per UnderNet CFV-165, this removes /STATS q from users.
+
+HIS_STATS_r
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS r from users.
+
+HIS_STATS_d
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS d from users.
+
+HIS_STATS_e
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS e from users.
+
+HIS_STATS_t
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS t from users.
+
+HIS_STATS_T
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS T from users.
+
+HIS_STATS_u
+ * Type: boolean
+ * Default: FALSE
+
+As per UnderNet CFV-165, this allows users to perform /STATS u.
+
+HIS_STATS_U
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS U from users.
+
+HIS_STATS_v
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS v from users.
+
+HIS_STATS_w
+ * Type: boolean
+ * Default: FALSE
+
+As per UnderNet CFV-165, this allows users to perform /STATS w.
+
+HIS_STATS_x
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS x from users.
+
+HIS_STATS_y
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS y from users.
+
+HIS_STATS_z
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes /STATS z from users.
+
+HIS_WHOIS_SERVERNAME
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server names in replies to /WHOIS.
+
+HIS_WHOIS_IDLETIME
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes idle time in replies to /WHOIS.
+
+HIS_WHO_SERVERNAME
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server names in replies to /WHO.
+
+HIS_WHO_HOPCOUNT
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this replaces hopcount to a static 3 in replies to /WHO.
+
+HIS_BANWHO
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this doesn't show which server set a ban.
+
+HIS_KILLWHO
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this doesn't show which server or oper performed a
+kill.
+
+HIS_REWRITE
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this remaps remote numerics to come from the local
+server.
+
+HIS_REMOTE
+ * Type: integer
+ * Default: 1
+
+As per UnderNet CFV-165, this disallows remote queries. (*sob!*)
+
+HIS_NETSPLIT
+ * Type: boolean
+ * Default: TRUE
+
+As per UnderNet CFV-165, this removes server names in net break sign-offs.
+
+HIS_SERVERNAME
+ * Type: string
+ * Default: "*.undernet.org"
+
+As per UnderNet CFV-165, this is the "name" of the server shown to users on a
+/WHOIS of another user.
+
+HIS_SERVERINFO
+ * Type: string
+ * Default: "The Undernet Underworld"
+
+As per UnderNet CFV-165, this is the "info" of the server shown to users on a
+/WHOIS of another user.
+
+HIS_URLSERVERS        
+ * Type: string 
+ * Default: "http://www.undernet.org/servers.php"
+
+As per UnderNet CFV-165, this is the URL shown to users when they do a /MAP or 
+/LINKS.
+
+NETWORK
+ * Type: string
+ * Default: "UnderNet"
+
+This defines the network name as reported in the 005 "supported features"
+numeric, and as used by the "Failed to deliver" message.
+
+URL_CLIENTS
+ * Type: string
+ * Default: "ftp://ftp.undernet.org/pub/irc/clients"
+
+This defines a URL that users may visit to find compatible IRC clients.
index f1ac51f0ec48ac184c0f4c639c0d60ac484648a9..d4bfe70326837922f358b777c971bcce09ccb4ba 100644 (file)
@@ -160,7 +160,7 @@ Logging to Syslog
 
 By default, except for the CONFIG subsystem, no logs are sent to
 syslog.  This can be overridden using an F-line like
-"F:LOG:<subsys>:SYSLOG:<facility>"; <subsys>, as above, should be
+"F:LOG:<subsys>:FACILITY:<facility>"; <subsys>, as above, should be
 replaced with one of the subsystem names described above, and
 <facility> must be one of the facility strings mentioned under
 "Default Syslog Facility."  The facility string may also be "NONE," to
index d12072c6b4489b57dbe28cb2208cd9ddb7d62588..96c878aeeceb78092ce1a380135eccbb949f6fd8 100644 (file)
@@ -348,6 +348,7 @@ extern void remove_user_from_all_channels(struct Client* cptr);
 extern int is_chan_op(struct Client *cptr, struct Channel *chptr);
 extern int is_zombie(struct Client *cptr, struct Channel *chptr);
 extern int has_voice(struct Client *cptr, struct Channel *chptr);
+extern int IsInvited(struct Client* cptr, struct Channel* chptr);
 extern void send_channel_modes(struct Client *cptr, struct Channel *chptr);
 extern char *pretty_mask(char *mask);
 extern void del_invite(struct Client *cptr, struct Channel *chptr);
index 55abeaa2a3e71ee364f0078d40539f73a384d707..bbd483eff6c31278bce09da7604c9763f30166e0 100644 (file)
@@ -85,7 +85,6 @@ struct Client;
 
 
 extern int m_admin(struct Client*, struct Client*, int, char*[]);
-extern int ms_asll(struct Client*, struct Client*, int, char*[]);
 extern int m_away(struct Client*, struct Client*, int, char*[]);
 extern int m_cnotice(struct Client*, struct Client*, int, char*[]);
 extern int m_cprivmsg(struct Client*, struct Client*, int, char*[]);
@@ -173,6 +172,7 @@ extern int mr_pong(struct Client*, struct Client*, int, char*[]);
 extern int mr_server(struct Client*, struct Client*, int, char*[]);
 extern int ms_account(struct Client*, struct Client*, int, char*[]);
 extern int ms_admin(struct Client*, struct Client*, int, char*[]);
+extern int ms_asll(struct Client*, struct Client*, int, char*[]);
 extern int ms_away(struct Client*, struct Client*, int, char*[]);
 extern int ms_burst(struct Client*, struct Client*, int, char*[]);
 extern int ms_clearmode(struct Client*, struct Client*, int, char*[]);
index 04b9074c06463c99cb661cecabcabeafb068cf6f..14978fd8c74692fd37d5a2d1572dd67079d3ba68 100644 (file)
  * revision. Every server on a given network must also use the same sizes.
  */
 
-/*
- * NETWORK is the name the server claims the network is
- */
-#define NETWORK "UnderNet"
-
-/* 
- * URL_CLIENTS is a URL to where to find compatible clients
- */
-#define URL_CLIENTS "ftp://ftp.undernet.org/pub/irc/clients"
-
 /*
  * NICKLEN is the maximum length allowed for a nickname
  *
diff --git a/include/ircd_policy.h b/include/ircd_policy.h
deleted file mode 100644 (file)
index 1576435..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * IRC - Internet Relay Chat, include/ircd_policy.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 2, 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$
- */
-#ifndef INCLUDED_ircd_policy_h
-#define INCLUDED_ircd_policy_h
-
-/* This file contains undernet admin policy decisions, even if they are
- * braindead and silly.  These aren't configurable as they are network
- * policy, and should not be changed (depending on what network your 
- * on different ones of these should be defined
- */
-
-/* If you want nothing to do with this nonsense, uncomment this or
- *  add -DNO_HEAD_IN_SAND to CFLAGS. */
-/* #define NO_HEAD_IN_SAND */
-
-#ifndef NO_HEAD_IN_SAND
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 1) Removal of server notices from users
- *
- * This is implemented as disallowing users from setting +s
- */
-#define HEAD_IN_SAND_SNOTICES
-#define SERVNOTICE_OPER_ONLY
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- * 
- * 2) Removal of server wallops from users
- *
- * This is implemented by making all server wallops DESYNC's, and removing
- * +g from normal users.
- */
-#define HEAD_IN_SAND_DESYNCS
-#define DEBUG_OPER_ONLY
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- * 
- * 3) Removal of operator wallops from users
- *
- * This is implemented as disallowing users from setting +w
- */
-#define HEAD_IN_SAND_WALLOPS
-/* #define WALLOPS_OPER_ONLY */
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 5) Removal of /MAP from users.
- *
- */
-#define HEAD_IN_SAND_MAP
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- * 
- * 6) Removal of links from users
- */
-#define HEAD_IN_SAND_LINKS
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 7) Restrict the output of LINKS to only display known leaves.
- */
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 8) Removal of /TRACE from users.
- */
-#define HEAD_IN_SAND_TRACE
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 9-13) Removal of various stats from non users
- */
-#define HEAD_IN_SAND_STATS_L
-#define HEAD_IN_SAND_STATS_C
-#define HEAD_IN_SAND_STATS_G
-#define HEAD_IN_SAND_STATS_H
-#define HEAD_IN_SAND_STATS_K
-#define HEAD_IN_SAND_STATS_F
-#define HEAD_IN_SAND_STATS_I
-#define HEAD_IN_SAND_STATS_M
-#define HEAD_IN_SAND_STATS_m
-#define HEAD_IN_SAND_STATS_O
-#define HEAD_IN_SAND_STATS_P
-#define HEAD_IN_SAND_STATS_R
-#define HEAD_IN_SAND_STATS_D
-#define HEAD_IN_SAND_STATS_d
-#define HEAD_IN_SAND_STATS_E
-#define HEAD_IN_SAND_STATS_t
-#define HEAD_IN_SAND_STATS_T
-#define HEAD_IN_SAND_STATS_U
-#undef  HEAD_IN_SAND_STATS_u
-#undef  HEAD_IN_SAND_STATS_W
-#define HEAD_IN_SAND_STATS_X
-#define HEAD_IN_SAND_STATS_Y
-#define HEAD_IN_SAND_STATS_Z
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- * 14) Removal of server names in net break sign-offs.
- */
-
-#define HEAD_IN_SAND_NETSPLIT
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- * 
- * 15) Removal of server names in replies to /WHOIS
- */
-
-#define HEAD_IN_SAND_WHOIS_SERVERNAME
-#define HEAD_IN_SAND_WHOIS_IDLETIME
-#define HEAD_IN_SAND_WHO_SERVERNAME
-#define HEAD_IN_SAND_WHO_HOPCOUNT
-
-/* CFV-165 - Hiding Nonessential information from non-opers
- *
- */
-
-/* don't show which server set a ban */
-#define HEAD_IN_SAND_BANWHO
-
-/* Don't show which server or oper performed a kill */
-#define HEAD_IN_SAND_KILLWHO
-
-/* remap remote numerics to come from the local server */
-#define HEAD_IN_SAND_REWRITE
-
-/* disallow remote queries (*sob!*) */
-/* (note, set this to 0 to reenable, not undef */
-#define HEAD_IN_SAND_REMOTE 1
-#else /* NO_HEAD_IN_SAND */
-#define HEAD_IN_SAND_REMOTE 0
-#endif /* NO_HEAD_IN_SAND */
-
-#define HEAD_IN_SAND_SERVERNAME "*.undernet.org"
-#define HEAD_IN_SAND_SERVERINFO "The Undernet Underworld"
-
-#define URL_SERVERS "http://www.undernet.org/servers.php"
-
-#endif /* INCLUDED_ircd_policy_h */
-
-
-
-
-
-
-
-
index e59788d5dcd0b7c8bfc89678f2a8cff1375d4d59..795d33b9cd0893b5ceecbe7d176e1fd1952e0980 100644 (file)
@@ -71,5 +71,6 @@ extern void jupe_free(struct Jupe *jupe);
 extern void jupe_burst(struct Client *cptr);
 extern int jupe_resend(struct Client *cptr, struct Jupe *jupe);
 extern int jupe_list(struct Client *sptr, char *server);
+extern int jupe_memory_count(size_t *ju_size);
 
 #endif /* INCLUDED_jupe_h */
index b7b5535dd5e93ab05d8a193fc75e590500f33bcd..cde01bb227c57a1bb2b9aae551128204f43a5b87 100644 (file)
@@ -37,17 +37,6 @@ struct iovec;
 struct Client;
 struct StatDesc;
 
-struct MsgCounts {
-  int alloc;
-  int used;
-};
-
-/*
- * These should be considered read-only
- */
-extern struct MsgCounts msgBufCounts;  /* resource count for struct MsgBuf */
-extern struct MsgCounts msgCounts;     /* resource count for struct Msg */
-
 struct Msg;
 struct MsgBuf;
 
index ec3807972d009437166c3996e925326f07b87601..72c5b5109b434485339beae6ef2ee737b2b943fa 100644 (file)
@@ -113,6 +113,7 @@ extern const struct Numeric* get_error_numeric(int err);
        RPL_STATSGLINE       227           Dalnet 
        RPL_STATSVLINE       227           unreal */
 #define RPL_STATSQLINE       228        /* Undernet extension */
+
 #define RPL_SERVICEINFO      231       /* unused */
 #define RPL_ENDOFSERVICES    232       /* unused */
 /*     RPL_RULES            232        unreal */
@@ -304,6 +305,7 @@ extern const struct Numeric* get_error_numeric(int err);
 /*      RPL_USERS            393        Dalnet/EFnet/IRCnet */
 /*      RPL_END_USERS        394        Dalnet/EFnet/IRCnet */
 /*      RPL_NOUSERS          395        Dalnet/EFnet/IRCnet */
+#define RPL_HOSTHIDDEN       396       /* UMODE +x completed succesfuly */
 
 /*
  * Errors are in the range from 400-599 currently and are grouped by what
index 967aeac441dc7ecf9c4e6ad902519608b703fc61..2298fa3c5cd0f7cc3062e26877009ed4c11c42db 100644 (file)
@@ -24,6 +24,9 @@
 
 #ifndef INCLUDED_s_stats_h
 #define INCLUDED_s_stats_h
+#ifndef INCLUDED_features_h
+#include "ircd_features.h"
+#endif
 
 struct Client;
 
@@ -50,10 +53,6 @@ struct StatDesc
 extern struct StatDesc statsinfo[];
 extern struct StatDesc *statsmap[];
 
-extern void report_stats(struct Client *sptr, char stat);
-extern void report_configured_links(struct Client *sptr, int mask);
-extern int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat, int MustBeOper);
-
 extern void stats_init(void);
 
 #endif /* INCLUDED_s_stats_h */
index 2aeed4a358b62d94907ad7d101b73f162fe0b8b7..0edee0dcda0fc516c9a27cda18ab2cacf0477d4b 100644 (file)
@@ -251,7 +251,7 @@ version.c: version.c.SH s_serv.c s_user.c channel.c s_bsd.c s_misc.c ircd.c \
 ircd_string.o: ircd_string.c chattr.tab.c
 
 table_gen: table_gen.o
-       ${CC} -o $@ table_gen.o
+       ${CC} ${LDFLAGS} -o $@ table_gen.o
 
 chattr.tab.c: table_gen
        ./table_gen > chattr.tab.c
index 01bd0a3bb6fd34292984b4fcdff2806c838ed09e..a0159ef076ee9dc3a9c785cf16080fcbc0f54409 100644 (file)
@@ -303,8 +303,6 @@ engine_loop(struct Generators* gen)
        }
       }
 
-      /* assert(!(pollfdList[i].revents & POLLERR)); */
-
 #ifdef POLLHUP
       if (pollfdList[i].revents & POLLHUP) { /* hang-up on socket */
        Debug((DEBUG_ENGINE, "poll: EOF from client (POLLHUP)"));
index 27d56ba3d48d62fbab8c46a21f3804b32b5d5e8b..5888513a7b965406965457d9533caf4b67322276 100644 (file)
@@ -50,6 +50,7 @@
 #include "s_conf.h"
 #include "s_debug.h"
 #include "s_misc.h"
+#include "s_stats.h"
 #include "send.h"
 #include "sys.h"
 #include "uping.h"
@@ -665,6 +666,8 @@ int main(int argc, char **argv) {
 
   uping_init();
 
+  stats_init();
+
   IPcheck_init();
   timer_add(timer_init(&connect_timer), try_connections, 0, TT_RELATIVE, 1);
   timer_add(timer_init(&ping_timer), check_pings, 0, TT_RELATIVE, 1);
index f0ad61081167a0d8707bb18198cbd14d87919fd2..ccbd9fe2a61f22fe06f4aa1d5cecc6ac7632fb2a 100644 (file)
@@ -381,6 +381,7 @@ static struct FeatureDesc {
   /* Misc. random stuff */
   F_S(NETWORK, 0, "UnderNet", 0),
   F_S(URL_CLIENTS, 0, "ftp://ftp.undernet.org/pub/irc/clients", 0),
+
 #undef F_S
 #undef F_B
 #undef F_I
@@ -397,7 +398,7 @@ feature_desc(struct Client* from, const char *feature)
   assert(0 != feature);
 
   for (i = 0; features[i].type; i++) /* find appropriate descriptor */
-    if (!ircd_strcmp(feature, features[i].type))
+    if (!strcmp(feature, features[i].type))
       return &features[i];
 
   Debug((DEBUG_ERROR, "Unknown feature \"%s\"", feature));
index 2b5992688bfab1c8886711a7b4bf5e95a8fed478..49541e4e0d38f0fec482588d5fdde5d6df014faa 100644 (file)
@@ -30,8 +30,8 @@
 #include "hash.h"
 #include "ircd.h"
 #include "ircd_chattr.h"
-#include "ircd_reply.h"
 #include "ircd_features.h"
+#include "ircd_reply.h"
 #include "ircd_string.h"
 #include "match.h"
 #include "msg.h"
index aa795ed8a09dafafd0968907a6287a4a4f9b092d..9a7cfe817e76977af5a9b7dc91467df76594a520 100644 (file)
@@ -90,6 +90,7 @@
 #include "send.h"
 
 #include <assert.h>
+#include <string.h>
 
 /*
  * ms_account - server message handler
index ac164d2d97639bfbc85d8d41f9afbdc17078c08c..2ac76521712d9ad48cbba7d0b80008449e04cd55 100644 (file)
@@ -299,17 +299,15 @@ mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     force = 1;
   }
 
-  clean_channelname(parv[1]);
-
   if (!HasPriv(sptr,
-              IsLocalChannel(parv[1]) ? PRIV_LOCAL_OPMODE : PRIV_OPMODE))
+              IsLocalChannel(chname) ? PRIV_LOCAL_OPMODE : PRIV_OPMODE))
     return send_reply(sptr, ERR_NOPRIVILEGES);
 
   if (('#' != *chname && '&' != *chname) || !(chptr = FindChannel(chname)))
     return send_reply(sptr, ERR_NOSUCHCHANNEL, chname);
+
   if (!force && (qreason = find_quarantine(chptr->chname)))
     return send_reply(sptr, ERR_QUARANTINED, chptr->chname, qreason);
 
-
   return do_clearmode(cptr, sptr, chptr, control);
 }
index f496aae1a49c87edf803bb9f831a9fa95b063500..b66b4c8d41557c9297b8f1af9cd3f938407b6b22 100644 (file)
@@ -138,9 +138,6 @@ int ms_create(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
                                      "SETTIME to correct this",
                                     cli_user(sptr)->server,
                                     chanTS - TStime());
-    /* If this server is >5 minutes fast, squit it */
-    if (TStime() - chanTS<-5*60*60)
-      return exit_client(sptr, sptr, &me, "Timestamp Drift/Bogus TS");
     /* Now issue a SETTIME to resync.  If we're in the wrong, our
      * (RELIABLE_CLOCK) hub will bounce a SETTIME back to us.
      */
@@ -151,7 +148,6 @@ int ms_create(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   joinbuf_init(&join, sptr, cptr, JOINBUF_TYPE_JOIN, 0, 0);
   joinbuf_init(&create, sptr, cptr, JOINBUF_TYPE_CREATE, 0, chanTS);
 
-  
   /* For each channel in the comma seperated list: */
   for (name = ircd_strtok(&p, parv[1], ","); name;
        name = ircd_strtok(&p, 0, ",")) {
@@ -187,7 +183,7 @@ int ms_create(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
       chptr->creationtime = chanTS;
 
     joinbuf_join(badop ? &join : &create, chptr,
-                (badop || CHFL_CHANOP));
+                (badop ? 0 : CHFL_CHANOP));
   }
 
   joinbuf_flush(&join); /* flush out the joins and creates */
index cee85ac400df69597cf3903a97ca4589efdbc12a..027d88e90e5144d370161d8e198fd069d84de489 100644 (file)
@@ -131,7 +131,7 @@ ms_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   if (*mask == '!')
   {
     mask++;
-    flags |= GLINE_OPERFORCE;
+    flags |= GLINE_OPERFORCE; /* assume oper had WIDE_GLINE */
   }
 
   if ((parc == 3 && *mask == '-') || parc == 5)
@@ -151,6 +151,9 @@ ms_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   else
     return need_more_params(sptr, "GLINE");
 
+  if (IsServer(sptr))
+    flags |= GLINE_FORCE;
+
   if (!(target[0] == '*' && target[1] == '\0')) {
     if (!(acptr = FindNServer(target)))
       return 0; /* no such server */
@@ -296,11 +299,11 @@ mo_gline(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   if (!(flags & GLINE_LOCAL) && !feature_bool(FEAT_CONFIG_OPERCMDS))
     return send_reply(sptr, ERR_DISABLED, "GLINE");
 
-  agline = gline_find(mask, GLINE_ANY | GLINE_EXACT);
-
   if (!HasPriv(sptr, (flags & GLINE_LOCAL ? PRIV_LOCAL_GLINE : PRIV_GLINE)))
     return send_reply(sptr, ERR_NOPRIVILEGES);
 
+  agline = gline_find(mask, GLINE_ANY | GLINE_EXACT);
+
   if (agline) {
     if (GlineIsLocal(agline) && !(flags & GLINE_LOCAL)) /* global over local */
       gline_free(agline);
index 4aed6113a294baf7873357eee5f5198eb08e4b38..86d966c75b3bfcffab84c98c4612d24ca3fef213 100644 (file)
@@ -235,8 +235,9 @@ int ms_kick(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
                          comment);
 
     if (member) { /* and tell the channel about it */
-      sendcmdto_channel_butserv_butone(sptr, CMD_KICK, chptr, NULL, "%H %C :%s", chptr, who,
-                               comment);
+      sendcmdto_channel_butserv_butone(IsServer(sptr) ? &me : sptr, CMD_KICK,
+                                      chptr, NULL, "%H %C :%s", chptr, who,
+                                      comment);
 
       make_zombie(member, who, cptr, sptr, chptr);
     }
index 04092359e92d324a6ddf5efc7975a87adb1863b4..07c562b4439856ed23fc4b570ce741ee1090c5d0 100644 (file)
@@ -83,7 +83,7 @@
 
 #include "client.h"
 #include "ircd.h"
-#include "ircd_policy.h"
+#include "ircd_features.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
 #include "msg.h"
index fb9897f01c103d7cd079383b367650119e7c8c7b..617b4822b14c0afcea4664eeb12166b21da3bbf6 100644 (file)
@@ -84,7 +84,7 @@
 #include "client.h"
 #include "ircd.h"
 #include "ircd_defs.h"
-#include "ircd_policy.h"
+#include "ircd_features.h"
 #include "ircd_reply.h"
 #include "ircd_snprintf.h"
 #include "ircd_string.h"
index 48e022c2cf0160e33f50d1c94629de90c8af9926..e986e2db34859fac978d3bcc386a112804b179e4 100644 (file)
@@ -362,6 +362,17 @@ int ms_nick(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
       return 0;
   }
   /* now we know we have a real collision. */
+  /*
+   * Note: From this point forward it can be assumed that
+   * acptr != sptr (point to different client structures).
+   */
+  assert(acptr != sptr);
+  /*
+   * If the older one is "non-person", the new entry is just
+   * allowed to overwrite it. Just silently drop non-person,
+   * and proceed with the nick. This should take care of the
+   * "dormant nick" way of generating collisions...
+   */
   if (IsUnknown(acptr) && MyConnect(acptr))
   {
     ServerStats->is_ref++;
index aab68f51d22e7a1e0379a8612cb822a1637d7e51..0c4bbe19651bbe0e77c09799b0260494d012e8b3 100644 (file)
@@ -165,8 +165,8 @@ int mo_opmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (!IsChannelName(chname) || !(chptr = FindChannel(chname)))
     return send_reply(sptr, ERR_NOSUCHCHANNEL, chname);
 
-  if (!(member = find_member_link(chptr, sptr)))
-    return send_reply(sptr, ERR_NOTONCHANNEL, chptr->chname);
+  if (!force && (qreason = find_quarantine(chptr->chname)))
+    return send_reply(sptr, ERR_QUARANTINED, chptr->chname, qreason);
 
   modebuf_init(&mbuf, sptr, cptr, chptr,
               (MODEBUF_DEST_CHANNEL | /* Send MODE to channel */
index 1d257e31c13321e7e3158388d2d134dfb1971f03..4427cbf0c95d44213531aa0abe1d8ff7d329aa38 100644 (file)
@@ -201,7 +201,7 @@ int mo_privmsg(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   assert(cptr == sptr);
   assert(0 != cli_user(sptr));
 
-  ClrFlag(cptr, FLAG_TS8);
+  ClrFlag(sptr, FLAG_TS8);
 
   if (feature_bool(FEAT_IDLE_FROM_MSG))
     cli_user(sptr)->last = CurrentTime;
index 6240b52c1f8c151cbe4672cd70fa99245be78602..f770258ab3ce382991e1727382fc3422914fbb0e 100644 (file)
@@ -113,15 +113,16 @@ int ms_settime(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   static char tbuf[11];
   struct DLink *lp;
 
-  if (parc < 2)
+  if (parc < 2) /* verify argument count */
     return need_more_params(sptr, "SETTIME");
 
-  t = atoi(parv[1]);
+  t = atoi(parv[1]); /* convert time and compute delta */
   dt = TStime() - t;
 
+  /* verify value */
   if (t < OLDEST_TS || dt < -9000000)
   {
-    if (IsServer(sptr))
+    if (IsServer(sptr)) /* protocol violation if it's from a server */
       protocol_violation(sptr, "SETTIME: Bad value (%Tu, delta %l)", t, dt);
     else
       sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :SETTIME: Bad value (%Tu, "
@@ -137,7 +138,7 @@ int ms_settime(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     parv[1] = tbuf;
   }
 
-  if (BadPtr(parv[2]))
+  if (BadPtr(parv[2])) /* spam the network */
   {
     for (lp = cli_serv(&me)->down; lp; lp = lp->next)
       if (cptr != lp->value.cptr)
@@ -172,7 +173,7 @@ int ms_settime(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
                    (dt < 0) ? -dt : dt, (dt < 0) ? "forwards" : "backwards");
     }
   }
-  else
+  else /* tell opers about time change */
   {
     sendto_opmask_butone(0, SNO_OLDSNO, "SETTIME from %s, clock is set %ld "
                         "seconds %s", cli_name(sptr), (dt < 0) ? -dt : dt,
@@ -208,13 +209,14 @@ int mo_settime(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (!IsOper(sptr))
     return send_reply(sptr, ERR_NOPRIVILEGES);
 
-  if (parc < 2)
+  if (parc < 2) /* verify argument count */
     return need_more_params(sptr, "SETTIME");
 
-  if (parc == 2 && MyUser(sptr))
+  if (parc == 2 && MyUser(sptr)) /* default to me */
     parv[parc++] = cli_name(&me);
 
-  t = atoi(parv[1]);
+  t = atoi(parv[1]); /* convert the time */
+
   /* If we're reliable_clock or if the oper specified a 0 time, use current */
   if (!t || feature_bool(FEAT_RELIABLE_CLOCK))
   {
@@ -223,35 +225,36 @@ int mo_settime(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     parv[1] = tbuf;
   }
 
-  dt = TStime() - t;
+  dt = TStime() - t; /* calculate the delta */
 
-  if (t < OLDEST_TS || dt < -9000000)
+  if (t < OLDEST_TS || dt < -9000000) /* verify value */
   {
     sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :SETTIME: Bad value", sptr);
     return 0;
   }
 
+  /* OK, send the message off to its destination */
   if (hunt_server_prio_cmd(sptr, CMD_SETTIME, cptr, 1, "%s %C", 2, parc,
                            parv) != HUNTED_ISME)
     return 0;
 
-  if (feature_bool(FEAT_RELIABLE_CLOCK))
+  if (feature_bool(FEAT_RELIABLE_CLOCK)) /* don't apply settime--reliable */
   {
     if ((dt > 600) || (dt < -600))
       sendcmdto_serv_butone(&me, CMD_DESYNCH, 0, ":Bad SETTIME from %s: %Tu "
                             "(delta %l)", cli_name(sptr), t, dt);
-    if (IsUser(sptr))
+    if (IsUser(sptr)) /* Let user know we're ignoring him */
       sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :clock is not set %ld seconds "
                     "%s: RELIABLE_CLOCK is defined", sptr, (dt < 0) ? -dt : dt,
                     (dt < 0) ? "forward" : "backward");
   }
-  else
+  else /* tell opers about time change */
   {
     sendto_opmask_butone(0, SNO_OLDSNO, "SETTIME from %s, clock is set %ld "
                         "seconds %s", cli_name(sptr), (dt < 0) ? -dt : dt,
                         (dt < 0) ? "forwards" : "backwards");
-    TSoffset -= dt;
-    if (IsUser(sptr))
+    TSoffset -= dt; /* apply time change */
+    if (IsUser(sptr)) /* let user know what we did */
       sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :clock is set %ld seconds %s",
                    sptr, (dt < 0) ? -dt : dt,
                    (dt < 0) ? "forwards" : "backwards");
index 8611b21da67ff5aa403be095363d18e4a6ff34d4..c0282fec811f9d2252b0c24ea5c0f416929cb95f 100644 (file)
@@ -77,8 +77,6 @@ int ms_squit(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     acptr = FindNServer(server);
 
   if (!acptr) {
-    protocol_violation(sptr, "Issued SQUIT for unknown server %s (ignored)",
-                      server);
     Debug((DEBUG_NOTICE, "Ignoring SQUIT to an unknown server"));
     return 0;
   }
@@ -97,9 +95,6 @@ int ms_squit(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    */
   if ( timestamp != 0 && timestamp != cli_serv(acptr)->timestamp)
   {
-    protocol_violation(sptr, "Issued SQUIT for %C with wrong timestamp %Tu "
-                       "(%Tu) (ignored)", acptr, timestamp,
-                       cli_serv(acptr)->timestamp);
     Debug((DEBUG_NOTICE, "Ignoring SQUIT with the wrong timestamp"));
     return 0;
   }
index 694b11190eb633f9fdf432f7436cf4e6c40e76af..07f9ca649efc76284e4955c4dbb37d58dd5e8f9c 100644 (file)
@@ -97,7 +97,8 @@ static void userhost_formatter(struct Client* cptr, struct Client *sptr, struct
   msgq_append(0, mb, "%s%s=%c%s@%s", cli_name(cptr),
              HasPriv(cptr, PRIV_DISPLAY) ? "*" : "",
              cli_user(cptr)->away ? '-' : '+', cli_user(cptr)->username,
-             cli_user(cptr)->host);
+             HasHiddenHost(cptr) && !IsAnOper(sptr) ?
+             cli_user(cptr)->host : cli_user(cptr)->realhost);
 }
 
 /*
index 4aa3d860963535931bbe70ba923c04949d2663a1..b228f1775b16f61cb7b8fbf440e0ef68dd6c0f9d 100644 (file)
@@ -146,7 +146,7 @@ int ms_wallvoices(struct Client* cptr, struct Client* sptr, int parc, char* parv
     if (client_can_send_to_channel(sptr, chptr)) {
       sendcmdto_channel_butone(sptr, CMD_WALLVOICES, chptr, cptr,
                               SKIP_DEAF | SKIP_BURST | SKIP_NONVOICES, 
-                              "%H :%s", chptr, parv[parc - 1]);
+                              "%H :%s", chptr, parv[parc - 1]);
     } else
       send_reply(sptr, ERR_CANNOTSENDTOCHAN, parv[1]);
   }
index d66775bd6eceb9829b837816aaa16d3cfc4dee80..a9e68e2c3cd43a24a81f28314d23343d11b4d63a 100644 (file)
@@ -210,6 +210,10 @@ int m_who(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
         case 'R':
           matchsel |= WHO_FIELD_REN;
           continue;
+        case 'a':
+        case 'A':
+          matchsel |= WHO_FIELD_ACC;
+          continue;
       }
     if (ch == '%')
       while ((ch = *p++) && (ch != ','))
@@ -260,6 +264,10 @@ int m_who(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
           case 'U':
             fields |= WHO_FIELD_UID;
             break;
+          case 'a':
+          case 'A':
+            fields |= WHO_FIELD_ACC;
+            break;
           default:
             break;
         }
index 71a2b774e049a21e648a841d81b8856a759c44bd..5dda1a572a2edd3279c7e48ad4967595eb739e58 100644 (file)
@@ -186,7 +186,7 @@ static void do_whois(struct Client* sptr, struct Client *acptr, int parc)
   if (feature_bool(FEAT_HIS_WHOIS_SERVERNAME) && !IsAnOper(sptr) &&
       sptr != acptr)
     send_reply(sptr, RPL_WHOISSERVER, name, feature_str(FEAT_HIS_SERVERNAME),
-               feature_str(FEAT_HIS_SERVERNAME));
+               feature_str(FEAT_HIS_SERVERINFO));
   else
     send_reply(sptr, RPL_WHOISSERVER, name, cli_name(a2cptr),
               cli_info(a2cptr));
index 282bb5eaebfcc7e1212f23b9b42df31acf1db08f..010d631151a8497cedc6192f9861015fefb682be 100644 (file)
@@ -196,12 +196,10 @@ static void connect_dns_callback(void* vptr, struct DNSReply* reply)
 void close_connections(int close_stderr)
 {
   int i;
-#if 0
   close(0);
   close(1);
   if (close_stderr)
     close(2);
-#endif
   for (i = 3; i < MAXCONNECTIONS; ++i)
     close(i);
 }
@@ -727,11 +725,9 @@ static int read_packet(struct Client *cptr, int socket_ready)
    * For server connections, we process as many as we can without
    * worrying about the time of day or anything :)
    */
-  if (length <= 0)
-    ;
-  else if (IsServer(cptr))
+  if (length > 0 && IsServer(cptr))
     return server_dopacket(cptr, readbuf, length);
-  else if (IsConnecting(cptr)  || IsHandshake(cptr))
+  else if (length > 0 && (IsHandshake(cptr) || IsConnecting(cptr)))
     return connect_dopacket(cptr, readbuf, length);
   else
   {
@@ -740,9 +736,10 @@ static int read_packet(struct Client *cptr, int socket_ready)
      * it on the end of the receive queue and do it when its
      * turn comes around.
      */
-    if (dbuf_put(&(cli_recvQ(cptr)), readbuf, length) == 0)
+    if (length > 0 && dbuf_put(&(cli_recvQ(cptr)), readbuf, length) == 0)
       return exit_client(cptr, cptr, &me, "dbuf_put fail");
-    else if (DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD))
+
+    if (DBufLength(&(cli_recvQ(cptr))) > feature_int(FEAT_CLIENT_FLOOD))
       return exit_client(cptr, cptr, &me, "Excess Flood");
 
     while (DBufLength(&(cli_recvQ(cptr))) && !NoNewLine(cptr) && 
index a22745406dc7426ff3d9aea03bb6a1b4f55530e0..da1992964b3e5f18424b82108cfa64468ae236d7 100644 (file)
@@ -26,6 +26,7 @@
 #include "channel.h"
 #include "class.h"
 #include "client.h"
+#include "gline.h"
 #include "hash.h"
 #include "ircd_alloc.h"
 #include "ircd_features.h"
 #include "ircd_osdep.h"
 #include "ircd_reply.h"
 #include "ircd.h"
+#include "jupe.h"
 #include "list.h"
+#include "motd.h"
 #include "msgq.h"
 #include "numeric.h"
 #include "numnicks.h"
 #include "res.h"
 #include "s_bsd.h"
 #include "s_conf.h"
+#include "s_stats.h"
 #include "send.h"
 #include "struct.h"
 #include "sys.h"
@@ -357,6 +361,13 @@ void count_memory(struct Client *cptr, struct StatDesc *sd, int stat,
 
   totww = wwu * sizeof(struct User) + wwam + wwm;
 
+  motd_memory_count(cptr);
+
+  gl = gline_memory_count(&glm);
+  ju = jupe_memory_count(&jum);
+  send_reply(cptr, SND_EXPLICIT | RPL_STATSDEBUG,
+            ":Glines %d(%zu) Jupes %d(%zu)", gl, glm, ju, jum);
+
   send_reply(cptr, SND_EXPLICIT | RPL_STATSDEBUG,
             ":Hash: client %d(%zu), chan is the same", HASHSIZE,
             sizeof(void *) * HASHSIZE);
@@ -374,6 +385,9 @@ void count_memory(struct Client *cptr, struct StatDesc *sd, int stat,
             ":DBufs allocated %d(%zu) used %d(%zu)", DBufAllocCount,
             dbufs_allocated, DBufUsedCount, dbufs_used);
 
+  /* The DBuf caveats now count for this, but this routine now sends
+   * replies all on its own.
+   */
   msgq_count_memory(cptr, &msg_allocated, &msgbuf_allocated);
 
   rm = cres_mem(cptr);
index c2cbdd4b39310fb3cc0269070c6d7104f9bedfab..17f02ca282e118f2da435b8c8ddde5d701eda7ce 100644 (file)
@@ -488,7 +488,7 @@ static Numeric replyTable[] = {
 /* 227 */
   { 0 },
 /* 228 */
-  { 0 },
+  { RPL_STATSQLINE, "Q %s :%s", "228" },
 /* 229 */
   { 0 },
 /* 230 */
@@ -824,7 +824,7 @@ static Numeric replyTable[] = {
 /* 395 */
   { 0 },
 /* 396 */
-  { 0 },
+  { RPL_HOSTHIDDEN, "%s.%s :is now your hidden host", "396" },
 /* 397 */
   { 0 },
 /* 398 */
@@ -994,7 +994,7 @@ static Numeric replyTable[] = {
 /* 480 */
   { 0 },
 /* 481 */
-  { ERR_NOPRIVILEGES, ":Permission Denied: You're not an IRC operator", "481" },
+  { ERR_NOPRIVILEGES, ":Permission Denied: Insufficient privileges", "481" },
 /* 482 */
   { ERR_CHANOPRIVSNEEDED, "%s :You're not channel operator", "482" },
 /* 483 */
index cafbd57eb5e0aaf7b668f9e2c6ca91797005972f..766043286ef5dd312a743f50f500bb89d4b95f55 100644 (file)
@@ -31,8 +31,8 @@
 #include "hash.h"
 #include "ircd.h"
 #include "ircd_alloc.h"
+#include "ircd_features.h"
 #include "ircd_log.h"
-#include "ircd_policy.h"
 #include "ircd_reply.h"
 #include "ircd_snprintf.h"
 #include "ircd_string.h"
index d169a697cb2aa2ceeb143b6962069ad5ae902177..886abda90b3f392873b0014bd8602bfad46e0611 100644 (file)
@@ -504,7 +504,7 @@ stats_init(void)
   int i;
 
   /* Make darn sure the statsmap array is initialized to all zeros */
-  for (i = 1; i < 256; i++)
+  for (i = 0; i < 256; i++)
     statsmap[i] = 0;
 
   /* Build the mapping */
index 9ad2b2e90c3c7c12cc8b247031454b6cc2c58334..12ec78201d3b639b1a1e789350f6dd62b43905c3 100644 (file)
@@ -276,7 +276,7 @@ int hunt_server_prio_cmd(struct Client *from, const char *cmd, const char *tok,
     return HUNTED_NOSUCH;
   }
 
-  assert(!IsServer(from));
+  /* assert(!IsServer(from)); SETTIME to particular destinations permitted */
 
   parv[server] = (char *) acptr; /* HACK! HACK! HACK! ARGH! */
 
@@ -1048,7 +1048,6 @@ void send_user_info(struct Client* sptr, char* names, int rpl, InfoFormatter fmt
  * If, after setting the flags, the user has both HiddenHost and Account
  * set, its hostmask is changed.
  */
-#define FLAGS_HOST_HIDDEN      (FLAGS_ACCOUNT|FLAGS_HIDDENHOST)
 int
 hide_hostmask(struct Client *cptr, unsigned int flag)
 {
@@ -1066,6 +1065,11 @@ hide_hostmask(struct Client *cptr, unsigned int flag)
   ircd_snprintf(0, cli_user(cptr)->host, HOSTLEN, "%s.%s",
                 cli_user(cptr)->account, feature_str(FEAT_HIDDEN_HOST));
 
+  /* ok, the client is now fully hidden, so let them know -- hikari */
+  if (MyConnect(cptr))
+    send_reply(cptr, RPL_HOSTHIDDEN, cli_user(cptr)->account,
+              feature_str(FEAT_HIDDEN_HOST));
+
   /*
    * Go through all channels the client was on, rejoin him
    * and set the modes, if any
@@ -1283,7 +1287,8 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv
   }
   if (MyConnect(sptr))
   {
-    if (FlagHas(&setflags, FLAG_OPER) || FlagHas(&setflags, FLAG_LOCOP))
+    if (FlagHas(&setflags, FLAG_OPER) || FlagHas(&setflags, FLAG_LOCOP) &&
+       !IsAnOper(sptr))
       det_confs_butmask(sptr, CONF_CLIENT & ~CONF_OPS);
 
     if (SendServNotice(sptr))
@@ -1304,7 +1309,7 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc, char *parv
   {
     /* user now oper */
     ++UserStats.opers;
-    client_set_privs(sptr, NULL);
+    client_set_privs(sptr, NULL); /* may set propagate privilege */
   }
   /* remember propagate privilege setting */
   if (HasPriv(sptr, PRIV_PROPAGATE))
index 7a1cd775c1dae516bddca20ff146c907ef1c7a18..571074851a7a18b73fddaacc5ee066f523e5f5cd 100644 (file)
@@ -98,8 +98,8 @@ static void makeTables(void)
   moveMacro(NTL_GRAPH, NTL_PRINT);
   markString(NTL_PRINT, " ");
 
-  markRange(NTL_IRCCH, 0, (char) UCHAR_MAX);
-  unMarkString(NTL_IRCCH, "\007\040\054\240");
+  markRange(NTL_IRCCH, '\041', (char) UCHAR_MAX);
+  unMarkString(NTL_IRCCH, "\054\240");
 
   markRange(NTL_IRCCL, '\300', '\326');
   markRange(NTL_IRCCL, '\330', '\336');
@@ -120,7 +120,7 @@ static void makeTables(void)
   markRange(NTL_IRCUI, '\xd8', '\xde');
   markString(NTL_IRCUI, ".-_^'`~");
   markString(NTL_EOL, "\n\r");
-  markString(NTL_CHPFX, "#&+");
+  markString(NTL_CHPFX, "#&");
   markString(NTL_KTIME, " ,-0123456789");
 
   /* And finally let's take care of the toLower/toUpper stuff */
index e90ec215fe92eca8d89c7a50a4d94eeae5d38ab7..87f762672df239efbd3a26698647dac2631b4ece 100644 (file)
@@ -212,7 +212,9 @@ void do_who(struct Client* sptr, struct Client* acptr, struct Channel* repchan,
   if (fields & WHO_FIELD_IDL)
   {
     *p1++ = ' ';
-    if (MyUser(acptr))
+    if (MyUser(acptr) &&
+       (IsAnOper(sptr) || !feature_bool(FEAT_HIS_WHO_SERVERNAME) ||
+        acptr == sptr))
       p1 += ircd_snprintf(0, p1, 11, "%d",
                           CurrentTime - cli_user(acptr)->last);
     else
diff --git a/tools/linesync/linesync.conf b/tools/linesync/linesync.conf
new file mode 100644 (file)
index 0000000..0694bf8
--- /dev/null
@@ -0,0 +1,15 @@
+
+# Configuration for linesync.sh
+#
+# - This file must be placed in the same directory as ircd.conf
+# - Note that all URL's *MUST* have a trailing /
+# - Since we are using wget, you could use ftp:// URL's as well if you want to
+
+# Where do we get our ircd.conf update?
+LINE_SERVER="http://some.domain/"
+
+# Check servers, as many as you like, seperated by spaces 
+LINE_CHECK="http://host1.other.domain/lsync/ http://host-19.domain-x.net/ http://www.domain.what"
+
+# What .conf lines are allowed in the downloaded updates?
+ALLOWED_LINES="kKQU"
diff --git a/tools/linesync/linesync.sh b/tools/linesync/linesync.sh
new file mode 100755 (executable)
index 0000000..bac6c30
--- /dev/null
@@ -0,0 +1,222 @@
+#!/bin/sh
+# linesync.sh, Copyright (c) 2002 Arjen Wolfs
+# 20020604, sengaia@undernet.org
+#
+# The code contained is in this file is licenced under the terms
+# and conditions as specified in the GNU General Public License.
+#
+# linesync.sh - centralized ircd.conf updates.
+# The purpose of this little shell script is to allow a section of an ircd.conf to be 
+# updated from a central location. Hence it is intended to facilitate the automated 
+# distribution of k, K, Q, and U lines; or any other .conf lines you may wish to keep
+# synchronized accross all servers on a network.
+#
+# This script will download a file called linesync from a specified web server (see 
+# below for configuration), and calculate an md5sum from it. It will then download
+# a file called linesync.sum from a configurable number of other web servers and
+# compare the contents of these files against the checksum calculated. If any of the
+# downloaded checksums mismatch, the program will abort. This provides security to
+# the centralized update mechanism - in order for it to be compromised, multiple
+# web servers would have to compromised.
+#
+# If all checksums match, the script inspects the .conf lines contained within the 
+# downloaded file. If any .conf lines are found that are not specifically allowed,
+# the program will abort. This will prevent malicious/dangerous .conf lines (such as
+# O: or C: lines) from being inserted into ircd.conf.
+#
+# If all the checks mentioned above are passed, the script checks ircd.conf for a section
+# that begins with "# BEGIN LINESYNC", and ends with "# END LINESYNC". The section contained
+# between these two comments is the section maintained by this program. If these lines are not
+# found in the ircd.conf, they will be appended to it.
+# Next, the script will build a new ircd.conf by removing all lines present between the two
+# commented lines mentioned above, and replace them with the contents of the file downloaded.
+# 
+# Once this has been completed, ircd.conf is backed up and replaced with the newly built version,
+# and ircd will be rehashed. 
+#
+# Configuration: This script requires two parameters - the full path to your ircd.conf, and the
+# full path to your ircd.pid. It will look for a configuration file called linesync.conf in the
+# same directory as ircd.conf. See the included sample linesync.conf for information on how to
+# set it up. Obviously, you will need to have web server(s) to use for the distribution of your
+# .conf update and checksums. This script requires the presence of wget and md5sum, and various
+# other programs that should be present by default on any Unix system. 
+#
+# This program should be run from crontab, i.e something like:
+# 0 0 * * * /home/irc/bin/linesync.sh /home/irc/lib/ircd.conf /home/irc/lib/ircd.pid
+#
+# This program has been tested on and works on FreeBSD, Solaris, and Linux.
+# md5sum is included in GNU textutils.
+#
+#      Good Luck!
+#      Arjen Wolfs (sengaia@undernet.org), June 9 2002.
+#
+
+# This checks for the presence of an executable file in $PATH
+locate_program() {
+        if [ ! -x "`which $1 2>&1`" ]; then
+                echo "You don't seem to have $1. Sorry."
+                exit 1
+        fi
+}
+
+# This checks for the presence of any file
+check_file() {
+        if [ ! -f "$1" ]; then
+                echo "There doesn't appear to be a $1. Sorry."
+                exit 1
+        fi
+}
+
+# Try to find programs we will need
+locate_program wget && locate_program egrep
+
+# try to find GNU awk
+awk_cmd=`which gawk`
+if [ $? -ne 0 ]; then
+        awk_cmd=""
+fi
+
+# try to find an appropriate md5 program
+# BSD md5 capability courtesy of spale
+md5_cmd=`which md5sum`
+if [ -z "$md5_cmd" ]; then
+       md5_cmd=`which md5`
+       if [ -z "$md5_cmd" ]; then
+               echo "No MD5 capable programs found (I looked for md5sum and md5)."
+               exit
+       else
+               md5_cmd="$md5_cmd -q"
+       fi
+fi
+
+if [ -z "$awk_cmd" ]; then
+       locate_program awk
+       is_gawk=`echo | awk --version | head -1 | egrep '^GNU.+$'`
+       if [ -z "$is_gawk" ]; then
+               echo "Your version of awk is not GNU awk. Sorry."
+               exit 1
+       fi
+       awk_cmd="awk"   
+fi
+
+# Check for required command line parameters
+if [ -z "$1" -o -z "$2" ]; then
+        echo "Usage: $0 <conf_path> <pid_path>"
+        echo "      <conf_path>     Full path to ircd.conf (/home/irc/lib/ircd.conf)"
+        echo "      <pid_path>      Full path to ircd.pid (/home/irc/lib/ircd.pid)"
+        exit 1
+fi
+
+# check and set up stuff
+cpath=$1
+ppath=$2
+check_file $cpath
+dpath=`dirname $cpath`
+lpath="$dpath/linesync.conf"
+check_file $lpath
+save_dir=$PWD; cd $dpath
+tpath=$PWD; cd $save_dir
+tmp_path="$dpath/tmp"
+mkdir $tmp_path > /dev/null 2>&1
+
+# load and check configuration
+. $lpath
+if [ -z "$LINE_SERVER" -o -z "$LINE_CHECK" -o -z "$ALLOWED_LINES" ]; then
+       echo "Please setup $lpath correctly."
+       exit 1
+fi
+
+# Not all versions of date support %s, work around it
+TS=`date +%Y%m%d%H%M%S`
+TMPFILE="$tmp_path/linesync.$TS"
+LSFILE="$LINE_SERVER""linesync"
+# Attempt to download our .conf update
+wget --cache=off --quiet --output-document=$TMPFILE $LSFILE > /dev/null 2>&1
+if [ ! -s "$TMPFILE" ]; then
+        echo "Unable to retrieve $LSFILE. Sorry."
+       rm $TMPFILE > /dev/null 2>&1
+        exit 1
+fi
+
+# Check wether the file contains any disallowed .conf lines
+bad_lines=`egrep '^[^'$ALLOWED_LINES'#]+' $TMPFILE`
+if [ ! -z "$bad_lines" ]; then
+        echo "The file downloaded in $TMPFILE contains the following disallowed line(s):"
+        echo $bad_lines
+        exit 1
+fi
+
+# check our ircd.conf
+ircd_setup=`egrep '^# (BEGIN|END) LINESYNC$' $cpath|wc -l`
+if [ $ircd_setup != 2 ]; then
+       cp $cpath $cpath.orig
+       echo "Performing initial merge on $cpath, original file saved as $cpath.orig."
+       
+        echo "# Do NOT remove the following line, linesync.sh depends on it!" >> $cpath
+        echo "# BEGIN LINESYNC" >> $cpath
+        echo "# END LINESYNC" >> $cpath
+        echo "# Do not remove the previous line, linesync.sh depends on it!" >> $cpath
+
+       # Do an initial merge to remove duplicates
+       inpath="$tmp_path/linesync.tmp.$TS"
+       $awk_cmd '
+       {
+                if (!loaded_template) {
+                        command="cat " tempfile; tlines=0;
+                        while ((command | getline avar) > 0) { template[tlines]=avar; tlines++ }
+                        close(command)
+                        loaded_template++
+                }
+               dup_line=0
+                for (i=0; i<tlines; i++) {
+                        if (tolower($0)==tolower(template[i])) { dup_line++; break }
+                }
+               if (!dup_line) print $0
+        } ' tempfile=$TMPFILE < $cpath > $inpath
+else
+       inpath=$cpath
+fi
+
+# Get the checksum
+CKSUM=`$md5_cmd $TMPFILE|cut -d' ' -f1`
+
+check_file="$tmp_path/linesync.sum.$TS"
+for ck_server in $LINE_CHECK; do
+       sumfile="$ck_server""linesync.sum"
+       wget --cache=off --quiet --output-document=$check_file $sumfile > /dev/null 2>&1
+       if [ ! -s "$check_file" ]; then
+               echo "Unable to retrieve checksum from $sumfile"
+               exit 1  
+       fi
+       if [ "$CKSUM" != "`cat $check_file`" ]; then
+               echo "Checksum retrieved from $sumfile does not match!"
+               exit 1
+       fi
+       rm -f $check_file
+done
+# It all checks out, proceed...
+
+# Replace the marked block in ircd.conf with the new version
+
+$awk_cmd ' 
+$0=="# BEGIN LINESYNC" { chop++; print; next }
+$0=="# END LINESYNC" {
+        command="cat " syncfile
+        while ((command | getline avar) > 0) { print avar }
+        close(command)
+        chop--
+}
+{ if (!chop) print $0 }
+' syncfile=$TMPFILE < $inpath > $tmp_path/linesync.new.$TS
+
+# Back up the current ircd.conf and replace it with the new one
+cp $cpath  $dpath/ircd.conf.bk
+cp $tmp_path/linesync.new.$TS $cpath
+
+# Rehash ircd (without caring wether or not it succeeds)
+kill -HUP `cat $ppath 2>/dev/null` > /dev/null 2>&1
+
+# (Try to) clean up
+rm -rf $tmp_path > /dev/null 2>&1
+
+# That's it...