Author: Isomer <isomer@coders.net>
[ircu2.10.12-pk.git] / ChangeLog
index e9ed9b206987e3c409ffb52053d22c8734e932df..893eb71248ef2b3c1201475419f5d4889623ee41 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,602 @@
+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-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-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