+2001-06-08 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_user.c: remove deprecated struct Gline* argument to
+ register_user(); remove GLINE rebroadcast; do not send GLINE
+ acknowledgement parameter to NICK; do not look for GLINE
+ acknowledgement parameter to NICK while parsing
+
+ * ircd/s_serv.c (server_estab): remove deprecated struct Jupe*
+ argument to server_estab(); do not send JUPE/GLINE acknowledgement
+ parameters for SERVER or NICK
+
+ * ircd/m_user.c (m_user): remove deprecated argument to
+ register_user()
+
+ * ircd/m_server.c: remove deprecated argument to server_estab();
+ remove documentation comment regarding JUPE acknowledgement
+ parameter to SERVER; remove JUPE rebroadcast
+
+ * ircd/m_pong.c (mr_pong): remove deprecated argument to
+ register_user()
+
+ * ircd/m_nick.c: remove documentation comment regarding GLINE
+ acknowledgement parameter to NICK
+
+ * ircd/jupe.c: use user's real name in JUPE server notices if
+ HEAD_IN_SAND_SNOTICES is defined
+
+ * ircd/ircd.c: remove deprecated chroot() code; remove deprecated
+ setuid code; correct ancient DEBUG vs DEBUGMODE typo
+
+ * ircd/gline.c: use user's real name in GLINE server notices if
+ HEAD_IN_SAND_SNOTICES is defined
+
+ * ircd/channel.c (modebuf_flush_int): make apparent source be
+ local server, not oper's server; use user's real name in hack
+ notices and DESYNC notices if HEAD_IN_SAND_SNOTICES is defined
+
+ * include/s_user.h: remove struct Gline pre-declaration; remove
+ deprecated struct Gline argument from register_user()
+
+ * include/s_serv.h: remove struct Jupe pre-declaration; remove
+ deprecated struct Jupe argument from server_estab()
+
+2001-06-07 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_stats.c (hunt_stats): forward-port from pl15 of all the
+ changes required to control remote stats
+
+ * ircd/s_numeric.c (do_numeric): rewrite numeric origins if
+ recipient is not an operator and HEAD_IN_SAND_REWRITE is defined
+ [forward-port from pl15]
+
+ * ircd/m_whowas.c (m_whowas): report server name only if requester
+ is an operator [forward-port from pl15]
+
+ * ircd/m_whois.c (do_whois): /whois <mynick> now correctly reports
+ my server; if HEAD_IN_SAND_REMOTE is 1, ignore the middle argument
+ and obtain the report from the user's server [forward-port from
+ pl15]
+
+ * ircd/m_who.c: add missing include for ircd_policy.h
+ [forward-port from pl15]
+
+ * ircd/m_version.c (m_version): require oper access for remote
+ /version if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_time.c (m_time): require oper access for remote /time if
+ HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_stats.c: pass extra argument to hunt_stats(); correct
+ missing semicolon [forward-port from pl15]
+
+ * ircd/m_nick.c (ms_nick): hide the origin of certain collision
+ kills [forward-port from pl15]
+
+ * ircd/m_motd.c (m_motd): require oper access for remote /motd if
+ HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_lusers.c (m_lusers): require oper access for remote
+ /lusers if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/m_burst.c (ms_burst): server-added bans are stored using
+ local server name, to hide remote server names; modes also are to
+ originate from the local server [forward-port from pl15]
+
+ * ircd/m_admin.c (m_admin): require oper access for remote /admin
+ if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
+
+ * ircd/channel.c (add_banid): if a server is adding a ban, use my
+ server name to hide the remote server's name [forward-port from
+ pl15]
+
+ * ircd/Makefile.in: ran make depend
+
+ * include/s_stats.h: hunt_stats() has to have an extra argument to
+ support the forward-port from pl15
+
+ * include/ircd_policy.h: #define HEAD_IN_SAND_STATS_P; add
+ HEAD_IN_SAND_{BANWHO,REWRITE,REMOTE} [forward-port from pl15]
+
+ * ircd/engine_poll.c (engine_loop): remove bogus assert that I
+ forgot to check in the events branch
+
+2001-06-06 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/res.c (init_resolver): don't start DNS expires with a 0
+ relative timeout--if the server starts slow, timeouts could be
+ messy...there's probably a better solution, but this'll do for now
+
+ * ircd/os_solaris.c: _XOPEN_SOURCE doesn't get along with Solaris
+ headers very well; include stropts.h; define an os_set_tos()
+
+ * ircd/os_generic.c (os_set_tos): added an os_set_tos() for
+ os_generic.c
+
+ * ircd/ircd.c: if there are no C-lines, we don't want to have a
+ timer that expires at the absolute time of 0--it kinda blocks all
+ the other timers!
+
+ * ircd/engine_devpoll.c: some includes for open(); declare errcode
+ and codesize in engine_loop()
+
+ * ircd/list.c (free_client): remove bogus check on timer active
+ flag
+
+ * ircd/s_auth.c: pull out destruction code in
+ auth_timeout_request() into an externally-visible
+ destroy_auth_request(); manage cli_auth pointer in client
+ structure; use it for an extra assertion check
+
+ * ircd/list.c: include s_auth.h for destroy_auth_request(); add
+ debugging notices to show flow when deallocating
+ connections/clients; call destroy_auth_request() when free'ing a
+ client that has an auth outstanding; don't free the connection if
+ the process timer is unmarked but still active
+
+ * ircd/ircd_events.c: set GEN_ACTIVE when initializing a generator
+ and reset it before calling the event handler for an ET_DESTROY
+ event
+
+ * include/s_auth.h (destroy_auth_request): declare
+ destroy_auth_request(), which can be used to destroy an
+ outstanding auth request if a client socket goes away before the
+ auth exchange is completed
+
+ * include/ircd_events.h: add an active flag to keep track of
+ whether or not particular generators are active, for the
+ convenience of functions using the API
+
+ * include/client.h: add a pointer for auth requests to struct
+ Connection so we can kill outstanding auth requests if a client
+ socket closes unexpectedly
+
+ * ircd/s_bsd.c: cli_connect() could become 0 during the course of
+ the sock or timer callback; take that into account in the assert
+
+ * ircd/list.c: add magic number checking and setting--magic
+ numbers are zero'd on frees to detect double-frees; add back
+ setting of cli_from() to 0 to break the back-link from the struct
+ Connection (duh)
+
+ * ircd/ircd.c: set me's magic number correctly
+
+ * include/client.h: define magic numbers and accessor/verifier
+ macros
+
+ * ircd/list.c: assert that dealloc_client() is called with
+ cli_connect(cptr) == 0; set cli_connect(cptr) to 0 before calling
+ dealloc_client(); don't mess with cli_from(cptr)
+
+ * ircd/s_bsd.c: only attempt to dealloc a connection if the
+ associated client has already been destroyed, or at least delinked
+
+2001-06-05 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/list.c (free_client): only try to delete the socket when
+ the fd hasn't already been closed, avoiding a double-free
+
+ * ircd/list.c (free_connection): make sure the client is really
+ gone before doing away with the connection
+
+ * ircd/s_bsd.c: record that socket has been added in con_freeflag
+ field; queue a socket_del() as soon as the socket is close()'d;
+ use con_freeflag & FREEFLAG_TIMER instead of con_timer; clear
+ FREEFLAG_SOCKET on ET_DESTROY event in client_sock_callback(),
+ then dealloc the connection if safe; mark socket as dead when
+ there's a read error or EOF; clear FREEFLAG_TIMER flag upon entry
+ to client_timer_callback(); dealloc connection if safe upon
+ ET_DESTROY event in client_timer_callback()
+
+ * ircd/list.c: use con_freeflag instead of con_timer; only dealloc
+ the connection if both socket and timer have been destroyed;
+ destroy both socket and timer explicitly and carefully
+
+ * include/client.h: replace the con_timer field with a
+ con_freeflag field, to indicate what still needs freeing; define
+ the freeflags
+
+ * ircd/engine_select.c (engine_loop): duh...sockList[i] could
+ become 0
+
+ * ircd/engine_devpoll.c (engine_loop): duh...sockList[i] could
+ become 0
+
+ * ircd/s_bsd.c: add some extra assertions to try to track down a
+ corruption problem
+
+ * ircd/engine_select.c (engine_loop): add an extra assert to try
+ to track down a corruption problem
+
+ * ircd/engine_poll.c (engine_loop): add an extra assert to try to
+ track down a corruption problem
+
+ * ircd/engine_kqueue.c (engine_loop): add an extra assert to try
+ to track down a corruption problem
+
+ * ircd/engine_devpoll.c (engine_loop): skip slots that have become
+ empty during processing; add an extra assert to try to track down
+ a corruption problem
+
+ * ircd/engine_kqueue.c (engine_delete): make sure to zero deleted
+ entries
+
+2001-06-04 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_bsd.c (client_sock_callback): client is no longer
+ blocked, so we must mark it as unblocked
+
+ * ircd/engine_select.c: add Debug() calls galore; add handling for
+ SS_NOTSOCK; use a dummy sock variable to keep things from
+ disappearing on us; correct timeout calculation; update nfds for
+ efficiency
+
+ * ircd/engine_poll.c: use new debugging level (DEBUG_ENGINE);
+ remove a spurious "if (sock)" which will always be true; update
+ nfds for efficiency
+
+ * ircd/engine_kqueue.c: add Debug() calls galore; add handling for
+ SS_NOTSOCK (just in case); correct timeout calculation
+
+ * ircd/engine_devpoll.c: add Debug() calls galore; add handling
+ for SS_NOTSOCK; correct timeout calculation; add EAGAIN handling
+
+ * include/s_debug.h (DEBUG_ENGINE): add new debugging level;
+ pretty-indent numbers
+
+ * ircd/engine_poll.c (engine_loop): break out SS_NOTSOCK
+ case--it's not a socket; the check for writability is most likely
+ not needed, but present for completeness
+
+2001-05-24 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_bsd.c: add Debug messages; call read_packet() even if the
+ no newline flag is set; call read_packet() when the timer expires,
+ regardless of what's in the buffer--read_packet() should be able
+ to deal properly
+
+ * ircd/IPcheck.c (ip_registry_connect_succeeded): correct a NOTICE
+ sent to clients to include the client nickname (duh)
+
+ * ircd/ircd_events.c: don't destroy a timer if it's already marked
+ for destruction; replace a missing ! in socket_del()
+
+ * ircd/engine_poll.c (engine_loop): reference a temporary variable
+ so we don't have to worry about sockList[i] going away
+
+ * ircd/s_bsd.c (client_sock_callback): add Debug messages
+
+ * ircd/s_auth.c: add Debug messages all over the place
+
+ * ircd/ircd_events.c: add and edit some Debug messages; add a list
+ of routines to convert some of the enums and flags from numbers
+ into human-readable strings for the Debug messages
+
+ * ircd/engine_poll.c: hack some Debug messages to use the new name
+ conversion routines in ircd_events.c; add an extra assert for a
+ condition that shouldn't ever happen; apparently recv() can return
+ EAGAIN when poll() returns readable--I wonder why...
+
+ * include/ircd_events.h: declare some helper routines under
+ DEBUGMODE
+
+2001-05-23 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_bsd.c (client_sock_callback): add an extra assertion
+ check
+
+ * ircd/s_auth.c: add more Debug messages
+
+ * ircd/list.c (make_client): add an extra assertion check
+
+ * ircd/ircd_events.c (socket_events): don't call the engine events
+ changer if we haven't actually made any changes to the event mask
+
+ * ircd/uping.c: add some Debug messages
+
+ * ircd/s_stats.c: document new /STATS e
+
+ * ircd/s_err.c: add RPL_STATSENGINE to report the engine name
+
+ * ircd/s_bsd.c: remove static client_timer variable; in
+ read_packet(), if there's still data in the client's recvQ after
+ parsing, add a 2 second timer (con_proc); fix the ET_DESTROY case
+ of client_sock_callback to handle destroying the timer properly;
+ rewrote client_timer_callback from scratch to be called on an
+ individual client
+
+ * ircd/m_stats.c: add /STATS e to report the engine name
+
+ * ircd/list.c: deal with con_timer field in struct Connection
+ properly; correct a core-level bug in remove_client_from_list--if
+ the client is the only one in the list, we try to update
+ GlobalClientList's cli_prev pointer--not good
+
+ * ircd/ircd.c: remove call to init_client_timer()
+
+ * ircd/engine_poll.c: made Debug messages more uniform by
+ prepending "poll:" to them all; corrected an off-by-one error that
+ caused poll_count to be 1 less than the actual count and removed
+ my work-around; added Debug messages to indicate which socket is
+ being checked and what the results are
+
+ * ircd/Makefile.in: ran a make depend
+
+ * include/s_bsd.h: remove init_client_timer(), since we're doing
+ it differently now
+
+ * include/numeric.h (RPL_STATSENGINE): a stats reply to report the
+ engine name
+
+ * include/ircd_policy.h (HEAD_IN_SAND_STATS_E): turn off /stats e
+ reports for non-opers
+
+ * include/client.h: add con_timer and con_proc fields to struct
+ Connection and define accessor macros--con_timer marks that
+ con_proc contains a valid timer, and con_proc is used to pace user
+ data
+
+ * ircd/s_bsd.c (close_connection): let free_client() destroy the
+ socket
+
+ * ircd/s_auth.c (start_auth): add a Debug call to indicate when
+ auth has begun on a client
+
+ * ircd/ircd_events.c: ensure that event_execute() is called with a
+ non-NULL event; modify event_add() macro to properly zero list
+ bits; modify gen_dequeue() to not try to clip it out of a list
+ it's already been clipped out of; change signal socket
+ initialization to use state SS_NOTSOCK; permit timeout values of
+ 0 in add_timer(); add many Debug calls; change socket_del() and
+ timer_del() to always set the GEN_DESTROY flag; use GEN_MARKED in
+ timer_run() instead of GEN_DESTROY so that event_generate() will
+ pass on the events; remove the switch and replace with a simpler
+ if-then-else tree in timer_run(); don't allow destroyed sockets to
+ be destroyed again, nor their states or event masks to be changed
+
+ * ircd/ircd.c: initialize "running" to 1
+
+ * ircd/engine_poll.c: deal with SS_NOTSOCK "sockets"; add Debug
+ messages all over the place; fix a counting problem in
+ engine_add(); turn wait into a signed integer and set it to -1
+ only if timer_next() returns 0; adjust wait time to be relative;
+ don't call gen_ref_dec() if socket disappeared while we were
+ processing it
+
+ * include/ircd_events.h: the pipe for signals is not a socket, so
+ we must mark it as such--added SS_NOTSOCK for that special socket;
+ events won't be generated if GEN_DESTROY is on, so add GEN_MARKED
+ for the benefit of timer_run()
+
+ * configure.in: add --enable-pedantic and --enable-warnings to
+ turn on (and off) -Wall -pedantic in CFLAGS
+
+2001-05-21 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_conf.c: change "s_addr" element accesses to "address"
+ element accesses
+
+ * include/s_conf.h: on some systems, "s_addr" is a macro; use
+ "address" instead
+
+2001-05-18 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/engine_kqueue.c: include ircd_alloc.h; set_or_clear returns
+ void in this file; add a missing semi-colon; declare errcode,
+ codesize
+
+ * ircd/uping.c (uping_sender_callback): it's pptr, not uping
+
+ * ircd/s_user.c (register_user): comment out spurious reference to
+ nextping
+
+ * ircd/s_serv.c (server_estab): comment out spurious reference to
+ nextping
+
+ * ircd/s_conf.c (read_configuration_file): comment out spurious
+ reference to nextping and nextconnect
+
+ * ircd/s_bsd.c: comment out some spurious references to formerly
+ global (now non-existant) variables; correct a couple of typos
+
+ * ircd/s_auth.c: pre-declare some functions referenced in the
+ callback; correct a typo
+
+ * ircd/res.c (start_resolver): pass errno value of ENFILE
+
+ * ircd/listener.c (accept_connection): you know your API is messed
+ up when...variables that shouldn't have been global crop up in
+ other files
+
+ * ircd/list.c (free_client): substitution of == for =
+
+ * ircd/ircd_signal.c: include assert.h for assertion checking;
+ check ev_data() to find out what signal generated event
+
+ * ircd/ircd_events.c: some references to the variable "timer"
+ should have been references to the variable "ptr"
+
+ * ircd/engine_select.c: it's struct fd_set, not struct fdset;
+ ev_timer(ev) is already a timer pointer; declare codesize as a
+ size_t to correct signedness issue; use timer_next(), not
+ time_next()
+
+ * ircd/engine_poll.c: ev_timer(ev) is already a timer pointer;
+ select fd out of struct pollfd in assertion checking; declare
+ errcode and codesize; use timer_next(), not time_next()
+
+ * ircd/engine_kqueue.c: ev_timer(ev) is already a timer pointer;
+ use function timer_next(), not time_next()
+
+ * ircd/engine_devpoll.c: ev_timer(ev) is already a timer pointer;
+ use function timer_next(), not time_next()
+
+ * ircd/Makefile.in (IRCD_SRC): add ircd_events.c to the list of
+ compiled sources; do make depend
+
+ * include/list.h: pre-declare struct Connection
+
+ * include/ircd_events.h (gen_ref_inc): cast to the right structure
+ name
+
+ * include/s_auth.h: duh; missing */
+
+2001-05-10 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/send.c: update write events status after sending data or
+ accumulating data to be sent
+
+ * ircd/m_list.c (m_list): update write events status after
+ canceling a running /list
+
+ * ircd/channel.c (list_next_channels): update write events status
+ after listing a few channels
+
+ * ircd/s_bsd.c: extensive changes to update to new events model;
+ remove on_write_unblocked() and the two implementations of
+ read_message(), which have been deprecated by this change
+
+ * ircd/s_auth.c: set the socket events we're interested in for
+ clients; simplify some logic that does the connect_nonb followed
+ by the socket_add
+
+ * ircd/list.c: define free_connection() to free a connection
+ that's become freeable once the struct Socket has been
+ deallocated; fix up free_client() to take this new behavior into
+ account
+
+ * ircd/ircd.c: call init_client_timer()
+
+ * include/s_bsd.h: declare new REGISTER_ERROR_MESSAGE when unable
+ to register connect-in-progress with events system; declare
+ init_client_timer() (HACK!) to preserve rate-limiting behavior
+
+ * include/list.h: declare new free_connection()
+
+ * include/client.h: add a struct Socket to struct Connection
+
+2001-05-09 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_signal.c: massage the handlers for SIGHUP, SIGINT, and
+ SIGTERM into event callbacks; perform the actions in the
+ callbacks, since they're not called in the context of the signal;
+ set up the signal callbacks in the event engine
+
+ * ircd/ircd_events.c (signal_callback): we're supposed to look for
+ a specific signal; don't generate an event if there is no signal
+ structure for it
+
+ * ircd/ircd.c: nuke nextconnect and nextping and replace them with
+ connect_timer and ping_timer; massage try_connections() and
+ check_pings() into timer callbacks that re-add themselves at the
+ right time; remove ircd.c's "event_loop()"; initialize the event
+ system and the connect_timer and ping_timer
+
+ * ircd/uping.c: correct a couple more typos
+
+ * ircd/s_auth.c: rework to use new events system
+
+ * ircd/os_solaris.c (os_connect_nonb): update to new interface
+
+ * ircd/os_openbsd.c (os_connect_nonb): update to new interface
+
+ * ircd/os_linux.c (os_connect_nonb): update to new interface
+
+ * ircd/os_generic.c (os_connect_nonb): update to new interface
+
+ * ircd/os_bsd.c (os_connect_nonb): update to new interface
+
+ * include/s_auth.h: remove deprecated members of struct
+ AuthRequest, replacing them with struct Socket and struct Timer
+ structures; add flags to indicate when these structures have been
+ released by the event system; remove the deprecated
+ timeout_auth_queries()
+
+ * include/ircd_osdep.h (os_connect_nonb): connect could complete
+ immediately, so change the interface to handle that possibility
+
+ * ircd/uping.c (uping_server): noticed and corrected a typo
+
+ * ircd/listener.c: set up to use ircd_event's struct Socket by
+ adding an socket_add() call to inetport(), replacing
+ free_listener() with socket_del() in close_listener(), and
+ reworking accept_connection to be called as the callback
+
+ * ircd/ircd.c: add a call to IPcheck_init()
+
+ * ircd/IPcheck.c: remove IPcheck_expire(); rework
+ ip_registry_expire() to be called from a timer; write
+ IPcheck_init() to set up the expiration timer (hard-coded for a
+ 60-second expiration time)
+
+ * include/listener.h: add a struct Socket to the struct Listener;
+ remove accept_connection()
+
+ * include/IPcheck.h: add IPcheck_init(), remove IPcheck_expire()
+
+2001-05-08 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_events.c: include config.h; use USE_KQUEUE and
+ USE_DEVPOLL instead of HAVE_KQUEUE and HAVE_DEVPOLL_H
+
+ * ircd/engine_select.c: include config.h; set FD_SETSIZE to
+ MAXCONNECTIONS, not IRCD_FD_SETSIZE...
+
+ * ircd/engine_poll.c: include config.h
+
+ * ircd/engine_kqueue.c: include config.h
+
+ * ircd/engine_devpoll.c: include config.h
+
+ * ircd/Makefile.in: include engine sources in compilation and make
+ depend steps
+
+ * configure.in: add checks for enabling the /dev/poll- and
+ kqueue-based engines
+
+ * acconfig.h: add lines for USE_DEVPOLL and USE_KQUEUE
+
+ * ircd/Makefile.in: work in the engine sources
+
+2001-05-07 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/m_settime.c: include ircd_snprintf.h
+
+ * ircd/ircd_relay.c: stomp a couple of gcc warnings suggesting
+ parens around a construct that had both || and &&
+
+ * ircd/chkconf.c: #include "config.h" to get some important
+ definitions
+
+ * ircd/Makefile.in: revamp ircd makefile for new build system
+
+ * doc/Makefile.in: revamp doc makefile for new build system
+
+ * config/*: Removed old build system files
+
+ * stamp-h.in: a stamp file
+
+ * install-sh: install-sh for new build system
+
+ * configure.in: configure.in for new build system
+
+ * configure: configure script for new build system (built by
+ autoconf)
+
+ * config.sub: config.sub for new build system
+
+ * config.h.in: config.h.in for new build system (built by
+ autoheader)
+
+ * config.guess: config.guess for new build system
+
+ * aclocal.m4: aclocal.m4 for new build system (built by aclocal
+ 1.4)
+
+ * acinclude.m4: aclocal.m4 macros for new build system
+
+ * acconfig.h: config.h skeleton for new build system
+
+ * Makefile.in: modify for new build system
+
+2001-05-01 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_err.c: get rid of the last vestiges of TIME_T_FMT
+
+ * ircd/m_settime.c: get rid of the last vestiges of TIME_T_FMT
+
+ * ircd/m_server.c: get rid of the last vestiges of TIME_T_FMT
+
+2001-05-01 Perry Lorier <Isomer@coders.net>
+ * doc/iauth.doc: Protocol for iauth server. (from hybrid).
+ * doc/linux-poll.patch: Patch to make Linux under 2.2 not deadlock
+ when you have far far too many sockets in use.
+ * {include,ircd}/iauth.c: A start on iauth support.
+
+2001-05-01 Perry Lorier <Isomer@coders.net>
+ * ircd/s_err.c: Suggested wording change.
+ * ircd/s_user.c: Users aren't target limited against +k users.
+ * ircd/chkconf.c: Made it compile again, who knows if it works, but
+ now I can at least make install
+ * various: Cleanups on m_*.c files.
+
+
+2001-04-23 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_misc.c (exit_client): make netsplit server notice say the
+ right thing
+
+ * ircd/m_links.c (m_links_redirect): forward-port RPL_ENDOFLINKS
+ change to make Khaled happy...
+
+ * ircd/m_whois.c (do_whois): pull-up of m_whois() fix
+ (do_whois): duh...
+
+2001-04-21 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/msgq.c: finally remove the msgq_integrity() hack, as it's
+ turned up no more bugs
+
+ * ircd/ircd.c: use /* */ comments instead of // comments--all the
+ world's not gcc :(
+
+ * ircd/s_conf.c (conf_add_server): use /* */ comments instead of
+ // comments--all the world's not gcc :(
+
+ * ircd/runmalloc.c: finally garbage-collect unused file
+
+ * include/runmalloc.h: finally garbage-collect unused file
+
+ * ircd/<multiple files>: addition of '#include "config.h"' before
+ all other includes in most .c files
+
+ * include/<multiple files>: remove includes of config.h, which are
+ now going into the raw .c files
+
+2001-04-20 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/m_whois.c (do_whois): display proper server name if the
+ user is looking up himself
+
+ * ircd/m_who.c (m_who): disable match by servername or display of
+ server names by non-opers
+
+ * include/ircd_policy.h: add define for
+ HEAD_IN_SAND_WHO_SERVERNAME to cover full intent of sub-motion 15
+ of CFV 165
+
+2001-04-18 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_conf.c: keep the $R in memory so we can see it clearly
+ when we do a /stats k
+
+ * ircd/s_user.c (set_user_mode): pull-up of changes to prevent
+ users from turning on +s and +g
+
+ * ircd/s_misc.c (exit_client): pull-up of changes to turn off
+ net.split notice
+
+ * ircd/parse.c: pull-up of changes to disable /trace, /links, and
+ /map for users
+
+ * ircd/m_whois.c (do_whois): pull-up of server name masking for
+ /whois
+
+ * ircd/m_user.c (m_user): removal of umode and snomask defaulting
+ functions, pull-up
+
+ * ircd/m_stats.c (m_stats): pull-up of stats-disabling stuff
+
+ * ircd/m_map.c (m_map_redirect): pull-up of m_map_redirect()
+
+ * ircd/m_links.c (m_links_redirect): pull-up of m_links_redirect()
+
+ * ircd/channel.c (channel_modes): pull-up of channel key display
+ as *
+
+ * include/ircd_policy.h: pull-up of ircd_policy.h
+
+ * include/client.h: pull-up of Set/ClearServNotice()
+
+ * ircd/gline.c (do_gline): report client name in G-line message
+ (pull-up)
+
+ * ircd/s_user.c (register_user): pull-up--show IP address in some
+ server notices dealing only with users; report which connection
+ class has filled up
+
+ * ircd/s_stats.c (report_deny_list): use conf->flags &
+ DENY_FLAGS_IP insteaf of conf->ip_kill
+
+ * ircd/m_stats.c (report_klines): use conf->flags & DENY_FLAGS_IP
+ insteaf of conf->ip_kill
+
+ * ircd/s_conf.c: use flags field in struct DenyConf; pull-up of
+ K-line by real name
+
+ * include/s_conf.h: use a flags field in struct DenyConf; define
+ DENY_FLAGS_FILE, DENY_FLAGS_IP, and DENY_FLAGS_REALNAME for
+ pull-up of K-line by real name
+
+ * ircd/m_trace.c: pull-up of IP show for user connections
+
+ * doc/example.conf: pull-up of the realname K-line documentation
+
+ * ircd/ircd.c: forward port of pid file advisory locking mechanism
+
+2001-04-16 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/send.c (sendcmdto_flag_butone): recast to just broadcast to
+ all servers, rather than to only servers that have +w/+g/whatever
+ users on them; among other things, this removes that atrocity
+ known as sentalong[] from this function
+
+ * ircd/m_admin.c: must include ircd.h to declare "me"; must
+ include hash.h to declare FindUser()
+
+ * ircd/m_wallusers.c: implementation of WALLUSERS
+
+ * ircd/m_desynch.c (ms_desynch): only send DESYNCHs to opers
+
+ * ircd/m_wallops.c: only send WALLOPS to opers
+
+ * ircd/parse.c: add WALLUSERS command to parser table
+
+ * include/handlers.h: declare wallusers handlers
+
+ * include/msg.h: add WALLUSERS command
+
+ * ircd/send.c (sendcmdto_flag_butone): if FLAGS_OPER is or'd with
+ flag, send only to appropriate opers
+
+2001-04-13 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/uping.c: refit to use the new events interface
+
+ * ircd/res.c: refit to use the new events interface
+
+ * ircd/ircd_events.c: create timer_chg(), which permits a
+ (non-periodic) timer's expire time to be modified; change the
+ logic in timer_run() so that timers that were re-added while the
+ event was being processed will not be destroyed prematurely
+
+ * include/uping.h: include the events header, declare some extra
+ fields in struct UPing, remove timeout value, and define some
+ flags for marking which cleanup items have yet to be done
+
+ * include/ircd_events.h: add a prototype for timer_chg() to change
+ the expire time of a running timer
+
+2001-03-13 Joseph Bongaarts <foxxe@wtfs.net>
+ * ircd/os_openbsd.c: Tweaked the openbsd hack a bit.
+
+2001-03-07 Joseph Bongaarts <foxxe@wtfs.net>
+
+ * config/configure.in: Add check for OpenBSD
+
+ * ircd/os_openbsd.c: Add seperate os dep file for openbsd which
+ differs from generic BSD, particularly in its handling of
+ _XOPEN_SOURCE.
+
+2001-02-12 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/m_gline.c (ms_gline): propagate a G-line that happened to
+ have been added by a U-lined server, rather than going through the
+ activate/deactivate logic; propagate G-line removals by U-lined
+ servers as well
+
+ * ircd/gline.c: rename propagate_gline() to gline_propagate();
+ make gline_propagate() return an int 0 (convenience return); only
+ update lastmod in gline_activate() and gline_deactivate() if the
+ current lastmod is non-zero, since 0 lastmod is our flag of a
+ U-lined server having added a G-line
+
+ * include/gline.h (gline_propagate): exporting the G-line
+ propagation function
+
+ * ircd/m_list.c (m_list): duh; permit explicit channel name
+ specification only when /list gets two arguments ("Kev
+ #wasteland") rather than when /list gets more than two
+ arguments--nice braino
+
+2001-01-29 Thomas Helvey <twhelvey1@home.com>
+
+ * ircd/ircd_reply.c (need_more_params): fix bug that allowed
+ unregistered clients to spam opers with protocol violation
+ messages. Note: the bugfix may have eliminated some useful
+ protocol violation messages.
+ Please send protocol violation messages explicitly from the
+ functions they are discovered in, you have much better context
+ for the error there and it helps to document the behavior of the
+ server. This was also a design bug in that it violated the
+ "A function should do one thing" heuristic. Patching this one
+ would have resulted in a continuous spawning of other bugs over
+ the next 3 years, so I killed it. Check around for stuff this
+ broke and readd the calls to protocol_violation in the functions
+ that need to send the message.
+
+2001-01-29 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/channel.c (mode_parse_ban): stopper a tiny leak--if a ban
+ already existed, then the logic would (attempt to) skip it, but
+ would not free the ban string; now the ban string is free'd and
+ the ban count is decremented, releasing the ban for use
+
+ * ircd/s_user.c: make send_umode_out() take a prop argument
+ instead of testing for the PRIV_PROPAGATE privilege itself; fix
+ set_umode() to use this new argument, calculating it before
+ calculating the new privileges for a -o'd user
+
+ * ircd/m_oper.c (m_oper): pass the new prop argument to
+ send_umode_out()
+
+ * ircd/channel.c (mode_parse_ban): turn off MODE_ADD bit in bans
+ that we're not actually going to add because they already exist;
+ test that particular bit before adding to the linked list
+
+ * include/s_user.h: add a prop argument to send_umode_out() to
+ indicate whether or not to propagate the user mode
+
+2001-01-24 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/msgq.c: ircd_vsnprintf() returns the number of bytes that
+ it would have written; upper-bound the number to prevent overflows
+ by proxy; also, tune buffer size given to ircd_vsnprintf() to take
+ into account the fact that ircd_vsnprintf() already takes the
+ terminal \0 into account
+
+2001-01-22 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/msgq.c: add an incredibly ugly hack to attempt to track
+ down an apparent buffer overflow; remove msgq_map(), since it's no
+ longer used anywhere; slight tweaks to prevent off-by-one errors,
+ but these can't explain the problems we've seen
+
+ * include/msgq.h: remove msgq_map(), since it's no longer used
+ anywhere
+
+2001-01-18 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_user.c (set_nick_name): call client_set_privs() after
+ parsing user modes
+
+2001-01-17 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/s_bsd.c (read_message): fix a typo in the select version of
+ read_message()
+
+ * ircd/whowas.c (whowas_free): MyFree() is a macro that expects
+ its argument to be an lvalue, which means we can't use
+ whowas_clean()'s handy-dandy "return ww" feature
+
+ * ircd/ircd_features.c: default LOCOP_KILL to TRUE--oops...
+
+2001-01-16 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_events.c (timer_run): it's possible that the timer got
+ deleted during the callback processing, so don't go to the bother
+ of requeuing it if the destroy flag is set
+
+ * ircd/engine_select.c: define FD_SETSIZE to be IRCD_FD_SETSIZE
+ out of config.h if this is a *BSD; include errno.h (oops);
+ decrement error count after an hour using a timer; use FD_SETSIZE
+ constant instead of IRCD_FD_SETSIZE constant; fill in event
+ processing code
+
+ * ircd/engine_poll.c: include errno.h (oops); decrement error
+ count after an hour using a timer; fill in event processing code
+
+ * ircd/engine_kqueue.c: include errno.h (oops); decrement error
+ count after an hour using a timer; assert events filter is either
+ EVFILT_READ or EVFILT_WRITE; fill in event processing code
+
+ * ircd/engine_devpoll.c: include errno.h (oops); decrement error
+ count after an hour using a timer; fill in event processing code
+
+2001-01-15 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/client.c: fixed feattab; basically, when I changed features
+ to use small integers specifying bit positions, instead of the
+ bits themselves, I forgot to update feattab to not | these
+ privileges together; also fixed a bug in the antiprivs masking
+ loop in client_set_privs()--last index wouldn't get parsed
+
+2001-01-11 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_events.c: call event_generate() with new data
+ argument; make it set that field in struct Event; make
+ socket_add() return the value of the eng_add callback
+
+ * ircd/engine_select.c: make engine_add() return a
+ successful/unsuccessful status; add bounds-checking outside of an
+ assert; use accessor macros; use log_write(), not the deprecated
+ ircd_log(); add an assert to engine_loop() to double-check for
+ data structure corruption
+
+ * ircd/engine_poll.c: make engine_add() return a
+ successful/unsuccessful status; add bounds-checking outside of an
+ assert; use accessor macros; use log_write(), not the deprecated
+ ircd_log(); add an assert to engine_loop() to double-check for
+ data structure corruption
+
+ * ircd/engine_kqueue.c: implementation of an engine for kqueue()
+
+ * ircd/engine_devpoll.c: implementation of an engine for /dev/poll
+
+ * include/ircd_events.h: define some accessor macros; add ev_data
+ to struct Event for certain important data--errno values, for
+ instance; make EngineAdd callback tell us if it was successful or
+ not; add extra argument to event_generate(); make socket_add()
+ return the status from EngineAdd
+
+2001-01-10 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_events.c: pass initializer information about how many
+ total _filedescriptors_ may be opened at once
+
+ * ircd/ircd.c: use exported "running" instead of unexported
+ thisServer.running
+
+ * ircd/engine_select.c: implementation of an event engine based on
+ select()
+
+ * ircd/engine_poll.c: implementation of an event engine based on
+ poll()
+
+ * include/ircd_events.h: pass the engine initializer an integer
+ specifing how many _filedescriptors_ may be opened at once
+
+ * include/ircd.h: running has to be exported for the engine_*
+ event loops
+
+2001-01-09 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_events.c: include some needed headers; add some
+ comments; make evEngines[] const; bundle sig_sock and sig_fd into
+ a struct named sigInfo; rework struct evInfo to have a queue of
+ _generators_, and only when threaded; added a gen_init() function
+ to centralize generator initialization; fix various compile-time
+ errors; rework event_add() for new queueing scheme and checked for
+ compile-time errors; add casts where needed; spell evEngines[]
+ correctly; make engine_name() return const char*
+
+ * include/ircd_events.h: type EventCallBack depends on struct
+ Event, so pre-declare it; put _event_ queue into generators, and
+ only when threaded; give engine data a union to store both ints
+ and pointers; make engine name a const; fix gen_ref_dec() macro;
+ make engine_name() return a const char*
+
+ * ircd/ircd_events.c: gen_dequeue() is now exported, so move it
+ down with the non-static functions; modify event_execute() to use
+ the new gen_ref_dec() to simplify code; make sure event_generate()
+ does not generate new events for generators marked for destruction
+
+ * include/ircd_events.h: the engines, at least, may need to modify
+ reference counts to keep generators from going away while
+ something still points at them, so add reference counter
+ manipulators and export gen_dequeue() for them
+
+ * ircd/ircd_events.c: set up the list of engines to try; set up
+ the signal struct Socket; rename netInfo to evInfo; move static
+ functions near the beginning of the file; do away with
+ signal_signal() (since we no longer keep a signal count ourselves)
+ and call event_generate() directly from signal_callback--also
+ renamed some functions; allow signal_callback() to read up to
+ SIGS_PER_SOCK at once from the signal pipe; add event_init() to
+ initialize the entire event system; add event_loop() to call the
+ engine's event loop; initialize new struct GenHeader member,
+ gh_engdata; remove timer_next(); add socket_add() function to add
+ a socket; add socket_del() to mark a socket for deletion; add
+ socket_state() to transition a socket between states; add
+ socket_events() to set what events we're interested in on the
+ socket; add engine_name() to retrieve event engine's name
+
+ * include/ircd_events.h: add engine data field to struct
+ GenHeader; rename SOCK_ACTION_REMOVE to SOCK_ACTION_DEL; add a
+ note about states vs s_events; remove signal count; fold union
+ Generator back into struct Event; remove count members from struct
+ Generators; redefine engine callbacks to not take a struct
+ Engine*; add explanatory comments to callback definitions; add
+ some engine callbacks to handle operations; remove struct Engine
+ flag member--can detect single flag from eng_signal member; add
+ event_init(), event_loop(), engine_name(), and the socket_*()
+ functions; make timer_next() a macro to avoid a function call
+
+2001-01-08 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * include/ircd_events.h: rename to ircd_events.h, since it handles
+ events, not just networking stuff; add signal support; more
+ structural rearrangement
+
+ * ircd/ircd_events.c: rename to ircd_events.c, since it handles
+ events, not just networking stuff; add signal support; more
+ structural rearrangement
+
+2001-01-07 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_network.c: implement timer API; add reference counts
+ appropriately
+
+ * include/ircd_network.h: firm up some pieces of the interface;
+ split out members everything has into a separate structure; add
+ reference counts; add timer API
+
+2001-01-06 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_network.c: static data and event manipulation
+ functions for new event processing system
+
+ * include/ircd_network.h: data structures for new event processing
+ system
+
+2001-01-03 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/whowas.c: Completely re-did the old allocation scheme by
+ turning it into a linked list, permitting the
+ NICKNAMEHISTORYLENGTH feature to be changed on the fly
+
+ * ircd/s_debug.c (count_memory): use FEAT_NICKNAMEHISTORYLENGTH
+ feature instead of old #define
+
+ * ircd/ircd_features.c: add NICKNAMEHISTORYLENGTH feature as an
+ integer feature with a notify callback (whowas_realloc)
+
+ * ircd/client.c (client_set_privs): second memset was supposed to
+ be over antiprivs, not privs; thanks, Chris Behrens
+ <cbehrens@xo.com> for pointing that out...
+
+ * include/whowas.h: new elements for an extra linked list in
+ struct Whowas; a notify function for feature value changes
+
+ * include/ircd_features.h: new feature--FEAT_NICKNAMEHISTORYLENGTH
+
+ * config/config-sh.in: NICKNAMEHISTORYLENGTH is now a feature
+
+2001-01-02 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * config/config-sh.in: get rid of DEFAULT_LIST_PARAMETER
+ compile-time option--now in features subsystem
+
+ * ircd/motd.c (motd_init): rework motd_init() to be called as the
+ notify function for MPATH and RPATH features (should probably
+ split it up a bit, though...)
+
+ * ircd/m_privs.c (mo_privs): if called with no parameters, return
+ privs of the caller, rather than an error
+
+ * ircd/m_list.c: pull usage message into its own function; pull
+ list parameter processing into its own function that does not
+ modify the contents of the parameter; add list_set_default() to
+ set the default list parameter (uses the notify hook); rework
+ m_list() to make use of these functions; removed dead code
+
+ * ircd/ircd_log.c (log_feature_mark): make sure to return 0, since
+ we have no notify handler
+
+ * ircd/ircd_features.c: add notify callback for notification of
+ value changes; give mark callback an int return value to indicate
+ whether or not to call the notify callback; fix up feature macros
+ for new notify callback; add DEFAULT_LIST_PARAM feature; rewrite
+ string handling in feature_set() to deal with def_str being a null
+ pointer; wrote feature_init() to set up all defaults appropriately
+
+ * ircd/ircd.c (main): call feature_init() instead of
+ feature_mark(), to avoid calling notify functions while setting up
+ defaults
+
+ * ircd/client.c: updated to deal with new privileges structure
+
+ * ircd/class.c: updated so init_class() can be called should one
+ of PINGFREQUENCY, CONNECTFREQUENCY, MAXIMUM_LINKS, or
+ DEFAULTMAXSENDQLENGTH be changed
+
+ * include/ircd_log.h: log_feature_mark() updated to fit with new
+ API changes
+
+ * include/ircd_features.h: added DEFAULT_LIST_PARAM feature and
+ feature_init() function (found necessary since adding the notify
+ stuff and notifying motd.c during start-up...before we defined
+ RPATH!)
+
+ * include/client.h: move privs around to enable addition of more
+ bits if necessary; based on the FD_* macros
+
+ * include/channel.h: declare list_set_default (actually located in
+ m_list.c *blanche*)
+
+ * ircd/s_user.c: retrieve MAXSILES and MAXSILELENGTH (now
+ AVBANLEN*MAXSILES) from features subsystem
+
+ * ircd/s_debug.c (debug_serveropts): CMDLINE_CONFIG doesn't go to
+ anything anymore
+
+ * ircd/s_bsd.c: retrieve HANGONGOODLINK and HANGONRETRYDELAY from
+ the features subsystem
+
+ * ircd/s_auth.c (start_auth): NODNS migrated to the features
+ subsystem
+
+ * ircd/random.c: created random_seed_set() function to set seed
+ value, along with some stuff to make ircrandom() a little more
+ random--state preserving, xor of time instead of direct usage,
+ etc.; it's still a pseudo-random number generator, though, and
+ hopefully I haven't broken the randomness
+
+ * ircd/m_version.c: FEATUREVALUES makes use of feature_int() calls
+
+ * ircd/m_join.c: use features interface to retrieve
+ MAXCHANNELSPERUSER
+
+ * ircd/ircd_features.c: add NODISP flag for super-secret features;
+ add a whole bunch of new features migrated over from make config
+
+ * ircd/ircd.c: use features interface to retrieve PINGFREQUENCY,
+ CONNECTTIMEOUT, and TIMESEC
+
+ * ircd/client.c (client_get_ping): use features interface to
+ retrieve PINGFREQUENCY
+
+ * ircd/class.c: use features interface to retrieve PINGFREQUENCY,
+ CONNECTFREQUENCY, MAXIMUM_LINKS, and DEFAULTMAXSENDQLENGTH
+
+ * ircd/chkconf.c (DEFAULTMAXSENDQLENGTH): since it's now in the
+ features subsystem, we have to add something explicit
+
+ * ircd/channel.c: use features interface to retrieve
+ KILLCHASETIMELIMIT, MAXBANLENGTH, MAXBANS, and MAXCHANNELSPERUSER;
+ note that MAXBANLENGTH is now calculated dynamically from MAXBANS
+ and AVBANLEN
+
+ * ircd/Makefile.in: run make depend
+
+ * include/supported.h (FEATURESVALUES): update to reference
+ feature settings
+
+ * include/random.h: add prototype for random_seed_set
+
+ * include/ircd_features.h: add several more features
+
+ * include/channel.h: move MAXBANS and MAXBANLENGTH into feature
+ subsystem
+
+ * config/config-sh.in: feature-ized some more stuff
+
+ * include/motd.h: some new elements in motd.h for motd.c changes
+
+ * ircd/motd.c: motd_cache() now searches a list of already cached
+ MOTD files; saves us from having duplicate caches in memory if
+ there are two identical T-lines for two different sites...
+
+2001-01-02 Perry Lorier <isomer@coders.net>
+ * ircd/motd.c: don't core if the motd isn't found. Bug found by
+ Amarande.
+
+2001-01-02 Perry Lorier <isomer@coders.net>
+ * ircd/s_err.c: Added third param to 004 - the channel modes that tage params. Used by hybrid/epic.
+ * ircd/s_channels.c: Added fix for msg'ing a -n+m channel - thanks
+ to guppy for noticing, and hektik for providing the fix.
+ * misc others: Minor cleanups, added more protocol_violations, ripped
+ out more P09 stuffs, bit more protocol neg stuff.
+
+2000-12-19 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/m_ison.c (m_ison): Dianora says that ISON has to end with a
+ space (*sigh* stupid clients...)
+
+ * ircd/s_user.c: make WALLOPS_OPER_ONLY a feature managed through
+ ircd_features.[ch]
+
+ * ircd/s_err.c: get rid of GODMODE conditionals
+
+ * ircd/s_debug.c (debug_serveropts): switch to using appropriate
+ calls into the features subsystem for various serveropts
+ characters
+
+ * ircd/s_conf.c (find_conf_entry): get rid of USEONE conditional
+
+ * ircd/s_bsd.c: remove GODMODE conditional; use features subsystem
+ to get value of VIRTUAL_HOST and CLIENT_FLOOD; remove
+ NOFLOWCONTROL conditional
+
+ * ircd/s_auth.c: use features subsystem to determine value of
+ KILL_IPMISMATCH
+
+ * ircd/parse.c: get rid of NOOPER and GODMODE conditionals; use
+ features subsystem to determine the setting of IDLE_FROM_MSG
+
+ * ircd/numnicks.c: get rid of EXTENDED_NUMERICS conditionals
+
+ * ircd/motd.c: get value of NODEFAULTMOTD from features subsystem;
+ use features subsystem to get motd file names
+
+ * ircd/m_settime.c: get value of RELIABLE_CLOCK from features
+ subsystem
+
+ * ircd/m_server.c: get rid of CRYPT_LINK_PASSWORD, since it does
+ us no good; use features subsystem to figure out if we need to do
+ HUB-type stuff; make TESTNET debugging sendto_opmask_butone's use
+ the Debug(()) macro instead; get value of RELIABLE_CLOCK from
+ features subsystem
+
+ * ircd/m_privmsg.c: get IDLE_FROM_MSG from the features subsystem
+
+ * ircd/m_oper.c: get CRYPT_OPER_PASSWORD from the features
+ subsystem
+
+ * ircd/m_connect.c: get SERVER_PORT from the features subsystem
+
+ * ircd/ircd_log.c (log_set_file): fix a bug that kept log files
+ from getting marked if they were already set to something...
+
+ * ircd/ircd_features.c: add a flag to indicates read-only access;
+ add several new features that used to be compile-time selected
+
+ * ircd/ircd.c: grab pidfile out of feature subsystem; don't check
+ access to motd files (what the heck?); make sure to initialize the
+ feature subsystem before trying to write the config file
+
+ * ircd/dbuf.c: use feature_int() to retrieve BUFFERPOOL settings;
+ use feature_bool() to figure out if we're using the FERGUSON
+ flusher
+
+ * ircd/Makefile.in: MPATH and RPATH are now done differently, so
+ remove the clause that creates empty files of that name; also ran
+ make depend
+
+ * include/sys.h: CLIENT_FLOOD is now a feature; unfortunately,
+ there is no easy way to bounds-check it at present
+
+ * include/querycmds.h: make sure ircd_features.h is included; use
+ feature_str(FEAT_DOMAINNAME) in calls to match()
+
+ * include/ircd_features.h: many new features that used to be
+ compile-time selected
+
+ * config/config-sh.in: add * to DOMAINNAME; try also using first
+ argument to search in /etc/resolv.conf; removed many compile-time
+ options that now can be configured through the features system
+
+2000-12-18 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * doc/api/log.txt: how to use the logging API
+
+ * doc/api/features.txt: how to use the features API
+
+ * doc/api/api.txt: how to write API documentation
+
+ * include/ircd_features.h: rearranged a couple of features for
+ neatness purposes
+
+ * ircd/ircd_features.c: cleaned up the macros some; rearranged
+ some code to all go into the switch; rearranged a couple of
+ features for neatness purposes
+
+2000-12-16 Greg Sikorski <gte@atomicrevs.demon.co.uk>
+ * ircd/os_bsd.c: Added os_set_tos for BSD users.
+
+2000-12-16 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_features.c: Isomer almost got it right; you need to
+ use F_I(), since it's an integer value, not a boolean value. The
+ asserts in feature_int would catch you out... Also made the F_*
+ macros take flags
+
+ * ircd/s_err.c: define RPL_PRIVS reply
+
+ * ircd/parse.c: put new PRIVS command into command table
+
+ * ircd/m_privs.c (mo_privs): message handler to report operator
+ privileges
+
+ * ircd/ircd_features.c: declare new features OPER_SET and
+ LOCOP_SET; redo boolean testing routine to accept TRUE, YES, and
+ ON for boolean TRUE, and FALSE, NO, and OFF for boolean FALSE
+
+ * ircd/client.c: simplify client_set_privs() with a table that
+ defines what features to test for; add new client_report_privs()
+
+ * ircd/Makefile.in: compile new m_privs.c; run make depend
+
+ * include/numeric.h (RPL_PRIVS): new reply numeric for displaying
+ an operator's privileges
+
+ * include/msg.h: define new command: PRIVS
+
+ * include/ircd_features.h: create new features OPER_SET and
+ LOCOP_SET for controlling access to /set
+
+ * include/handlers.h (mo_privs): declare message handler for
+ reporting oper privileges
+
+ * include/client.h (client_report_privs): declare function to
+ report what privileges an oper has
+
+ * ircd/m_whois.c (do_whois): fix a bug that caused /whois to
+ report that a user is an oper if the oper doing the /whois had
+ PRIV_SEE_OPERS
+
+2000-12-17 Isomer <Isomer@coders.net>
+ * ircd/listener.c: added support for TOS twiddling as a 'feature'.
+
+2000-12-17 Isomer <Isomer@coders.net>
+ * ircd/os_linux.c: add TOS stuffs
+
+ * ircd/listener.c: add TOS stuffs
+
+2000-12-16 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/whocmds.c (do_who): use HasPriv to determine whether or not
+ to indicate a user is an oper
+
+ * ircd/s_user.c: clear privileges setting when deopping; don't
+ propagate +o unless user has PRIV_PROPAGATE privilege
+
+ * ircd/s_debug.c (debug_serveropts): created debug_serveropts()
+ function and replaced how the server option string is generated
+
+ * ircd/parse.c: remove conditional on CONFIG_OPERCMDS
+
+ * ircd/m_whois.c (do_whois): use HasPriv to determine whether or
+ not to indicate the user is an operator
+
+ * ircd/m_who.c: use HasPriv to determine whether or not a user
+ should be displayed in the list of opers
+
+ * ircd/m_version.c: call debug_serveropts() to get server option
+ string
+
+ * ircd/m_userip.c (userip_formatter): use HasPriv to determine
+ whether or not to show oper status
+
+ * ircd/m_userhost.c (userhost_formatter): use HasPriv to determine
+ whether or not to show oper status
+
+ * ircd/m_restart.c (mo_restart): replace ugly #ifdef conditional
+ checks with HasPriv check; remove dead code
+
+ * ircd/m_rehash.c (mo_rehash): replace ugly #ifdef conditional
+ checks with HasPriv check
+
+ * ircd/m_opmode.c (mo_opmode): use HasPriv to check permissions;
+ use feature_bool to check if disabled
+
+ * ircd/m_oper.c (m_oper): set oper priviliges
+
+ * ircd/m_mode.c (m_mode): replace #ifdef conditional with HasPriv
+ check
+
+ * ircd/m_kill.c (mo_kill): use HasPriv checks to determine if we
+ can kill
+
+ * ircd/m_kick.c (m_kick): replace #ifdef conditional with HasPriv
+ check
+
+ * ircd/m_jupe.c (mo_jupe): rework permissions checking structure;
+ use feature_bool to check if disabled
+
+ * ircd/m_join.c (m_join): remove BADCHAN conditional; replace
+ #ifdef conditional with a HasPriv check
+
+ * ircd/m_gline.c (mo_gline): rework permissions checking
+ structure; use feature_bool to check if any part is disabled
+
+ * ircd/m_die.c: replace ugly #ifdef conditionals with HasPriv
+ check; remove dead code
+
+ * ircd/m_clearmode.c: use feature_bool() to detect if we're
+ disabled; use HasPriv to figure out what we're permitted to do;
+ only allow clearmode on moded channels
+
+ * ircd/ircd_features.c: define various features; use HasPriv to
+ verify permissions to set/reset
+
+ * ircd/gline.c (gline_add): use HasPriv instead of #ifdef
+ conditionals
+
+ * ircd/client.c (client_set_privs): function to set an oper's
+ privileges
+
+ * ircd/channel.c: use HasPriv calls instead of #ifdef conditionals
+
+ * include/whocmds.h: deconditionalize several macros and
+ substitute appropriate calls to HasPriv()
+
+ * include/s_debug.h: get rid of global serveropts[]; define new
+ function debug_serveropts() to build that string on the fly
+
+ * include/ircd_features.h: define some features
+
+ * include/client.h: add privs member to struct Connection; define
+ various priviledges
+
+ * include/channel.h: no longer using IsOperOnLocalChannel; remove
+ conditional of MAGIC_OPER_OVERRIDE on OPER_WALK_THROUGH_LMODES
+
+ * doc/Configure.help: remove help information for deprecated
+ options
+
+ * config/config-sh.in: remove certain deprecated options having to
+ do with what opers can and cannot do--first stage in moving
+ compile-time constants into the .conf
+
+2000-12-16 Isomer <Isomer@coders.net>
+ * ircd/parse.c: detect if the prefix is missing and try and recover
+ instead of coring.
+
+2000-12-15 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/ircd_log.c: found and fixed some bugs in the debug logging
+ code that would sometimes result in the log file not being
+ reopened--which meant that a user could connect and get the
+ logging output--oops
+
+ * ircd/Makefile.in: run make depend...
+
+ * ircd/s_stats.c: get rid of report_feature_list()
+
+ * ircd/s_err.c: add the 'bad value' error message, shift error
+ messages over somewhat
+
+ * ircd/s_debug.c (debug_init): call log_debug_init with the
+ use_tty flag
+
+ * ircd/s_conf.c (read_configuration_file): unmark features before
+ reading the config file, then reset unmarked features after
+ reading the config file
+
+ * ircd/m_stats.c: use feature_report() instead of
+ report_feature_list()
+
+ * ircd/ircd_log.c: fix log_debug_file (bogus assertion); add
+ special 'mark' flags and use them; add the stuff needed by the
+ features API
+
+ * ircd/ircd_features.c: rework the features API and add gobs of
+ comments to try to explain what some of these complex functions
+ are actually doing
+
+ * include/s_stats.h: get rid of report_feature_list(); use
+ feature_report() instead
+
+ * include/numeric.h: added a new error message and shifted old
+ values over some--this is, after all, an alpha
+
+ * include/ircd_log.h: log_debug_init now takes an integer to tell
+ it if it should be using the tty; added a couple of functions
+ required by the features API
+
+ * include/ircd_features.h: add an enum and some more functions to
+ flesh out the feature API--it should now be possible to put all
+ those compile-time constants in the config file!
+
+ * ircd/send.c: got the direction of the assert incorrect...
+
+ * ircd/send.c: implement the efficiency of flush_connections by
+ creating a linked list of struct Connection's with queued data;
+ also get rid of flush_sendq_except and make sure to yank
+ connections out of the list when their sendQs become empty (notice
+ the assertion in flush_connections!)
+
+ * ircd/s_bsd.c (close_connection): must yank the Connection out of
+ the sendq list
+
+ * ircd/list.c (dealloc_connection): must yank the Connection out
+ of the sendq list
+
+ * ircd/dbuf.c (dbuf_put): call flush_connections instead of the
+ deprecated flush_sendq_except
+
+ * ircd/client.c: define a couple new helper functions for sendq
+ threading--this will make the flush_connections function in send.c
+ considerably more efficient by creating a linked list of
+ Connections that have queued data to send
+
+ * include/send.h: remove flush_sendq_except, as it's not used
+ anymore
+
+ * include/client.h: declare a couple new helper functions for the
+ sendq threading system
+
+2000-12-14 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/m_ison.c (m_ison): Apply Diane Bruce's patch to make ISON
+ parse all arguments
+
+ * ircd/s_debug.c (count_memory): modify to report for clients and
+ connections, not local clients and remote clients
+
+ * ircd/list.c: fiddle with the client-fiddling functions to take
+ into account the divorce of struct Connection from struct Client
+
+ * ircd/ircd.c: define a struct Connection for me, initialize it,
+ and link it into the right place (ewww, globals!)
+
+ * include/client.h: remove CLIENT_{LOCAL,REMOTE}_SIZE; split
+ struct Client into struct Client and struct Connection; redefine
+ local-portion accessor macros to go through struct Client to the
+ struct Connection; define struct Connection accessor macros
+
+2000-12-13 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/whowas.c: missed a couple of accesses to a struct Client
+
+ * ircd/uping.c: missed a couple of accesses to a struct Client
+
+ * ircd/send.c: missed a couple of accesses to a struct Client
+
+ * ircd/s_user.c: missed a couple of accesses to a struct Client
+
+ * ircd/s_misc.c: missed a couple of accesses to a struct Client
+
+ * ircd/s_conf.c: missed a couple of accesses to a struct Client
+
+ * ircd/s_bsd.c: missed a couple of accesses to a struct Client
+
+ * ircd/s_auth.c: missed a couple of accesses to a struct Client
+
+ * ircd/res.c: missed a couple of accesses to a struct Client
+
+ * ircd/parse.c: missed a couple of accesses to a struct Client
+
+ * ircd/m_whois.c: use new accessor macros for struct Client
+
+ * ircd/m_who.c: use new accessor macros for struct Client
+
+ * ircd/m_wallchops.c: use new accessor macros for struct Client
+
+ * ircd/m_version.c: use new accessor macros for struct Client
+
+ * ircd/m_userip.c: use new accessor macros for struct Client
+
+ * ircd/m_userhost.c: use new accessor macros for struct Client
+
+ * ircd/m_user.c: use new accessor macros for struct Client
+
+ * ircd/m_uping.c: use new accessor macros for struct Client
+
+ * ircd/m_trace.c: use new accessor macros for struct Client
+
+ * ircd/m_topic.c: use new accessor macros for struct Client
+
+ * ircd/m_time.c: use new accessor macros for struct Client
+
+ * ircd/m_stats.c: use new accessor macros for struct Client
+
+ * ircd/m_squit.c: use new accessor macros for struct Client
+
+ * ircd/m_silence.c: use new accessor macros for struct Client
+
+ * ircd/m_server.c: use new accessor macros for struct Client;
+ remove dead code
+
+ * ircd/m_rpong.c: use new accessor macros for struct Client
+
+ * ircd/m_rping.c: use new accessor macros for struct Client
+
+ * ircd/m_quit.c: use new accessor macros for struct Client
+
+ * ircd/m_privmsg.c: use new accessor macros for struct Client
+
+ * ircd/m_pong.c: use new accessor macros for struct Client; remove
+ dead code
+
+ * ircd/m_ping.c: use new accessor macros for struct Client
+
+ * ircd/m_pass.c: use new accessor macros for struct Client
+
+ * ircd/m_part.c: use new accessor macros for struct Client
+
+ * ircd/m_oper.c: use new accessor macros for struct Client
+
+ * ircd/m_notice.c: use new accessor macros for struct Client
+
+ * ircd/m_nick.c: use new accessor macros for struct Client
+
+ * ircd/m_names.c: use new accessor macros for struct Client
+
+ * ircd/m_mode.c: use new accessor macros for struct Client
+
+ * ircd/m_map.c: use new accessor macros for struct Client
+
+ * ircd/m_list.c: use new accessor macros for struct Client
+
+ * ircd/m_links.c: use new accessor macros for struct Client;
+ remove some dead code
+
+ * ircd/m_kill.c: use new accessor macros for struct Client; remove
+ some dead code
+
+ * ircd/m_kick.c: use new accessor macros for struct Client
+
+ * ircd/m_join.c: use new accessor macros for struct Client; remove
+ some dead code
+
+ * ircd/m_ison.c: use new accessor macros for struct Client
+
+ * ircd/m_invite.c: use new accessor macros for struct Client
+
+ * ircd/m_info.c: use new accessor macros for struct Client
+
+ * ircd/m_gline.c: use new accessor macros for struct Client
+
+ * ircd/m_error.c: use new accessor macros for struct Client
+
+ * ircd/m_create.c: use new accessor macros for struct Client
+
+ * ircd/m_connect.c: use new accessor macros for struct Client;
+ removed some dead code
+
+ * ircd/m_burst.c: use new accessor macros for struct Client
+
+ * ircd/m_away.c: use new accessor macros for struct Client
+
+ * ircd/m_admin.c: use new accessor macros for struct Client
+
+ * ircd/hash.c: missed a couple of accesses to a struct Client
+
+ * ircd/gline.c: missed a couple of accesses to a struct Client
+
+ * ircd/crule.c: missed a couple of accesses to a struct Client
+
+ * ircd/class.c: missed an access to a struct Client
+
+ * ircd/channel.c: missed a couple of accesses to a struct Client
+
+ * ircd/IPcheck.c: missed an access to a struct Client
+
+ * include/querycmds.h: fix a couple of stats macros to use
+ structure accessor macros
+
+ * include/client.h: change structure member names to highlight any
+ places in the code I've missed
+
+2000-12-12 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/whowas.c: use new struct Client accessor macros
+
+ * ircd/whocmds.c: use new struct Client accessor macros
+
+ * ircd/send.c: use new struct Client accessor macros
+
+ * ircd/s_user.c: use new struct Client accessor macros; removed
+ some dead code
+
+ * ircd/s_serv.c: use new struct Client accessor macros; removed
+ some dead code
+
+ * ircd/s_numeric.c: use new struct Client accessor macros
+
+ * ircd/s_misc.c: use new struct Client accessor macros
+
+ * ircd/s_debug.c: use new struct Client accessor macros
+
+ * ircd/s_conf.c: use new struct Client accessor macros
+
+ * ircd/s_bsd.c: use new struct Client accessor macros
+
+ * ircd/s_auth.c: use new struct Client accessor macros
+
+ * ircd/parse.c: use new struct Client accessor macros
+
+ * ircd/packet.c: use new struct Client accessor macros
+
+ * ircd/numnicks.c: use new struct Client accessor macros
+
+ * ircd/motd.c: use new struct Client accessor macros
+
+ * ircd/listener.c: use new struct Client accessor macros
+
+ * ircd/list.c: use new struct Client accessor macros
+
+ * ircd/jupe.c: use new struct Client accessor macros
+
+ * ircd/ircd_snprintf.c: use new struct Client accessor macros
+
+ * ircd/ircd_reply.c: use new struct Client accessor macros
+
+ * ircd/ircd_relay.c: use new struct Client accessor macros
+
+ * ircd/ircd.c: use new struct Client accessor macros
+
+ * ircd/gline.c: catch some instances of me.<stuff> I missed
+ previously
+
+ * ircd/client.c: use cli_ instead of con_
+
+ * ircd/class.c: use cli_ instead of con_
+
+ * ircd/channel.c: use cli_ instead of con_
+
+ * ircd/IPcheck.c: use cli_ instead of con_; catch some instances
+ of me.<stuff> I missed previously
+
+ * include/client.h: use cli_ instead of con_...seemed like a good
+ idea at the time *shrug*
+
+2000-12-11 Kevin L. Mitchell <klmitch@mit.edu>
+
+ * ircd/hash.c: use struct Client accessor macros
+
+ * ircd/gline.c: use struct Client accessor macros
+
+ * ircd/crule.c: use struct Client accessor macros
+
+ * ircd/client.c: use struct Client accessor macros; remove some
+ dead code
+
+ * ircd/class.c: use struct Client accessor macros
+
+ * ircd/channel.c: use struct Client accessor macros; remove some
+ dead code
+
+ * ircd/IPcheck.c: use struct Client accessor macros
+
+ * include/numnicks.h: use struct Client accessor macros
+
+ * include/client.h: first step to divorcing struct Client and
+ struct Connection--define accessor macros and use them
+
+ * ircd/gline.c: When Uworld removed Uworld-set G-lines, only the
+ uplink would remove them. This is because the removal protocol
+ message wasn't being sent to the uplinks. This is fixed by fixing
+ propagate_gline() to send the proper number of arguments depending
+ on whether or not we're adding or deleting the Uworld gline, and
+ by having gline_deactivate() make sure to turn off the active bit
+ and call propagate_gline() if it's a Uworld gline
+
2000-12-10 Kevin L. Mitchell <klmitch@mit.edu>
* ircd/os_generic.c: make sure IOV_MAX gets defined, just in case