+++ /dev/null
-#
-# 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?
+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
+++ /dev/null
-#
-# 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
-
+++ /dev/null
-#
-# 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
-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
-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!
--- /dev/null
+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.
+
--- /dev/null
+
+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.
+
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
+++ /dev/null
-
-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.
-
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)
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],
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])])
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])])
--- /dev/null
+#
+# 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
+
--- /dev/null
+#
+# 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
--- /dev/null
+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"
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
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
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
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
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
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
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.
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
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);
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*[]);
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*[]);
* 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
*
+++ /dev/null
-/*
- * 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 */
-
-
-
-
-
-
-
-
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 */
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;
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 */
/* 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
#ifndef INCLUDED_s_stats_h
#define INCLUDED_s_stats_h
+#ifndef INCLUDED_features_h
+#include "ircd_features.h"
+#endif
struct Client;
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 */
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
}
}
- /* assert(!(pollfdList[i].revents & POLLERR)); */
-
#ifdef POLLHUP
if (pollfdList[i].revents & POLLHUP) { /* hang-up on socket */
Debug((DEBUG_ENGINE, "poll: EOF from client (POLLHUP)"));
#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"
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);
/* 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
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));
#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"
#include "send.h"
#include <assert.h>
+#include <string.h>
/*
* ms_account - server message handler
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);
}
"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.
*/
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, ",")) {
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 */
if (*mask == '!')
{
mask++;
- flags |= GLINE_OPERFORCE;
+ flags |= GLINE_OPERFORCE; /* assume oper had WIDE_GLINE */
}
if ((parc == 3 && *mask == '-') || parc == 5)
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 */
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);
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);
}
#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"
#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"
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++;
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 */
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;
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, "
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)
(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,
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))
{
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");
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;
}
*/
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;
}
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);
}
/*
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]);
}
case 'R':
matchsel |= WHO_FIELD_REN;
continue;
+ case 'a':
+ case 'A':
+ matchsel |= WHO_FIELD_ACC;
+ continue;
}
if (ch == '%')
while ((ch = *p++) && (ch != ','))
case 'U':
fields |= WHO_FIELD_UID;
break;
+ case 'a':
+ case 'A':
+ fields |= WHO_FIELD_ACC;
+ break;
default:
break;
}
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));
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);
}
* 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
{
* 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) &&
#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"
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);
":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);
/* 227 */
{ 0 },
/* 228 */
- { 0 },
+ { RPL_STATSQLINE, "Q %s :%s", "228" },
/* 229 */
{ 0 },
/* 230 */
/* 395 */
{ 0 },
/* 396 */
- { 0 },
+ { RPL_HOSTHIDDEN, "%s.%s :is now your hidden host", "396" },
/* 397 */
{ 0 },
/* 398 */
/* 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 */
#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"
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 */
return HUNTED_NOSUCH;
}
- assert(!IsServer(from));
+ /* assert(!IsServer(from)); SETTIME to particular destinations permitted */
parv[server] = (char *) acptr; /* HACK! HACK! HACK! ARGH! */
* 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)
{
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
}
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))
{
/* 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))
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');
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 */
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
--- /dev/null
+
+# 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"
--- /dev/null
+#!/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...