Author: Alex Badea <vampire@p16.pub.ro>
[ircu2.10.12-pk.git] / ChangeLog
1 2002-06-04  Alex Badea  <vampire@p16.pub.ro>
2
3         * ircd/m_stats.c (report_servers_verbose): oops, fixed it so
4         it displays all servers, not just local connects
5
6 2002-05-30  Jean-Edouard Babin  <Jeb@jeb.com.fr>
7
8         * ircd/m_server.c (mr_server): fixed core bug on insufficient
9         arguments
10
11 2002-05-26  Jeekay  <jeekay@irc.planetarion.com>
12         
13         * ircd/m_join.c (HasControlChars): fixed unsigned vs signed
14
15 2002-05-26  Jeekay  <jeekay@irc.planetarion.com>
16  
17         * ircd/m_join.c (m_join,HasControlChars): check if a channel
18         name has any control chars (<=32) in it before allowing a
19         local user to join.
20  
21 2002-21-05 Andrew Miller <a1kmm@mware.virtualave.net>
22         * ircd/ircd_relay.c: stop an information leak about the
23         the network topography from relayed messages.
24
25 2002-04-19  Alex Badea  <vampire@p16.pub.ro>
26
27         * ircd/m_who.c (m_who): disallow non-opers to /who server.name
28
29 2002-04-18  Alex Badea  <vampire@p16.pub.ro>
30
31         * ircd/s_err.c (RPL_STATSILINE): connection classes are now
32         strings
33
34 2002-04-17  beware <steendijk@tomaatnet.nl>
35
36         * m_whois.c (m_whois): disallow remote queries for non-existent
37         local users when originated by a non-oper
38
39 2002-04-16  Alex Badea  <vampire@p16.pub.ro>
40
41         * ircd/s_user.c (hunt_server_cmd): also send a "no such server"
42         reply if the servername contains a '*' and it doesn't exist
43
44         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
45
46 2002-04-16  beware <steendijk@tomaatnet.nl>
47
48         * ircd/m_whois.c: the previous patch broke whois, fixed it
49         another way
50
51         * ircd/m_admin.c: cleaned up m_admin too while we're here,
52         hunt_server_cmd can do all the work for us
53
54 2002-04-15  Alex Badea  <vampire@p16.pub.ro>
55
56         * ircd/m_stats.c: added verbose server reporting (/stats v
57         or /stats V for machine-readable format) (bugzilla bug 52)
58
59         * include/numeric.h: added RPL_STATSVERBOSE 236
60
61         * ircd/s_err.c: added RPL_STATSVERBOSE
62
63         * ircd/s_stats.c: added help for stats 'v'
64
65 2002-04-15  Alex Badea  <vampire@p16.pub.ro>
66
67         * ircd/class.c (get_client_class): fixed typo which caused
68         /trace (and perhaps motd) to core
69
70 2002-04-15  beware <steendijk@tomaatnet.nl>
71
72         * ircd/m_whois.c: Fixed /whois servermask nomatch bug
73         where normal users could use the function to discover servers,
74         also the NOSUCHSERVER check code was missing.
75
76 2002-04-14  Alex Badea  <vampire@p16.pub.ro>
77
78         * ircd/ircd_parser.y: fixed cli_info(&me) not being set
79         from 'description' conf
80
81 2002-04-13  Stephane Thiell <mbuna@undernet.org>
82
83         * ircd/m_whois.c: removed FindUser() in ms_whois to fix
84         remote whois relaying.
85
86         * ircd/class.c: removed unused (and duplicated) code
87         get_client_ping().
88         
89         * include/class.h: removed unused function prototype.
90         
91         * config.guess: upgraded with latest
92         
93         * config.sub: upgraded with latest
94
95 2002-04-12  Alex Badea  <vampire@p16.pub.ro>
96
97         * ircd-patch: report which files failed the dry run (so the
98         user may force the patch if the rejects are in less-than-vital
99         files, such as ChangeLog or documentation)
100
101 2002-04-12  Alex Badea  <vampire@p16.pub.ro>
102
103         * ircd/m_invite.c: don't propagate invites for local channels
104
105         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
106
107 2002-04-10 Joseph Bongaarts <foxxe@wtfs.net>
108
109         * ircd/ircd.c: The last fix broke autoconnects completely.
110         Fixed it another way.
111         
112 2002-04-09  Brian Cline  <clineb@cs.winthrop.edu>
113
114         * ircd/ircd.c (try_connections): To avoid problems with infinite event
115         loops, don't try connecting to servers whose connect frequency is 0.
116         
117 2002-04-10  Alex Badea  <vampire@p16.pub.ro>
118
119         * ircd/ircd_parser.y: fixed a "features" block parse bug
120
121         * tools/convert-conf.py: added a configuration file converter
122         from 2.10.11 to 2.10.12 format
123
124         * ircd-patch: added GPL information to top of file
125
126 2002-04-09  Alex Badea  <vampire@p16.pub.ro>
127
128         * configure.in: added a human-readable report of configured
129         options at the end of the configure process
130
131         * configure: regenerated with autoconf
132
133 2002-04-08  Gavin Grieve  <ggrieve@ihug.co.nz>
134
135         * include/supported.h: change CHARSET to CASEMAPPING after
136         discussions as to what would be the preferred name.
137
138 2002-04-05 Andrew Miller <a1kmm@mware.virtualave.net>
139         * ircd/s_conf.c, ircd_parser.y, ircd_lexer.l: Add privilege
140         specification.
141         * Fix a minor parser bug that meant rehash didn't always
142         work correctly.
143
144 2002-04-03  Alex Badea  <vampire@p16.pub.ro>
145
146         * include/channel.h: fix compiler warnings (paratheses around &&)
147
148         * ircd/channel.c (modebuf_extract): fix compiler warnings
149         (uninitialized variables)
150
151         * ircd/Makefile.in: make ircd properly compile outside the
152         source tree
153
154 2002-04-03  Alex Badea  <vampire@p16.pub.ro>
155
156         * include/s_user.h: added a sptr parameter to InfoFormatter
157         function type
158
159         * ircd/m_who.c: don't match IPs for clients which have a hidden host,
160         except when the inquiring user is an oper
161
162         * ircd/whocmds.c: show the fake IP from FEAT_HIDDEN_IP if the
163         target has a hidden host, but show real IP to opers
164
165         * ircd/m_userip.c (userip_formatter): add sptr parameter; show the
166         fake IP from FEAT_HIDDEN_IP if the target has a hidden host, but
167         show real IP to opers
168
169         * ircd/m_userhost.c (userhost_formatter): add (unused) sptr parameter
170
171         * ircd/s_user.c (send_user_info): pass sptr to the formatting function
172
173         * include/ircd_features.h: new feature FEAT_HIDDEN_IP (stores which
174         fake IP to show for clients with a hidden host)
175
176         * ircd/ircd_features.c: new feature FEAT_HIDDEN_IP
177
178         * doc/example.conf: default value for FEAT_HIDDEN_IP
179
180         * doc/readme.features: documented FEAT_HIDDEN_IP
181
182 2002-04-03 Andrew Miller <a1kmm@mware.virtualave.net>
183         * doc/example.conf: Cleaned up some comments that ended up in
184           strange places due to problems in the merge process.
185         * ircd/m_nick.c: Cleaned up ms_nick, and fixed a bug that
186           probably dates back to Jarkko code.
187
188 2002-04-02  Kevin L Mitchell  <klmitch@mit.edu>
189
190         * ircd/m_kill.c: let ms_kill() and mo_kill() seperate the message
191         from the path before calling do_kill(); add a msg argument to
192         do_kill() and use it in preference to comment; remove all that old
193         code that fiddled with the buf and the comment
194
195         * ircd/ircd_log.c (log_write_kill): add a seperate msg argument
196
197         * include/ircd_log.h: add a seperate msg argument to
198         log_write_kill()
199
200         * ircd/ircd.c: display event engine and MAXCONNECTIONS information
201  
202 2002-04-02  Alex Badea <vampire@p16.pub.ro>
203
204         * ircd-patch: Automatically generate a version string from patches
205
206 2002-04-02  Alex Badea <vampire@p16.pub.ro>
207         
208         * ircd-patch: Test before doing anything dangerous, provide -f to
209                 to it anyway.  exit levels for easy scripting.
210
211 2002-04-01  Kevin L Mitchell  <klmitch@mit.edu>
212
213         * ircd/channel.c (joinbuf_join): don't add a channel to the list
214         in the joinbuf unless when we flush it, we empty the list
215
216 2002-04-02 Andrew Miller <a1kmm@mware.virtualave.net>
217         * ircd/ircd_parser.y: Added ircd parser, lexer, to replace the
218           old configuration file format.
219         * ircd/ircd_lexer.l
220         * ircd/s_conf.c
221         * doc/example.conf
222
223 2002-03-23 Bert Faes <bert.faes@pandora.be>
224
225         * s_misc.c made /trace reply always show the username
226         
227 2002-03-28  Kevin L Mitchell  <klmitch@mit.edu>
228
229         * configure.in: use AC_CHECK_FUNCS to define HAVE_* macros; test
230         for setrlimit, getrusage, and times
231
232         * configure: rerun auto-conf
233
234         * config.h.in: rerun autoheader
235
236 2002-03-27  Kevin L Mitchell  <klmitch@mit.edu>
237
238         * ircd/m_burst.c (ms_burst): use MODEBUF_DEST_NOKEY to suppress
239         sending of the key to the channel
240
241         * ircd/channel.c (modebuf_flush_int): when processing keys, only
242         include the actual key in the mode sent to the channel if
243         MODEBUF_DEST_NOKEY is not set
244
245         * include/channel.h: needed more bits for MODEBUF_DEST_*,
246         especially when adding MODEBUF_DEST_NOKEY to force keys in the
247         BURST to be reported as "*" to the channel
248
249         * ircd/m_oper.c (m_oper): clear the new oper's sendq so it gets
250         inherited from the class associated with the O-line
251
252 2002-03-25  Kevin L Mitchell  <klmitch@mit.edu>
253
254         * ircd/s_user.c (set_nick_name): invalidate all ban valid caching
255         when a user changes his nickname so we can catch if he now matches
256         a ban
257
258 2002-03-20 Reed Loden <reed@redmagnet.com>
259         * doc/example.conf: Added OPER_LIST_CHAN and LOCOP_LIST_CHAN.
260
261         * doc/readme.features: Added OPER_LIST_CHAN and LOCOP_LIST_CHAN.
262
263 2002-03-20 LordLuke <lordluke@undernet.org>
264         * ircd/client.c: Add LOCOP_LIST_CHAN feature.
265
266         * ircd/ircd_features.h: Add LOCOP_LIST_CHAN feature.
267
268 2002-03-19 Joseph Bongaarts <foxxe@wtfs.net>
269
270         * ircd/m_links.c: Make /links behave like /map for head_in_sand.
271         cleaned up excess code.
272
273         * ircd/map.c: Added map_dump_links_head_in_sand() Made changes in
274         map_add() and map_update() for links changes.
275
276         * include/map.h: Added info and prot to struct Map
277
278         * include/ircd_defs.h: Added MAP_CACHE_TIME for length of time
279         servers are cached in MapList
280
281         * ircd/s_misc.c: changed #ifdef for map_update()
282
283         * ircd/m_server.c: changed #ifdef for map_update()
284
285         * include/ircd_policy.h: added NO_HEAD_IN_SAND for easier removal of
286         hiding features.
287
288         * configure.in: add --disable-headinsand
289
290         * configure: Ran autoconf
291
292         * ircd/m_stats.c: Fixed a bug in /stats i and made /stats i show 
293         connect limits
294
295         * ircd/s_stats.c: Made /stats i report connect limits
296
297         * ircd/s_err.c: Modified RPL_STATSILINE to use %s instead of 
298         "*" for the password field.
299         
300 2002-03-19 LordLuke <lordluke@undernet.org>
301
302         * include/channel.h: Allow opers to view +s channels in /list
303
304         * include/client.h: Add "PRIV_LIST_CHAN" oper privilege
305
306         * include/ircd_features.h: added "LIST_CHAN" feature
307
308         * ircd/channel.c: Allow opers to view +s channels in /list
309
310         * ircd/client.c: Add "PRIV_LIST_CHAN"
311
312         * ircd/ircd_features.c: Add "LIST_CHAN" feature
313
314 2002-03-13 Joseph Bongaarts <foxxe@wtfs.net>
315
316         * ircd/m_kill.c: Last of the last of the bug fixes (Thanks Spike).
317         Must be more careful when forward porting by hand...
318         
319 2002-03-13  Carlo Wood  <run@alinoe.com>
320
321         * include/channel.h: CHFL_CHANNEL_MANAGER, new local
322         channel flag set when someone creates a channel or joins
323         using the Apass.  IsChannelManager(), SetChannelManager():
324         macros to manipulate new channel flag.
325         channel_modes: Added new argument to avoid calling
326         find_member_link more often than needed.
327
328         * include/numeric.h: RPL_APASSWARN, ERR_NOTLOWEROPLEVEL,
329         ERR_NOTMANAGER, ERR_CHANSECURED, ERR_UPASSSET,
330         ERR_UPASSNOTSET: new numeric replies.
331
332         * ircd/channel.c: is_level0_op: removed.
333         member_can_send_to_channel: disallow channel manager
334         to talk.  channel_modes: show upass to level0 ops.
335         mode_parse_upass: Only the channel manager is allowed
336         to change the upass.  Only allow to set upass when apass
337         is also set.  mode_parse_apass: Don't allow to change the
338         Apass if the channel is older than 48 hours.  Only allow
339         to remove the apass when upass is not set.  Send clear
340         warnings regarding the importance of apass.
341         mode_process_clients: Don't change the oplevel of an opped
342         member in a channel where upass is not set.
343
344         * ircd/destruct_event.c: exec_expired_destruct_events:
345         Bug fix: send DESTRUCT message when destructing a channel.
346
347         * ircd/m_destruct.c: ms_destruct: Bug fix: use self as
348         prefix for DESTRUCT message.
349
350         * ircd/m_join.c: m_join: Handle apass and upass.
351
352         * ircd/m_kick.c: m_kick: Don't allow to kick member with
353         a higher or equal op-level.
354
355         * ircd/m_mode.c: m_mode: Now pass member to channel_modes.
356         ms_mode: Allow server to do modes on channels with apass
357         set.
358
359         * ircd/s_err.c: RPL_APASSWARN, ERR_NOTLOWEROPLEVEL,
360         ERR_NOTMANAGER, ERR_CHANSECURED, ERR_UPASSSET,
361         ERR_UPASSNOTSET: new numeric replies.
362
363
364 2002-03-10 Joseph Bongaarts <foxxe@wtfs.net>
365
366         * ircd/m_kill.c: Last of the bug fixes for do_kill()
367
368         * ircd/list.c: Don't remove clients from the linked list
369         that aren't actually in the list.
370         
371 2002-03-08  Carlo Wood  <run@alinoe.com>
372         * include/channel.h: Added CHFL_BURST_ALREADY_OPPED
373         and CHFL_BURST_ALREADY_VOICED.
374
375         * ircd/m_burst.c: Allow BURST outside net-burst
376         and take into account that users are already joined
377         to the channel in that case.
378
379         * ircd/m_destruct.c: Implementation of DESTRUCT
380         handling code.
381
382         * ircd/m_join.c: Set the channel creationtime to
383         the timestamp of a message when that timestamp is
384         smaller.
385 2002-02-27 Reed Loden <reed@redmagnet.com>
386        * tools/crypter: Updated some variables, added another notice,
387        added CVS Id tag, and updated Perl location.
388
389        * tools/ringlog.c: Added IRC - Internet Relay Chat, 
390        tools/ringlog.c
391
392        * tools/ringlog.pl: Added IRC - Internet Relay Chat, 
393        tools/ringlog.pl
394
395        * tools/wrapper.c: Added IRC - Internet Relay Chat, 
396        tools/wrapper.c
397
398        * tools/mkpasswd.c: Added CVS Id tag
399
400        * tools/sums: Updated to comply with sums being moved to tools/
401        and added CVS Id tag
402
403        * tools/README: Updated location of file and partly rewrote to fit 
404        u2.10.11's Features
405
406        * tools/Makefile.crypt: Updated location of file and added CVS Id 
407        tag
408
409        * acconfig.h: Updated location of file
410
411        * config.h.in: Updated location of file
412
413        * tools/Bounce/bounce.conf: Added CVS Id tag
414
415        * tools/Bounce/Bounce.cpp: Updated location of file
416
417        * tools/Bounce/Bounce.h: Updated location of file
418
419        * tools/hashtoy: Added CVS Id Tag
420
421 2002-02-27  Carlo Wood  <run@alinoe.com>
422
423         * /ircd/ircd.c: check_pings: First check if a PING was sent at all.
424
425 2002-03-01  Carlo Wood  <run@alinoe.com>
426
427         * include/channel.h: struct Channel: new attribute destruct_event.
428         Prototype for destruct_channel().
429
430         * include/destruct_event.h: new header file for destruct_event.c.
431
432         * ircd/Makefile.in: New source file: destruct_event.c.
433
434         * ircd/channel.c: sub1_from_channel: Don't destruct channel
435         immedeately but instead schedule it for destruction after
436         some time when a channel becomes empty (and clear invite
437         only and limit in that case).
438         destruct_channel: new function, was previously the destructing
439         part of sub1_from_channel.
440         add_user_to_channel: remove destruction request if any.
441
442         * ircd/destruct_event.c: New file.  Implementation of functions
443         schedule_destruct_event_1m, schedule_destruct_event_48h,
444         remove_destruct_event and exec_expired_destruct_events.
445
446         * ircd/ircd.c: destruct_event_timer: new timer.
447         main: use destruct_event_timer to call exec_expired_destruct_events
448         once per minute.
449
450         * ircd/m_endburst.c: ms_end_of_burst: Don't complain about empty
451         channels.  Schedule new empty channels for destruction.
452
453         * ircd/m_join.c: m_join: Destruct just-created channel immedeately.
454
455 2002-03-01  Carlo Wood  <run@alinoe.com>
456         * ircd/s_misc.c: exit_client: Only call map_update()
457         for servers.
458
459 2002-02-28  Carlo Wood  <run@alinoe.com>
460         * include/channel.h: New attribute 'oplevel' in struct Membership.
461         Added defines MAXOPLEVELDIGITS and MAXOPLEVEL.
462         New macros:  OpLevel(member): returns op-level of member and
463         SetOpLevel(member, value): sets op-level of member.
464         Prototype of add_user_to_channel: add oplevel to parameters.
465         Prototype of mode_parse: add member to to parameters.
466
467         * include/numeric.h: added ERR_NOTLOWEROPLEVEL.
468
469         * ircd/s_err.c: idem.
470
471         * ircd/channel.c: Removed unmatched '{' braces from comments
472         (confuses vi).  add_user_to_channel: oplevel is passed to function
473         and added in the created MemberShip structure.  send_channel_modes:
474         Generate the nick:mode list of the BURST msg in the new style (with
475         op-levels).  DONE_UPASS/DONE_APASS: fixed typo in comment.  struct
476         ParseState: New attribute: member.  mode_process_clients: Disallow
477         deopping someone with an equal or higher op-level, take care of
478         inheritance of op-level.  mode_parse: member is passed to function      
479         and added in the created ParseState structure.  joinbuf_join: pass 0
480         as oplevel to add_user_to_channel as needed initialization of oplevel
481         in struct MemberShip.
482
483         * ircd/m_burst.c: ms_burst: Implementation of op-levels in the
484         decoding of a BURST message and passing on a BURST message.
485         Renamed default_mode to current_mode.
486
487         * ircd/m_mode.c: m_mode/ms_mode: pass on `member' to mode_parse.
488
489         * ircd/m_opmode.c: ms_opmode/mo_opmode: pass on NULL as member
490         to mode_parse (causes opped member to get op-level 0).                  
491
492 2002-02-25  Carlo Wood  <run@alinoe.com>
493         * include/channel.h: Added two new strings to struct Mode,
494         upass and apass, both with maximum length PASSLEN (a new
495         define in this file).  Two new mode defines MODE_UPASS and
496         MODE_APASS.
497
498         * ircd/channel.c: is_level0_op: Added as dummy function.
499         channel_modes/modebuf_flush_int/modebuf_extract/mode_parse:
500         Added support for MODE_APASS (+A) and MODE_UPASS (+u).
501         mode_parse_upass: New function to parse mode +u.
502         mode_parse_apass: New function to parse mode +A.
503
504         * ircd/s_err.c: Added 'A' and 'u' to mode list (RPL_MYINFO).            
505
506 2002-02-25  Carlo Wood  <carlo@alinoe.com>
507
508         * ircd/m_server.c: remove unused variables
509
510 2002-02-25 Joseph Bongaarts <foxxe@wtfs.net>
511
512         * ircd/m_map.c: Modified to show a useful output to non-opered
513           clients when HEAD_IN_SAND_MAP is defined. Servers are added to
514           the list when first seen (after receiving SERVER) and that list
515           is sent to clients. Servers are excluded from the list if they are
516           hubs, services, or have been missing for more than 1 week.
517         
518         * ircd/map.c: Created file for map_* functions
519
520         * include/map.h: Created file for map_* functions
521
522         * ircd/m_server.c: Added calls to map_update()
523
524         * ircd/s_misc.c: Added call to map_update()
525
526         * ircd/parse.c: Changed to use m_map() and mo_map()
527         
528 2002-02-22 Reed Loden <reed@redmagnet.com>
529
530        * ircd/m_connect.c: Removed an extra : in remote connect message.
531
532 2002-02-19 Joseph Bongaarts <foxxe@wtfs.net>
533
534         * ircd/whocmds.c: Local opers should also be able to
535         see servernames in /who
536
537         * ircd/gline.c: Fix core bug in gline_find()
538
539         * ircd/m_kill.c: Bug fix for HIS_KILLWHO
540
541 2002-02-19 John Buttery <john@io.com>
542
543         * ircd/ircd.c: Updated "No such file" error message.
544         
545 2002-02-18 Joseph Bongaarts <foxxe@wtfs.net>
546
547         * ircd/m_kill.c: Changed m_kill() to do_kill() because its not
548         a message handler, and some general cleanups and bug fixes. 
549
550         * include/ircd_policy.h: Added HEAD_IN_SAND_KILLWHO for hiding
551         kill source.
552         
553 2002-02-16  Tim Vogelsang <net@astrolink.org>
554
555         * ircd/m_kill.c: added a new static function, m_kill, which
556         performs the actual kill.
557         
558 2002-02-14 Joseph Bongaarts <foxxe@wtfs.net>
559
560         * Added support for LIST STOP
561         
562 2002-02-13 Joseph Bongaarts <foxxe@wtfs.net>
563
564         * Merged changes from u2_10_11 to main branch.
565         
566 2002-02-08  Tim Vogelsang  <net@astrolink.org>
567
568        * ircd/m_quit.c: don't prefix user quits with "Quit:" unless a
569        reason is supplied.
570
571 2002-02-06  Kevin L Mitchell  <klmitch@mit.edu>
572
573         * ircd/s_auth.c (read_auth_reply): left out an = in an
574         assertion--shouldn't have had any impact, though
575
576         * ircd/Makefile.in: add a hook for using ringlog; run make depend
577
578         * tools/ringlog.c: for the heck of it, add a comment including
579         rules for /etc/magic
580
581 2002-02-05  Kevin L Mitchell  <klmitch@mit.edu>
582
583         * tools/ringlog.pl: perl script to take output from ringlog and
584         pass it to addr2line to get function, file, and line number
585         information
586
587         * tools/ringlog.c: program/object to help in building function
588         trace information
589
590 2002-02-04  Alex Badea  <vampire@p16.pub.ro>
591
592         * include/ircd_features.h: added new feature MOTD_BANNER
593
594         * ircd/ircd_features.c: added new feature MOTD_BANNER
595
596         * ircd/motd.c (motd_signon): send a one-line banner from
597         FEAT_MOTD_BANNER if it's not NULL and FEAT_NODEFAULTMOTD
598         is set
599
600         * doc/example.conf: default value for MOTD_BANNER feature
601
602         * doc/readme.features: documented the MOTD_BANNER feature
603
604 2002-02-04  Kevin L Mitchell  <klmitch@mit.edu>
605
606         * ircd/s_debug.c (debug_serveropts): remove deprecated CHROOTDIR
607         check; added character 'A' to the server options string to
608         indicate when assertion checking is enabled
609
610 2002-02-03  Kevin L Mitchell  <klmitch@mit.edu>
611
612         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
613
614         * ircd/engine_kqueue.c (set_or_clear): don't generate an ET_ERROR
615         event if the errno is EBADF, since the caller probably already
616         knows about it and just hasn't gotten around to processing it yet
617
618         * ircd/ircd_events.c: set the GEN_ERROR flag if an ET_ERROR event
619         is generated; don't process socket_events() or socket_state() if
620         an error occurred; add GEN_ERROR to list of flags in gen_flags()
621
622         * include/ircd_events.h: define new GEN_ERROR flag; add a macro to
623         clear it
624
625 2002-02-01  Kevin L Mitchell  <klmitch@mit.edu>
626
627         * ircd/channel.c: change make_nick_user_{ip,host} to not use a
628         static buffer--instead, a buffer of the right size (NUH_BUFSIZE or
629         NUI_BUFSIZE--I confess they're not well-named) is allocated by the
630         caller
631
632 2002-02-02  Alex Badea  <vampire@p16.pub.ro>
633
634         * include/client.h: added user flag FLAGS_HIDDENHOST
635
636         * include/ircd_features.h: added FEAT_HOST_HIDING and
637         FEAT_HIDDEN_HOST
638
639         * include/numeric.h: defined numeric 338 (RPL_WHOISACTUALLY)
640         to report real hostnames and IPs to opers
641
642         * include/s_user.h: exported hide_hostmask()
643
644         * include/send.h: changed sendcmdto_channel_butserv to
645         sendcmdto_channel_butserv_butone; ditto for
646         sendcmdto_common_channels
647
648         * include/struct.h: added realhost to struct User
649
650         * include/whowas.h: added realhost to struct Whowas
651
652         * ircd/channel.c: match bans against both real and hidden
653         hostmasks; moved some calls to use sendcmdto_*_butone
654
655         * ircd/gline.c: match glines agains real host
656
657         * ircd/ircd_features.c: added FEAT_HOST_HIDING and
658         FEAT_HIDDEN_HOST
659
660         * ircd/m_account.c: call hide_hostmask() for possibly
661         hiding the user's host
662
663         * ircd/m_burst.c: moved some calls to use sendcmdto_*_butone
664
665         * ircd/m_topic.c: moved some calls to use sendcmdto_*_butone
666
667         * ircd/m_userip.c: report IP 127.0.0.1 if the user has a hidden
668         host
669
670         * ircd/m_who.c: match real hosts, if the query comes from an oper
671
672         * ircd/m_whois.c: report real hostname and IP to opers
673
674         * ircd/m_whowas.c: report real hostname to opers
675
676         * ircd/s_err.c: added user mode 'x' to the list of supported user
677         modes in RPL_MYINFO (004); added RPL_WHOISACTUALLY for reporting
678         real hostnames to opers
679
680         * ircd/s_misc.c: moved some calls to use sendcmdto_*_butone
681
682         * ircd/s_serv.c: send real hostname to servers
683
684         * ircd/s_user.c: send real hostname to servers; added processing
685         of usermode 'x'; added hide_hostmask() which actually does the work
686         of hiding a user's host; moved some calls to use sendcmdto_*_butone
687
688         * ircd/send.c: changed sendcmdto_channel_butserv to
689         sendcmdto_channel_butserv_butone; ditto for
690         sendcmdto_common_channels
691
692         * ircd/whocmds.c: extra letter 'x' in WHO reply if the user has
693         it's host hidden
694
695         * ircd/whowas.c: if needed, store a user's real host so we can
696         report it to opers later
697
698         * doc/readme.features: documented HOST_HIDING and HIDDEN_HOST
699         features
700
701         * doc/example.conf: default values for HOST_HIDING and
702         HIDDEN_HOST features
703
704 2002-02-01  Tim Vogelsang  <net@astrolink.org>
705
706         * ircd/send.c (sendwallto_group_butone): don't sent wallops to
707         ordinary users
708
709 2002-01-28  Kevin L Mitchell  <klmitch@mit.edu>
710
711         * ircd/jupe.c (jupe_activate): remove a bogus assertion
712
713         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
714
715         * ircd/s_err.c: added new channel mode 'r' to list of supported
716         channel modes in RPL_MYINFO (004); migrated RPL_USERIP to use
717         numeric 340 instead of 307; add ERR_NEEDREGGEDNICK (477) for
718         informing users why they can't join a +r channel
719
720         * ircd/m_clearmode.c (do_clearmode): add support for MODE_REGONLY
721         (+r) to do_clearmode(); note that it is *not* being added to the
722         default clearmode mask!
723
724         * ircd/channel.c: don't allow non-+r users to send messages to +r
725         channels from off the channel; add support for MODE_REGONLY (+r)
726         to channel_modes(); don't allow non-+r users to join +r channels
727         without an invite; add support for MODE_REGONLY to the modebuf_*()
728         family of functions (changes in modebuf_flush_int(),
729         modebuf_mode(), and modebuf_extract()); add support for
730         MODE_REGONLY to mode_parse()
731
732         * include/supported.h (FEATURESVALUES2): added the new channel
733         mode 'r' to the list of supported channel modes
734
735         * include/numeric.h: move RPL_USERIP to 340 to avoid the 307
736         conflict; add ERR_NEEDREGGEDNICK (477) for the new +r channels
737
738         * include/channel.h: remove unused MODE_SENDTS; add new
739         MODE_REGONLY
740
741         * ircd/s_bsd.c (read_packet): remove call to timer_verify()
742
743         * ircd/list.c: remove calls to timer_verify() from
744         alloc_connection() and dealloc_connection()
745
746         * ircd/ircd_events.c: turn off timer_verify(); remove calls to it
747         from timer_run()
748
749 2002-01-27  Kevin L Mitchell  <klmitch@mit.edu>
750
751         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
752
753         * ircd/ircd_events.c (timer_run): why did I ever use a next
754         pointer when the algorithm guarantees that the head pointer will
755         always be the next pointer?
756
757 2002-01-26  Kevin L Mitchell  <klmitch@mit.edu>
758
759         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
760
761         * ircd/s_bsd.c (read_packet): call timer_verify() after adding the
762         client process timer to catch any list corruption
763
764         * ircd/list.c: surround alloc_connection() and
765         dealloc_connection() with calls to timer_verify()
766
767         * ircd/ircd_events.c: add sledgehammer known as timer_verify() to
768         verify the timer list's structure; call it around timer_run()
769
770 2002-01-22  Kevin L Mitchell  <klmitch@mit.edu>
771
772         * ircd/send.c (sendcmdto_common_channels): don't send message to a
773         channel that the source is a zombie on
774
775 2002-01-13  Kevin L Mitchell  <klmitch@mit.edu>
776
777         * ircd/ircd_events.c (timer_enqueue): one more assertion--make
778         sure a timer has the ACTIVE flag set before enqueueing the timer
779
780         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
781
782         * ircd/list.c (dealloc_connection): assert that the process timer
783         has been removed from the timer queue before dealloc_connection()
784         is called
785
786 2002-01-12  Kevin L Mitchell  <klmitch@mit.edu>
787
788         * ircd/res.c: don't accept T_A when we're looking for T_PTR
789
790         * ircd/channel.c (modebuf_flush_int): nuke the code that would
791         send a HACK DESYNCH notice on a HACK(2)--it would be far too
792         chatty
793
794         * ircd/m_away.c (user_set_away): use AWAYLEN instead of TOPICLEN
795
796         * include/supported.h: add AWAYLEN to the list of supported
797         features
798
799         * include/ircd_defs.h: add AWAYLEN to specify the maximum length
800         of an away message
801
802         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
803
804         * ircd/m_mode.c (m_mode): pass extra parameter to channel_modes()
805
806         * ircd/channel.c: pass a buflen parameter to channel_modes() for
807         pbuf--we were using sizeof(pbuf), which would always be
808         sizeof(char*) before; change send_channel_modes() to pass extra
809         parameter to channel_modes()
810
811         * include/channel.h: pass a buflen parameter to channel_modes()
812         for pbuf
813
814         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
815
816         * ircd/uping.c (uping_start): initialize some timers
817
818         * ircd/s_bsd.c (read_packet): use new t_onqueue() macro to figure
819         out when we need to re-add the process timer
820
821         * ircd/s_auth.c (make_auth_request): initialize a timer
822
823         * ircd/res.c (init_resolver): initialize some timers
824
825         * ircd/list.c (alloc_connection): initialize the client process
826         timer
827
828         * ircd/ircd_events.c: add a function, timer_init(), to initialize
829         a struct Timer; recast timer_add() to catch when adding a marked
830         timer and not re-enqueue it--but mark it for re-enqueuing; update
831         timer_del() to turn off the GEN_READD flag and to ignore reference
832         counts when destroying the timer--we're using GEN_MARKED as an
833         ersatz referance count; changed timer_run() to work with the new
834         way of doing things; add GEN_ACTIVE and GEN_READD to gen_flags()'s
835         map[]
836
837         * ircd/ircd.c: initialize some timers
838
839         * ircd/engine_select.c (engine_loop): initialize a timer
840
841         * ircd/engine_poll.c (engine_loop): initialize a timer
842
843         * ircd/engine_kqueue.c (engine_loop): initialize a timer
844
845         * ircd/engine_devpoll.c (engine_loop): initialize a timer
846
847         * ircd/IPcheck.c (IPcheck_init): initialize a timer
848
849         * include/ircd_events.h: add GEN_READD flag for timers to indicate
850         that a timer must be readded; add t_onqueue() macro to check to
851         see if a timer is on the queue (this is a hack, though); added
852         timer_init() to initialize a struct Timer--we're no longer doing
853         the initialization in timer_add()
854
855 2002-01-11  Kevin L Mitchell  <klmitch@mit.edu>
856
857         * ircd/engine_devpoll.c (engine_loop): relocate an assertion to
858         prevent a core bug *in* the assertion
859
860         * doc/readme.features: document new POLLS_PER_LOOP feature; change
861         documentation to reflect that OPER_SET now defaults to FALSE
862
863         * doc/p10.html: documented the new ACCOUNT stuff
864
865         * doc/example.conf: document new POLLS_PER_LOOP default; change
866         default for OPER_SET
867
868         * RELEASE.NOTES: changed documentation to reflect the fact that
869         assertions are now enabled by default and do not cause memory
870         leaks
871
872         * ircd/res.c (make_cache): removed a bogus assertion we probably
873         never caught because assertions haven't been enabled on production
874         servers for any length of time before
875
876         * ircd/engine_devpoll.c (engine_loop): ditto for POLLS_PER_DEVPOLL
877
878         * ircd/engine_kqueue.c (engine_loop): stupid me forgot one
879         instance of POLLS_PER_KQUEUE
880
881         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
882
883         * ircd/s_bsd.c (client_timer_callback): only clear the
884         FREEFLAG_TIMER flag when the timer is being destroyed
885
886         * ircd/ircd_features.c: create a new feature, POLLS_PER_LOOP, and
887         default it to 200; turn OPER_SET off by default
888
889         * ircd/engine_kqueue.c: dynamically allocate and reallocate the
890         array of events to obtain from the kernel
891
892         * ircd/engine_devpoll.c: dynamically allocate and reallocate the
893         array of events to obtain from the kernel
894
895         * include/ircd_features.h: add a new feature for tuning how many
896         events to get from the kernel, for engines that support that
897
898         * ircd/Makefile.in: re-run make depend to correct dependancies
899
900         * ircd/m_who.c: remove unneeded inclusion of list.h
901
902         * ircd/ircd_events.c: remove unneeded inclusion of list.h
903
904         * ircd/whocmds.c (do_who): hide server name in /who unless
905         requester is an operator; simplify hop count insertion
906
907         * ircd/s_misc.c (exit_one_client): make sure client's snomask is
908         cleared
909
910         * ircd/parse.c: use mo_version and mo_admin when opers do /version
911         or /admin
912
913         * ircd/m_whowas.c (m_whowas): use HEAD_IN_SAND_SERVERNAME instead
914         of the static string "*.undernet.org"
915
916         * ircd/m_version.c: only let ordinary users get version
917         information for the server they are on
918
919         * ircd/m_admin.c: only let ordinary users get admin information
920         for the server they are on
921
922         * ircd/channel.c (client_can_send_to_channel): check is_banned()
923         before letting the client speak on a channel s/he is not on
924
925         * include/supported.h: add NETWORK to feature list
926
927         * include/handlers.h: declare mo_admin() and mo_version()
928
929 2002-01-10  Kevin L Mitchell  <klmitch@mit.edu>
930
931         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
932
933         * ircd/s_debug.c (count_memory): conditionalize on MDEBUG instead
934         of !NDEBUG
935
936         * ircd/m_stats.c: conditionalize /stats M on MDEBUG instead of
937         !NDEBUG
938
939         * ircd/ircd_alloc.c: conditionalize on MDEBUG instead of on
940         !NDEBUG
941
942         * ircd/fda.c: conditionalize on MDEBUG instead of on !NDEBUG
943
944         * ircd/Makefile.in: run make depend on chkconf.c as well
945
946         * include/ircd_alloc.h: instead of conditionalizing on !NDEBUG,
947         conditionalize on MDEBUG
948
949         * include/fda.h: instead of conditionalizing on !NDEBUG,
950         conditionalize on MDEBUG
951
952         * configure: rebuild configure script
953
954         * configure.in: enable assertion checking by default, since we
955         have now decoupled memory debugging from the NDEBUG macro
956
957         * ircd/s_user.c (set_nick_name): remove calls to
958         verify_client_list()
959
960         * ircd/s_misc.c (exit_one_client): remove calls to
961         verify_client_list()
962
963         * ircd/s_conf.c (rehash): remove calls to verify_client_list()
964
965         * ircd/m_who.c (m_who): remove calls to verify_client_list()
966
967         * ircd/list.c: remove calls to verify_client_list(); keep
968         verify_client_list() around just in case we ever need it again,
969         but never compile it in
970
971         * ircd/ircd_events.c (event_execute): remove calls to
972         verify_client_list()
973
974         * ircd/client.c (client_get_ping): remove calls to
975         verify_client_list()
976
977         * include/list.h (send_listinfo): remove temporary debugging
978         function verify_client_list()
979
980         * ircd/uping.c: don't die if the event type is ET_ERROR in socket
981         callback functions
982
983         * ircd/res.c (res_callback): don't die if the event type is
984         ET_ERROR
985
986         * ircd/listener.c (accept_connection): don't die if the event type
987         is ET_ERROR
988
989 2002-01-09  Kevin L Mitchell  <klmitch@mit.edu>
990
991         * ircd/s_user.c (set_nick_name): bracket call to
992         add_client_to_list() with calls to verify_client_list()
993
994         * include/patchlevel.h (PATCHLEVEL): bump patchlevel (again)
995
996         * ircd/list.c (verify_client_list): add a probabilistic loop
997         detector: for every client added, there is a 2% probability that
998         it will be used to replace the value of sentinel; if at any time,
999         sentinel is found again, we know we're in a loop
1000
1001         * ircd/ircd_events.c (event_execute): add verify_client_list()
1002         calls wrapping event_execute; at the very least, I'll figure out
1003         what event the corruption occurred in
1004
1005         * ircd/list.c: moved verify_client_list() to try to keep it from
1006         being inlined
1007
1008         * ircd/Makefile.in (version.c): version.c wasn't dependant on
1009         version.h and patchlevel.h, like it was supposed to be
1010
1011         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
1012
1013         * ircd/s_auth.c (destroy_auth_request): overload send_reports
1014         argument to also indicate whether or not to call
1015         release_auth_client() and thereby enter the client into the linked
1016         list
1017
1018         * ircd/engine_devpoll.c (engine_loop): remove bogus assertion
1019
1020         * include/patchlevel.h (PATCHLEVEL): bump patchlevel
1021
1022         * ircd/list.c (free_client): verify that destroy_auth_request()
1023         didn't automagically re-add us to the list; we might have to think
1024         about this interaction more carefully, actually
1025
1026         * ircd/s_auth.c (auth_kill_client): zero the auth pointer before
1027         calling free_client(); otherwise, free_client() will try to free
1028         the auth by calling destroy_auth_request(), which will call
1029         add_client_to_list()
1030
1031         * ircd/s_misc.c (exit_one_client): liberally sprinkle calls to
1032         verify_client_list() around to catch any corruption that might
1033         occur here
1034
1035         * ircd/s_conf.c (rehash): liberally sprinkle calls to
1036         verify_client_list() here, since this is about the only routine I
1037         can think of that could cause the "core on kill -HUP" bug
1038
1039         * ircd/m_who.c: sprinkle calls to verify_client_list() around
1040         liberally, since we've seen crashes here; temporarily include the
1041         otherwise unneeded list.h header
1042
1043         * ircd/list.c: sprinkle calls to verify_client_list() around quite
1044         liberally; add debugging asserts to list manipulation functions to
1045         catch strange settings for next and prev pointers; define
1046         verify_client_list(), which walks the client list and verifies
1047         that everything is as it's supposed to be
1048
1049         * ircd/client.c: wrap client_get_ping with calls to
1050         verify_client_list() to see if that's where we're dying
1051
1052         * include/patchlevel.h (PATCHLEVEL): bump to 03
1053
1054         * include/list.h: declare verify_client_list() if DEBUGMODE
1055         enabled; otherwise, define it to be empty
1056
1057 2002-01-08  Kevin L Mitchell  <klmitch@mit.edu>
1058
1059         * ircd/m_quit.c (m_quit): remove an unused variable
1060
1061         * include/patchlevel.h (PATCHLEVEL): bump PATCHLEVEL to 2
1062
1063         * ircd/s_user.c: when building the user mode to send to the user,
1064         don't include +r; add an extra set of parens to squelch a warning
1065
1066         * ircd/m_quit.c (m_quit): use exit_client_msg()
1067
1068         * include/patchlevel.h (PATCHLEVEL): bump patch level, so we can
1069         keep track of who's running what version
1070
1071         * ircd/m_squit.c (ms_squit): remove debugging calls to
1072         protocol_violation()
1073
1074         * Makefile.in: change MAKEFILES to IRCD_MAKEFILES to work around a
1075         new gmake "feature" (pull-up from trunk)
1076
1077         * ircd/m_quit.c (m_quit): prefix user quits with "Quit:" (pull-up
1078         from trunk)
1079
1080 2002-01-07  Kevin L Mitchell  <klmitch@mit.edu>
1081
1082         * ircd/s_user.c: add FLAGS_ACCOUNT, represented as 'r', to the
1083         list of user modes; process account name as part of user mode in
1084         NICK decoding (set_nick_name()); add account name to usermode when
1085         building the usermode to incorporate in outgoing NICK messages
1086
1087         * ircd/s_err.c: add RPL_WHOISACCOUNT for reporting what account a
1088         user is logged in to
1089
1090         * ircd/parse.c: define the new ACCOUNT command, usable only by
1091         servers and ignored by everything else
1092
1093         * ircd/m_whois.c: report what account name is associated with a
1094         user, if any
1095
1096         * ircd/m_account.c: implement the ACCOUNT command
1097
1098         * ircd/Makefile.in: add m_account.c to the list of sources; ran
1099         make depend
1100
1101         * include/struct.h: add an account field to struct User
1102
1103         * include/numeric.h: add a reply, RPL_WHOISACCOUNT, for reporting
1104         what username a user is logged in under
1105
1106         * include/msg.h: add ACCOUNT command and token (AC)
1107
1108         * include/ircd_defs.h: define ACCOUNTLEN to be 12--this matches
1109         the maximum length of a username for X
1110
1111         * include/handlers.h: add declaration for ms_account()
1112
1113         * include/client.h: add FLAGS_ACCOUNT to flag when a user account
1114         name has been set; added FLAGS_ACCOUNT to SEND_UMODES; added
1115         IsAccount() and SetAccount() to manipulate the flag
1116
1117         * ircd/m_squit.c (ms_squit): if we call FindNServer() on a server
1118         name like "Amsterdam2.NL.EU.undernet.org", we get the struct
1119         Client for the server with numeric "Am", which happens to be
1120         stockholm!  To fix this, we look up the full name *first*; if that
1121         doesn't get it, *then* we look up by numeric.
1122
1123 2001-12-24  Perry Lorier <isomer@coders.net>
1124         * ircd/m_server.c: cleanups, maybe this will make the bug easier
1125         to find.
1126
1127         * ircd/m_stats.c: display maximum number of connects in an I:
1128
1129 2001-11-22  Perry Lorier  <isomer@coders.net>
1130         * ircd/m_squit.c: Bug fix in squit
1131
1132 2001-11-03  Greg Sikorski <gte@atomicrevs.demon.co.uk>
1133         * ircd/parse.c, include/handlers.h: Give remote whois the correct
1134         handler.
1135         
1136 2001-11-01  Kevin L Mitchell  <klmitch@mit.edu>
1137
1138         * ircd/send.c: some minor white-space fiddling; recast selector
1139         test in sendwallto_group_butone() to remove a warning regarding
1140         putting & within parentheses
1141
1142         * ircd/m_create.c (ms_create): use time_t instead of int as a
1143         declaration for rate
1144
1145         * ircd/ircd_reply.c (protocol_violation): it's supposed to be
1146         WALL_DESYNCH, not CMD_DESYNCH, if I understand things right--no
1147         wonder we weren't seeing any protocol violations!
1148
1149         * include/send.h: include time.h for time_t; move WALL_* closer to
1150         the function they're used in; some white-space fiddling; add
1151         declaration of sendto_opmask_butone_ratelimited()
1152
1153         * ircd/m_squit.c (ms_squit): add protocol_violation() calls in the
1154         cases where we ignore a squit, so we aren't taken by surprise, at
1155         least...
1156
1157         * ircd/m_create.c (ms_create): Display origin server, not origin
1158         user
1159
1160         * ircd/m_create.c (ms_create): Fix "Timestamp drift" server notice
1161
1162 2001-10-31  Perry Lorier  <isomer@coders.net>
1163         * include/m_ping.c: Forward port ping bug
1164
1165 2001-10-31  Perry Lorier  <isomer@coders.net>
1166         * include/patchlevel.h: We're beta now
1167
1168 2001-10-31  Perry Lorier  <isomer@coders.net>
1169         * ircd/s_user.c: fixed hunt_server
1170
1171 2001-09-21  Perry Lorier  <isomer@coders.net>
1172         * ircd/send.c and various: replace sendcmdto_flag_butone with
1173         sendwallto_group_butone
1174
1175 2001-09-21  Vampire-  <unknown>
1176         * ircd/ircd_string.c: unique_name_vector round II.
1177
1178 2001-09-21  mbuna  <mbuna@undernet.org>
1179         * configure.in: Add support for darwin
1180
1181 2001-09-21  Perry Lorier  <isomer@coders.net>
1182         * ircd/s_user.c I'm stupid, s/acptr/from/, Hektik pointed it out
1183
1184 2001-09-20  Perry Lorier  <isomer@coders.net>
1185
1186         * Pullups from 2.10.10.pl16
1187         * Added some warnings, and the concept of rate limited snotices
1188
1189 2001-08-31  Kevin L Mitchell  <klmitch@mit.edu>
1190
1191         * ircd/channel.c: use "%u" to format limit arguments; use
1192         strtoul() to process limit arguments in a /mode command--note:
1193         most clients seem to truncate the integer, probably because
1194         they're using atoi, and perhaps signed ints
1195
1196 2001-08-17  Kevin L Mitchell  <klmitch@mit.edu>
1197
1198         * ircd/numnicks.c: include stdlib.h for exit()
1199
1200         * ircd/ircd_log.c: include stdlib.h for exit()
1201
1202         * ircd/ircd_events.c: include stdlib.h for exit()
1203
1204         * ircd/s_stats.c: remove description of /stats v, since it's gone
1205
1206         * ircd/m_wallops.c (mo_wallops): add "*" to the beginning of
1207         /wallops to distinguish wallops from wallusers
1208
1209         * ircd/m_error.c (mr_error): ignore ERROR from clients that aren't
1210         in the "handshake" or "connecting" states--I think the latter will
1211         never happen, but...
1212
1213         * doc/Authors: apply delete's Authors patch
1214
1215         * RELEASE.NOTES: rewrite RELEASE.NOTES, basing it a little on
1216         Braden's version
1217
1218         * README: rewrite README
1219
1220 2001-07-31  Kevin L. Mitchell  <klmitch@mit.edu>
1221
1222         * ircd/s_serv.c (server_estab): remove unused variable split
1223
1224         * ircd/parse.c: add mr_error to the parse table
1225
1226         * ircd/m_error.c (mr_error): add mr_error() to handle ERRORs from
1227         unregistered connections--if IsUserPort() is true, the ERROR is
1228         ignored, otherwise, the message is saved
1229
1230 2001-07-28  Kevin L. Mitchell  <klmitch@mit.edu>
1231
1232         * ircd/m_kill.c (ms_kill): another minor typo *sigh*
1233
1234         * ircd/s_user.c (send_supported): oops, minor typo...
1235
1236         * ircd/s_user.c: implement send_supported() to send two ISUPPORT
1237         messages containing our feature buffers; make register_user() use
1238         send_supported()
1239
1240         * ircd/s_misc.c (exit_client): make sure not to give away a remote
1241         server in the ERROR message sent to the client; if the killer is a
1242         server, we substitute our name in its place
1243
1244         * ircd/m_version.c (m_version): use send_supported() to send the
1245         ISUPPORT values to the user
1246
1247         * ircd/m_nick.c: shave nick collision kills here a bit, too, for
1248         the same reasons as for m_kill.c
1249
1250         * ircd/m_kill.c: shave kills a bit so that the results look
1251         exactly the same no matter where you are; if we didn't do this, it
1252         would be possible to map the network by looking at the differences
1253         between kills originating under various circumstances
1254
1255         * include/supported.h: split the features into two, so as to not
1256         bust the parameter count when sending the features list
1257
1258         * include/s_user.h: declare new send_supported() function to send
1259         the ISUPPORT information
1260
1261 2001-07-27  Kevin L. Mitchell  <klmitch@mit.edu>
1262
1263         * ircd/s_bsd.c: disable IP (*not* TCP) options to prevent
1264         source-routed spoofing attacks; this is only available under
1265         u2.10.11, so don't even bother, since no one but testers are using
1266         the source base
1267
1268 2001-07-25  Kevin L. Mitchell  <klmitch@mit.edu>
1269
1270         * include/ircd_policy.h: enable HEAD_IN_SAND_REMOTE by default
1271
1272         * ircd/s_err.c: put in a . for reporting link version on /trace,
1273         to match what /version does
1274
1275 2001-07-21  Kevin L. Mitchell  <klmitch@mit.edu>
1276
1277         * ircd/s_misc.c (exit_client): servers don't understand what the
1278         numeric nick ERROR is supposed to mean, so they ignore error
1279         messages, resulting in not knowing why we were rejected; use
1280         sendcmdto_one for servers and sendrawto_one for clients
1281
1282 2001-07-17  Kevin L. Mitchell  <klmitch@mit.edu>
1283
1284         * ircd/m_burst.c (ms_burst): in the case of a modeless channel and
1285         a nick collide, a bare BURST may be propagated; adjust the
1286         enforced parameter count to accept the bare BURST
1287
1288 2001-07-12  Kevin L. Mitchell  <klmitch@mit.edu>
1289
1290         * ircd/s_bsd.c: mark a client as having been IP checked
1291
1292         * ircd/IPcheck.c (ip_registry_check_remote): remove unneeded
1293         second call to SetIPChecked()
1294
1295 2001-07-11  Kevin L. Mitchell  <klmitch@mit.edu>
1296
1297         * ircd/engine_poll.c: deal with POLLHUP properly (hopefully)
1298
1299         * ircd/engine_devpoll.c: deal with POLLHUP properly (hopefully)
1300
1301 2001-07-09  Kevin L. Mitchell  <klmitch@mit.edu>
1302
1303         * ircd/os_bsd.c (os_get_rusage): move buf into the two ifdef'd
1304         sections so that if neither is used, the declaration of buf will
1305         not elicit an "unused variable" warning under NetBSD
1306
1307         * ircd/m_map.c: include string.h to declare strcpy (fix warnings
1308         on alpha)
1309
1310         * ircd/m_away.c: include string.h to declare strcpy/strlen (fix
1311         warnings on alpha)
1312
1313         * ircd/ircd_log.c: include string.h to declare strcpy/strlen (fix
1314         warnings on alpha)
1315
1316         * ircd/client.c: include string.h to declare memset (fix warnings
1317         on alpha)
1318
1319         * ircd/channel.c: remove unused functions next_overlapped_ban,
1320         del_banid, and is_deopped (fix warnings under -O1)
1321
1322         * ircd/IPcheck.c: include string.h to declare memset/memcpy (fix
1323         warnings on alpha)
1324
1325 2001-06-29  Kevin L. Mitchell  <klmitch@mit.edu>
1326
1327         * ircd/s_user.c (set_user_mode): clear the snomask if the user
1328         isn't supposed to receive server notices anymore
1329
1330         * ircd/ircd_features.c: change CONFIG_OPERCMDS to default to FALSE
1331
1332         * configure.in: use AC_MSG_CHECKING/AC_MSG_RESULT when checking
1333         installation prefix; default devpoll and kqueue to on (they get
1334         turned off if the required headers aren't present)
1335
1336         * ircd/whocmds.c (do_who): use ircd_snprintf() instead of
1337         sprintf_irc(); it's a bit hackish, but it'll do for now
1338
1339         * ircd/support.c: remove unused #include
1340
1341         * ircd/send.c: remove unused #include
1342
1343         * ircd/s_user.c: use ircd_snprintf() instead of sprintf_irc()
1344
1345         * ircd/s_serv.c: remove unused #include
1346
1347         * ircd/s_misc.c: use ircd_snprintf() and friends instead of
1348         sprintf_irc() and friends
1349
1350         * ircd/s_err.c: moved atoi_tab[] from ircd/sprintf_irc.c to
1351         ircd/s_err.c, which is the only other file to refer to it
1352
1353         * ircd/s_conf.c (conf_add_deny): use ircd_snprintf() instead of
1354         sprintf_irc()
1355
1356         * ircd/s_bsd.c (connect_server): use ircd_snprintf() instead of
1357         sprintf_irc()
1358
1359         * ircd/s_auth.c: use ircd_snprintf() instead of sprintf_irc()
1360
1361         * ircd/res.c: use ircd_snprintf() instead of sprintf_irc()
1362
1363         * ircd/m_version.c: use ircd_snprintf() instead of sprintf_irc()
1364
1365         * ircd/m_kill.c: use ircd_snprintf() instead of sprintf_irc()
1366
1367         * ircd/listener.c: use ircd_snprintf() instead of sprintf_irc()
1368
1369         * ircd/gline.c: use ircd_snprintf() instead of sprintf_irc()
1370
1371         * ircd/channel.c: don't include sprintf_irc.h; use ircd_snprintf()
1372         instead of sprintf_irc()
1373
1374         * ircd/Makefile.in: remove sprintf_irc.c from sources list; run
1375         make depend
1376
1377         * include/ircd_string.h: remove declaration of sprintf_irc() (what
1378         was it doing here anyway?)
1379
1380         * include/sprintf_irc.h: removed unneeded source file
1381
1382         * ircd/sprintf_irc.c: removed unneeded source file
1383
1384         * ircd/s_debug.c (count_memory): remove some dead code
1385
1386         * ircd/s_auth.c: remove some dead code
1387
1388         * ircd/res.c (update_list): remove some dead code
1389
1390         * ircd/m_whowas.c: remove some dead code
1391
1392         * ircd/m_whois.c: remove some dead code
1393
1394         * ircd/m_who.c: remove some dead code
1395
1396         * ircd/m_wallusers.c: remove some dead code
1397
1398         * ircd/m_wallops.c: remove some dead code
1399
1400         * ircd/m_wallchops.c: remove some dead code
1401
1402         * ircd/m_version.c: remove some dead code
1403
1404         * ircd/m_userip.c: remove some dead code
1405
1406         * ircd/m_userhost.c: remove some dead code
1407
1408         * ircd/m_uping.c: remove some dead code
1409
1410         * ircd/m_trace.c: remove some dead code
1411
1412         * ircd/m_topic.c: remove some dead code
1413
1414         * ircd/m_tmpl.c: remove some dead code
1415
1416         * ircd/m_time.c: remove some dead code
1417
1418         * ircd/m_squit.c: remove some dead code
1419
1420         * ircd/m_silence.c: remove some dead code
1421
1422         * ircd/m_settime.c: remove some dead code
1423
1424         * ircd/m_set.c: remove some dead code
1425
1426         * ircd/m_server.c: remove some dead code
1427
1428         * ircd/m_rpong.c: remove some dead code
1429
1430         * ircd/m_rping.c: remove some dead code
1431
1432         * ircd/m_restart.c: remove some dead code
1433
1434         * ircd/m_reset.c: remove some dead code
1435
1436         * ircd/m_rehash.c: remove some dead code
1437
1438         * ircd/m_quit.c: remove some dead code
1439
1440         * ircd/m_proto.c: remove some dead code
1441
1442         * ircd/m_privs.c: remove some dead code
1443
1444         * ircd/m_privmsg.c: remove some dead code
1445
1446         * ircd/m_pong.c: remove some dead code
1447
1448         * ircd/m_ping.c: remove some dead code
1449
1450         * ircd/m_pass.c: remove some dead code
1451
1452         * ircd/m_part.c: remove some dead code
1453
1454         * ircd/m_opmode.c: remove some dead code
1455
1456         * ircd/m_oper.c: remove some dead code
1457
1458         * ircd/m_notice.c: remove some dead code
1459
1460         * ircd/m_nick.c: remove some dead code
1461
1462         * ircd/m_map.c: remove some dead code
1463
1464         * ircd/m_lusers.c: remove some dead code
1465
1466         * ircd/m_list.c: remove some dead code
1467
1468         * ircd/m_links.c: remove some dead code
1469
1470         * ircd/m_kill.c: remove some dead code
1471
1472         * ircd/m_kick.c: remove some dead code
1473
1474         * ircd/m_jupe.c: remove some dead code
1475
1476         * ircd/m_join.c: remove some dead code
1477
1478         * ircd/m_ison.c: remove some dead code
1479
1480         * ircd/m_invite.c: remove some dead code
1481
1482         * ircd/m_info.c: remove some dead code
1483
1484         * ircd/m_help.c: remove some dead code
1485
1486         * ircd/m_gline.c: remove some dead code
1487
1488         * ircd/m_get.c: remove some dead code
1489
1490         * ircd/m_error.c: remove some dead code
1491
1492         * ircd/m_endburst.c: remove some dead code
1493
1494         * ircd/m_die.c: remove some dead code
1495
1496         * ircd/m_desynch.c: remove some dead code
1497
1498         * ircd/m_destruct.c: remove some dead code
1499
1500         * ircd/m_defaults.c: remove some dead code
1501
1502         * ircd/m_create.c: remove some dead code, along with an #if 1
1503
1504         * ircd/m_cprivmsg.c: remove some dead code
1505
1506         * ircd/m_connect.c: remove some dead code
1507
1508         * ircd/m_close.c: remove some dead code
1509
1510         * ircd/m_clearmode.c: remove some dead code
1511
1512         * ircd/m_burst.c: remove some dead code
1513
1514         * ircd/m_away.c: remove some dead code
1515
1516         * ircd/m_admin.c: remove some dead code
1517
1518         * ircd/listener.c (accept_connection): remove some dead code
1519
1520         * ircd/ircd_reply.c (need_more_params): remove some dead code
1521
1522         * ircd/channel.c (add_banid): remove some dead code
1523
1524         * include/support.h: remove some dead code
1525
1526         * include/querycmds.h: remove some dead code
1527
1528         * doc/readme.chroot: document how to do chroot operation
1529
1530 2001-06-28  Kevin L. Mitchell  <klmitch@mit.edu>
1531
1532         * ircd/Makefile.in: tune for VPATH builds/installs; add a rule to
1533         force bin directory to be created if necessary prior to
1534         installation; run make depend
1535
1536         * doc/Makefile.in (install): tune for VPATH installs by cd'ing to
1537         the ${srcdir}
1538
1539         * Makefile.in: tune to detect Makefile.in changes in
1540         subdirectories and to create installation directory indicated by
1541         ${prefix}
1542
1543         * ircd/whocmds.c (count_users): routine to count the number of
1544         users matching a given user@host mask
1545
1546         * ircd/s_err.c: add error messages for ERR_LONGMASK,
1547         ERR_TOOMANYUSERS, and ERR_MASKTOOWIDE
1548
1549         * ircd/m_gline.c: look for and advance past '!' flag on G-lines
1550         from operators; only set GLINE_OPERFORCE flag if oper has the
1551         PRIV_WIDE_GLINE privilege
1552
1553         * ircd/ircd_features.c: add GLINEMAXUSERCOUNT, which is the
1554         maximum number of users a G-line can impact before it has to be
1555         forced; OPER_WIDE_GLINE, to allow operators to use ! to force a
1556         wide G-line to be set; and LOCOP_WIDE_GLINE, to allow local
1557         operators to use ! to force a wide G-line to be set
1558
1559         * ircd/gline.c: make make_gline() be called with separate user and
1560         host arguments, and not call canon_userhost() directly; implement
1561         gline_checkmask() to verify that a host mask is acceptable; move
1562         BADCHAN check up in gline_add(), and check passed-in mask under
1563         certain circumstances for acceptability; fix call to
1564         sendto_opmask_butone() to handle separation of userhost into user
1565         and host in gline_add(); update call to make_gline()
1566
1567         * ircd/client.c: use FEAT_OPER_WIDE_GLINE and
1568         FEAT_LOCOP_WIDE_GLINE to set PRIV_WIDE_GLINE for an operator; add
1569         PRIV_WIDE_GLINE to privtab[] for client_report_privs()
1570
1571         * include/whocmds.h (count_users): declare routine to count users
1572         matching a given user@host mask
1573
1574         * include/numeric.h: added three new error returns: ERR_LONGMASK
1575         -- mask can't be formatted into a buffer; ERR_TOOMANYUSERS -- too
1576         many users would be impacted by the mask; ERR_MASKTOOWIDE -- mask
1577         contains wildcards in the wrong places
1578
1579         * include/ircd_features.h: add FEAT_GLINEMAXUSERCOUNT,
1580         FEAT_OPER_WIDE_GLINE, and FEAT_LOCOP_WIDE_GLINE
1581
1582         * include/gline.h (GLINE_OPERFORCE): provides a way for m_gline()
1583         to signal to gline_add() that the operator attempted to force the
1584         G-line to be set
1585
1586         * include/client.h (PRIV_WIDE_GLINE): new privilege for operators
1587
1588         * doc/readme.gline: update to document new "!" prefix to a G-line
1589         user@host mask
1590
1591         * doc/readme.features: document GLINEMAXUSERCOUNT,
1592         OPER_WIDE_GLINE, and LOCOP_WIDE_GLINE
1593
1594         * doc/example.conf: update to mention new features along with
1595         their defaults
1596
1597 2001-06-27  Kevin L. Mitchell  <klmitch@mit.edu>
1598
1599         * doc/example.conf: updated example.conf from Braden
1600         <dbtem@yahoo.com>
1601
1602         * include/supported.h: forward-port from pl15
1603
1604 2001-06-25  Kevin L. Mitchell  <klmitch@mit.edu>
1605
1606         * ircd/whocmds.c: include ircd_policy.h and implement
1607         HEAD_IN_SAND_WHO_OPCOUNT--forward-port from pl15
1608
1609         * ircd/m_whois.c: forward-port of the idle-time hiding code from
1610         pl15; this also required passing parc into do_whois(), which also
1611         meant passing parc into do_wilds()--*sigh*
1612
1613         * include/ircd_policy.h: add a couple more HEAD_IN_SAND
1614         #define's--WHOIS_IDLETIME and WHO_HOPCOUNT
1615
1616 2001-06-22  Kevin L. Mitchell  <klmitch@mit.edu>
1617
1618         * tools/wrapper.c: add a wrapper program that can be used to
1619         adjust file descriptor limits and root directories; program must
1620         be run as root--NOT SETUID!--and given appropriate -u arguments
1621
1622         * doc/readme.log: documentation of how to configure logging
1623
1624         * doc/readme.features: documentation of each feature (except for
1625         logging)
1626
1627 2001-06-21  Kevin L. Mitchell  <klmitch@mit.edu>
1628
1629         * Makefile.in (config): add a deprecation notice with a pointer to
1630         tools/transition
1631
1632         * tools/transition: shell script to convert old compile-time
1633         options into new compile-time options and appropriate F-lines
1634
1635         * tools/mkchroot: shell-script to prepare the chroot area by
1636         copying over all the necessary libraries so they can be found
1637
1638 2001-06-20  Kevin L. Mitchell  <klmitch@mit.edu>
1639
1640         * INSTALL: partial update of INSTALL for u2.10.11 release...
1641
1642 2001-06-14  Kevin L. Mitchell  <klmitch@mit.edu>
1643
1644         * ircd/table_gen.c (makeTables): finally got tired of the
1645         "overflow in implicit conversion" warning, so just got rid of it
1646         by explicitly casting UCHAR_MAX to a (default) char; diffs show no
1647         differences in the tables generated
1648
1649 2001-06-11  Kevin L. Mitchell  <klmitch@mit.edu>
1650
1651         * ircd/send.c (sendcmdto_match_butone): don't let the server crash
1652         if a client is in the STAT_CONNECTING status
1653
1654 2001-06-10  Kevin L. Mitchell  <klmitch@mit.edu>
1655
1656         * ircd/send.c: remove unused vsendcmdto_one(), consolidating it
1657         into sendcmdto_one(); define new sendcmdto_prio_one(), which
1658         places the message into the priority queue
1659
1660         * ircd/s_user.c (hunt_server_prio_cmd): definition of
1661         hunt_server_prio_cmd(), which simply calls sendcmdto_prio_one()
1662         instead of sendcmdto_one()
1663
1664         * ircd/m_settime.c: use sendcmdto_prio_one() and
1665         hunt_server_prio_cmd() to send SETTIME
1666
1667         * ircd/m_server.c: use sendcmdto_prio_one() to send SETTIME
1668
1669         * include/send.h: removed declaration for unused vsendcmdto_one();
1670         added a declaration for sendcmdto_prio_one()
1671
1672         * include/s_user.h: declare hunt_server_prio_cmd(), which calls
1673         sendcmdto_prio_one()
1674
1675         * ircd/send.c (sendcmdto_flag_butone): oops; /wallops should be
1676         put in the server's priority queue, too...
1677
1678         * ircd/ircd.c: don't check LPATH for accessibility at all
1679
1680 2001-06-08  Kevin L. Mitchell  <klmitch@mit.edu>
1681
1682         * ircd/s_serv.c (server_estab): send a +h flag in our SERVER
1683         command if we're configured as a hub; send individual server flags
1684         in SERVER commands
1685
1686         * ircd/s_bsd.c (completed_connection): send a +h flag in our
1687         SERVER command if we're configured as a hub
1688
1689         * ircd/m_server.c: implement parv[7] as a mode-like string; +h
1690         sets the FLAGS_HUB flag for a server; +s sets the FLAGS_SERVICE
1691         flag for a server; +hs sets both flags; also modify CMD_SERVER
1692         format string to send the flags
1693
1694         * include/client.h: define two new flags, FLAGS_HUB and
1695         FLAGS_SERVICE to mark services and hubs as such; define testing
1696         macros, setting macros
1697
1698         * ircd/s_user.c: remove deprecated struct Gline* argument to
1699         register_user(); remove GLINE rebroadcast; do not send GLINE
1700         acknowledgement parameter to NICK; do not look for GLINE
1701         acknowledgement parameter to NICK while parsing
1702
1703         * ircd/s_serv.c (server_estab): remove deprecated struct Jupe*
1704         argument to server_estab(); do not send JUPE/GLINE acknowledgement
1705         parameters for SERVER or NICK
1706
1707         * ircd/m_user.c (m_user): remove deprecated argument to
1708         register_user()
1709
1710         * ircd/m_server.c: remove deprecated argument to server_estab();
1711         remove documentation comment regarding JUPE acknowledgement
1712         parameter to SERVER; remove JUPE rebroadcast
1713
1714         * ircd/m_pong.c (mr_pong): remove deprecated argument to
1715         register_user()
1716
1717         * ircd/m_nick.c: remove documentation comment regarding GLINE
1718         acknowledgement parameter to NICK
1719
1720         * ircd/jupe.c: use user's real name in JUPE server notices if
1721         HEAD_IN_SAND_SNOTICES is defined
1722
1723         * ircd/ircd.c: remove deprecated chroot() code; remove deprecated
1724         setuid code; correct ancient DEBUG vs DEBUGMODE typo
1725
1726         * ircd/gline.c: use user's real name in GLINE server notices if
1727         HEAD_IN_SAND_SNOTICES is defined
1728
1729         * ircd/channel.c (modebuf_flush_int): make apparent source be
1730         local server, not oper's server; use user's real name in hack
1731         notices and DESYNC notices if HEAD_IN_SAND_SNOTICES is defined
1732
1733         * include/s_user.h: remove struct Gline pre-declaration; remove
1734         deprecated struct Gline argument from register_user()
1735
1736         * include/s_serv.h: remove struct Jupe pre-declaration; remove
1737         deprecated struct Jupe argument from server_estab()
1738
1739 2001-06-07  Kevin L. Mitchell  <klmitch@mit.edu>
1740
1741         * ircd/s_stats.c (hunt_stats): forward-port from pl15 of all the
1742         changes required to control remote stats
1743
1744         * ircd/s_numeric.c (do_numeric): rewrite numeric origins if
1745         recipient is not an operator and HEAD_IN_SAND_REWRITE is defined
1746         [forward-port from pl15]
1747
1748         * ircd/m_whowas.c (m_whowas): report server name only if requester
1749         is an operator [forward-port from pl15]
1750
1751         * ircd/m_whois.c (do_whois): /whois <mynick> now correctly reports
1752         my server; if HEAD_IN_SAND_REMOTE is 1, ignore the middle argument
1753         and obtain the report from the user's server [forward-port from
1754         pl15]
1755
1756         * ircd/m_who.c: add missing include for ircd_policy.h
1757         [forward-port from pl15]
1758
1759         * ircd/m_version.c (m_version): require oper access for remote
1760         /version if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
1761
1762         * ircd/m_time.c (m_time): require oper access for remote /time if
1763         HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
1764
1765         * ircd/m_stats.c: pass extra argument to hunt_stats(); correct
1766         missing semicolon [forward-port from pl15]
1767
1768         * ircd/m_nick.c (ms_nick): hide the origin of certain collision
1769         kills [forward-port from pl15]
1770
1771         * ircd/m_motd.c (m_motd): require oper access for remote /motd if
1772         HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
1773
1774         * ircd/m_lusers.c (m_lusers): require oper access for remote
1775         /lusers if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
1776
1777         * ircd/m_burst.c (ms_burst): server-added bans are stored using
1778         local server name, to hide remote server names; modes also are to
1779         originate from the local server [forward-port from pl15]
1780
1781         * ircd/m_admin.c (m_admin): require oper access for remote /admin
1782         if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
1783
1784         * ircd/channel.c (add_banid): if a server is adding a ban, use my
1785         server name to hide the remote server's name [forward-port from
1786         pl15]
1787
1788         * ircd/Makefile.in: ran make depend
1789
1790         * include/s_stats.h: hunt_stats() has to have an extra argument to
1791         support the forward-port from pl15
1792
1793         * include/ircd_policy.h: #define HEAD_IN_SAND_STATS_P; add
1794         HEAD_IN_SAND_{BANWHO,REWRITE,REMOTE} [forward-port from pl15]
1795
1796         * ircd/engine_poll.c (engine_loop): remove bogus assert that I
1797         forgot to check in the events branch
1798
1799 2001-06-06  Kevin L. Mitchell  <klmitch@mit.edu>
1800
1801         * ircd/res.c (init_resolver): don't start DNS expires with a 0
1802         relative timeout--if the server starts slow, timeouts could be
1803         messy...there's probably a better solution, but this'll do for now
1804
1805         * ircd/os_solaris.c: _XOPEN_SOURCE doesn't get along with Solaris
1806         headers very well; include stropts.h; define an os_set_tos()
1807
1808         * ircd/os_generic.c (os_set_tos): added an os_set_tos() for
1809         os_generic.c
1810
1811         * ircd/ircd.c: if there are no C-lines, we don't want to have a
1812         timer that expires at the absolute time of 0--it kinda blocks all
1813         the other timers!
1814
1815         * ircd/engine_devpoll.c: some includes for open(); declare errcode
1816         and codesize in engine_loop()
1817
1818         * ircd/list.c (free_client): remove bogus check on timer active
1819         flag
1820
1821         * ircd/s_auth.c: pull out destruction code in
1822         auth_timeout_request() into an externally-visible
1823         destroy_auth_request(); manage cli_auth pointer in client
1824         structure; use it for an extra assertion check
1825
1826         * ircd/list.c: include s_auth.h for destroy_auth_request(); add
1827         debugging notices to show flow when deallocating
1828         connections/clients; call destroy_auth_request() when free'ing a
1829         client that has an auth outstanding; don't free the connection if
1830         the process timer is unmarked but still active
1831
1832         * ircd/ircd_events.c: set GEN_ACTIVE when initializing a generator
1833         and reset it before calling the event handler for an ET_DESTROY
1834         event
1835
1836         * include/s_auth.h (destroy_auth_request): declare
1837         destroy_auth_request(), which can be used to destroy an
1838         outstanding auth request if a client socket goes away before the
1839         auth exchange is completed
1840
1841         * include/ircd_events.h: add an active flag to keep track of
1842         whether or not particular generators are active, for the
1843         convenience of functions using the API
1844
1845         * include/client.h: add a pointer for auth requests to struct
1846         Connection so we can kill outstanding auth requests if a client
1847         socket closes unexpectedly
1848
1849         * ircd/s_bsd.c: cli_connect() could become 0 during the course of
1850         the sock or timer callback; take that into account in the assert
1851
1852         * ircd/list.c: add magic number checking and setting--magic
1853         numbers are zero'd on frees to detect double-frees; add back
1854         setting of cli_from() to 0 to break the back-link from the struct
1855         Connection (duh)
1856
1857         * ircd/ircd.c: set me's magic number correctly
1858
1859         * include/client.h: define magic numbers and accessor/verifier
1860         macros
1861
1862         * ircd/list.c: assert that dealloc_client() is called with
1863         cli_connect(cptr) == 0; set cli_connect(cptr) to 0 before calling
1864         dealloc_client(); don't mess with cli_from(cptr)
1865
1866         * ircd/s_bsd.c: only attempt to dealloc a connection if the
1867         associated client has already been destroyed, or at least delinked
1868
1869 2001-06-05  Kevin L. Mitchell  <klmitch@mit.edu>
1870
1871         * ircd/list.c (free_client): only try to delete the socket when
1872         the fd hasn't already been closed, avoiding a double-free
1873
1874         * ircd/list.c (free_connection): make sure the client is really
1875         gone before doing away with the connection
1876
1877         * ircd/s_bsd.c: record that socket has been added in con_freeflag
1878         field; queue a socket_del() as soon as the socket is close()'d;
1879         use con_freeflag & FREEFLAG_TIMER instead of con_timer; clear
1880         FREEFLAG_SOCKET on ET_DESTROY event in client_sock_callback(),
1881         then dealloc the connection if safe; mark socket as dead when
1882         there's a read error or EOF; clear FREEFLAG_TIMER flag upon entry
1883         to client_timer_callback(); dealloc connection if safe upon
1884         ET_DESTROY event in client_timer_callback()
1885
1886         * ircd/list.c: use con_freeflag instead of con_timer; only dealloc
1887         the connection if both socket and timer have been destroyed;
1888         destroy both socket and timer explicitly and carefully
1889
1890         * include/client.h: replace the con_timer field with a
1891         con_freeflag field, to indicate what still needs freeing; define
1892         the freeflags
1893
1894         * ircd/engine_select.c (engine_loop): duh...sockList[i] could
1895         become 0
1896
1897         * ircd/engine_devpoll.c (engine_loop): duh...sockList[i] could
1898         become 0
1899
1900         * ircd/s_bsd.c: add some extra assertions to try to track down a
1901         corruption problem
1902
1903         * ircd/engine_select.c (engine_loop): add an extra assert to try
1904         to track down a corruption problem
1905
1906         * ircd/engine_poll.c (engine_loop): add an extra assert to try to
1907         track down a corruption problem
1908
1909         * ircd/engine_kqueue.c (engine_loop): add an extra assert to try
1910         to track down a corruption problem
1911
1912         * ircd/engine_devpoll.c (engine_loop): skip slots that have become
1913         empty during processing; add an extra assert to try to track down
1914         a corruption problem
1915
1916         * ircd/engine_kqueue.c (engine_delete): make sure to zero deleted
1917         entries
1918
1919 2001-06-04  Kevin L. Mitchell  <klmitch@mit.edu>
1920
1921         * ircd/s_bsd.c (client_sock_callback): client is no longer
1922         blocked, so we must mark it as unblocked
1923
1924         * ircd/engine_select.c: add Debug() calls galore; add handling for
1925         SS_NOTSOCK; use a dummy sock variable to keep things from
1926         disappearing on us; correct timeout calculation; update nfds for
1927         efficiency
1928
1929         * ircd/engine_poll.c: use new debugging level (DEBUG_ENGINE);
1930         remove a spurious "if (sock)" which will always be true; update
1931         nfds for efficiency
1932
1933         * ircd/engine_kqueue.c: add Debug() calls galore; add handling for
1934         SS_NOTSOCK (just in case); correct timeout calculation
1935
1936         * ircd/engine_devpoll.c: add Debug() calls galore; add handling
1937         for SS_NOTSOCK; correct timeout calculation; add EAGAIN handling
1938
1939         * include/s_debug.h (DEBUG_ENGINE): add new debugging level;
1940         pretty-indent numbers
1941
1942         * ircd/engine_poll.c (engine_loop): break out SS_NOTSOCK
1943         case--it's not a socket; the check for writability is most likely
1944         not needed, but present for completeness
1945
1946 2001-05-24  Kevin L. Mitchell  <klmitch@mit.edu>
1947
1948         * ircd/s_bsd.c: add Debug messages; call read_packet() even if the
1949         no newline flag is set; call read_packet() when the timer expires,
1950         regardless of what's in the buffer--read_packet() should be able
1951         to deal properly
1952
1953         * ircd/IPcheck.c (ip_registry_connect_succeeded): correct a NOTICE
1954         sent to clients to include the client nickname (duh)
1955
1956         * ircd/ircd_events.c: don't destroy a timer if it's already marked
1957         for destruction; replace a missing ! in socket_del()
1958
1959         * ircd/engine_poll.c (engine_loop): reference a temporary variable
1960         so we don't have to worry about sockList[i] going away
1961
1962         * ircd/s_bsd.c (client_sock_callback): add Debug messages
1963
1964         * ircd/s_auth.c: add Debug messages all over the place
1965
1966         * ircd/ircd_events.c: add and edit some Debug messages; add a list
1967         of routines to convert some of the enums and flags from numbers
1968         into human-readable strings for the Debug messages
1969
1970         * ircd/engine_poll.c: hack some Debug messages to use the new name
1971         conversion routines in ircd_events.c; add an extra assert for a
1972         condition that shouldn't ever happen; apparently recv() can return
1973         EAGAIN when poll() returns readable--I wonder why...
1974
1975         * include/ircd_events.h: declare some helper routines under
1976         DEBUGMODE
1977
1978 2001-05-23  Kevin L. Mitchell  <klmitch@mit.edu>
1979
1980         * ircd/s_bsd.c (client_sock_callback): add an extra assertion
1981         check
1982
1983         * ircd/s_auth.c: add more Debug messages
1984
1985         * ircd/list.c (make_client): add an extra assertion check
1986
1987         * ircd/ircd_events.c (socket_events): don't call the engine events
1988         changer if we haven't actually made any changes to the event mask
1989
1990         * ircd/uping.c: add some Debug messages
1991
1992         * ircd/s_stats.c: document new /STATS e
1993
1994         * ircd/s_err.c: add RPL_STATSENGINE to report the engine name
1995
1996         * ircd/s_bsd.c: remove static client_timer variable; in
1997         read_packet(), if there's still data in the client's recvQ after
1998         parsing, add a 2 second timer (con_proc); fix the ET_DESTROY case
1999         of client_sock_callback to handle destroying the timer properly;
2000         rewrote client_timer_callback from scratch to be called on an
2001         individual client
2002
2003         * ircd/m_stats.c: add /STATS e to report the engine name
2004
2005         * ircd/list.c: deal with con_timer field in struct Connection
2006         properly; correct a core-level bug in remove_client_from_list--if
2007         the client is the only one in the list, we try to update
2008         GlobalClientList's cli_prev pointer--not good
2009
2010         * ircd/ircd.c: remove call to init_client_timer()
2011
2012         * ircd/engine_poll.c: made Debug messages more uniform by
2013         prepending "poll:" to them all; corrected an off-by-one error that
2014         caused poll_count to be 1 less than the actual count and removed
2015         my work-around; added Debug messages to indicate which socket is
2016         being checked and what the results are
2017
2018         * ircd/Makefile.in: ran a make depend
2019
2020         * include/s_bsd.h: remove init_client_timer(), since we're doing
2021         it differently now
2022
2023         * include/numeric.h (RPL_STATSENGINE): a stats reply to report the
2024         engine name
2025
2026         * include/ircd_policy.h (HEAD_IN_SAND_STATS_E): turn off /stats e
2027         reports for non-opers
2028
2029         * include/client.h: add con_timer and con_proc fields to struct
2030         Connection and define accessor macros--con_timer marks that
2031         con_proc contains a valid timer, and con_proc is used to pace user
2032         data
2033
2034         * ircd/s_bsd.c (close_connection): let free_client() destroy the
2035         socket
2036
2037         * ircd/s_auth.c (start_auth): add a Debug call to indicate when
2038         auth has begun on a client
2039
2040         * ircd/ircd_events.c: ensure that event_execute() is called with a
2041         non-NULL event; modify event_add() macro to properly zero list
2042         bits; modify gen_dequeue() to not try to clip it out of a list
2043         it's already been clipped out of; change signal socket
2044         initialization to use state SS_NOTSOCK; permit timeout values of
2045         0 in add_timer(); add many Debug calls; change socket_del() and
2046         timer_del() to always set the GEN_DESTROY flag; use GEN_MARKED in
2047         timer_run() instead of GEN_DESTROY so that event_generate() will
2048         pass on the events; remove the switch and replace with a simpler
2049         if-then-else tree in timer_run(); don't allow destroyed sockets to
2050         be destroyed again, nor their states or event masks to be changed
2051
2052         * ircd/ircd.c: initialize "running" to 1
2053
2054         * ircd/engine_poll.c: deal with SS_NOTSOCK "sockets"; add Debug
2055         messages all over the place; fix a counting problem in
2056         engine_add(); turn wait into a signed integer and set it to -1
2057         only if timer_next() returns 0; adjust wait time to be relative;
2058         don't call gen_ref_dec() if socket disappeared while we were
2059         processing it
2060
2061         * include/ircd_events.h: the pipe for signals is not a socket, so
2062         we must mark it as such--added SS_NOTSOCK for that special socket;
2063         events won't be generated if GEN_DESTROY is on, so add GEN_MARKED
2064         for the benefit of timer_run()
2065
2066         * configure.in: add --enable-pedantic and --enable-warnings to
2067         turn on (and off) -Wall -pedantic in CFLAGS
2068
2069 2001-05-21  Kevin L. Mitchell  <klmitch@mit.edu>
2070
2071         * ircd/s_conf.c: change "s_addr" element accesses to "address"
2072         element accesses
2073
2074         * include/s_conf.h: on some systems, "s_addr" is a macro; use
2075         "address" instead
2076
2077 2001-05-18  Kevin L. Mitchell  <klmitch@mit.edu>
2078
2079         * ircd/engine_kqueue.c: include ircd_alloc.h; set_or_clear returns
2080         void in this file; add a missing semi-colon; declare errcode,
2081         codesize
2082
2083         * ircd/uping.c (uping_sender_callback): it's pptr, not uping
2084
2085         * ircd/s_user.c (register_user): comment out spurious reference to
2086         nextping
2087
2088         * ircd/s_serv.c (server_estab): comment out spurious reference to
2089         nextping
2090
2091         * ircd/s_conf.c (read_configuration_file): comment out spurious
2092         reference to nextping and nextconnect
2093
2094         * ircd/s_bsd.c: comment out some spurious references to formerly
2095         global (now non-existant) variables; correct a couple of typos
2096
2097         * ircd/s_auth.c: pre-declare some functions referenced in the
2098         callback; correct a typo
2099
2100         * ircd/res.c (start_resolver): pass errno value of ENFILE
2101
2102         * ircd/listener.c (accept_connection): you know your API is messed
2103         up when...variables that shouldn't have been global crop up in
2104         other files
2105
2106         * ircd/list.c (free_client): substitution of == for =
2107
2108         * ircd/ircd_signal.c: include assert.h for assertion checking;
2109         check ev_data() to find out what signal generated event
2110
2111         * ircd/ircd_events.c: some references to the variable "timer"
2112         should have been references to the variable "ptr"
2113
2114         * ircd/engine_select.c: it's struct fd_set, not struct fdset;
2115         ev_timer(ev) is already a timer pointer; declare codesize as a
2116         size_t to correct signedness issue; use timer_next(), not
2117         time_next()
2118
2119         * ircd/engine_poll.c: ev_timer(ev) is already a timer pointer;
2120         select fd out of struct pollfd in assertion checking; declare
2121         errcode and codesize; use timer_next(), not time_next()
2122
2123         * ircd/engine_kqueue.c: ev_timer(ev) is already a timer pointer;
2124         use function timer_next(), not time_next()
2125
2126         * ircd/engine_devpoll.c: ev_timer(ev) is already a timer pointer;
2127         use function timer_next(), not time_next()
2128
2129         * ircd/Makefile.in (IRCD_SRC): add ircd_events.c to the list of
2130         compiled sources; do make depend
2131
2132         * include/list.h: pre-declare struct Connection
2133
2134         * include/ircd_events.h (gen_ref_inc): cast to the right structure
2135         name
2136
2137         * include/s_auth.h: duh; missing */
2138
2139 2001-05-10  Kevin L. Mitchell  <klmitch@mit.edu>
2140
2141         * ircd/send.c: update write events status after sending data or
2142         accumulating data to be sent
2143
2144         * ircd/m_list.c (m_list): update write events status after
2145         canceling a running /list
2146
2147         * ircd/channel.c (list_next_channels): update write events status
2148         after listing a few channels
2149
2150         * ircd/s_bsd.c: extensive changes to update to new events model;
2151         remove on_write_unblocked() and the two implementations of
2152         read_message(), which have been deprecated by this change
2153
2154         * ircd/s_auth.c: set the socket events we're interested in for
2155         clients; simplify some logic that does the connect_nonb followed
2156         by the socket_add
2157
2158         * ircd/list.c: define free_connection() to free a connection
2159         that's become freeable once the struct Socket has been
2160         deallocated; fix up free_client() to take this new behavior into
2161         account
2162
2163         * ircd/ircd.c: call init_client_timer()
2164
2165         * include/s_bsd.h: declare new REGISTER_ERROR_MESSAGE when unable
2166         to register connect-in-progress with events system; declare
2167         init_client_timer() (HACK!) to preserve rate-limiting behavior
2168
2169         * include/list.h: declare new free_connection()
2170
2171         * include/client.h: add a struct Socket to struct Connection
2172
2173 2001-05-09  Kevin L. Mitchell  <klmitch@mit.edu>
2174
2175         * ircd/ircd_signal.c: massage the handlers for SIGHUP, SIGINT, and
2176         SIGTERM into event callbacks; perform the actions in the
2177         callbacks, since they're not called in the context of the signal;
2178         set up the signal callbacks in the event engine
2179
2180         * ircd/ircd_events.c (signal_callback): we're supposed to look for
2181         a specific signal; don't generate an event if there is no signal
2182         structure for it
2183
2184         * ircd/ircd.c: nuke nextconnect and nextping and replace them with
2185         connect_timer and ping_timer; massage try_connections() and
2186         check_pings() into timer callbacks that re-add themselves at the
2187         right time; remove ircd.c's "event_loop()"; initialize the event
2188         system and the connect_timer and ping_timer
2189
2190         * ircd/uping.c: correct a couple more typos
2191
2192         * ircd/s_auth.c: rework to use new events system
2193
2194         * ircd/os_solaris.c (os_connect_nonb): update to new interface
2195
2196         * ircd/os_openbsd.c (os_connect_nonb): update to new interface
2197
2198         * ircd/os_linux.c (os_connect_nonb): update to new interface
2199
2200         * ircd/os_generic.c (os_connect_nonb): update to new interface
2201
2202         * ircd/os_bsd.c (os_connect_nonb): update to new interface
2203
2204         * include/s_auth.h: remove deprecated members of struct
2205         AuthRequest, replacing them with struct Socket and struct Timer
2206         structures; add flags to indicate when these structures have been
2207         released by the event system; remove the deprecated
2208         timeout_auth_queries()
2209
2210         * include/ircd_osdep.h (os_connect_nonb): connect could complete
2211         immediately, so change the interface to handle that possibility
2212
2213         * ircd/uping.c (uping_server): noticed and corrected a typo
2214
2215         * ircd/listener.c: set up to use ircd_event's struct Socket by
2216         adding an socket_add() call to inetport(), replacing
2217         free_listener() with socket_del() in close_listener(), and
2218         reworking accept_connection to be called as the callback
2219
2220         * ircd/ircd.c: add a call to IPcheck_init()
2221
2222         * ircd/IPcheck.c: remove IPcheck_expire(); rework
2223         ip_registry_expire() to be called from a timer; write
2224         IPcheck_init() to set up the expiration timer (hard-coded for a
2225         60-second expiration time)
2226
2227         * include/listener.h: add a struct Socket to the struct Listener;
2228         remove accept_connection()
2229
2230         * include/IPcheck.h: add IPcheck_init(), remove IPcheck_expire()
2231
2232 2001-05-08  Kevin L. Mitchell  <klmitch@mit.edu>
2233
2234         * ircd/ircd_events.c: include config.h; use USE_KQUEUE and
2235         USE_DEVPOLL instead of HAVE_KQUEUE and HAVE_DEVPOLL_H
2236
2237         * ircd/engine_select.c: include config.h; set FD_SETSIZE to
2238         MAXCONNECTIONS, not IRCD_FD_SETSIZE...
2239
2240         * ircd/engine_poll.c: include config.h
2241
2242         * ircd/engine_kqueue.c: include config.h
2243
2244         * ircd/engine_devpoll.c: include config.h
2245
2246         * ircd/Makefile.in: include engine sources in compilation and make
2247         depend steps
2248
2249         * configure.in: add checks for enabling the /dev/poll- and
2250         kqueue-based engines
2251
2252         * acconfig.h: add lines for USE_DEVPOLL and USE_KQUEUE
2253
2254         * ircd/Makefile.in: work in the engine sources
2255
2256 2001-05-07  Kevin L. Mitchell  <klmitch@mit.edu>
2257
2258         * ircd/m_settime.c: include ircd_snprintf.h
2259
2260         * ircd/ircd_relay.c: stomp a couple of gcc warnings suggesting
2261         parens around a construct that had both || and &&
2262
2263         * ircd/chkconf.c: #include "config.h" to get some important
2264         definitions
2265
2266         * ircd/Makefile.in: revamp ircd makefile for new build system
2267
2268         * doc/Makefile.in: revamp doc makefile for new build system
2269
2270         * config/*: Removed old build system files
2271
2272         * stamp-h.in: a stamp file
2273
2274         * install-sh: install-sh for new build system
2275
2276         * configure.in: configure.in for new build system
2277
2278         * configure: configure script for new build system (built by
2279         autoconf)
2280
2281         * config.sub: config.sub for new build system
2282
2283         * config.h.in: config.h.in for new build system (built by
2284         autoheader)
2285
2286         * config.guess: config.guess for new build system
2287
2288         * aclocal.m4: aclocal.m4 for new build system (built by aclocal
2289         1.4)
2290
2291         * acinclude.m4: aclocal.m4 macros for new build system
2292
2293         * acconfig.h: config.h skeleton for new build system
2294
2295         * Makefile.in: modify for new build system
2296
2297 2001-05-01  Kevin L. Mitchell  <klmitch@mit.edu>
2298
2299         * ircd/s_err.c: get rid of the last vestiges of TIME_T_FMT
2300
2301         * ircd/m_settime.c: get rid of the last vestiges of TIME_T_FMT
2302
2303         * ircd/m_server.c: get rid of the last vestiges of TIME_T_FMT
2304
2305 2001-05-01  Perry Lorier       <Isomer@coders.net>
2306         * doc/iauth.doc: Protocol for iauth server. (from hybrid).
2307         * doc/linux-poll.patch: Patch to make Linux under 2.2 not deadlock
2308                 when you have far far too many sockets in use.
2309         * {include,ircd}/iauth.c: A start on iauth support.
2310
2311 2001-05-01  Perry Lorier       <Isomer@coders.net>
2312         * ircd/s_err.c: Suggested wording change.
2313         * ircd/s_user.c: Users aren't target limited against +k users.
2314         * ircd/chkconf.c: Made it compile again, who knows if it works, but
2315                 now I can at least make install
2316         * various: Cleanups on m_*.c files.
2317
2318
2319 2001-04-23  Kevin L. Mitchell  <klmitch@mit.edu>
2320
2321         * ircd/s_misc.c (exit_client): make netsplit server notice say the
2322         right thing
2323
2324         * ircd/m_links.c (m_links_redirect): forward-port RPL_ENDOFLINKS
2325         change to make Khaled happy...
2326
2327         * ircd/m_whois.c (do_whois): pull-up of m_whois() fix
2328         (do_whois): duh...
2329
2330 2001-04-21  Kevin L. Mitchell  <klmitch@mit.edu>
2331
2332         * ircd/msgq.c: finally remove the msgq_integrity() hack, as it's
2333         turned up no more bugs
2334
2335         * ircd/ircd.c: use /* */ comments instead of // comments--all the
2336         world's not gcc :(
2337
2338         * ircd/s_conf.c (conf_add_server): use /* */ comments instead of
2339         // comments--all the world's not gcc :(
2340
2341         * ircd/runmalloc.c: finally garbage-collect unused file
2342
2343         * include/runmalloc.h: finally garbage-collect unused file
2344
2345         * ircd/<multiple files>: addition of '#include "config.h"' before
2346         all other includes in most .c files
2347
2348         * include/<multiple files>: remove includes of config.h, which are
2349         now going into the raw .c files
2350
2351 2001-04-20  Kevin L. Mitchell  <klmitch@mit.edu>
2352
2353         * ircd/m_whois.c (do_whois): display proper server name if the
2354         user is looking up himself
2355
2356         * ircd/m_who.c (m_who): disable match by servername or display of
2357         server names by non-opers
2358
2359         * include/ircd_policy.h: add define for
2360         HEAD_IN_SAND_WHO_SERVERNAME to cover full intent of sub-motion 15
2361         of CFV 165
2362
2363 2001-04-18  Kevin L. Mitchell  <klmitch@mit.edu>
2364
2365         * ircd/s_conf.c: keep the $R in memory so we can see it clearly
2366         when we do a /stats k
2367
2368         * ircd/s_user.c (set_user_mode): pull-up of changes to prevent
2369         users from turning on +s and +g
2370
2371         * ircd/s_misc.c (exit_client): pull-up of changes to turn off
2372         net.split notice
2373
2374         * ircd/parse.c: pull-up of changes to disable /trace, /links, and
2375         /map for users
2376
2377         * ircd/m_whois.c (do_whois): pull-up of server name masking for
2378         /whois
2379
2380         * ircd/m_user.c (m_user): removal of umode and snomask defaulting
2381         functions, pull-up
2382
2383         * ircd/m_stats.c (m_stats): pull-up of stats-disabling stuff
2384
2385         * ircd/m_map.c (m_map_redirect): pull-up of m_map_redirect()
2386
2387         * ircd/m_links.c (m_links_redirect): pull-up of m_links_redirect()
2388
2389         * ircd/channel.c (channel_modes): pull-up of channel key display
2390         as *
2391
2392         * include/ircd_policy.h: pull-up of ircd_policy.h
2393
2394         * include/client.h: pull-up of Set/ClearServNotice()
2395
2396         * ircd/gline.c (do_gline): report client name in G-line message
2397         (pull-up)
2398
2399         * ircd/s_user.c (register_user): pull-up--show IP address in some
2400         server notices dealing only with users; report which connection
2401         class has filled up
2402
2403         * ircd/s_stats.c (report_deny_list): use conf->flags &
2404         DENY_FLAGS_IP insteaf of conf->ip_kill
2405
2406         * ircd/m_stats.c (report_klines): use conf->flags & DENY_FLAGS_IP
2407         insteaf of conf->ip_kill
2408
2409         * ircd/s_conf.c: use flags field in struct DenyConf; pull-up of
2410         K-line by real name
2411
2412         * include/s_conf.h: use a flags field in struct DenyConf; define
2413         DENY_FLAGS_FILE, DENY_FLAGS_IP, and DENY_FLAGS_REALNAME for
2414         pull-up of K-line by real name
2415
2416         * ircd/m_trace.c: pull-up of IP show for user connections
2417
2418         * doc/example.conf: pull-up of the realname K-line documentation
2419
2420         * ircd/ircd.c: forward port of pid file advisory locking mechanism
2421
2422 2001-04-16  Kevin L. Mitchell  <klmitch@mit.edu>
2423
2424         * ircd/send.c (sendcmdto_flag_butone): recast to just broadcast to
2425         all servers, rather than to only servers that have +w/+g/whatever
2426         users on them; among other things, this removes that atrocity
2427         known as sentalong[] from this function
2428
2429         * ircd/m_admin.c: must include ircd.h to declare "me"; must
2430         include hash.h to declare FindUser()
2431
2432         * ircd/m_wallusers.c: implementation of WALLUSERS
2433
2434         * ircd/m_desynch.c (ms_desynch): only send DESYNCHs to opers
2435
2436         * ircd/m_wallops.c: only send WALLOPS to opers
2437
2438         * ircd/parse.c: add WALLUSERS command to parser table
2439
2440         * include/handlers.h: declare wallusers handlers
2441
2442         * include/msg.h: add WALLUSERS command
2443
2444         * ircd/send.c (sendcmdto_flag_butone): if FLAGS_OPER is or'd with
2445         flag, send only to appropriate opers
2446
2447 2001-04-13  Kevin L. Mitchell  <klmitch@mit.edu>
2448
2449         * ircd/uping.c: refit to use the new events interface
2450
2451         * ircd/res.c: refit to use the new events interface
2452
2453         * ircd/ircd_events.c: create timer_chg(), which permits a
2454         (non-periodic) timer's expire time to be modified; change the
2455         logic in timer_run() so that timers that were re-added while the
2456         event was being processed will not be destroyed prematurely
2457
2458         * include/uping.h: include the events header, declare some extra
2459         fields in struct UPing, remove timeout value, and define some
2460         flags for marking which cleanup items have yet to be done
2461
2462         * include/ircd_events.h: add a prototype for timer_chg() to change
2463         the expire time of a running timer
2464
2465 2001-03-13 Joseph Bongaarts <foxxe@wtfs.net>
2466         * ircd/os_openbsd.c: Tweaked the openbsd hack a bit.
2467         
2468 2001-03-07  Joseph Bongaarts  <foxxe@wtfs.net>
2469
2470         * config/configure.in: Add check for OpenBSD
2471
2472         * ircd/os_openbsd.c: Add seperate os dep file for openbsd which
2473         differs from generic BSD, particularly in its handling of
2474         _XOPEN_SOURCE.
2475         
2476 2001-02-12  Kevin L. Mitchell  <klmitch@mit.edu>
2477
2478         * ircd/m_gline.c (ms_gline): propagate a G-line that happened to
2479         have been added by a U-lined server, rather than going through the
2480         activate/deactivate logic; propagate G-line removals by U-lined
2481         servers as well
2482
2483         * ircd/gline.c: rename propagate_gline() to gline_propagate();
2484         make gline_propagate() return an int 0 (convenience return); only
2485         update lastmod in gline_activate() and gline_deactivate() if the
2486         current lastmod is non-zero, since 0 lastmod is our flag of a
2487         U-lined server having added a G-line
2488
2489         * include/gline.h (gline_propagate): exporting the G-line
2490         propagation function
2491
2492         * ircd/m_list.c (m_list): duh; permit explicit channel name
2493         specification only when /list gets two arguments ("Kev
2494         #wasteland") rather than when /list gets more than two
2495         arguments--nice braino
2496
2497 2001-01-29  Thomas Helvey <twhelvey1@home.com>
2498
2499         * ircd/ircd_reply.c (need_more_params): fix bug that allowed
2500         unregistered clients to spam opers with protocol violation
2501         messages. Note: the bugfix may have eliminated some useful
2502         protocol violation messages.
2503         Please send protocol violation messages explicitly from the
2504         functions they are discovered in, you have much better context
2505         for the error there and it helps to document the behavior of the
2506         server. This was also a design bug in that it violated the
2507         "A function should do one thing" heuristic. Patching this one
2508         would have resulted in a continuous spawning of other bugs over
2509         the next 3 years, so I killed it. Check around for stuff this
2510         broke and readd the calls to protocol_violation in the functions
2511         that need to send the message.
2512
2513 2001-01-29  Kevin L. Mitchell  <klmitch@mit.edu>
2514
2515         * ircd/channel.c (mode_parse_ban): stopper a tiny leak--if a ban
2516         already existed, then the logic would (attempt to) skip it, but
2517         would not free the ban string; now the ban string is free'd and
2518         the ban count is decremented, releasing the ban for use
2519
2520         * ircd/s_user.c: make send_umode_out() take a prop argument
2521         instead of testing for the PRIV_PROPAGATE privilege itself; fix
2522         set_umode() to use this new argument, calculating it before
2523         calculating the new privileges for a -o'd user
2524
2525         * ircd/m_oper.c (m_oper): pass the new prop argument to
2526         send_umode_out()
2527
2528         * ircd/channel.c (mode_parse_ban): turn off MODE_ADD bit in bans
2529         that we're not actually going to add because they already exist;
2530         test that particular bit before adding to the linked list
2531
2532         * include/s_user.h: add a prop argument to send_umode_out() to
2533         indicate whether or not to propagate the user mode
2534
2535 2001-01-24  Kevin L. Mitchell  <klmitch@mit.edu>
2536
2537         * ircd/msgq.c: ircd_vsnprintf() returns the number of bytes that
2538         it would have written; upper-bound the number to prevent overflows
2539         by proxy; also, tune buffer size given to ircd_vsnprintf() to take
2540         into account the fact that ircd_vsnprintf() already takes the
2541         terminal \0 into account
2542
2543 2001-01-22  Kevin L. Mitchell  <klmitch@mit.edu>
2544
2545         * ircd/msgq.c: add an incredibly ugly hack to attempt to track
2546         down an apparent buffer overflow; remove msgq_map(), since it's no
2547         longer used anywhere; slight tweaks to prevent off-by-one errors,
2548         but these can't explain the problems we've seen
2549
2550         * include/msgq.h: remove msgq_map(), since it's no longer used
2551         anywhere
2552
2553 2001-01-18  Kevin L. Mitchell  <klmitch@mit.edu>
2554
2555         * ircd/s_user.c (set_nick_name): call client_set_privs() after
2556         parsing user modes
2557
2558 2001-01-17  Kevin L. Mitchell  <klmitch@mit.edu>
2559
2560         * ircd/s_bsd.c (read_message): fix a typo in the select version of
2561         read_message()
2562
2563         * ircd/whowas.c (whowas_free): MyFree() is a macro that expects
2564         its argument to be an lvalue, which means we can't use
2565         whowas_clean()'s handy-dandy "return ww" feature
2566
2567         * ircd/ircd_features.c: default LOCOP_KILL to TRUE--oops...
2568
2569 2001-01-16  Kevin L. Mitchell  <klmitch@mit.edu>
2570
2571         * ircd/ircd_events.c (timer_run): it's possible that the timer got
2572         deleted during the callback processing, so don't go to the bother
2573         of requeuing it if the destroy flag is set
2574
2575         * ircd/engine_select.c: define FD_SETSIZE to be IRCD_FD_SETSIZE
2576         out of config.h if this is a *BSD; include errno.h (oops);
2577         decrement error count after an hour using a timer; use FD_SETSIZE
2578         constant instead of IRCD_FD_SETSIZE constant; fill in event
2579         processing code
2580
2581         * ircd/engine_poll.c: include errno.h (oops); decrement error
2582         count after an hour using a timer; fill in event processing code
2583
2584         * ircd/engine_kqueue.c: include errno.h (oops); decrement error
2585         count after an hour using a timer; assert events filter is either
2586         EVFILT_READ or EVFILT_WRITE; fill in event processing code
2587
2588         * ircd/engine_devpoll.c: include errno.h (oops); decrement error
2589         count after an hour using a timer; fill in event processing code
2590
2591 2001-01-15  Kevin L. Mitchell  <klmitch@mit.edu>
2592
2593         * ircd/client.c: fixed feattab; basically, when I changed features
2594         to use small integers specifying bit positions, instead of the
2595         bits themselves, I forgot to update feattab to not | these
2596         privileges together; also fixed a bug in the antiprivs masking
2597         loop in client_set_privs()--last index wouldn't get parsed
2598
2599 2001-01-11  Kevin L. Mitchell  <klmitch@mit.edu>
2600
2601         * ircd/ircd_events.c: call event_generate() with new data
2602         argument; make it set that field in struct Event; make
2603         socket_add() return the value of the eng_add callback
2604
2605         * ircd/engine_select.c: make engine_add() return a
2606         successful/unsuccessful status; add bounds-checking outside of an
2607         assert; use accessor macros; use log_write(), not the deprecated
2608         ircd_log(); add an assert to engine_loop() to double-check for
2609         data structure corruption
2610
2611         * ircd/engine_poll.c: make engine_add() return a
2612         successful/unsuccessful status; add bounds-checking outside of an
2613         assert; use accessor macros; use log_write(), not the deprecated
2614         ircd_log(); add an assert to engine_loop() to double-check for
2615         data structure corruption
2616
2617         * ircd/engine_kqueue.c: implementation of an engine for kqueue()
2618
2619         * ircd/engine_devpoll.c: implementation of an engine for /dev/poll
2620
2621         * include/ircd_events.h: define some accessor macros; add ev_data
2622         to struct Event for certain important data--errno values, for
2623         instance; make EngineAdd callback tell us if it was successful or
2624         not; add extra argument to event_generate(); make socket_add()
2625         return the status from EngineAdd
2626
2627 2001-01-10  Kevin L. Mitchell  <klmitch@mit.edu>
2628
2629         * ircd/ircd_events.c: pass initializer information about how many
2630         total _filedescriptors_ may be opened at once
2631
2632         * ircd/ircd.c: use exported "running" instead of unexported
2633         thisServer.running
2634
2635         * ircd/engine_select.c: implementation of an event engine based on
2636         select()
2637
2638         * ircd/engine_poll.c: implementation of an event engine based on
2639         poll()
2640
2641         * include/ircd_events.h: pass the engine initializer an integer
2642         specifing how many _filedescriptors_ may be opened at once
2643
2644         * include/ircd.h: running has to be exported for the engine_*
2645         event loops
2646
2647 2001-01-09  Kevin L. Mitchell  <klmitch@mit.edu>
2648
2649         * ircd/ircd_events.c: include some needed headers; add some
2650         comments; make evEngines[] const; bundle sig_sock and sig_fd into
2651         a struct named sigInfo; rework struct evInfo to have a queue of
2652         _generators_, and only when threaded; added a gen_init() function
2653         to centralize generator initialization; fix various compile-time
2654         errors; rework event_add() for new queueing scheme and checked for
2655         compile-time errors; add casts where needed; spell evEngines[]
2656         correctly; make engine_name() return const char*
2657
2658         * include/ircd_events.h: type EventCallBack depends on struct
2659         Event, so pre-declare it; put _event_ queue into generators, and
2660         only when threaded; give engine data a union to store both ints
2661         and pointers; make engine name a const; fix gen_ref_dec() macro;
2662         make engine_name() return a const char*
2663
2664         * ircd/ircd_events.c: gen_dequeue() is now exported, so move it
2665         down with the non-static functions; modify event_execute() to use
2666         the new gen_ref_dec() to simplify code; make sure event_generate()
2667         does not generate new events for generators marked for destruction
2668
2669         * include/ircd_events.h: the engines, at least, may need to modify
2670         reference counts to keep generators from going away while
2671         something still points at them, so add reference counter
2672         manipulators and export gen_dequeue() for them
2673
2674         * ircd/ircd_events.c: set up the list of engines to try; set up
2675         the signal struct Socket; rename netInfo to evInfo; move static
2676         functions near the beginning of the file; do away with
2677         signal_signal() (since we no longer keep a signal count ourselves)
2678         and call event_generate() directly from signal_callback--also
2679         renamed some functions; allow signal_callback() to read up to
2680         SIGS_PER_SOCK at once from the signal pipe; add event_init() to
2681         initialize the entire event system; add event_loop() to call the
2682         engine's event loop; initialize new struct GenHeader member,
2683         gh_engdata; remove timer_next(); add socket_add() function to add
2684         a socket; add socket_del() to mark a socket for deletion; add
2685         socket_state() to transition a socket between states; add
2686         socket_events() to set what events we're interested in on the
2687         socket; add engine_name() to retrieve event engine's name
2688
2689         * include/ircd_events.h: add engine data field to struct
2690         GenHeader; rename SOCK_ACTION_REMOVE to SOCK_ACTION_DEL; add a
2691         note about states vs s_events; remove signal count; fold union
2692         Generator back into struct Event; remove count members from struct
2693         Generators; redefine engine callbacks to not take a struct
2694         Engine*; add explanatory comments to callback definitions; add
2695         some engine callbacks to handle operations; remove struct Engine
2696         flag member--can detect single flag from eng_signal member; add
2697         event_init(), event_loop(), engine_name(), and the socket_*()
2698         functions; make timer_next() a macro to avoid a function call
2699
2700 2001-01-08  Kevin L. Mitchell  <klmitch@mit.edu>
2701
2702         * include/ircd_events.h: rename to ircd_events.h, since it handles
2703         events, not just networking stuff; add signal support; more
2704         structural rearrangement
2705
2706         * ircd/ircd_events.c: rename to ircd_events.c, since it handles
2707         events, not just networking stuff; add signal support; more
2708         structural rearrangement
2709
2710 2001-01-07  Kevin L. Mitchell  <klmitch@mit.edu>
2711
2712         * ircd/ircd_network.c: implement timer API; add reference counts
2713         appropriately
2714
2715         * include/ircd_network.h: firm up some pieces of the interface;
2716         split out members everything has into a separate structure; add
2717         reference counts; add timer API
2718
2719 2001-01-06  Kevin L. Mitchell  <klmitch@mit.edu>
2720
2721         * ircd/ircd_network.c: static data and event manipulation
2722         functions for new event processing system
2723
2724         * include/ircd_network.h: data structures for new event processing
2725         system
2726
2727 2001-01-03  Kevin L. Mitchell  <klmitch@mit.edu>
2728
2729         * ircd/whowas.c: Completely re-did the old allocation scheme by
2730         turning it into a linked list, permitting the
2731         NICKNAMEHISTORYLENGTH feature to be changed on the fly
2732
2733         * ircd/s_debug.c (count_memory): use FEAT_NICKNAMEHISTORYLENGTH
2734         feature instead of old #define
2735
2736         * ircd/ircd_features.c: add NICKNAMEHISTORYLENGTH feature as an
2737         integer feature with a notify callback (whowas_realloc)
2738
2739         * ircd/client.c (client_set_privs): second memset was supposed to
2740         be over antiprivs, not privs; thanks, Chris Behrens
2741         <cbehrens@xo.com> for pointing that out...
2742
2743         * include/whowas.h: new elements for an extra linked list in
2744         struct Whowas; a notify function for feature value changes
2745
2746         * include/ircd_features.h: new feature--FEAT_NICKNAMEHISTORYLENGTH
2747
2748         * config/config-sh.in: NICKNAMEHISTORYLENGTH is now a feature
2749
2750 2001-01-02  Kevin L. Mitchell  <klmitch@mit.edu>
2751
2752         * config/config-sh.in: get rid of DEFAULT_LIST_PARAMETER
2753         compile-time option--now in features subsystem
2754
2755         * ircd/motd.c (motd_init): rework motd_init() to be called as the
2756         notify function for MPATH and RPATH features (should probably
2757         split it up a bit, though...)
2758
2759         * ircd/m_privs.c (mo_privs): if called with no parameters, return
2760         privs of the caller, rather than an error
2761
2762         * ircd/m_list.c: pull usage message into its own function; pull
2763         list parameter processing into its own function that does not
2764         modify the contents of the parameter; add list_set_default() to
2765         set the default list parameter (uses the notify hook); rework
2766         m_list() to make use of these functions; removed dead code
2767
2768         * ircd/ircd_log.c (log_feature_mark): make sure to return 0, since
2769         we have no notify handler
2770
2771         * ircd/ircd_features.c: add notify callback for notification of
2772         value changes; give mark callback an int return value to indicate
2773         whether or not to call the notify callback; fix up feature macros
2774         for new notify callback; add DEFAULT_LIST_PARAM feature; rewrite
2775         string handling in feature_set() to deal with def_str being a null
2776         pointer; wrote feature_init() to set up all defaults appropriately
2777
2778         * ircd/ircd.c (main): call feature_init() instead of
2779         feature_mark(), to avoid calling notify functions while setting up
2780         defaults
2781
2782         * ircd/client.c: updated to deal with new privileges structure
2783
2784         * ircd/class.c: updated so init_class() can be called should one
2785         of PINGFREQUENCY, CONNECTFREQUENCY, MAXIMUM_LINKS, or
2786         DEFAULTMAXSENDQLENGTH be changed
2787
2788         * include/ircd_log.h: log_feature_mark() updated to fit with new
2789         API changes
2790
2791         * include/ircd_features.h: added DEFAULT_LIST_PARAM feature and
2792         feature_init() function (found necessary since adding the notify
2793         stuff and notifying motd.c during start-up...before we defined
2794         RPATH!)
2795
2796         * include/client.h: move privs around to enable addition of more
2797         bits if necessary; based on the FD_* macros
2798
2799         * include/channel.h: declare list_set_default (actually located in
2800         m_list.c *blanche*)
2801
2802         * ircd/s_user.c: retrieve MAXSILES and MAXSILELENGTH (now
2803         AVBANLEN*MAXSILES) from features subsystem
2804
2805         * ircd/s_debug.c (debug_serveropts): CMDLINE_CONFIG doesn't go to
2806         anything anymore
2807
2808         * ircd/s_bsd.c: retrieve HANGONGOODLINK and HANGONRETRYDELAY from
2809         the features subsystem
2810
2811         * ircd/s_auth.c (start_auth): NODNS migrated to the features
2812         subsystem
2813
2814         * ircd/random.c: created random_seed_set() function to set seed
2815         value, along with some stuff to make ircrandom() a little more
2816         random--state preserving, xor of time instead of direct usage,
2817         etc.; it's still a pseudo-random number generator, though, and
2818         hopefully I haven't broken the randomness
2819
2820         * ircd/m_version.c: FEATUREVALUES makes use of feature_int() calls
2821
2822         * ircd/m_join.c: use features interface to retrieve
2823         MAXCHANNELSPERUSER
2824
2825         * ircd/ircd_features.c: add NODISP flag for super-secret features;
2826         add a whole bunch of new features migrated over from make config
2827
2828         * ircd/ircd.c: use features interface to retrieve PINGFREQUENCY,
2829         CONNECTTIMEOUT, and TIMESEC
2830
2831         * ircd/client.c (client_get_ping): use features interface to
2832         retrieve PINGFREQUENCY
2833
2834         * ircd/class.c: use features interface to retrieve PINGFREQUENCY,
2835         CONNECTFREQUENCY, MAXIMUM_LINKS, and DEFAULTMAXSENDQLENGTH
2836
2837         * ircd/chkconf.c (DEFAULTMAXSENDQLENGTH): since it's now in the
2838         features subsystem, we have to add something explicit
2839
2840         * ircd/channel.c: use features interface to retrieve
2841         KILLCHASETIMELIMIT, MAXBANLENGTH, MAXBANS, and MAXCHANNELSPERUSER;
2842         note that MAXBANLENGTH is now calculated dynamically from MAXBANS
2843         and AVBANLEN
2844
2845         * ircd/Makefile.in: run make depend
2846
2847         * include/supported.h (FEATURESVALUES): update to reference
2848         feature settings
2849
2850         * include/random.h: add prototype for random_seed_set
2851
2852         * include/ircd_features.h: add several more features
2853
2854         * include/channel.h: move MAXBANS and MAXBANLENGTH into feature
2855         subsystem
2856
2857         * config/config-sh.in: feature-ized some more stuff
2858
2859         * include/motd.h: some new elements in motd.h for motd.c changes
2860
2861         * ircd/motd.c: motd_cache() now searches a list of already cached
2862         MOTD files; saves us from having duplicate caches in memory if
2863         there are two identical T-lines for two different sites...
2864
2865 2001-01-02  Perry Lorier <isomer@coders.net>
2866         * ircd/motd.c: don't core if the motd isn't found.  Bug found by
2867         Amarande.
2868
2869 2001-01-02  Perry Lorier <isomer@coders.net>
2870         * ircd/s_err.c: Added third param to 004 - the channel modes that tage params.  Used by hybrid/epic.
2871         * ircd/s_channels.c: Added fix for msg'ing a -n+m channel - thanks
2872                 to guppy for noticing, and hektik for providing the fix.
2873         * misc others: Minor cleanups, added more protocol_violations, ripped
2874                 out more P09 stuffs, bit more protocol neg stuff.
2875
2876 2000-12-19  Kevin L. Mitchell  <klmitch@mit.edu>
2877
2878         * ircd/m_ison.c (m_ison): Dianora says that ISON has to end with a
2879         space (*sigh* stupid clients...)
2880
2881         * ircd/s_user.c: make WALLOPS_OPER_ONLY a feature managed through
2882         ircd_features.[ch]
2883
2884         * ircd/s_err.c: get rid of GODMODE conditionals
2885
2886         * ircd/s_debug.c (debug_serveropts): switch to using appropriate
2887         calls into the features subsystem for various serveropts
2888         characters
2889
2890         * ircd/s_conf.c (find_conf_entry): get rid of USEONE conditional
2891
2892         * ircd/s_bsd.c: remove GODMODE conditional; use features subsystem
2893         to get value of VIRTUAL_HOST and CLIENT_FLOOD; remove
2894         NOFLOWCONTROL conditional
2895
2896         * ircd/s_auth.c: use features subsystem to determine value of
2897         KILL_IPMISMATCH
2898
2899         * ircd/parse.c: get rid of NOOPER and GODMODE conditionals; use
2900         features subsystem to determine the setting of IDLE_FROM_MSG
2901
2902         * ircd/numnicks.c: get rid of EXTENDED_NUMERICS conditionals
2903
2904         * ircd/motd.c: get value of NODEFAULTMOTD from features subsystem;
2905         use features subsystem to get motd file names
2906
2907         * ircd/m_settime.c: get value of RELIABLE_CLOCK from features
2908         subsystem
2909
2910         * ircd/m_server.c: get rid of CRYPT_LINK_PASSWORD, since it does
2911         us no good; use features subsystem to figure out if we need to do
2912         HUB-type stuff; make TESTNET debugging sendto_opmask_butone's use
2913         the Debug(()) macro instead; get value of RELIABLE_CLOCK from
2914         features subsystem
2915
2916         * ircd/m_privmsg.c: get IDLE_FROM_MSG from the features subsystem
2917
2918         * ircd/m_oper.c: get CRYPT_OPER_PASSWORD from the features
2919         subsystem
2920
2921         * ircd/m_connect.c: get SERVER_PORT from the features subsystem
2922
2923         * ircd/ircd_log.c (log_set_file): fix a bug that kept log files
2924         from getting marked if they were already set to something...
2925
2926         * ircd/ircd_features.c: add a flag to indicates read-only access;
2927         add several new features that used to be compile-time selected
2928
2929         * ircd/ircd.c: grab pidfile out of feature subsystem; don't check
2930         access to motd files (what the heck?); make sure to initialize the
2931         feature subsystem before trying to write the config file
2932
2933         * ircd/dbuf.c: use feature_int() to retrieve BUFFERPOOL settings;
2934         use feature_bool() to figure out if we're using the FERGUSON
2935         flusher
2936
2937         * ircd/Makefile.in: MPATH and RPATH are now done differently, so
2938         remove the clause that creates empty files of that name; also ran
2939         make depend
2940
2941         * include/sys.h: CLIENT_FLOOD is now a feature; unfortunately,
2942         there is no easy way to bounds-check it at present
2943
2944         * include/querycmds.h: make sure ircd_features.h is included; use
2945         feature_str(FEAT_DOMAINNAME) in calls to match()
2946
2947         * include/ircd_features.h: many new features that used to be
2948         compile-time selected
2949
2950         * config/config-sh.in: add * to DOMAINNAME; try also using first
2951         argument to search in /etc/resolv.conf; removed many compile-time
2952         options that now can be configured through the features system
2953
2954 2000-12-18  Kevin L. Mitchell  <klmitch@mit.edu>
2955
2956         * doc/api/log.txt: how to use the logging API
2957
2958         * doc/api/features.txt: how to use the features API
2959
2960         * doc/api/api.txt: how to write API documentation
2961
2962         * include/ircd_features.h: rearranged a couple of features for
2963         neatness purposes
2964
2965         * ircd/ircd_features.c: cleaned up the macros some; rearranged
2966         some code to all go into the switch; rearranged a couple of
2967         features for neatness purposes
2968
2969 2000-12-16  Greg Sikorski <gte@atomicrevs.demon.co.uk>
2970         * ircd/os_bsd.c: Added os_set_tos for BSD users.
2971
2972 2000-12-16  Kevin L. Mitchell  <klmitch@mit.edu>
2973
2974         * ircd/ircd_features.c: Isomer almost got it right; you need to
2975         use F_I(), since it's an integer value, not a boolean value.  The
2976         asserts in feature_int would catch you out...  Also made the F_*
2977         macros take flags
2978
2979         * ircd/s_err.c: define RPL_PRIVS reply
2980
2981         * ircd/parse.c: put new PRIVS command into command table
2982
2983         * ircd/m_privs.c (mo_privs): message handler to report operator
2984         privileges
2985
2986         * ircd/ircd_features.c: declare new features OPER_SET and
2987         LOCOP_SET; redo boolean testing routine to accept TRUE, YES, and
2988         ON for boolean TRUE, and FALSE, NO, and OFF for boolean FALSE
2989
2990         * ircd/client.c: simplify client_set_privs() with a table that
2991         defines what features to test for; add new client_report_privs()
2992
2993         * ircd/Makefile.in: compile new m_privs.c; run make depend
2994
2995         * include/numeric.h (RPL_PRIVS): new reply numeric for displaying
2996         an operator's privileges
2997
2998         * include/msg.h: define new command: PRIVS
2999
3000         * include/ircd_features.h: create new features OPER_SET and
3001         LOCOP_SET for controlling access to /set
3002
3003         * include/handlers.h (mo_privs): declare message handler for
3004         reporting oper privileges
3005
3006         * include/client.h (client_report_privs): declare function to
3007         report what privileges an oper has
3008
3009         * ircd/m_whois.c (do_whois): fix a bug that caused /whois to
3010         report that a user is an oper if the oper doing the /whois had
3011         PRIV_SEE_OPERS
3012
3013 2000-12-17  Isomer <Isomer@coders.net>
3014         * ircd/listener.c: added support for TOS twiddling as a 'feature'.
3015
3016 2000-12-17  Isomer <Isomer@coders.net>
3017         * ircd/os_linux.c: add TOS stuffs
3018
3019         * ircd/listener.c: add TOS stuffs
3020
3021 2000-12-16  Kevin L. Mitchell  <klmitch@mit.edu>
3022
3023         * ircd/whocmds.c (do_who): use HasPriv to determine whether or not
3024         to indicate a user is an oper
3025
3026         * ircd/s_user.c: clear privileges setting when deopping; don't
3027         propagate +o unless user has PRIV_PROPAGATE privilege
3028
3029         * ircd/s_debug.c (debug_serveropts): created debug_serveropts()
3030         function and replaced how the server option string is generated
3031
3032         * ircd/parse.c: remove conditional on CONFIG_OPERCMDS
3033
3034         * ircd/m_whois.c (do_whois): use HasPriv to determine whether or
3035         not to indicate the user is an operator
3036
3037         * ircd/m_who.c: use HasPriv to determine whether or not a user
3038         should be displayed in the list of opers
3039
3040         * ircd/m_version.c: call debug_serveropts() to get server option
3041         string
3042
3043         * ircd/m_userip.c (userip_formatter): use HasPriv to determine
3044         whether or not to show oper status
3045
3046         * ircd/m_userhost.c (userhost_formatter): use HasPriv to determine
3047         whether or not to show oper status
3048
3049         * ircd/m_restart.c (mo_restart): replace ugly #ifdef conditional
3050         checks with HasPriv check; remove dead code
3051
3052         * ircd/m_rehash.c (mo_rehash): replace ugly #ifdef conditional
3053         checks with HasPriv check
3054
3055         * ircd/m_opmode.c (mo_opmode): use HasPriv to check permissions;
3056         use feature_bool to check if disabled
3057
3058         * ircd/m_oper.c (m_oper): set oper priviliges
3059
3060         * ircd/m_mode.c (m_mode): replace #ifdef conditional with HasPriv
3061         check
3062
3063         * ircd/m_kill.c (mo_kill): use HasPriv checks to determine if we
3064         can kill
3065
3066         * ircd/m_kick.c (m_kick): replace #ifdef conditional with HasPriv
3067         check
3068
3069         * ircd/m_jupe.c (mo_jupe): rework permissions checking structure;
3070         use feature_bool to check if disabled
3071
3072         * ircd/m_join.c (m_join): remove BADCHAN conditional; replace
3073         #ifdef conditional with a HasPriv check
3074
3075         * ircd/m_gline.c (mo_gline): rework permissions checking
3076         structure; use feature_bool to check if any part is disabled
3077
3078         * ircd/m_die.c: replace ugly #ifdef conditionals with HasPriv
3079         check; remove dead code
3080
3081         * ircd/m_clearmode.c: use feature_bool() to detect if we're
3082         disabled; use HasPriv to figure out what we're permitted to do;
3083         only allow clearmode on moded channels
3084
3085         * ircd/ircd_features.c: define various features; use HasPriv to
3086         verify permissions to set/reset
3087
3088         * ircd/gline.c (gline_add): use HasPriv instead of #ifdef
3089         conditionals
3090
3091         * ircd/client.c (client_set_privs): function to set an oper's
3092         privileges
3093
3094         * ircd/channel.c: use HasPriv calls instead of #ifdef conditionals
3095
3096         * include/whocmds.h: deconditionalize several macros and
3097         substitute appropriate calls to HasPriv()
3098
3099         * include/s_debug.h: get rid of global serveropts[]; define new
3100         function debug_serveropts() to build that string on the fly
3101
3102         * include/ircd_features.h: define some features
3103
3104         * include/client.h: add privs member to struct Connection; define
3105         various priviledges
3106
3107         * include/channel.h: no longer using IsOperOnLocalChannel; remove
3108         conditional of MAGIC_OPER_OVERRIDE on OPER_WALK_THROUGH_LMODES
3109
3110         * doc/Configure.help: remove help information for deprecated
3111         options
3112
3113         * config/config-sh.in: remove certain deprecated options having to
3114         do with what opers can and cannot do--first stage in moving
3115         compile-time constants into the .conf
3116
3117 2000-12-16  Isomer <Isomer@coders.net>
3118         * ircd/parse.c: detect if the prefix is missing and try and recover
3119         instead of coring.
3120
3121 2000-12-15  Kevin L. Mitchell  <klmitch@mit.edu>
3122
3123         * ircd/ircd_log.c: found and fixed some bugs in the debug logging
3124         code that would sometimes result in the log file not being
3125         reopened--which meant that a user could connect and get the
3126         logging output--oops
3127
3128         * ircd/Makefile.in: run make depend...
3129
3130         * ircd/s_stats.c: get rid of report_feature_list()
3131
3132         * ircd/s_err.c: add the 'bad value' error message, shift error
3133         messages over somewhat
3134
3135         * ircd/s_debug.c (debug_init): call log_debug_init with the
3136         use_tty flag
3137
3138         * ircd/s_conf.c (read_configuration_file): unmark features before
3139         reading the config file, then reset unmarked features after
3140         reading the config file
3141
3142         * ircd/m_stats.c: use feature_report() instead of
3143         report_feature_list()
3144
3145         * ircd/ircd_log.c: fix log_debug_file (bogus assertion); add
3146         special 'mark' flags and use them; add the stuff needed by the
3147         features API
3148
3149         * ircd/ircd_features.c: rework the features API and add gobs of
3150         comments to try to explain what some of these complex functions
3151         are actually doing
3152
3153         * include/s_stats.h: get rid of report_feature_list(); use
3154         feature_report() instead
3155
3156         * include/numeric.h: added a new error message and shifted old
3157         values over some--this is, after all, an alpha
3158
3159         * include/ircd_log.h: log_debug_init now takes an integer to tell
3160         it if it should be using the tty; added a couple of functions
3161         required by the features API
3162
3163         * include/ircd_features.h: add an enum and some more functions to
3164         flesh out the feature API--it should now be possible to put all
3165         those compile-time constants in the config file!
3166
3167         * ircd/send.c: got the direction of the assert incorrect...
3168
3169         * ircd/send.c: implement the efficiency of flush_connections by
3170         creating a linked list of struct Connection's with queued data;
3171         also get rid of flush_sendq_except and make sure to yank
3172         connections out of the list when their sendQs become empty (notice
3173         the assertion in flush_connections!)
3174
3175         * ircd/s_bsd.c (close_connection): must yank the Connection out of
3176         the sendq list
3177
3178         * ircd/list.c (dealloc_connection): must yank the Connection out
3179         of the sendq list
3180
3181         * ircd/dbuf.c (dbuf_put): call flush_connections instead of the
3182         deprecated flush_sendq_except
3183
3184         * ircd/client.c: define a couple new helper functions for sendq
3185         threading--this will make the flush_connections function in send.c
3186         considerably more efficient by creating a linked list of
3187         Connections that have queued data to send
3188
3189         * include/send.h: remove flush_sendq_except, as it's not used
3190         anymore
3191
3192         * include/client.h: declare a couple new helper functions for the
3193         sendq threading system
3194
3195 2000-12-14  Kevin L. Mitchell  <klmitch@mit.edu>
3196
3197         * ircd/m_ison.c (m_ison): Apply Diane Bruce's patch to make ISON
3198         parse all arguments
3199
3200         * ircd/s_debug.c (count_memory): modify to report for clients and
3201         connections, not local clients and remote clients
3202
3203         * ircd/list.c: fiddle with the client-fiddling functions to take
3204         into account the divorce of struct Connection from struct Client
3205
3206         * ircd/ircd.c: define a struct Connection for me, initialize it,
3207         and link it into the right place (ewww, globals!)
3208
3209         * include/client.h: remove CLIENT_{LOCAL,REMOTE}_SIZE; split
3210         struct Client into struct Client and struct Connection; redefine
3211         local-portion accessor macros to go through struct Client to the
3212         struct Connection; define struct Connection accessor macros
3213
3214 2000-12-13  Kevin L. Mitchell  <klmitch@mit.edu>
3215
3216         * ircd/whowas.c: missed a couple of accesses to a struct Client
3217
3218         * ircd/uping.c: missed a couple of accesses to a struct Client
3219
3220         * ircd/send.c: missed a couple of accesses to a struct Client
3221
3222         * ircd/s_user.c: missed a couple of accesses to a struct Client
3223
3224         * ircd/s_misc.c: missed a couple of accesses to a struct Client
3225
3226         * ircd/s_conf.c: missed a couple of accesses to a struct Client
3227
3228         * ircd/s_bsd.c: missed a couple of accesses to a struct Client
3229
3230         * ircd/s_auth.c: missed a couple of accesses to a struct Client
3231
3232         * ircd/res.c: missed a couple of accesses to a struct Client
3233
3234         * ircd/parse.c: missed a couple of accesses to a struct Client
3235
3236         * ircd/m_whois.c: use new accessor macros for struct Client
3237
3238         * ircd/m_who.c: use new accessor macros for struct Client
3239
3240         * ircd/m_wallchops.c: use new accessor macros for struct Client
3241
3242         * ircd/m_version.c: use new accessor macros for struct Client
3243
3244         * ircd/m_userip.c: use new accessor macros for struct Client
3245
3246         * ircd/m_userhost.c: use new accessor macros for struct Client
3247
3248         * ircd/m_user.c: use new accessor macros for struct Client
3249
3250         * ircd/m_uping.c: use new accessor macros for struct Client
3251
3252         * ircd/m_trace.c: use new accessor macros for struct Client
3253
3254         * ircd/m_topic.c: use new accessor macros for struct Client
3255
3256         * ircd/m_time.c: use new accessor macros for struct Client
3257
3258         * ircd/m_stats.c: use new accessor macros for struct Client
3259
3260         * ircd/m_squit.c: use new accessor macros for struct Client
3261
3262         * ircd/m_silence.c: use new accessor macros for struct Client
3263
3264         * ircd/m_server.c: use new accessor macros for struct Client;
3265         remove dead code
3266
3267         * ircd/m_rpong.c: use new accessor macros for struct Client
3268
3269         * ircd/m_rping.c: use new accessor macros for struct Client
3270
3271         * ircd/m_quit.c: use new accessor macros for struct Client
3272
3273         * ircd/m_privmsg.c: use new accessor macros for struct Client
3274
3275         * ircd/m_pong.c: use new accessor macros for struct Client; remove
3276         dead code
3277
3278         * ircd/m_ping.c: use new accessor macros for struct Client
3279
3280         * ircd/m_pass.c: use new accessor macros for struct Client
3281
3282         * ircd/m_part.c: use new accessor macros for struct Client
3283
3284         * ircd/m_oper.c: use new accessor macros for struct Client
3285
3286         * ircd/m_notice.c: use new accessor macros for struct Client
3287
3288         * ircd/m_nick.c: use new accessor macros for struct Client
3289
3290         * ircd/m_names.c: use new accessor macros for struct Client
3291
3292         * ircd/m_mode.c: use new accessor macros for struct Client
3293
3294         * ircd/m_map.c: use new accessor macros for struct Client
3295
3296         * ircd/m_list.c: use new accessor macros for struct Client
3297
3298         * ircd/m_links.c: use new accessor macros for struct Client;
3299         remove some dead code
3300
3301         * ircd/m_kill.c: use new accessor macros for struct Client; remove
3302         some dead code
3303
3304         * ircd/m_kick.c: use new accessor macros for struct Client
3305
3306         * ircd/m_join.c: use new accessor macros for struct Client; remove
3307         some dead code
3308
3309         * ircd/m_ison.c: use new accessor macros for struct Client
3310
3311         * ircd/m_invite.c: use new accessor macros for struct Client
3312
3313         * ircd/m_info.c: use new accessor macros for struct Client
3314
3315         * ircd/m_gline.c: use new accessor macros for struct Client
3316
3317         * ircd/m_error.c: use new accessor macros for struct Client
3318
3319         * ircd/m_create.c: use new accessor macros for struct Client
3320
3321         * ircd/m_connect.c: use new accessor macros for struct Client;
3322         removed some dead code
3323
3324         * ircd/m_burst.c: use new accessor macros for struct Client
3325
3326         * ircd/m_away.c: use new accessor macros for struct Client
3327
3328         * ircd/m_admin.c: use new accessor macros for struct Client
3329
3330         * ircd/hash.c: missed a couple of accesses to a struct Client
3331
3332         * ircd/gline.c: missed a couple of accesses to a struct Client
3333
3334         * ircd/crule.c: missed a couple of accesses to a struct Client
3335
3336         * ircd/class.c: missed an access to a struct Client
3337
3338         * ircd/channel.c: missed a couple of accesses to a struct Client
3339
3340         * ircd/IPcheck.c: missed an access to a struct Client
3341
3342         * include/querycmds.h: fix a couple of stats macros to use
3343         structure accessor macros
3344
3345         * include/client.h: change structure member names to highlight any
3346         places in the code I've missed
3347
3348 2000-12-12  Kevin L. Mitchell  <klmitch@mit.edu>
3349
3350         * ircd/whowas.c: use new struct Client accessor macros
3351
3352         * ircd/whocmds.c: use new struct Client accessor macros
3353
3354         * ircd/send.c: use new struct Client accessor macros
3355
3356         * ircd/s_user.c: use new struct Client accessor macros; removed
3357         some dead code
3358
3359         * ircd/s_serv.c: use new struct Client accessor macros; removed
3360         some dead code
3361
3362         * ircd/s_numeric.c: use new struct Client accessor macros
3363
3364         * ircd/s_misc.c: use new struct Client accessor macros
3365
3366         * ircd/s_debug.c: use new struct Client accessor macros
3367
3368         * ircd/s_conf.c: use new struct Client accessor macros
3369
3370         * ircd/s_bsd.c: use new struct Client accessor macros
3371
3372         * ircd/s_auth.c: use new struct Client accessor macros
3373
3374         * ircd/parse.c: use new struct Client accessor macros
3375
3376         * ircd/packet.c: use new struct Client accessor macros
3377
3378         * ircd/numnicks.c: use new struct Client accessor macros
3379
3380         * ircd/motd.c: use new struct Client accessor macros
3381
3382         * ircd/listener.c: use new struct Client accessor macros
3383
3384         * ircd/list.c: use new struct Client accessor macros
3385
3386         * ircd/jupe.c: use new struct Client accessor macros
3387
3388         * ircd/ircd_snprintf.c: use new struct Client accessor macros
3389
3390         * ircd/ircd_reply.c: use new struct Client accessor macros
3391
3392         * ircd/ircd_relay.c: use new struct Client accessor macros
3393
3394         * ircd/ircd.c: use new struct Client accessor macros
3395
3396         * ircd/gline.c: catch some instances of me.<stuff> I missed
3397         previously
3398
3399         * ircd/client.c: use cli_ instead of con_
3400
3401         * ircd/class.c: use cli_ instead of con_
3402
3403         * ircd/channel.c: use cli_ instead of con_
3404
3405         * ircd/IPcheck.c: use cli_ instead of con_; catch some instances
3406         of me.<stuff> I missed previously
3407
3408         * include/client.h: use cli_ instead of con_...seemed like a good
3409         idea at the time *shrug*
3410
3411 2000-12-11  Kevin L. Mitchell  <klmitch@mit.edu>
3412
3413         * ircd/hash.c: use struct Client accessor macros
3414
3415         * ircd/gline.c: use struct Client accessor macros
3416
3417         * ircd/crule.c: use struct Client accessor macros
3418
3419         * ircd/client.c: use struct Client accessor macros; remove some
3420         dead code
3421
3422         * ircd/class.c: use struct Client accessor macros
3423
3424         * ircd/channel.c: use struct Client accessor macros; remove some
3425         dead code
3426
3427         * ircd/IPcheck.c: use struct Client accessor macros
3428
3429         * include/numnicks.h: use struct Client accessor macros
3430
3431         * include/client.h: first step to divorcing struct Client and
3432         struct Connection--define accessor macros and use them
3433
3434         * ircd/gline.c: When Uworld removed Uworld-set G-lines, only the
3435         uplink would remove them.  This is because the removal protocol
3436         message wasn't being sent to the uplinks.  This is fixed by fixing
3437         propagate_gline() to send the proper number of arguments depending
3438         on whether or not we're adding or deleting the Uworld gline, and
3439         by having gline_deactivate() make sure to turn off the active bit
3440         and call propagate_gline() if it's a Uworld gline
3441
3442 2000-12-10  Kevin L. Mitchell  <klmitch@mit.edu>
3443
3444         * ircd/os_generic.c: make sure IOV_MAX gets defined, just in case
3445
3446         * ircd/os_bsd.c: apparently BSD doesn't have IOV_MAX defined
3447         anywhere intelligent...
3448
3449 2000-12-09  Kevin L. Mitchell  <klmitch@mit.edu>
3450
3451         * ircd/send.c (send_queued): call deliver_it with appropriate
3452         arguments
3453
3454         * ircd/s_serv.c: reorder a couple of headers--cosmetic
3455
3456         * ircd/s_bsd.c (deliver_it): make deliver_it work with a struct
3457         MsgQ
3458
3459         * ircd/os_solaris.c (os_sendv_nonb): function for calling writev
3460         with appropriate iovec
3461
3462         * ircd/os_linux.c (os_sendv_nonb): function for calling writev
3463         with appropriate iovec
3464
3465         * ircd/os_generic.c (os_sendv_nonb): function for calling writev
3466         with appropriate iovec
3467
3468         * ircd/os_bsd.c (os_sendv_nonb): function for calling writev with
3469         appropriate iovec
3470
3471         * ircd/msgq.c (msgq_mapiov): add a len_p argument for totalling up
3472         exactly how much we're trying to write out to the fd
3473
3474         * include/s_bsd.h: make deliver_it take a struct MsgQ
3475
3476         * include/msgq.h: add a len_p argument to msgq_mapiov to help
3477         detect short writes that indicate possible socket blocking
3478
3479         * include/ircd_osdep.h: declare os_sendv_nonb()
3480
3481         * ircd/channel.c (modebuf_mode): don't add empty modes...
3482
3483 2000-12-08  Kevin L. Mitchell  <klmitch@mit.edu>
3484
3485         * include/send.h: add prio argument to send_buffer to select
3486         between normal and priority queues
3487
3488         * ircd/s_user.c (send_user_info): add prio argument to send_buffer
3489         call
3490
3491         * ircd/m_ison.c (m_ison): add prio argument to send_buffer call
3492
3493         * ircd/ircd_reply.c (send_reply): add prio argument to send_buffer
3494         call
3495
3496         * ircd/channel.c (send_channel_modes): add prio argument to
3497         send_buffer call
3498
3499         * ircd/send.c (send_buffer): add a prio argument to select the
3500         priority queue; update send.c functions to use it
3501
3502         * ircd/msgq.c (msgq_add): remove msgq_prio; fold msgq_link and
3503         msgq_add; add a prio argument to msgq_add to select the priority
3504         queue
3505
3506         * include/msgq.h: remove msgq_prio; add a prio argument to
3507         msgq_add
3508
3509         * ircd/send.c: remove sendbuf; remove GODMODE code; switch to
3510         using msgq functions instead of dbuf functions; remove old, dead
3511         sendto_* functions; redo send_buffer to take a struct MsgBuf;
3512         rework sendcmdto_* functions to make use of the new struct MsgBuf
3513
3514         * ircd/s_user.c: remove hunt_server; restructure send_user_info to
3515         make appropriate use of struct MsgBuf
3516
3517         * ircd/s_debug.c (count_memory): count memory used by the MsgQ
3518         system and report it
3519
3520         * ircd/s_conf.c (read_configuration_file): use
3521         sendto_opmask_butone instead of the now dead sendto_op_mask
3522
3523         * ircd/s_bsd.c: switch to using appropriate MsgQLength and other
3524         calls on sendQ
3525
3526         * ircd/parse.c (parse_server): get rid of a piece of GODMODE code
3527
3528         * ircd/msgq.c: add msgq_append and msgq_bufleft; fix a bug in
3529         msgq_clean
3530
3531         * ircd/m_version.c: fix spelling in comments marking dead code
3532
3533         * ircd/m_userip.c (userip_formatter): restructure to make use of
3534         struct MsgBuf
3535
3536         * ircd/m_userhost.c (userhost_formatter): restructure to make use
3537         of struct MsgBuf
3538
3539         * ircd/m_stats.c: use MsgQLength on a sendQ
3540
3541         * ircd/m_settime.c: use MsgQLength instead of DBufLength on a
3542         sendQ; mark a piece of dead code
3543
3544         * ircd/m_names.c: use send_reply instead of sendto_one
3545
3546         * ircd/m_mode.c: use new mode; remove old dead code
3547
3548         * ircd/m_ison.c (m_ison): restructure to make use of struct MsgBuf
3549
3550         * ircd/m_burst.c: use BUFSIZE instead of IRC_BUFSIZE; remove old
3551         dead code
3552
3553         * ircd/listener.c (accept_connection): use sendto_opmask_butone
3554         instead of sendto_op_mask
3555
3556         * ircd/list.c (free_client): use MsgQClear to clear sendQ
3557
3558         * ircd/ircd_reply.c: remove send_error_to_client; restructure
3559         send_reply to make use of struct MsgBuf
3560
3561         * ircd/dbuf.c (dbuf_put): remove argument to flush_sendq_except,
3562         since its no longer used (at least currently)
3563
3564         * ircd/channel.c: restructure send_channel_modes to make use of
3565         struct MsgBuf; remove set_mode, add_token_to_sendbuf, cancel_mode,
3566         and send_hack_notice; use BUFSIZE instead of IRC_BUFSIZE
3567
3568         * ircd/Makefile.in: add msgq.c to list of sources; run make depend
3569
3570         * ircd/IPcheck.c: use sendcmdto_one instead of sendto_one
3571
3572         * include/send.h: send_buffer now takes a struct MsgBuf * instead
3573         of a char *; flush_sendq_except now takes no arguments, as sendq
3574         flushing currently only happens in dbuf.h and sendQ is a struct
3575         MsgQ; remove prototypes for a lot of old sendto_* functions that
3576         aren't used anymore; remove sendbuf and IRC_BUFSIZE--the former is
3577         no longer needed, and the latter is identical to BUFSIZE in
3578         ircd_defs.h
3579
3580         * include/s_user.h: make InfoFormatter take a struct MsgBuf*
3581         instead of a char *; also make it return void, instead of char *
3582
3583         * include/msgq.h: add msgq_append and msgq_bufleft functions
3584
3585         * include/client.h: use a struct MsgQ instead of a struct DBuf for
3586         sendq
3587
3588         * doc/Configure.help: Remove help for compile-time options that
3589         have gone away
3590
3591         * config/config-sh.in: remove CONFIG_NEWMODE
3592
3593         * ircd/m_server.c (mr_server): don't send server IPs in any server
3594         notices
3595
3596         * ircd/msgq.c (msgq_vmake): add \r\n to messages
3597
3598 2000-12-07  Kevin L. Mitchell  <klmitch@mit.edu>
3599
3600         * include/msgq.h: declare the MsgQ API
3601
3602         * ircd/msgq.c: implementation of new MsgQ system
3603
3604 2000-12-06  Kevin L. Mitchell  <klmitch@mit.edu>
3605
3606         * ircd/ircd_features.c: #include was supposed to be for
3607           ircd_features.h, not features.h--missed when I had to do a
3608           rename because of namespace collision
3609
3610 2000-12-05  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3611         * ircd/m_topic.c: Added missing braces that caused all remote
3612           topics to be ignored.
3613
3614 2000-12-04  Kevin L. Mitchell  <klmitch@mit.edu>
3615
3616         * ircd/m_create.c: I'm tired of the exit_client warning :)
3617         (ms_create): discovered that exit_client() was being called with
3618         too few arguments
3619
3620         * ircd/s_misc.c (exit_client): remove all dependance on
3621         FNAME_USERLOG, since that's now gone; log only to LS_USER
3622
3623         * ircd/s_debug.c: USE_SYSLOG no longer means anything
3624
3625         * ircd/m_oper.c (m_oper): no longer log to LS_OPERLOG--we already
3626         log to LS_OPER
3627
3628         * ircd/m_kill.c: no longer conditionalize on SYSLOG_KILL
3629
3630         * ircd/ircd_log.c: remove LS_OPERLOG, LS_USERLOG
3631
3632         * include/ircd_log.h: remove LS_OPERLOG, LS_USERLOG--they serve
3633         the same purpose as LS_USER and LS_OPER
3634
3635         * config/config-sh.in: remove no longer relevant log config
3636         variables
3637
3638         * ircd/uping.c (uping_init): use log_write instead of ircd_log
3639
3640         * ircd/s_misc.c (exit_client): use log_write instead of ircd_log
3641
3642         * ircd/s_conf.c: use log_write instead of ircd_log
3643
3644         * ircd/s_bsd.c (report_error): use log_write instead of ircd_log
3645
3646         * ircd/s_auth.c (timeout_auth_queries): use log_write instead of
3647         ircd_log
3648
3649         * ircd/res.c (send_res_msg): use log_write instead of ircd_log
3650
3651         * ircd/m_who.c: use log_write instead of write_log; no longer
3652         conditionalize on WPATH; mark dead ircd_log calls
3653
3654         * ircd/m_uping.c: mark dead ircd_log call
3655
3656         * ircd/m_server.c (mr_server): use log_write instead of ircd_log
3657
3658         * ircd/m_restart.c: use log_write instead of ircd_log; mark dead
3659         ircd_log calls
3660
3661         * ircd/m_rehash.c (mo_rehash): use log_write instead of ircd_log
3662
3663         * ircd/m_oper.c: use log_write instead of ircd_log; no longer
3664         conditionalize on FNAME_OPERLOG; mark dead ircd_log calls
3665
3666         * ircd/m_kill.c: mark dead ircd_log calls
3667
3668         * ircd/m_connect.c: use log_write instead of ircd_log; mark dead
3669         ircd_log
3670
3671         * ircd/m_clearmode.c: use log_write instead of write_log; no
3672         longer conditionalize on OPATH
3673
3674         * ircd/jupe.c: use log_write instead of write_log; no longer
3675         conditionalize on JPATH
3676
3677         * ircd/ircd_log.c: add USER subsystem; remove ircd_log() compat
3678         function; fix a couple of bugs
3679
3680         * ircd/ircd_alloc.c: fixed a comment
3681
3682         * ircd/ircd.c: use log_write instead of ircd_log; fold server
3683         notice generation in a couple of cases
3684
3685         * ircd/gline.c: use log_write instead of write_log; no longer
3686         conditionalize on GPATH
3687
3688         * ircd/channel.c (modebuf_flush_int): use log_write instead of
3689         write_log; no longer conditionalize on OPATH
3690
3691         * ircd/Makefile.in: run make depend, since dependencies have
3692         changed
3693
3694         * doc/example.conf: add system USER to documentation
3695
3696         * include/ircd_log.h: add system USER; remove old ircd_log()
3697         declarations
3698
3699 2000-12-04  Isomer <isomer@coders.net>
3700         * ircd/m_names.c: Add NAMES_EON to do_names to say add a
3701         'end_of_names' reply when done.
3702         * ircd/m_join.c: use NAMES_EON as mentioned above
3703
3704 2000-12-01  net  <simms@LUCIDA.QC.CA>
3705
3706         * ircd/motd.c: add a freelist for struct Motds
3707
3708 2000-11-30  Kevin L. Mitchell  <klmitch@mit.edu>
3709
3710         * ircd/s_stats.c (report_feature_list): report features--only
3711         local opers can see logging configuration, since it doesn't really
3712         mean anything to users
3713
3714         * ircd/s_err.c: add reply messages for new feature subsystem
3715
3716         * ircd/s_conf.c: add F lines to .conf
3717
3718         * ircd/parse.c: add the message descriptions for /set, /reset, and
3719         /get
3720
3721         * ircd/m_stats.c: add /stats f
3722
3723         * ircd/m_set.c (mo_set): implement /set
3724
3725         * ircd/m_reset.c (mo_reset): implement /reset
3726
3727         * ircd/m_rehash.c: /rehash m now flushes MOTD cache, and /rehash l
3728         reopens log files (for log file rotation)
3729
3730         * ircd/m_get.c (mo_get): implement /get
3731
3732         * ircd/ircd_log.c: use int instead of void return value; add
3733         log_report_features() and log_canon(); fix a function that
3734         disappears if DEBUGMODE not #define'd
3735
3736         * ircd/ircd_features.c: functions to manipulate feature settings
3737         either from the config file or with the new /set, /reset, and /get
3738         commands
3739
3740         * ircd/Makefile.in: add new .c files, run make depend
3741
3742         * include/s_stats.h: declare report_feature_list() (/stats f
3743         handler)
3744
3745         * include/numeric.h: add RPL_STATSFLINE, RPL_FEATURE,
3746         ERR_NOFEATURE, ERR_BADLOGTYPE, ERR_BADLOGSYS, and ERR_BADLOGVALUE
3747         reply numerics
3748
3749         * include/msg.h: add defines for SET, RESET, and GET
3750
3751         * include/ircd_log.h: add a function to canonicalize subsystem
3752         names; change some void return values to int
3753
3754         * include/ircd_features.h: new features subsystem handles all the
3755         manipulation of special features, like log files
3756
3757         * include/handlers.h: declare new mo_{s,res,g}et message handlers
3758         for fiddling with features run-time
3759
3760         * include/client.h (SNO_DEFAULT): don't set SNO_DEBUG by default;
3761         seemed like a good idea at the time...
3762
3763         * doc/example.conf: document new F lines
3764
3765 2000-11-29  Kevin L. Mitchell  <klmitch@mit.edu>
3766
3767         * ircd/s_debug.c: rewrite debug_init() and vdebug() in terms of
3768         new logging functions, which have special support for the debug
3769         log; added loop detection to vdebug(), so that I can
3770         sendto_opmask_butone() from log_vwrite() without incurring another
3771         call to vdebug()
3772
3773         * ircd/s_conf.c (rehash): call log_reopen() from rehash routine;
3774         this allows log file rotations
3775
3776         * ircd/m_kill.c: call log_write_kill() instead of ircd_log_kill()
3777
3778         * ircd/ircd_log.c: much more work fleshing out the interface;
3779         removed old interface; included backwards-compat ircd_log()
3780         function that logs to subsystem LS_OLDLOG
3781
3782         * ircd/ircd.c: switch to new log_init()/log_close()/log_reopen()
3783         functions
3784
3785         * include/ircd_log.h: include stdarg.h for va_list; move ordering
3786         warning to top of file; fill out LogSys enum; declare new
3787         log_debug_init(), log_vwrite(), log_write_kill(), and
3788         log_[sg]et_*() functions; add flags argument to log_write();
3789         defined flags to inhibit various logging actions
3790
3791         * include/client.h: added support for new SNO_DEBUG, enabled only
3792         if DEBUGMODE is defined
3793
3794 2000-11-28  Kevin L. Mitchell  <klmitch@mit.edu>
3795
3796         * ircd/ircd_log.c: make sure the various LOG_* constants are
3797         defined (probably not needed, since #include <syslog.h> isn't
3798         conditional); various static data needed for the new logging
3799         functions; definitions of new logging functions
3800
3801         * include/ircd_log.h: new LogSys enum, declarations for part of
3802         new logging API
3803
3804         * ircd/motd.c: we were setting type to MOTD_CLASS unconditionally,
3805         which was of course stupid; switched to using switch/case in
3806         initialization in motd_create(); zero the MotdList.other pointer
3807         from motd_clear()
3808
3809         * ircd/ircd.c (main): motd_init() has to come before init_conf(),
3810         or we overwrite init_conf()'s hard work with respect to T-lines
3811
3812 2000-11-27  Kevin L. Mitchell  <klmitch@mit.edu>
3813
3814         * ircd/s_stats.c: comment out report_motd_list and include a
3815         reference to motd_report()
3816
3817         * ircd/s_conf.c: rip out the old MOTD manipulation functions; call
3818         motd_add() from the conf parser; call motd_clear() from the rehash
3819         routine; remove the no longer needed memory clearing and reloading
3820         stuff from the rehash service routine
3821
3822         * ircd/motd.c: loads new API, including static internal functions
3823         to do allocation/deallocation, etc.
3824
3825         * ircd/m_stats.c: use new motd_report() instead of
3826         report_motd_list()
3827
3828         * ircd/m_motd.c: use new syntax for motd_send()
3829
3830         * ircd/ircd.c: use new motd_init() function
3831
3832         * ircd/Makefile.in (SRC): forgot to add motd.c to SRC in
3833         Makefile.(in); also ran make depend
3834
3835         * include/motd.h: don't need config.h, but now do need time.h;
3836         define new structures and constants; redefine old API and define
3837         new functions
3838
3839 2000-11-22  Kevin L. Mitchell  <klmitch@mit.edu>
3840
3841         * ircd/s_user.c (register_user): use motd_signon() instead of
3842         calling m_motd; much cleaner this way
3843
3844         * ircd/motd.c: write the new motd_* stuff to make MOTD handling
3845         less of a crock
3846
3847         * ircd/m_motd.c: rewrite m{,s}_motd to call out to new motd_*
3848         functions
3849
3850         * include/motd.h: define new MOTD API stuff
3851
3852 2000-11-20  Kevin L. Mitchell  <klmitch@mit.edu>
3853
3854         * ircd/ircd_reply.c (protocol_violation): rewrite
3855         protocol_violation so it'll actually work
3856
3857         oh, yeah, use %s -> cptr->name, instead of %c -> cptr, so we get
3858         the client's real name in there.
3859
3860         * ircd/m_motd.c (m_motd): Iso's addition of get_client_class(sptr)
3861         resulted in core dumps if NODEFAULTMOTD is defined, because m_motd
3862         gets called from register_user with a NULL sptr.  This is probably
3863         a design problem, but this bandaid will do for now...
3864
3865 2000-11-19  Isomer <isomer@coders.net>
3866         * ircd/ircd_reply.c: added 'protocol_violation', thus alerting us
3867         to problems in the server<->server protocol.
3868
3869         * ircd/m_connect.c: allow remote connects with a port of '0'
3870         meaning to use the port in the config file.
3871
3872         * ircd/m_create.c: Enable hacking protection, lets see how far we
3873         get.
3874
3875         * ircd/m_error.c: The RFC says never accept ERROR from unreg'd
3876         clients, so we don't any more.
3877
3878         * ircd/m_kill.c: The kill path is now made up of numnicks of servers,
3879         and the user@host is displayed of the victim.
3880
3881         * ircd/m_map.c: reloaded 'dump_map'.
3882
3883         * ircd/m_trace.c: allow per class T:
3884
3885         * ircd/m_stats.c: allow local opers /remote stats anywhere on the 'net.
3886
3887 2000-11-17  Isomer <isomer@coders.net>
3888
3889         * ircd/m_topic.c: Fixed bug where we'd only send to clients topics
3890         that were the *same* instead of different.  Oh the embarrasment!
3891
3892         * ircd/IPcheck.c: Merged net's fix.
3893
3894 2000-11-02  Kevin L. Mitchell  <klmitch@mit.edu>
3895
3896         * ircd/m_whois.c: remove compiler warning by adding a newline to
3897         end of file
3898
3899         * ircd/m_names.c: moved the flags up to s_user.h
3900
3901         * ircd/m_join.c: call do_names instead of m_names; restructure
3902         ms_join to never transmute a JOIN into a CREATE, but use the TS in
3903         the JOIN (if present) to timestamp the channel
3904
3905         * ircd/channel.c: send JOINs individually, instead of grouping
3906         them, so that we can send the channel's creation time
3907
3908         * include/s_user.h: declare do_names()
3909
3910 2000-10-30  Isomer <isomer@coders.net>
3911         * ircd/m_oper.c: Fixed warning
3912
3913 2000-10-30  Isomer <isomer@coders.net>
3914         * ircd/m_oper.c: Fixed over agressive cut and no paste
3915
3916 2000-10-30  Isomer <isomer@coders.net>
3917
3918         * ircd/m_topic.c: Restructured, fixed bug where topics on local
3919         channels are propergated (I forget who pointed this out to me, but
3920         thanks anyway).  Also to save bandwidth don't send the topic to
3921         users if the topic is already the same on the server (but still
3922         propergate to other servers).  X/W's "autotopic" feature must
3923         chew a lot of bandwidth, hopefully this will help reduce this.
3924
3925         * doc/rfc1459.rfc: Updated documentation on /topic.
3926
3927         * ircd/listener.c: snotice warnings about failed accept()'s
3928         potentially warning admins that they're running out of fd's.
3929
3930         * ircd/stats.c, ircd/class.c: Removed /stats v, added number of
3931         people in a class in /stats y
3932
3933         * ircd/m_create.c: Checks for timewarp hacking and squit's
3934         evil servers. (currently disabled)
3935         
3936
3937 2000-10-30  net <simms@lucida.qc.ca>
3938         
3939         * ircd/gline.c: Fixed various bugs Isomer left behind.
3940
3941 2000-10-26  Kevin L. Mitchell  <klmitch@mit.edu>
3942
3943         * ircd/m_join.c (m_join): reply on attempt to join a BADCHANed
3944         channel is now ERR_BANNEDFROMCHAN instead of ERR_BADCHANNAME
3945
3946 2000-10-24  Kevin L. Mitchell  <klmitch@mit.edu>
3947
3948         * ircd/channel.c: ok, now last mode rules; mode +ps will always
3949         result in +s (and won't send a mode if the channel is already +s);
3950         mode +sp will always result in +p; -n+n on a +n channel results in
3951         no mode change; -n+n on a -n channel results in a +n mode change;
3952         etc.
3953
3954 2000-10-23  Kevin L. Mitchell  <klmitch@mit.edu>
3955
3956         * ircd/channel.c: add "add" and "del" elements to ParseState to
3957         avoid not-too-pretty -p+s when +s is sufficient; fix a bug in
3958         mode_parse_limit that caused it to clear all channel modes
3959         prematurely; restructure mode_parse_mode to avoid calling
3960         modebuf_mode too early (ties in with first mentioned change);
3961         better logic for +p/+s mutual exclusivity; initialize "add" and
3962         "del" elements in mode_parse; send simple modes down to
3963         modebuf_mode after the loop in mode_parse
3964
3965 2000-09-28  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3966         * ircd/m_names.c: Fixed a non-lethal logic error that 
3967         triggers an assert() in find_member_link while debugging.
3968         (Spotted by Maniac-).
3969 2000-09-19  Thomas Helvey <helveytw@home.com>
3970         * ircd/s_conf.c: move K:lines to their own list and data
3971         structures, add supporting code.
3972         * ircd/m_stats.c: cleanup stats processing a bit move
3973         kline listing code to a new function, haven't figured
3974         out where it goes yet tho'
3975         * ircd/s_stats.c: added K:line bulk lister
3976         * include/s_conf.h: added new DenyConf struct
3977         * *[ch]: fixeup code that depended on changes
3978
3979 2000-09-17  Thomas Helvey <helveytw@home.com>
3980         * ircd/class.c: encapsulate class list
3981         * include/class.h: clean up classes
3982         * * fixup code that depended on changes
3983
3984 2000-09-17  Thomas Helvey <helveytw@home.com>
3985         * ircd/s_conf.c: add me to local conf
3986         * include/s_conf.h: move CONF_ME macro to chkconf.c
3987         * ircd/s_bsd.c: cleanup initialization, allow virtual host
3988         to be changed by rehash
3989
3990 2000-09-17  Thomas Helvey <helveytw@home.com>
3991         * include/class.h: add missing prototype
3992         * ircd/class.c: make argument to get_conf_class const
3993
3994 2000-09-17  Thomas Helvey <helveytw@home.com>
3995         * ircd/*.c: merged in changes from 2.10.10.pl12, cleanup
3996         merge conflicts.
3997         * ircd/*.h: merged in changes from 2.10.10.pl12, cleanup
3998         merge conflicts
3999
4000 2000-09-16  Thomas Helvey <helveytw@home.com>
4001         * ircd/s_conf.c: add code for server struct
4002         * ircd/client.c: copy of class.c sort of, new file for client
4003         specific operations, will move things here as appropriate,
4004         currently only one function is exported from here.
4005         * ircd/*.c: general logic cleanups, convert negatives to
4006         positives in places.
4007
4008 2000-09-16  Thomas Helvey <helveytw@home.com>
4009         * ircd/s_conf.c: add code for new crule data structs, strip quotes
4010         * ircd/crule.c: clean up scary casting a bit, type safety stuff
4011         * include/s_conf.h: add CRuleConf struct and support, remove
4012         unused constants
4013         * include/crule.h: type safety cleanups
4014         * ircd/*.c: fixup code that depended on stuff I changed
4015
4016 2000-09-15  Thomas Helvey <helveytw@home.com>
4017         * ircd/s_conf.c: start adding code for new conf data structs, changed
4018         listeners, admin line, motd lines, class lines. Move validate_hostent
4019         to resolver. General mayhem.
4020         * include/s_conf.h: new data structs and accessors
4021         * ircd/res.c: move validate_hostent here, rewrite, use regular
4022         expression for validation.
4023         * doc/example.conf: update docs for port
4024
4025 2000-09-14  Thomas Helvey <helveytw@home.com>
4026         * ircd/s_conf.c (conf_init): rewrite conf file parser, start to break
4027         up conf_init into managable chunks.
4028         * ircd/listener.c (set_listener_mask): fix logic bug core dump.
4029         * include/s_conf.h: add new data struct for local info (unwinding the mess).
4030
4031 2000-09-13  Thomas Helvey <helveytw@home.com>
4032         * ircd/list.c: put Clients in free lists, pre-allocate MAXCONNECTIONS
4033         local clients.
4034         * ircd/list.c: put SLinks in free lists
4035         * ircd/channel.c: put Memberships in free lists
4036         * ircd/ircd.c: rearrange initializations a bit in main
4037         Note: With these changes, ircd NEVER frees Clients, SLinks or
4038         Memberships. It will also rarely need to allocate new
4039         ones during net bursts and other disruptions. This should
4040         cut down on memory fragmentation a bit as well.
4041
4042 2000-08-30  Kevin L. Mitchell  <klmitch@mit.edu>
4043
4044         * ircd/m_names.c (do_names): pull-up from do_names fix in
4045         u2.10.10.pl11
4046
4047 2000-07-15  Perry Lorier       <Isomer@coders.net>
4048         * various: IP only k:'s and G:'s now do bit tests instead of two(!) 
4049                  match()'s.  Major Major cpu savings.  Also speed up the
4050                  other case slightly.  As a side effect you can now
4051                  k/Gline *@10.0.0.0/8.  I'll do bans tomorrow, it's nearing
4052                  3am.
4053
4054 2000-07-15  Perry Lorier       <Isomer@coders.net>
4055         * various: Fixed warnings after compiling on an alpha.
4056 2000-07-09  Perry Lorier       <Isomer@coders.net>
4057         * doc/ircd.8: Applied grammitical changes by Liandrin, applied
4058                       changes suggested by various other people.
4059         * ircd/IPcheck.c: More bug fixes.  Current problem appears to be
4060                         that it gets a corrupt entry somehow.
4061 2000-07-09  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4062         * ircd/m_oper.c: Clean up compiler warning.
4063
4064 2000-07-08  Perry Lorier       <Isomer@coders.net>
4065         * doc/ircd.8: Updated the documentation, it was slightly out of date
4066                       being updated around 1989.
4067         * ircd/m_whois.c: Rewrote for clarity, and probably a bit more speed.
4068                           fixed a few minor glitches.
4069         * doc/rfc1459.unet: Updated.
4070         * ircd/IPcheck.c: Fixed more bugs.
4071         * ircd/s_bsd.c: We now keep track of servers we've conected.
4072
4073 2000-07-02  Perry Lorier       <Isomer@coders.net>
4074         * ircd/s_misc.c: Fixed remote IPcheck bug.  Ok, I'm a moron, so sue
4075                         me.  Thanks to Hektik, thanks thanks thanks thanks
4076                         thanks thanks thanks thanks thank thanks thank thanks
4077
4078 2000-07-01  Perry Lorier       <Isomer@coders.net>
4079         * ircd/s_conf.c: "Fixed" the "bug" where people would "evade" K:'s.
4080         * ircd/s_conf.c, include/IPcheck.h: Fixed compile warnings.
4081
4082 2000-06-22  Perry Lorier       <Isomer@coders.net>
4083         * ircd/IPcheck.c: Large chunks redone.
4084         * ircd/s_conf.c: Changes due to IPcheck - ONE nolonger supported,
4085                         single AND double digit limits are allowed now.
4086         * misc other: Changes to IPcheck.
4087
4088 2000-06-30  Perry Lorier       <Isomer@coders.net>
4089         * ircd/ircd.c: Fix command line parameter bugs.
4090
4091 2000-06-30  Perry Lorier       <Isomer@coders.net>
4092         * ircd/m_kill.c: Fixed bug with LOCAL_KILL_ONLY
4093         * ircd/m_nick.c: Tidied things up.
4094
4095 2000-06-12 Joseph Bongaarts <foxxe@trms.com>
4096         * ircd/m_stats.c: Iso forgot mo_stats when he added /stats v
4097         
4098 2000-05-29  Perry Lorier       <Isomer@coders.net>
4099         * ircd/m_stats.c: add /stats v to do only the last part of the /trace
4100         * ircd/IPcheck.c: Cosmetic change, if we meddle with it enough do
4101                         you think it'll get bored and fix itself?
4102
4103 2000-06-09  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4104
4105         * ircd/m_names.c: Clean up compiler warnings.
4106
4107 2000-06-09  Kevin L. Mitchell  <klmitch@mit.edu>
4108
4109         * ircd/channel.c (mode_parse_client): don't send warning if
4110         there's not enough arguments for a +/-o/v; means the habit of
4111         doing "/mode #channel +oooooo bob" doesn't result in a bunch of
4112         error messages
4113
4114 2000-06-04  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4115
4116         * ircd/m_names.c: Re-factor code to remove unneccessary
4117         GlobalChannelList iteration every time someone joins a channel.
4118
4119 2000-06-02  Kevin L. Mitchell  <klmitch@mit.edu>
4120
4121         * ircd/s_user.c: add struct Gline * argument to register_user;
4122         look up global glines and repropagate them if necessary; send
4123         acknowledgement of gline to remote servers when registering users
4124
4125         * ircd/s_serv.c (server_estab): don't send acknowledgement of
4126         local glines to remote servers; do send gline acknowledgement of
4127         bursted users
4128
4129         * ircd/m_user.c (m_user): pass new struct Gline * argument to
4130         register_user
4131
4132         * ircd/m_pong.c: pass new struct Gline * argument to register_user
4133
4134         * ircd/m_nick.c (ms_nick): document protocol change
4135
4136         * ircd/gline.c: support GLINE_LASTMOD
4137
4138         * include/s_user.h: add struct Gline * argument to register_user
4139
4140         * include/gline.h: add GLINE_LASTMOD to look up non-zero lastmods
4141
4142         * ircd/s_conf.c (find_kill): add unsigned int argument to
4143         gline_lookup()
4144
4145         * ircd/gline.c: add GLINE_GLOBAL to lookup or find only global
4146         glines; add unsigned int argument to gline_lookup()
4147
4148         * include/gline.h: add GLINE_GLOBAL flag; add unsigned int
4149         argument to gline_lookup()
4150
4151         * ircd/m_server.c: Resend jupe only when there is no %<lastmod>
4152         parameter, or when it falls out of bounds: see comments prior to
4153         call to jupe_resend(); call server_estab with struct Jupe
4154         parameter, so that we place the appropriate %<lastmod> in the
4155         appropriate place.
4156
4157         * ircd/s_serv.c (server_estab): send %<lastmod> for introduced
4158         server, as well as for servers when we're sending the BURST
4159
4160         * include/s_serv.h: add a struct Jupe * to the arguments for
4161         server_estab() so that we can send the appropriate lastmod
4162         parameter
4163
4164         * ircd/m_gline.c (ms_gline): actually, this should be the
4165         slightest bit more efficient...
4166
4167         * ircd/m_jupe.c (ms_jupe): actually, this should be the slightest
4168         bit more efficient...
4169
4170         * ircd/m_gline.c (ms_gline): inhibit GLINE processing resends
4171         during netburst
4172
4173         * ircd/m_jupe.c (ms_jupe): inhibit JUPE processing resends during
4174         netburst
4175
4176         * ircd/channel.c (joinbuf_join): really remove user from local
4177         channels
4178
4179 2000-05-29  Perry Lorier       <Isomer@coders.net>
4180         * ircd/m_names.c: Removed redundant space. 
4181         * ircd/s_bsd.c: Fixed incorrect syntax on ERROR line.
4182
4183 2000-05-18  Kevin L. Mitchell  <klmitch@mit.edu>
4184
4185         * ircd/m_burst.c (ms_burst): er...that should have been a ",", not
4186         a " "
4187
4188 2000-05-04  Kevin L. Mitchell  <klmitch@mit.edu>
4189
4190         * ircd/channel.c: replace bogus assertions with returns, which is
4191         logically correct; only wipe out limit/key if they were originally
4192         set in the first place; remove user from channel when doing a
4193         PARTALL; only send MODE +o for user CREATEing channel if user is
4194         not MyUser--CREATE will only be used if the channel did not
4195         originally exist, therefore we can assume no one local is on the
4196         channel anyway, and we don't exactly need for the user to see an
4197         explicit +o for themselves
4198
4199         * doc/readme.gline: describe the syntax of the GLINE command
4200
4201         * doc/readme.jupe: update to reflect a couple of changes to JUPE
4202
4203         * ircd/gline.c: don't propagate local changes
4204
4205         * ircd/jupe.c: don't propagate local changes
4206
4207         * ircd/m_gline.c (mo_gline): force local flag when deactivating
4208         glines with 0 lastmod
4209
4210         * ircd/gline.c (gline_deactivate): G-lines with zero lastmod time
4211         are now removed instead of being deactivated
4212
4213         * ircd/m_gline.c (ms_gline): make G-lines of the form "GLINE *
4214         -<mask>" be accepted
4215
4216         * ircd/channel.c (send_channel_modes): deal with one of the last
4217         vestiges of sendbuf
4218
4219         * ircd/m_burst.c (ms_burst): debugged ban processing; removed
4220         debugging hooks
4221
4222         * ircd/channel.c (modebuf_extract): remove debugging
4223         sendto_opmask_butone calls
4224
4225 2000-05-03  Kevin L. Mitchell  <klmitch@mit.edu>
4226
4227         * ircd/channel.c: support a couple of new flags to support using
4228         mode_parse; fix some bugs with 0 struct ModeBuf *; implementation
4229         of modebuf_extract to extract added flags for use by ms_burst
4230
4231         * include/channel.h: a couple of new flags to support using
4232         mode_parse inside ms_burst
4233
4234         * ircd/m_burst.c (ms_burst): brand new implementation of BURST
4235
4236         * ircd/m_endburst.c: add loop to processing of end_of_burst to
4237         free empty channels after the BURST is over.
4238
4239         * ircd/m_server.c: convert to use new send.c functions--I wanted
4240         to rewrite it from scratch, but the logic's pretty complex; I may
4241         still rewrite it, though...
4242
4243 2000-05-02  Thomas Helvey <tomh@inxpress.net>
4244
4245         * ircd/ircd.c: fix broken header include ordering
4246
4247 2000-05-02  Thomas Helvey <tomh@inxpress.net>
4248         
4249         * ircd/IPcheck.c: cleanups for ZenShadow's cleanups
4250         review emailed privately
4251
4252         * include/IPcheck.h: removed unneeded include
4253
4254 2000-05-02  Kevin L. Mitchell  <klmitch@mit.edu>
4255
4256         * ircd/s_user.c (hunt_server): throw in a comment so I know what
4257         the sendto_one is for
4258
4259         * include/querycmds.h (Count_unknownbecomesclient): convert to
4260         sendto_opmask_butone
4261
4262         * ircd/send.c: start removing dead code
4263
4264         * include/send.h: start removing dead code
4265
4266         * ircd/m_rping.c: convert to sendcmdto_one / send_reply /
4267         hunt_server_cmd
4268
4269         * ircd/m_rpong.c: convert to sendcmdto_one / send_reply
4270
4271 2000-05-01  Kevin L. Mitchell  <klmitch@mit.edu>
4272
4273         * ircd/m_stats.c: convert to sendcmdto_one / send_reply
4274
4275         * ircd/m_kick.c: Completely reimplement m_kick
4276
4277         * ircd/channel.c: send_user_joins removed; it was dead code,
4278         anyway...
4279
4280 2000-05-01  Perry Lorier <isomer@coders.net>
4281         * ircd/m_invite.c: Fix for the rest of m_invite.c, and again.
4282         * ircd/channels.c: My fix for the part problem.  Untested, probably
4283                 won't work.  Can't be much worse than the current problem.
4284                 it'll either work or core, take your pick.
4285
4286
4287 2000-04-30  Perry Lorier <isomer@coders.net>
4288         * config/config-sh.in: Fix for CONNEXIT
4289         * ircd/s_{user,misc}.c: Fix for CONNEXIT
4290         * ircd/m_invite.c: Fix for incorrectly numnickified invite.
4291                         (Kev: Want to come talk to me about this?)
4292
4293 2000-04-30  Steven M. Doyle <steven@doyle.net>
4294         * ircd/ircd.c
4295           - general cleanups and readability enhancements
4296           - rewrite of setuid/chroot code.
4297           - server will no longer run as root
4298           - -DPROFIL compile option removed
4299           - Fixed IPcheck API calls
4300  
4301         * config/config-sh.in
4302           - Fixed up chroot compile options
4303           - Added options for debug and profile compiles
4304  
4305         * config/gen.ircd.Makefile
4306           - Support for new debug/profile options
4307  
4308         * ircd/Makefile.in
4309           - Support for new debug/profile options
4310  
4311         * ircd/ircd_signal.c
4312           - Removed -DPROFIL
4313
4314         * include/IPcheck.h
4315           - Removed old API prototypes, added new ones
4316         
4317         * ircd/IPcheck.c
4318           - Readability cleanups (well, I -think-...)
4319           - Changed IPRegistryEntry.last_connect to a time_t.  The previously
4320             used unsigned short was probably causing interesting things after
4321             a client had been connected longer than about 65,535 seconds...
4322           - Removed old API functions.
4323
4324         * ircd/whocmds.c
4325           - Removed IPcheck.h include
4326         
4327         * Additionally modified IPcheck API calls in:
4328           - ircd/m_nick.c
4329           - ircd/m_auth.c
4330           - ircd/s_bsd.c
4331           - ircd/s_conf.c
4332           - ircd/s_misc.c
4333           - ircd/s_serv.c
4334           - ircd/s_user.c
4335         
4336         
4337 2000-04-30  Perry Lorier <isomer@coders.net>
4338         * ircd/s_bsd.c: Sigh. :)
4339         * ircd/m_mode.c: fix for modeless channels by poptix.
4340
4341 2000-04-29  Kevin L. Mitchell  <klmitch@mit.edu>
4342
4343         * ircd/m_join.c: reimplement JOIN in terms of struct JoinBuf
4344
4345         * ircd/channel.c (clean_channelname): make clean_channelname also
4346         truncate long channel names
4347
4348 2000-04-28  Kevin L. Mitchell  <klmitch@mit.edu>
4349
4350         * ircd/m_create.c: reimplement CREATE in terms of struct JoinBuf
4351
4352         * ircd/channel.c: implemented joinbuf_init, joinbuf_join,
4353         joinbuf_flush
4354
4355         * include/channel.h: definitions and declarations for the struct
4356         JoinBuf abstraction
4357
4358 2000-04-29  Perry Lorier <isomer@coders.net>
4359         * ircd/s_bsd.c: Ok, so I thought I compiled and tested this...
4360
4361 2000-04-29  Perry Lorier <isomer@coders.net>
4362         * ircd/s_bsd.c: Add debugging code to IPcheck
4363
4364 2000-04-28  Kevin L. Mitchell  <klmitch@mit.edu>
4365
4366         * include/ircd_reply.h (SND_EXPLICIT): use instead of RPL_EXPLICIT
4367
4368         * ircd/ircd_reply.c (send_reply): use SND_EXPLICIT instead of
4369         RPL_EXPLICIT
4370
4371         * ircd/m_userhost.c (m_userhost): add a dead code comment
4372
4373         * ircd/m_desynch.c: forgot one...
4374
4375         * ircd/m_rehash.c (mo_rehash): er, duplicates :)
4376
4377         * ircd/m_proto.c (proto_send_supported): just change a comment so
4378         it doesn't show up in my scans
4379
4380         * ircd/ircd_reply.c (send_reply): fix a slight bug...
4381
4382         * ircd/s_numeric.c (do_numeric): use new sendcmdto_* functions,
4383         kinda hackish...
4384
4385         * ircd/parse.c (parse_server): argument wrangling to make
4386         processing in do_numeric a little easier to deal with
4387
4388         * ircd/s_serv.c (server_estab): SERVER should come from
4389         acptr->serv->up, not &me
4390
4391         * ircd/m_lusers.c: accidentally left out sptr for a %C
4392
4393         * ircd/send.c: hack to support doing wallchops...
4394
4395         * ircd/m_whowas.c: convert to new send functions
4396
4397         * ircd/m_whois.c: convert to new send functions
4398
4399         * ircd/m_who.c: convert to new send functions
4400
4401         * ircd/m_wallops.c: convert to new send functions
4402
4403         * ircd/m_wallchops.c: convert to new send functions
4404
4405         * ircd/m_version.c: convert to new send functions
4406
4407         * ircd/m_userip.c: convert to new send functions
4408
4409         * ircd/m_userhost.c: convert to new send functions
4410
4411         * ircd/m_uping.c: convert to new send functions
4412
4413         * ircd/m_trace.c: convert to new send functions
4414
4415         * ircd/m_topic.c: convert to new send functions
4416
4417         * ircd/m_time.c: convert to new send functions
4418
4419         * ircd/m_squit.c: convert to new send functions
4420
4421         * ircd/m_silence.c: convert to new send functions
4422
4423         * ircd/m_settime.c: convert to new send functions
4424
4425         * ircd/m_restart.c: convert to new send functions
4426
4427         * ircd/m_rehash.c: convert to new send functions
4428
4429         * ircd/m_privmsg.c: convert to new send functions
4430
4431         * ircd/m_pong.c: convert to new send functions
4432
4433         * ircd/m_ping.c: convert to new send functions
4434
4435         * ircd/m_pass.c: convert to new send functions
4436
4437         * ircd/m_opmode.c: convert to new send functions
4438
4439         * ircd/m_oper.c: convert to new send functions
4440
4441         * ircd/m_notice.c: convert to new send functions
4442
4443         * ircd/m_nick.c: convert to new send functions
4444
4445         * ircd/m_names.c: convert to new send functions
4446
4447         * ircd/m_motd.c: convert to new send functions
4448
4449         * ircd/m_mode.c: convert to new send functions
4450
4451         * ircd/m_map.c: convert to new send functions
4452
4453         * ircd/m_lusers.c: convert to new send functions
4454
4455         * ircd/m_list.c: convert to new send functions
4456
4457         * ircd/m_links.c: convert to new send functions
4458
4459         * ircd/m_kill.c: convert to new send functions
4460
4461         * ircd/m_jupe.c: convert to new send functions
4462
4463         * ircd/m_invite.c: convert to new send functions
4464
4465         * ircd/m_info.c: convert to new send functions
4466
4467         * ircd/m_help.c: convert to new send functions
4468
4469         * ircd/m_gline.c: convert to new send functions
4470
4471         * ircd/m_error.c: convert to new send functions
4472
4473         * ircd/m_endburst.c: convert to new send functions
4474
4475         * ircd/m_die.c: convert to new send functions
4476
4477         * ircd/m_destruct.c: convert to new send functions
4478
4479         * ircd/m_defaults.c: convert to new send functions
4480
4481         * ircd/m_connect.c: convert to new send functions
4482
4483 2000-04-28  Perry Lorier <isomer@coders.net>
4484         * RELEASE.NOTES: Describe a few more undocumented features.
4485         * config/config-sh.in: change the default paths for logging
4486         and the recommended number of channels.
4487         * include/supported.h: Rearrange slightly, added CHANTYPE's
4488
4489 2000-04-27  Kevin L. Mitchell  <klmitch@mit.edu>
4490
4491         * ircd/m_close.c: convert to send_reply
4492
4493         * ircd/m_clearmode.c: convert to send_reply, sendcmdto_serv_butone
4494
4495         * ircd/m_away.c: convert to send_reply and sendcmdto_serv_butone
4496
4497         * ircd/m_admin.c: convert to send_reply and hunt_server_cmd
4498
4499         * ircd/s_user.c (hunt_server_cmd): new hunt_server replacement
4500         that takes cmd and tok arguments, etc.  NOTE: THIS IMPLEMENTATION
4501         HAS A MAJOR HACK!!!  The whole hunt_server architecture should be
4502         carefully rethought...
4503
4504         * ircd/s_stats.c (hunt_stats): use new hunt_server_cmd
4505
4506         * include/s_user.h: hunt_server_cmd -- replacement for hunt_server
4507
4508         * ircd/s_misc.c: *sigh* 2.10.10 doesn't support squitting by
4509         numeric nick; therefore, we have to use the server name
4510
4511         * ircd/m_squit.c (ms_squit): allow to squit by server numeric nick
4512
4513         * ircd/send.c: fix minor bugs
4514
4515         * ircd/s_user.c (check_target_limit): mark dead code so I filter
4516         it when I grep
4517
4518         * ircd/s_serv.c (exit_new_server): mark dead code so I filter it
4519         when I grep
4520
4521         * ircd/parse.c: mark dead code so I filter it when I grep
4522
4523         * ircd/map.c: mark dead code so I filter it when I grep
4524
4525         * ircd/ircd.c: mark dead code so I filter it when I grep
4526
4527         * ircd/ircd_relay.c: convert over to new sendcmdto_*, send_reply
4528         functions
4529
4530         * ircd/channel.c: mark dead code so I filter it when I grep
4531
4532         * ircd/s_stats.c: use send_reply instead of sendto_one w/rpl_str;
4533         hope I'm not stepping on toes...
4534
4535         * ircd/s_conf.c: more sendto_opmask_butone / send_reply
4536         conversions; use ircd_snprintf in a couple of cases to negate the
4537         possibility of buffer overflow
4538
4539 2000-04-26  Kevin L. Mitchell  <klmitch@mit.edu>
4540
4541         * ircd/channel.c: convert as much as possible to new send
4542         semantics
4543
4544         * ircd/send.c (sendcmdto_common_channels): fix a subtle bug --
4545         test member->user->from->fd, not from->fd
4546
4547         * ircd/gline.c (gline_add): go ahead and add badchans; we just
4548         won't look for them in m_gline; this way, they always work...
4549
4550         * ircd/jupe.c: use ircd_vsnprintf conversion specifiers
4551
4552         * ircd/gline.c: since write_log now uses ircd_vsnprintf, use
4553         ircd_vsnprintf conversion specifiers
4554
4555         * ircd/support.c (write_log): use ircd_vsnprintf for write_log, so
4556         I have my conversion specifiers
4557
4558         * ircd/gline.c (do_gline): use send_reply for ERR_YOUREBANNEDCREEP
4559
4560         * ircd/send.c (sendcmdto_flag_butone): explicitly send WALLOPS to
4561         local users
4562
4563         * ircd/s_serv.c (exit_new_server): rewrite exit_new_server to be a
4564         little less brain-dead
4565
4566         * ircd/s_misc.c: use sendcmdto_one, sendrawto_one, and send_reply
4567
4568         * ircd/s_debug.c: use send_reply with RPL_EXPLICIT for
4569         RPL_STATSDEBUG
4570
4571         * ircd/res.c (cres_mem): use send_reply with RPL_EXPLICIT for
4572         RPL_STATSDEBUG
4573
4574         * ircd/list.c (send_listinfo): use send_reply with RPL_EXPLICIT
4575         for RPL_STATSDEBUG
4576
4577         * ircd/m_pong.c: use RPL_EXPLICIT for ERR_BADPING
4578
4579         * ircd/ircd.c: use RPL_EXPLICIT for ERR_BADPING
4580
4581         * ircd/s_user.c (register_user): use RPL_EXPLICIT for
4582         ERR_INVALIDUSERNAME
4583
4584         * ircd/ircd_reply.c (send_reply): support RPL_EXPLICIT
4585
4586         * include/ircd_reply.h (RPL_EXPLICIT): somewhat of a hack to mark
4587         a numeric as needing to use an explicit pattern, which will be the
4588         first argument in the variable argument list
4589
4590         * ircd/s_user.c: use sendrawto_one instead of sendto_one to send
4591         non-prefixed nospoof PING
4592
4593         * ircd/s_bsd.c: use sendrawto_one instead of sendto_one to send
4594         non-prefixed SERVER login
4595
4596         * ircd/ircd.c (check_pings): fix last sendto_one calls (except for
4597         a numeric usage further up)
4598
4599         * include/send.h: declare sendrawto_one
4600
4601         * ircd/send.c (sendrawto_one): new function to use ONLY for
4602         non-prefixed commands, like PING to client, or PASS/SERVER on
4603         server registration
4604
4605 2000-04-25  Kevin L. Mitchell  <klmitch@mit.edu>
4606
4607         * ircd/ircd_snprintf.c (doprintf): implement %H for possible
4608         future expansion (channel numerics?)
4609
4610         * include/ircd_snprintf.h: added documentation to # to explain use
4611         with %C; added documentation for : to explain use with %C; added
4612         documentation for %H for channels
4613
4614         * ircd/whocmds.c: use send_reply
4615
4616         * ircd/userload.c: use sendcmdto_one
4617
4618         * ircd/uping.c: use sendcmdto_one
4619
4620         * ircd/send.c: use new flags to %C format string; ':' prefixes
4621         client name with a colon for local connects, '#' uses
4622         nick!user@host form for local connects
4623
4624         * ircd/s_user.c: use send_reply, sendto_opmask_butone,
4625         sendcmdto_one, sendcmdto_serv_butone, sendcmdto_flag_butone
4626
4627         * ircd/s_serv.c: use sendcmdto_one, sendto_opmask_butone
4628
4629         * ircd/s_bsd.c: use sendto_opmask_butone, send_reply,
4630         sendcmdto_one
4631
4632         * ircd/s_auth.c: use sendto_opmask_butone
4633
4634         * ircd/res.c: use sendcmdto_one
4635
4636         * ircd/ircd_snprintf.c (doprintf): minor bug fixes and some
4637         debugging assertions
4638
4639 2000-04-24  Kevin L. Mitchell  <klmitch@mit.edu>
4640
4641         * ircd/support.c: dumpcore is no longer used, so get rid of it
4642
4643         * ircd/parse.c: use send_reply, sendcmdto_one
4644
4645         * ircd/map.c: use send_reply
4646
4647         * ircd/listener.c: use send_reply
4648
4649         * ircd/jupe.c: use sendto_opmask_butone, send_reply
4650
4651         * ircd/ircd_reply.c: use send_reply
4652
4653         * ircd/ircd.c: use sendto_opmask_butone
4654
4655         * ircd/gline.c: use sendto_opmask_butone, send_reply
4656
4657         * ircd/ircd_snprintf.c (doprintf): make it deal with incompletely
4658         registered clients; make FLAG_ALT print nick!user@host; make
4659         FLAG_COLON print :blah
4660
4661         * ircd/class.c (report_classes): use send_reply instead of
4662         sendto_one
4663
4664         * ircd/hash.c (m_hash): replace sendto_one with sendcmdto_one
4665
4666         * ircd/IPcheck.c (ip_registry_connect_succeeded): replace
4667         sendto_one with sendcmdto_one
4668
4669 2000-04-21  Kevin L. Mitchell  <klmitch@mit.edu>
4670
4671         * ircd/send.c: clean up logic in sendcmdto_channel_butone; use
4672         MyConnect() instead of IsServer() in sendcmdto_flag_butone; define
4673         sendcmdto_match_butone
4674
4675         * include/send.h: declare sendcmdto_match_butone
4676
4677 2000-04-20  Kevin L. Mitchell  <klmitch@mit.edu>
4678
4679         * ircd/jupe.c: update to use send_reply()
4680
4681         * ircd/gline.c: update to use send_reply()
4682
4683         * include/ircd_reply.h: declare send_reply
4684
4685         * ircd/ircd_reply.c (send_reply): send_error_to_client, but for
4686         replies; uses ircd_snprintf
4687
4688         * ircd/send.c: added comments to redirect searchers to appropriate
4689         sendcmdto_* function; moved new functions to end of file; added
4690         explanatory comments; reordered arguments; defined new functions
4691         mentioned below
4692
4693         * ircd/m_jupe.c: reorder arguments to sendcmdto_* functions
4694
4695         * ircd/m_gline.c: reorder arguments to sendcmdto_* functions
4696
4697         * ircd/jupe.c: reorder arguments to sendcmdto_* functions
4698
4699         * ircd/gline.c: reorder arguments to sendcmdto_* functions
4700
4701         * include/send.h: reorder arguments, add explanatory comments,
4702         declare new functions sendcmdto_flag_butone, sendto_opmask_butone,
4703         and vsendto_opmask_butone
4704
4705 2000-04-19  Kevin L. Mitchell  <klmitch@mit.edu>
4706
4707         * ircd/send.c: define sendcmdto_channel_butone, wrote a simplified
4708         vsendto_op_mask that uses '*' instead of the receiving client
4709         nickname
4710
4711         * include/send.h: declare sendcmdto_channel_butone; takes a skip
4712         argument that allows you to skip (or not to skip) deaf users,
4713         users behind bursting servers, and non channel operators
4714
4715 2000-04-17  Kevin L. Mitchell  <klmitch@mit.edu>
4716
4717         * ircd/send.c: new sendcmdto_channel_butserv -- note that old
4718         sendto_channel_butserv has a subtle bug; also wrote
4719         sendcmdto_common_channels.
4720
4721         * include/send.h: declare new sendcmdto_* functions
4722
4723         * ircd/jupe.c: support local deactivations of jupes
4724
4725         * ircd/gline.c: support local deactivations of glines
4726
4727         * include/jupe.h: JUPE_LDEACT allows jupes to be locally
4728         deactivated; if they aren't locally deactivated, then it slaves to
4729         the net-wide activation status; JupeIsRemActive() tests only
4730         whether the jupe is active everywhere else
4731
4732         * include/gline.h: GLINE_LDEACT allows glines to be locally
4733         deactivated; if they aren't locally deactivated, then it slaves to
4734         the net-wide activation status; GlineIsRemActive() tests only
4735         whether the gline is active everywhere else
4736
4737         * ircd/gline.c: detect overlapping G-lines; if an existing, wider
4738         gline expires after the new one will, we drop the new one,
4739         otherwise we add the G-line after that one (so the wide one will
4740         apply first); if the new one contains an existing G-line and if it
4741         will expire after the existing one, we drop the existing one to
4742         save memory
4743
4744         * ircd/m_gline.c (mo_gline): opers could issue remote local
4745         glines when CONFIG_OPERCMDS was off; fixed
4746
4747 2000-04-16  Kevin L. Mitchell  <klmitch@mit.edu>
4748
4749         * ircd/m_jupe.c (mo_jupe): allow target argument to be dropped if
4750         this is a local JUPE
4751
4752         * ircd/gline.c: add flags argument to gline_activate and
4753         gline_deactivate for future expansion
4754
4755         * ircd/m_gline.c: pass flags to gline_activate and
4756         gline_deactivate
4757
4758         * include/gline.h: add flags argument to gline_activate and
4759         gline_deactivate
4760
4761         * ircd/jupe.c: add flags argument to jupe_activate and
4762         jupe_deactivate for future expansion
4763
4764         * include/jupe.h: add flags argument to jupe_activate and
4765         jupe_deactivate
4766
4767         * ircd/m_jupe.c: pass a flags argument to jupe_add instead of
4768         local, active; pass flags to jupe_activate and jupe_deactivate
4769
4770         * include/gline.h: remove dead code
4771
4772         * ircd/gline.c: make gline expire times relative to CurrentTime,
4773         since that should be monotonically increasing, instead of
4774         TStime(), which can be set backwards, and which can therefore
4775         cause an expire time to increase; make local glines be removed
4776         instead of just deactivated; don't let gline_find() look for
4777         user@host glines if the mask being looked up is a channel mask
4778
4779         * ircd/send.c (vsendcmdto_one): forgot to account for the case
4780         where origin is a server and destination is a user
4781
4782         * ircd/jupe.c: make jupe expire times relative to CurrentTime,
4783         since that should be monotonically increasing, instead of
4784         TStime(), which can be set backwards, and which can therefore
4785         cause an expire time to increase; make local jupes be removed
4786         instead of just deactivated
4787
4788         * ircd/ircd_snprintf.c: d'oh, thanks for catching that; short for
4789         limit is fine.  any other warnings I should know about?
4790
4791 2000-04-15  Thomas Helvey <tomh@inxpress.net>
4792
4793         * ircd/*.c: const correctness and type safety cleanups to
4794         get code to compile with C++ compiler. Still has
4795         signed/unsigned comparison warnings.
4796
4797 2000-04-15  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4798
4799         * ircd/userload.c: change <sys/time.h> include to <time.h> for
4800           portability.
4801
4802 2000-04-14  Kevin L. Mitchell  <klmitch@mit.edu>
4803
4804         * ircd/m_gline.c (mo_gline): d'oh, target isn't a numeric; use %C
4805         and convert acptr...
4806
4807         * ircd/s_user.c: move gline_lookup function call into
4808         register_user, where it'll have a username to lookup!
4809
4810         * ircd/m_gline.c: modify to utilize new sendcmdto_* series of
4811         functions; also stuff send_error_to_client into return clauses
4812
4813         * ircd/m_jupe.c: modify to utilize new sendcmdto_* series of
4814         functions; also use send_error_to_client where that makes sense
4815
4816         * ircd/jupe.c: modify to utilize new sendcmdto_* series of
4817         functions; also use send_error_to_client where that makes sense
4818
4819         * ircd/gline.c: modify to utilize new sendcmdto_* series of
4820         functions; also fix gline_lookup() to deal properly with remote
4821         clients--boy, do struct Client and struct User need to be cleaned
4822         up!
4823
4824         * ircd/ircd_snprintf.c (doprintf): a dest of &me is a server,
4825         too...
4826
4827         * ircd/send.c: wrote sendcmdto_one(), vsendcmdto_one(), and
4828         sendcmdto_serv_butone(), all utilizing the %v conversion of
4829         ircd_snprintf()
4830
4831         * include/send.h: define IRC_BUFSIZE, max size of a message;
4832         declare sendcmdto_one(), vsendcmdto_one(), and
4833         sendcmdto_serv_butone()
4834
4835         * include/msg.h: define all the CMD_* constants needed to utilize
4836         the new sendcmdto_* series of functions
4837
4838         * ircd/Makefile.in (SRC): list ircd_snprintf.c; run make depend
4839
4840         * ircd/gline.c: remove old, dead code.
4841
4842         * ircd/m_gline.c (mo_gline): disallow setting of global G-lines
4843         unless CONFIG_OPERCMDS is enabled; disallow listing of all G-lines
4844         (don't advertise proxies); remove dead code
4845
4846         * ircd/parse.c: oper handler for JUPE only lists jupes unless
4847         CONFIG_OPERCMDS is enabled
4848
4849         * ircd/m_jupe.c (mo_jupe): don't compile mo_jupe() if
4850         CONFIG_OPERCMDS is not enabled; we'll disable it in parse.c
4851
4852         * ircd/m_opmode.c (mo_opmode): if CONFIG_OPERCMDS is not enabled,
4853         always return ERR_DISABLED
4854
4855         * ircd/m_clearmode.c (mo_clearmode): if CONFIG_OPERCMDS is not
4856         enabled, always return ERR_DISABLED
4857
4858         * ircd/s_err.c: add error message to indicate disabled commands
4859
4860         * include/numeric.h (ERR_DISABLED): to indicate disabled commands
4861
4862         * doc/Configure.help: add documentation for CONFIG_OPERCMDS
4863
4864         * config/config-sh.in: add CONFIG_OPERCMDS, default both it and
4865         CONFIG_NEW_MODE to 'y' for now
4866
4867         * ircd/gline.c (gline_list): fix a minor formatting bogon
4868
4869         * BUGS: since I fixed that bug, might as well mark it fixed.
4870
4871         * ircd/m_join.c: look up badchans with GLINE_EXACT
4872
4873         * ircd/m_gline.c: fix parc count problems; look up existing
4874         G-lines with GLINE_EXACT; only set new lastmod when
4875         activating/deactivating existing glines if old lastmod was not 0
4876
4877         * ircd/gline.c: forgot to copy the gline reason over; don't
4878         propagate a gline with 0 lastmod if origin is user; add
4879         GLINE_EXACT to force exact matching of gline mask
4880
4881         * ircd/ircd_snprintf.c (doprintf): forgot to deal with the zero
4882         flag properly
4883
4884         * ircd/s_conf.c (find_kill): gline_find() takes a char *userhost,
4885         but gline_lookup() actually takes a client--d'oh.
4886
4887 2000-04-13  Thomas Helvey <tomh@inxpress.net>
4888         * ircd/IPcheck.c: Back port BLMet's bugfix from 2.10.10
4889
4890 2000-04-13  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4891
4892         * ircd/whocmds.c: Don't make idle flag default in /who, to prevent:
4893           "/who * x"
4894           "Gte3 H*iwg Gte@212.49.240.217 :1 :0 I am the one that was."
4895           (Found by Plexus).
4896
4897         * ircd/whocmds.c: Change idle time calc from socket idle to user
4898           idle.
4899
4900 2000-04-13  Kevin L. Mitchell  <klmitch@mit.edu>
4901
4902         * config/aclocal.m4 (unet_CHECK_TYPE_SIZES): check size of void *,
4903         too, for ircd_snprintf.c
4904
4905         * include/ircd_snprintf.h: documentation for ircd_(v)snprintf, in
4906         comments; mostly descended from the Linux manpage for printf, but
4907         also documenting the extensions.
4908
4909         * ircd/ircd_snprintf.c: NULL dest is equivalent to going to a
4910         client; make 'q' be the same as 'L'; remove __inline__; only
4911         define EXTENSION if HAVE_LONG_LONG is defined
4912
4913         * include/handlers.h: declare m_gline()
4914
4915         * ircd/parse.c: gline can be called by users, but it only lists
4916         the glines.
4917
4918         * ircd/s_user.c (set_nick_name): resend gline if a remote server
4919         introduces a glined client
4920
4921         * ircd/s_serv.c (server_estab): burst glines, too
4922
4923         * ircd/gline.c: fix up all the expire times to be offsets;
4924         simplify gline_resend()
4925
4926         * ircd/m_gline.c: begin coding replacements for ms_gline(),
4927         mo_gline(), and m_gline()
4928
4929         * ircd/gline.c (gline_add): allow *@#channel to work correctly;
4930         also, prohibit local BADCHANs if LOCAL_BADCHAN not defined
4931
4932 2000-04-13  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4933
4934         * tools/Bouncer/*: Add comments/documentation/tags.
4935         * tools/Bouncer/*: Add debug defines, make task fork().
4936
4937 2000-04-12  Thomas Helvey <tomh@inxpress.net>
4938         * ircd/s_err.c: Cleanup s_err.c make one table so we
4939         don't have to do anything tricky to get an error string.
4940
4941 2000-04-12  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4942         * Add port bouncer for http (x/w)
4943
4944 2000-04-12  Kevin L. Mitchell  <klmitch@mit.edu>
4945
4946         * ircd/s_conf.c (find_kill): replaced call to find_gline() with a
4947         call to gline_find(); also used GlineReason() instead of direct
4948         reference to structure member
4949
4950         * ircd/m_join.c (m_join): replace bad_channel() calls with calls
4951         to gline_find(name, GLINE_BADCHAN), and also check to see if gline
4952         is active
4953
4954         * ircd/channel.c: nothing seems to be called anywhere...
4955
4956         * ircd/s_err.c: update a couple of replies to dovetail with new
4957         semantics
4958
4959         * ircd/gline.c: begin complete re-implementation of gline.c along
4960         the lines of the final design of jupe.c
4961
4962         * include/gline.h: begin complete re-implementation of gline.c
4963         along the lines of the final design of jupe.c
4964
4965         * ircd/channel.c (mode_process_clients): fix "Deop of +k user on
4966         %s by %s" message...
4967
4968         * ircd/ircd_snprintf.c: my new snprintf()-like functions
4969
4970         * include/ircd_snprintf.h: my new snprintf()-like functions
4971
4972 2000-04-11  Thomas Helvey <tomh@inxpress.net>
4973         * ircd/IPcheck.c: removed old dead code
4974         * ircd/s_user.c (send_user_info): removed non-standard
4975           user not found message for userhost/userip
4976
4977 2000-04-11  Greg Sikorski <gte@atomicrevs.demon.co.uk>
4978
4979         * ircd/s_err.c: Added missing quotes to ERR_DONTCHEAT numeric.
4980         * doc/p10.html: Work on chapter 4.
4981
4982 2000-04-10  Kevin L. Mitchell  <klmitch@mit.edu>
4983
4984         * ircd/channel.c (mode_parse_client): fix coredump on /mode
4985         #foobar +o nosuchnick
4986
4987 2000-04-10  Perry Lorier  <Isomer@coders.net>
4988         * BUGS: Added bug.
4989
4990 2000-04-09  Thomas Helvey <tomh@inxpress.net>
4991         * include/IPcheck.h: fix prototype
4992         * ircd/s_user.c: fix usage of IPcheck_remote_connect
4993         * ircd/IPcheck.c: removed unused args
4994
4995 2000-04-09  Thomas Helvey <tomh@inxpress.net>
4996         * include/IPcheck.h: add proto for IPcheck_expire
4997
4998         * ircd/IPcheck.c: Rewrote
4999
5000         * ircd/ircd.c: Add IPcheck_expire to main message loop
5001
5002         * ircd/s_user.c: Redo target hashing, refactor target code
5003
5004         * include/numeric.h: Cleaned up numerics, added which ones are
5005         in use by other networks and what they are in use for.
5006
5007         * ircd/channel.c: cleaned can_join(), allow anyone through anything
5008         if /invited, simplified the function.  Opers overusing OPEROVERRIDE
5009         will get a message explaining to them not to cheat.
5010
5011         * ircd/m_join.c: cleaned up the various join functions, should be
5012         a lot more efficient.  Still needs work.  Now assumes that s<->s
5013         won't send it a JOIN 0.  Service coders - note this and tread with
5014         care.
5015
5016         * ircd/m_stats.c: added Gte-'s stats doc patch.
5017
5018         * ircd/m_version.c: /version now returns the 005 numeric as well.
5019         as requested by Liandrin.
5020
5021
5022 2000-04-07  Kevin L. Mitchell  <klmitch@mit.edu>
5023
5024         * ircd/m_clearmode.c: add include for support.h for write_log()
5025
5026         * configure: move ircd/crypt/* to tools/*
5027
5028 2000-04-06  Thomas Helvey <tomh@inxpress.net>
5029         * ircd/s_auth.c: Shorten auth connect timeout to 60 seconds
5030           set client host to server alias if connection from localhost
5031
5032 2000-04-06  Perry Lorier <isomer@coders.net>
5033         * ircd/ircd.c: Fix core during pinging (oops)
5034         
5035 2000-04-06  Perry Lorier <isomer@coders.net>
5036         * ircd/send.c: fixed wrong ident being sent to channels bug.
5037         * include/numerics.h: Updated some of the numerics from other
5038         networks.  Flagged some as 'unused' by undernet.
5039
5040 2000-03-30  Perry Lorier <isomer@coders.net>
5041         * ircd/ircd.c: Lets see if this helps the ping problem at all.
5042         * ircd/whocmds.c, /doc/readme.who: Added %l specifier to get idle
5043         time for local clients. (as requested), extended who now returns all
5044         the flags (@+!) so you can tell the complete state of a client.
5045
5046 2000-03-30  Thomas Helvey <tomh@inxpress.net>
5047         * m_rping.c m_rpong.c: add Gte's rping/rpong fixes
5048
5049 2000-03-30  Perry Lorier <isomer@coders.net>
5050         * ircd/parse.c: oops, missed opers.
5051
5052 2000-03-30  Perry Lorier <isomer@coders.net>
5053         * ircd/parse.c: fixed mystifying ping bug thats been plaguing us
5054         for so long.  Remember: m_ping MUST be in the parse array. :)
5055
5056 2000-03-30  Perry Lorier <isomer@coders.net>
5057         * ircd/ircd.c: test in check_pings was wrong.  I move that we
5058         disallow cvs commit after 10pm localtime....
5059
5060 2000-03-30  Perry Lorier <isomer@coders.net>
5061         * ircd/m_pong.c: Fix it for servers too.
5062
5063 2000-03-30  Perry Lorier <isomer@coders.net>
5064         * ircd/m_pong.c: Fix ping timeout bugs
5065
5066 2000-03-30  Perry Lorier <isomer@coders.net>
5067         * ircd/channel.c: Bans had CurrentTime in their when field instead
5068         of TStime()
5069
5070 2000-03-31  Thomas Helvey <tomh@ixpress.net>
5071         * ircd/numnicks.c (SetXYYCapacity): fix for extended
5072         numerics.
5073
5074 2000-03-30  Perry Lorier <isomer@coders.net>
5075         * ircd/m_nick.c: send kills both ways so when we add nick change
5076         on collision we don't desync the network.
5077
5078         * ircd/map.c: Fixup the map a bit more.
5079
5080 2000-03-31  Kevin L. Mitchell  <klmitch@mit.edu>
5081
5082         * ircd/m_clearmode.c (do_clearmode): Log the CLEARMODE to OPATH
5083
5084         * ircd/m_opmode.c: Log the mode changes to OPATH
5085
5086         * ircd/channel.c (modebuf_flush_int): Log the mode changes to
5087         OPATH
5088
5089         * include/channel.h (MODEBUF_DEST_LOG): Log the mode changes to
5090         OPATH
5091
5092         * doc/Configure.help: help text for CONFIG_LOG_OPMODE / OPATH
5093
5094         * config/config-sh.in: added OPATH for opmode log file
5095
5096         * ircd/m_clearmode.c (do_clearmode): updated uses of
5097         modebuf_mode_string() for the new usage
5098
5099         * ircd/channel.c: added flag MODE_FREE and an int argument to
5100         modebuf_mode_string() to indicate that the string must be free'd;
5101         updated calls to modebuf_mode_string() for the new usage; called
5102         collapse(pretty_mask()) on the ban string and use allocated memory
5103         for it; added ban list length accounting; fixed a number of small
5104         bugs in ban processing
5105
5106         * include/channel.h: added flag MODE_FREE and an int argument to
5107         modebuf_mode_string() to indicate that the string must be free'd
5108
5109         * ircd/m_clearmode.c (do_clearmode): made sure clearmode removed
5110         keys and limits that are set
5111
5112 2000-03-30  Perry Lorier <isomer@coders.net>
5113         * ircd/ircd.c: rewrote check_pings() for maintainability
5114         and speed.  Also changed quit msg's so they don't have
5115         redundant nick[host] info in them.
5116
5117         * ircd/send.c: Changed write errors to report what error
5118         occured (if possible).
5119
5120         * ircd/gline.c: added gline comment to the quit.
5121
5122         * ircd/m_server.c: Added suggestions to server quits mentioning
5123         what went wrong so the admin can fix it earlier instead of asking
5124         questions...
5125
5126         * ircd/map.c: Changed m_map() to hide numerics, show a * beside
5127         servers that aren't fully burst yet.  And show '(--s)' for servers
5128         where its not sure.
5129
5130         * doc/example.conf: Fixed wrapped U:
5131
5132 2000-03-30  Kevin L. Mitchell  <klmitch@mit.edu>
5133
5134         * ircd/m_mode.c (ms_mode): implemented a new m_mode in terms of
5135         mode_parse() (version selectable at compile time)
5136
5137         * ircd/m_clearmode.c (mo_clearmode): clean_channelname(parv[1])
5138
5139         * ircd/m_opmode.c (mo_opmode): clean_channelname(parv[1])
5140
5141         * config/config-sh.in: add new config option to enable new m_mode
5142         implementation
5143
5144         * doc/Configure.help: add documentation for new config option
5145         CONFIG_NEW_MODE
5146
5147         * ircd/channel.c (mode_parse_client): /opmode #foobar -o -- 461
5148         MODE -v : Not enough parameters
5149
5150         * ircd/m_clearmode.c (do_clearmode): do_clearmode() would remove
5151         +k and +l even if they weren't set...
5152
5153         * ircd/m_opmode.c: implement the OPMODE command using mode_parse()
5154
5155         * ircd/channel.c: make mode_process_clients() clear the DEOPPED
5156         flag; fix +s+p exclusivity; add MODE_ADD/MODE_DEL to flag list
5157         for; test the 0-th member, not the i-th member, of the client
5158         change state stuff
5159
5160         * ircd/m_clearmode.c (do_clearmode): use the new
5161         mode_invite_clear() function
5162
5163         * ircd/channel.c: cleared up all the compile-time warnings and
5164         errors
5165
5166         * include/channel.h: added declarations for mode_ban_invalidate()
5167         and mode_invite_clear()
5168
5169         * ircd/channel.c: finished mode_parse(), then broke it up into a
5170         dozen or so helper functions to make the code easier to read
5171
5172 2000-03-29  Thomas Helvey <tomh@inxpress.net>
5173         * ircd/ircd.c: refactor server initialization a bit, use
5174         getopt for parsing command line, refactor init_sys, main,
5175         and other bits.
5176
5177         * ircd/s_bsd.c: add functions for initialization to clean
5178         up logic a bit and remove duplicated code.
5179
5180         * include/ircd.h: add struct for server process related
5181         variables.
5182
5183 2000-03-29  Kevin L. Mitchell  <klmitch@mit.edu>
5184
5185         * ircd/channel.c: initial definition of mode_parse(); flags to
5186         prevent doing the same thing multiple times; helper method
5187         send_notoper() to send a "Not oper"/"Not on channel" notice
5188
5189         * include/channel.h: declare mode_parse() and helper flags
5190
5191         * ircd/channel.c (modebuf_flush_int): fiddled with timestamp
5192         sending to match the current action of set_mode() closely enough
5193         that hopefully there won't be major conflicts
5194
5195         * ircd/channel.c (modebuf_flush_int): consolidated the mode string
5196         building logic, reversed the order of the arguments to mode
5197         commands to have '-' preceed '+'
5198
5199 2000-03-29  Thomas Helvey <tomh@inxpress.net>
5200         * ircd/s_bsd.c (add_connection): don't disable socket options
5201         let OS tune itself and allow important performance tweaks to 
5202         work.
5203
5204 2000-03-28  Kevin L. Mitchell  <klmitch@mit.edu>
5205
5206         * ircd/channel.c (modebuf_flush_int): use %d, not %-15d; I got
5207         confused by set_mode, which is doing some really weird logic;
5208         guess what I'm going to rewrite next?  ;)
5209
5210 2000-03-28  Kevin L. Mitchell  <klmitch@emc.com>
5211
5212         * include/channel.h: added MODE_SAVE for the bounds checking stuff
5213         in modebuf_flush
5214
5215         * ircd/channel.c: make modebuf_flush into modebuf_flush_int and
5216         make it do bounds checking on the buffer; all modes are sent only
5217         if the all parameter is 1; modebuf_flush is the exported wrapper
5218
5219         * include/channel.h: add BOUNCE, renumber flags to get a little
5220         more space
5221
5222         * ircd/channel.c (modebuf_flush): don't overload HACK2, add
5223         BOUNCE; send DESYNCH message
5224
5225 2000-03-27  Kevin L. Mitchell  <klmitch@emc.com>
5226
5227         * ircd/m_clearmode.c (do_clearmode): only mark the modes the
5228         channel actually has in effect for deletion
5229
5230         * ircd/channel.c: added explanatory comments to all added
5231         functions; made flushing take place at the correct place even if
5232         the MODEBUF_DEST_DEOP flag is set; rewrote build_string() helper
5233         to bash some stupid bugs; made modebuf_flush() return if ModeBuf
5234         is empty, fixed the apparent source, removed some bogus string
5235         termination code, properly terminate the mode strings, add support
5236         for HACK2 and HACK3, made limit strings not be sent if the limit
5237         is being removed, changed where '+' and '-' come from in sent
5238         strings, added support for DEOP flag, set up bouncing code for
5239         HACK2
5240
5241         * ircd/Makefile.in: ran make depend
5242
5243         * include/channel.h: added new defines for future functionality,
5244         made modebuf_flush() return int so I can use tail recursion
5245
5246         * ircd/m_clearmode.c: add msg.h to includes; other misc cleanups
5247         to make it all compile
5248
5249         * ircd/m_opmode.c: add msg.h to includes...
5250
5251         * ircd/m_clearmode.c: implemented mo_clearchan()/ms_clearchan()
5252
5253         * ircd/channel.c (modebuf_flush): realized I forgot to
5254         nul-terminate addbuf/rembuf properly...
5255
5256         * ircd/m_clearmode.c (do_clearmode): wrote do_clearmode()...
5257
5258         * ircd/channel.c (modebuf_flush): correct sendto_server_butone to
5259         sendto_serv_butone--blah^2
5260
5261         * ircd/send.c (sendto_serv_butone): stupid comments confused me
5262
5263         * ircd/channel.c (modebuf_flush): if there are no mode changes to
5264         propagate, we're done...
5265
5266         * ircd/channel.c (modebuf_flush): duh; it's sendto_server_butone,
5267         not sendto_all_butone
5268
5269         * ircd/m_clearmode.c: define skeleton for m{o,s}_clearmode
5270
5271         * ircd/m_opmode.c: define skeleton for m{o,s}_opmode
5272
5273         * ircd/Makefile.in (SRC): added m_opmode() and m_clearmode() to
5274         the list
5275
5276         * ircd/parse.c: added messages for opmode and clearmode
5277
5278         * include/handlers.h: added declarations for mo_opmode(),
5279         ms_opmode(), mo_clearmode(), and ms_clearmode()
5280
5281         * include/msg.h: define MSG_OPMODE, TOK_OPMODE, MSG_CLEARMODE, and
5282         TOK_CLEARMODE
5283
5284         * include/channel.h (MODEBUF_DEST_OPMODE): Define the
5285         MODEBUF_DEST_OPMODE flag
5286
5287         * ircd/channel.c (modebuf_flush): added new flag,
5288         MODEBUF_DEST_OPMODE; causes channel MODE/HACK(4) notice to appear
5289         to originate from source's server (or source itself, if
5290         IsServer(source)); also causes a server-level MODE to be sent as
5291         OPMODE instead
5292
5293         * include/channel.h: defined MODEBUF_DEST_SERVER,
5294         MODEBUF_DEST_HACK4
5295
5296         * ircd/channel.c: Add another argument to build_string() to handle
5297         numeric nicks; implemented MODEBUF_DEST_SERVER to send MODEs to
5298         servers; implemented MODEBUF_DEST_HACK4 to cause HACK(4) notices
5299         to be sent out
5300
5301 2000-03-27  Perry Lorier <isomer@coders.net>
5302
5303         * ircd/s_bsd.c: fixed missing 'u' typo.
5304
5305 2000-03-26  Kevin L. Mitchell  <klmitch@emc.com>
5306
5307         * ircd/channel.c: implement modebuf_init(), _mode(), _mode_uint(),
5308         _mode_string(), _mode_client(), _flush(); also implemented a
5309         simple build_string()
5310
5311         * include/channel.h: added definition of ModeBuf, modebuf_*
5312         manipulation functions, and a couple of helper macros
5313