Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ChangeLog
1 2001-06-11  Kevin L. Mitchell  <klmitch@mit.edu>
2
3         * ircd/send.c (sendcmdto_match_butone): don't let the server crash
4         if a client is in the STAT_CONNECTING status
5
6 2001-06-10  Kevin L. Mitchell  <klmitch@mit.edu>
7
8         * ircd/send.c: remove unused vsendcmdto_one(), consolidating it
9         into sendcmdto_one(); define new sendcmdto_prio_one(), which
10         places the message into the priority queue
11
12         * ircd/s_user.c (hunt_server_prio_cmd): definition of
13         hunt_server_prio_cmd(), which simply calls sendcmdto_prio_one()
14         instead of sendcmdto_one()
15
16         * ircd/m_settime.c: use sendcmdto_prio_one() and
17         hunt_server_prio_cmd() to send SETTIME
18
19         * ircd/m_server.c: use sendcmdto_prio_one() to send SETTIME
20
21         * include/send.h: removed declaration for unused vsendcmdto_one();
22         added a declaration for sendcmdto_prio_one()
23
24         * include/s_user.h: declare hunt_server_prio_cmd(), which calls
25         sendcmdto_prio_one()
26
27         * ircd/send.c (sendcmdto_flag_butone): oops; /wallops should be
28         put in the server's priority queue, too...
29
30         * ircd/ircd.c: don't check LPATH for accessibility at all
31
32 2001-06-08  Kevin L. Mitchell  <klmitch@mit.edu>
33
34         * ircd/s_serv.c (server_estab): send a +h flag in our SERVER
35         command if we're configured as a hub; send individual server flags
36         in SERVER commands
37
38         * ircd/s_bsd.c (completed_connection): send a +h flag in our
39         SERVER command if we're configured as a hub
40
41         * ircd/m_server.c: implement parv[7] as a mode-like string; +h
42         sets the FLAGS_HUB flag for a server; +s sets the FLAGS_SERVICE
43         flag for a server; +hs sets both flags; also modify CMD_SERVER
44         format string to send the flags
45
46         * include/client.h: define two new flags, FLAGS_HUB and
47         FLAGS_SERVICE to mark services and hubs as such; define testing
48         macros, setting macros
49
50         * ircd/s_user.c: remove deprecated struct Gline* argument to
51         register_user(); remove GLINE rebroadcast; do not send GLINE
52         acknowledgement parameter to NICK; do not look for GLINE
53         acknowledgement parameter to NICK while parsing
54
55         * ircd/s_serv.c (server_estab): remove deprecated struct Jupe*
56         argument to server_estab(); do not send JUPE/GLINE acknowledgement
57         parameters for SERVER or NICK
58
59         * ircd/m_user.c (m_user): remove deprecated argument to
60         register_user()
61
62         * ircd/m_server.c: remove deprecated argument to server_estab();
63         remove documentation comment regarding JUPE acknowledgement
64         parameter to SERVER; remove JUPE rebroadcast
65
66         * ircd/m_pong.c (mr_pong): remove deprecated argument to
67         register_user()
68
69         * ircd/m_nick.c: remove documentation comment regarding GLINE
70         acknowledgement parameter to NICK
71
72         * ircd/jupe.c: use user's real name in JUPE server notices if
73         HEAD_IN_SAND_SNOTICES is defined
74
75         * ircd/ircd.c: remove deprecated chroot() code; remove deprecated
76         setuid code; correct ancient DEBUG vs DEBUGMODE typo
77
78         * ircd/gline.c: use user's real name in GLINE server notices if
79         HEAD_IN_SAND_SNOTICES is defined
80
81         * ircd/channel.c (modebuf_flush_int): make apparent source be
82         local server, not oper's server; use user's real name in hack
83         notices and DESYNC notices if HEAD_IN_SAND_SNOTICES is defined
84
85         * include/s_user.h: remove struct Gline pre-declaration; remove
86         deprecated struct Gline argument from register_user()
87
88         * include/s_serv.h: remove struct Jupe pre-declaration; remove
89         deprecated struct Jupe argument from server_estab()
90
91 2001-06-07  Kevin L. Mitchell  <klmitch@mit.edu>
92
93         * ircd/s_stats.c (hunt_stats): forward-port from pl15 of all the
94         changes required to control remote stats
95
96         * ircd/s_numeric.c (do_numeric): rewrite numeric origins if
97         recipient is not an operator and HEAD_IN_SAND_REWRITE is defined
98         [forward-port from pl15]
99
100         * ircd/m_whowas.c (m_whowas): report server name only if requester
101         is an operator [forward-port from pl15]
102
103         * ircd/m_whois.c (do_whois): /whois <mynick> now correctly reports
104         my server; if HEAD_IN_SAND_REMOTE is 1, ignore the middle argument
105         and obtain the report from the user's server [forward-port from
106         pl15]
107
108         * ircd/m_who.c: add missing include for ircd_policy.h
109         [forward-port from pl15]
110
111         * ircd/m_version.c (m_version): require oper access for remote
112         /version if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
113
114         * ircd/m_time.c (m_time): require oper access for remote /time if
115         HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
116
117         * ircd/m_stats.c: pass extra argument to hunt_stats(); correct
118         missing semicolon [forward-port from pl15]
119
120         * ircd/m_nick.c (ms_nick): hide the origin of certain collision
121         kills [forward-port from pl15]
122
123         * ircd/m_motd.c (m_motd): require oper access for remote /motd if
124         HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
125
126         * ircd/m_lusers.c (m_lusers): require oper access for remote
127         /lusers if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
128
129         * ircd/m_burst.c (ms_burst): server-added bans are stored using
130         local server name, to hide remote server names; modes also are to
131         originate from the local server [forward-port from pl15]
132
133         * ircd/m_admin.c (m_admin): require oper access for remote /admin
134         if HEAD_IN_SAND_REMOTE is 1 [forward-port from pl15]
135
136         * ircd/channel.c (add_banid): if a server is adding a ban, use my
137         server name to hide the remote server's name [forward-port from
138         pl15]
139
140         * ircd/Makefile.in: ran make depend
141
142         * include/s_stats.h: hunt_stats() has to have an extra argument to
143         support the forward-port from pl15
144
145         * include/ircd_policy.h: #define HEAD_IN_SAND_STATS_P; add
146         HEAD_IN_SAND_{BANWHO,REWRITE,REMOTE} [forward-port from pl15]
147
148         * ircd/engine_poll.c (engine_loop): remove bogus assert that I
149         forgot to check in the events branch
150
151 2001-06-06  Kevin L. Mitchell  <klmitch@mit.edu>
152
153         * ircd/res.c (init_resolver): don't start DNS expires with a 0
154         relative timeout--if the server starts slow, timeouts could be
155         messy...there's probably a better solution, but this'll do for now
156
157         * ircd/os_solaris.c: _XOPEN_SOURCE doesn't get along with Solaris
158         headers very well; include stropts.h; define an os_set_tos()
159
160         * ircd/os_generic.c (os_set_tos): added an os_set_tos() for
161         os_generic.c
162
163         * ircd/ircd.c: if there are no C-lines, we don't want to have a
164         timer that expires at the absolute time of 0--it kinda blocks all
165         the other timers!
166
167         * ircd/engine_devpoll.c: some includes for open(); declare errcode
168         and codesize in engine_loop()
169
170         * ircd/list.c (free_client): remove bogus check on timer active
171         flag
172
173         * ircd/s_auth.c: pull out destruction code in
174         auth_timeout_request() into an externally-visible
175         destroy_auth_request(); manage cli_auth pointer in client
176         structure; use it for an extra assertion check
177
178         * ircd/list.c: include s_auth.h for destroy_auth_request(); add
179         debugging notices to show flow when deallocating
180         connections/clients; call destroy_auth_request() when free'ing a
181         client that has an auth outstanding; don't free the connection if
182         the process timer is unmarked but still active
183
184         * ircd/ircd_events.c: set GEN_ACTIVE when initializing a generator
185         and reset it before calling the event handler for an ET_DESTROY
186         event
187
188         * include/s_auth.h (destroy_auth_request): declare
189         destroy_auth_request(), which can be used to destroy an
190         outstanding auth request if a client socket goes away before the
191         auth exchange is completed
192
193         * include/ircd_events.h: add an active flag to keep track of
194         whether or not particular generators are active, for the
195         convenience of functions using the API
196
197         * include/client.h: add a pointer for auth requests to struct
198         Connection so we can kill outstanding auth requests if a client
199         socket closes unexpectedly
200
201         * ircd/s_bsd.c: cli_connect() could become 0 during the course of
202         the sock or timer callback; take that into account in the assert
203
204         * ircd/list.c: add magic number checking and setting--magic
205         numbers are zero'd on frees to detect double-frees; add back
206         setting of cli_from() to 0 to break the back-link from the struct
207         Connection (duh)
208
209         * ircd/ircd.c: set me's magic number correctly
210
211         * include/client.h: define magic numbers and accessor/verifier
212         macros
213
214         * ircd/list.c: assert that dealloc_client() is called with
215         cli_connect(cptr) == 0; set cli_connect(cptr) to 0 before calling
216         dealloc_client(); don't mess with cli_from(cptr)
217
218         * ircd/s_bsd.c: only attempt to dealloc a connection if the
219         associated client has already been destroyed, or at least delinked
220
221 2001-06-05  Kevin L. Mitchell  <klmitch@mit.edu>
222
223         * ircd/list.c (free_client): only try to delete the socket when
224         the fd hasn't already been closed, avoiding a double-free
225
226         * ircd/list.c (free_connection): make sure the client is really
227         gone before doing away with the connection
228
229         * ircd/s_bsd.c: record that socket has been added in con_freeflag
230         field; queue a socket_del() as soon as the socket is close()'d;
231         use con_freeflag & FREEFLAG_TIMER instead of con_timer; clear
232         FREEFLAG_SOCKET on ET_DESTROY event in client_sock_callback(),
233         then dealloc the connection if safe; mark socket as dead when
234         there's a read error or EOF; clear FREEFLAG_TIMER flag upon entry
235         to client_timer_callback(); dealloc connection if safe upon
236         ET_DESTROY event in client_timer_callback()
237
238         * ircd/list.c: use con_freeflag instead of con_timer; only dealloc
239         the connection if both socket and timer have been destroyed;
240         destroy both socket and timer explicitly and carefully
241
242         * include/client.h: replace the con_timer field with a
243         con_freeflag field, to indicate what still needs freeing; define
244         the freeflags
245
246         * ircd/engine_select.c (engine_loop): duh...sockList[i] could
247         become 0
248
249         * ircd/engine_devpoll.c (engine_loop): duh...sockList[i] could
250         become 0
251
252         * ircd/s_bsd.c: add some extra assertions to try to track down a
253         corruption problem
254
255         * ircd/engine_select.c (engine_loop): add an extra assert to try
256         to track down a corruption problem
257
258         * ircd/engine_poll.c (engine_loop): add an extra assert to try to
259         track down a corruption problem
260
261         * ircd/engine_kqueue.c (engine_loop): add an extra assert to try
262         to track down a corruption problem
263
264         * ircd/engine_devpoll.c (engine_loop): skip slots that have become
265         empty during processing; add an extra assert to try to track down
266         a corruption problem
267
268         * ircd/engine_kqueue.c (engine_delete): make sure to zero deleted
269         entries
270
271 2001-06-04  Kevin L. Mitchell  <klmitch@mit.edu>
272
273         * ircd/s_bsd.c (client_sock_callback): client is no longer
274         blocked, so we must mark it as unblocked
275
276         * ircd/engine_select.c: add Debug() calls galore; add handling for
277         SS_NOTSOCK; use a dummy sock variable to keep things from
278         disappearing on us; correct timeout calculation; update nfds for
279         efficiency
280
281         * ircd/engine_poll.c: use new debugging level (DEBUG_ENGINE);
282         remove a spurious "if (sock)" which will always be true; update
283         nfds for efficiency
284
285         * ircd/engine_kqueue.c: add Debug() calls galore; add handling for
286         SS_NOTSOCK (just in case); correct timeout calculation
287
288         * ircd/engine_devpoll.c: add Debug() calls galore; add handling
289         for SS_NOTSOCK; correct timeout calculation; add EAGAIN handling
290
291         * include/s_debug.h (DEBUG_ENGINE): add new debugging level;
292         pretty-indent numbers
293
294         * ircd/engine_poll.c (engine_loop): break out SS_NOTSOCK
295         case--it's not a socket; the check for writability is most likely
296         not needed, but present for completeness
297
298 2001-05-24  Kevin L. Mitchell  <klmitch@mit.edu>
299
300         * ircd/s_bsd.c: add Debug messages; call read_packet() even if the
301         no newline flag is set; call read_packet() when the timer expires,
302         regardless of what's in the buffer--read_packet() should be able
303         to deal properly
304
305         * ircd/IPcheck.c (ip_registry_connect_succeeded): correct a NOTICE
306         sent to clients to include the client nickname (duh)
307
308         * ircd/ircd_events.c: don't destroy a timer if it's already marked
309         for destruction; replace a missing ! in socket_del()
310
311         * ircd/engine_poll.c (engine_loop): reference a temporary variable
312         so we don't have to worry about sockList[i] going away
313
314         * ircd/s_bsd.c (client_sock_callback): add Debug messages
315
316         * ircd/s_auth.c: add Debug messages all over the place
317
318         * ircd/ircd_events.c: add and edit some Debug messages; add a list
319         of routines to convert some of the enums and flags from numbers
320         into human-readable strings for the Debug messages
321
322         * ircd/engine_poll.c: hack some Debug messages to use the new name
323         conversion routines in ircd_events.c; add an extra assert for a
324         condition that shouldn't ever happen; apparently recv() can return
325         EAGAIN when poll() returns readable--I wonder why...
326
327         * include/ircd_events.h: declare some helper routines under
328         DEBUGMODE
329
330 2001-05-23  Kevin L. Mitchell  <klmitch@mit.edu>
331
332         * ircd/s_bsd.c (client_sock_callback): add an extra assertion
333         check
334
335         * ircd/s_auth.c: add more Debug messages
336
337         * ircd/list.c (make_client): add an extra assertion check
338
339         * ircd/ircd_events.c (socket_events): don't call the engine events
340         changer if we haven't actually made any changes to the event mask
341
342         * ircd/uping.c: add some Debug messages
343
344         * ircd/s_stats.c: document new /STATS e
345
346         * ircd/s_err.c: add RPL_STATSENGINE to report the engine name
347
348         * ircd/s_bsd.c: remove static client_timer variable; in
349         read_packet(), if there's still data in the client's recvQ after
350         parsing, add a 2 second timer (con_proc); fix the ET_DESTROY case
351         of client_sock_callback to handle destroying the timer properly;
352         rewrote client_timer_callback from scratch to be called on an
353         individual client
354
355         * ircd/m_stats.c: add /STATS e to report the engine name
356
357         * ircd/list.c: deal with con_timer field in struct Connection
358         properly; correct a core-level bug in remove_client_from_list--if
359         the client is the only one in the list, we try to update
360         GlobalClientList's cli_prev pointer--not good
361
362         * ircd/ircd.c: remove call to init_client_timer()
363
364         * ircd/engine_poll.c: made Debug messages more uniform by
365         prepending "poll:" to them all; corrected an off-by-one error that
366         caused poll_count to be 1 less than the actual count and removed
367         my work-around; added Debug messages to indicate which socket is
368         being checked and what the results are
369
370         * ircd/Makefile.in: ran a make depend
371
372         * include/s_bsd.h: remove init_client_timer(), since we're doing
373         it differently now
374
375         * include/numeric.h (RPL_STATSENGINE): a stats reply to report the
376         engine name
377
378         * include/ircd_policy.h (HEAD_IN_SAND_STATS_E): turn off /stats e
379         reports for non-opers
380
381         * include/client.h: add con_timer and con_proc fields to struct
382         Connection and define accessor macros--con_timer marks that
383         con_proc contains a valid timer, and con_proc is used to pace user
384         data
385
386         * ircd/s_bsd.c (close_connection): let free_client() destroy the
387         socket
388
389         * ircd/s_auth.c (start_auth): add a Debug call to indicate when
390         auth has begun on a client
391
392         * ircd/ircd_events.c: ensure that event_execute() is called with a
393         non-NULL event; modify event_add() macro to properly zero list
394         bits; modify gen_dequeue() to not try to clip it out of a list
395         it's already been clipped out of; change signal socket
396         initialization to use state SS_NOTSOCK; permit timeout values of
397         0 in add_timer(); add many Debug calls; change socket_del() and
398         timer_del() to always set the GEN_DESTROY flag; use GEN_MARKED in
399         timer_run() instead of GEN_DESTROY so that event_generate() will
400         pass on the events; remove the switch and replace with a simpler
401         if-then-else tree in timer_run(); don't allow destroyed sockets to
402         be destroyed again, nor their states or event masks to be changed
403
404         * ircd/ircd.c: initialize "running" to 1
405
406         * ircd/engine_poll.c: deal with SS_NOTSOCK "sockets"; add Debug
407         messages all over the place; fix a counting problem in
408         engine_add(); turn wait into a signed integer and set it to -1
409         only if timer_next() returns 0; adjust wait time to be relative;
410         don't call gen_ref_dec() if socket disappeared while we were
411         processing it
412
413         * include/ircd_events.h: the pipe for signals is not a socket, so
414         we must mark it as such--added SS_NOTSOCK for that special socket;
415         events won't be generated if GEN_DESTROY is on, so add GEN_MARKED
416         for the benefit of timer_run()
417
418         * configure.in: add --enable-pedantic and --enable-warnings to
419         turn on (and off) -Wall -pedantic in CFLAGS
420
421 2001-05-21  Kevin L. Mitchell  <klmitch@mit.edu>
422
423         * ircd/s_conf.c: change "s_addr" element accesses to "address"
424         element accesses
425
426         * include/s_conf.h: on some systems, "s_addr" is a macro; use
427         "address" instead
428
429 2001-05-18  Kevin L. Mitchell  <klmitch@mit.edu>
430
431         * ircd/engine_kqueue.c: include ircd_alloc.h; set_or_clear returns
432         void in this file; add a missing semi-colon; declare errcode,
433         codesize
434
435         * ircd/uping.c (uping_sender_callback): it's pptr, not uping
436
437         * ircd/s_user.c (register_user): comment out spurious reference to
438         nextping
439
440         * ircd/s_serv.c (server_estab): comment out spurious reference to
441         nextping
442
443         * ircd/s_conf.c (read_configuration_file): comment out spurious
444         reference to nextping and nextconnect
445
446         * ircd/s_bsd.c: comment out some spurious references to formerly
447         global (now non-existant) variables; correct a couple of typos
448
449         * ircd/s_auth.c: pre-declare some functions referenced in the
450         callback; correct a typo
451
452         * ircd/res.c (start_resolver): pass errno value of ENFILE
453
454         * ircd/listener.c (accept_connection): you know your API is messed
455         up when...variables that shouldn't have been global crop up in
456         other files
457
458         * ircd/list.c (free_client): substitution of == for =
459
460         * ircd/ircd_signal.c: include assert.h for assertion checking;
461         check ev_data() to find out what signal generated event
462
463         * ircd/ircd_events.c: some references to the variable "timer"
464         should have been references to the variable "ptr"
465
466         * ircd/engine_select.c: it's struct fd_set, not struct fdset;
467         ev_timer(ev) is already a timer pointer; declare codesize as a
468         size_t to correct signedness issue; use timer_next(), not
469         time_next()
470
471         * ircd/engine_poll.c: ev_timer(ev) is already a timer pointer;
472         select fd out of struct pollfd in assertion checking; declare
473         errcode and codesize; use timer_next(), not time_next()
474
475         * ircd/engine_kqueue.c: ev_timer(ev) is already a timer pointer;
476         use function timer_next(), not time_next()
477
478         * ircd/engine_devpoll.c: ev_timer(ev) is already a timer pointer;
479         use function timer_next(), not time_next()
480
481         * ircd/Makefile.in (IRCD_SRC): add ircd_events.c to the list of
482         compiled sources; do make depend
483
484         * include/list.h: pre-declare struct Connection
485
486         * include/ircd_events.h (gen_ref_inc): cast to the right structure
487         name
488
489         * include/s_auth.h: duh; missing */
490
491 2001-05-10  Kevin L. Mitchell  <klmitch@mit.edu>
492
493         * ircd/send.c: update write events status after sending data or
494         accumulating data to be sent
495
496         * ircd/m_list.c (m_list): update write events status after
497         canceling a running /list
498
499         * ircd/channel.c (list_next_channels): update write events status
500         after listing a few channels
501
502         * ircd/s_bsd.c: extensive changes to update to new events model;
503         remove on_write_unblocked() and the two implementations of
504         read_message(), which have been deprecated by this change
505
506         * ircd/s_auth.c: set the socket events we're interested in for
507         clients; simplify some logic that does the connect_nonb followed
508         by the socket_add
509
510         * ircd/list.c: define free_connection() to free a connection
511         that's become freeable once the struct Socket has been
512         deallocated; fix up free_client() to take this new behavior into
513         account
514
515         * ircd/ircd.c: call init_client_timer()
516
517         * include/s_bsd.h: declare new REGISTER_ERROR_MESSAGE when unable
518         to register connect-in-progress with events system; declare
519         init_client_timer() (HACK!) to preserve rate-limiting behavior
520
521         * include/list.h: declare new free_connection()
522
523         * include/client.h: add a struct Socket to struct Connection
524
525 2001-05-09  Kevin L. Mitchell  <klmitch@mit.edu>
526
527         * ircd/ircd_signal.c: massage the handlers for SIGHUP, SIGINT, and
528         SIGTERM into event callbacks; perform the actions in the
529         callbacks, since they're not called in the context of the signal;
530         set up the signal callbacks in the event engine
531
532         * ircd/ircd_events.c (signal_callback): we're supposed to look for
533         a specific signal; don't generate an event if there is no signal
534         structure for it
535
536         * ircd/ircd.c: nuke nextconnect and nextping and replace them with
537         connect_timer and ping_timer; massage try_connections() and
538         check_pings() into timer callbacks that re-add themselves at the
539         right time; remove ircd.c's "event_loop()"; initialize the event
540         system and the connect_timer and ping_timer
541
542         * ircd/uping.c: correct a couple more typos
543
544         * ircd/s_auth.c: rework to use new events system
545
546         * ircd/os_solaris.c (os_connect_nonb): update to new interface
547
548         * ircd/os_openbsd.c (os_connect_nonb): update to new interface
549
550         * ircd/os_linux.c (os_connect_nonb): update to new interface
551
552         * ircd/os_generic.c (os_connect_nonb): update to new interface
553
554         * ircd/os_bsd.c (os_connect_nonb): update to new interface
555
556         * include/s_auth.h: remove deprecated members of struct
557         AuthRequest, replacing them with struct Socket and struct Timer
558         structures; add flags to indicate when these structures have been
559         released by the event system; remove the deprecated
560         timeout_auth_queries()
561
562         * include/ircd_osdep.h (os_connect_nonb): connect could complete
563         immediately, so change the interface to handle that possibility
564
565         * ircd/uping.c (uping_server): noticed and corrected a typo
566
567         * ircd/listener.c: set up to use ircd_event's struct Socket by
568         adding an socket_add() call to inetport(), replacing
569         free_listener() with socket_del() in close_listener(), and
570         reworking accept_connection to be called as the callback
571
572         * ircd/ircd.c: add a call to IPcheck_init()
573
574         * ircd/IPcheck.c: remove IPcheck_expire(); rework
575         ip_registry_expire() to be called from a timer; write
576         IPcheck_init() to set up the expiration timer (hard-coded for a
577         60-second expiration time)
578
579         * include/listener.h: add a struct Socket to the struct Listener;
580         remove accept_connection()
581
582         * include/IPcheck.h: add IPcheck_init(), remove IPcheck_expire()
583
584 2001-05-08  Kevin L. Mitchell  <klmitch@mit.edu>
585
586         * ircd/ircd_events.c: include config.h; use USE_KQUEUE and
587         USE_DEVPOLL instead of HAVE_KQUEUE and HAVE_DEVPOLL_H
588
589         * ircd/engine_select.c: include config.h; set FD_SETSIZE to
590         MAXCONNECTIONS, not IRCD_FD_SETSIZE...
591
592         * ircd/engine_poll.c: include config.h
593
594         * ircd/engine_kqueue.c: include config.h
595
596         * ircd/engine_devpoll.c: include config.h
597
598         * ircd/Makefile.in: include engine sources in compilation and make
599         depend steps
600
601         * configure.in: add checks for enabling the /dev/poll- and
602         kqueue-based engines
603
604         * acconfig.h: add lines for USE_DEVPOLL and USE_KQUEUE
605
606         * ircd/Makefile.in: work in the engine sources
607
608 2001-05-07  Kevin L. Mitchell  <klmitch@mit.edu>
609
610         * ircd/m_settime.c: include ircd_snprintf.h
611
612         * ircd/ircd_relay.c: stomp a couple of gcc warnings suggesting
613         parens around a construct that had both || and &&
614
615         * ircd/chkconf.c: #include "config.h" to get some important
616         definitions
617
618         * ircd/Makefile.in: revamp ircd makefile for new build system
619
620         * doc/Makefile.in: revamp doc makefile for new build system
621
622         * config/*: Removed old build system files
623
624         * stamp-h.in: a stamp file
625
626         * install-sh: install-sh for new build system
627
628         * configure.in: configure.in for new build system
629
630         * configure: configure script for new build system (built by
631         autoconf)
632
633         * config.sub: config.sub for new build system
634
635         * config.h.in: config.h.in for new build system (built by
636         autoheader)
637
638         * config.guess: config.guess for new build system
639
640         * aclocal.m4: aclocal.m4 for new build system (built by aclocal
641         1.4)
642
643         * acinclude.m4: aclocal.m4 macros for new build system
644
645         * acconfig.h: config.h skeleton for new build system
646
647         * Makefile.in: modify for new build system
648
649 2001-05-01  Kevin L. Mitchell  <klmitch@mit.edu>
650
651         * ircd/s_err.c: get rid of the last vestiges of TIME_T_FMT
652
653         * ircd/m_settime.c: get rid of the last vestiges of TIME_T_FMT
654
655         * ircd/m_server.c: get rid of the last vestiges of TIME_T_FMT
656
657 2001-05-01  Perry Lorier       <Isomer@coders.net>
658         * doc/iauth.doc: Protocol for iauth server. (from hybrid).
659         * doc/linux-poll.patch: Patch to make Linux under 2.2 not deadlock
660                 when you have far far too many sockets in use.
661         * {include,ircd}/iauth.c: A start on iauth support.
662
663 2001-05-01  Perry Lorier       <Isomer@coders.net>
664         * ircd/s_err.c: Suggested wording change.
665         * ircd/s_user.c: Users aren't target limited against +k users.
666         * ircd/chkconf.c: Made it compile again, who knows if it works, but
667                 now I can at least make install
668         * various: Cleanups on m_*.c files.
669
670
671 2001-04-23  Kevin L. Mitchell  <klmitch@mit.edu>
672
673         * ircd/s_misc.c (exit_client): make netsplit server notice say the
674         right thing
675
676         * ircd/m_links.c (m_links_redirect): forward-port RPL_ENDOFLINKS
677         change to make Khaled happy...
678
679         * ircd/m_whois.c (do_whois): pull-up of m_whois() fix
680         (do_whois): duh...
681
682 2001-04-21  Kevin L. Mitchell  <klmitch@mit.edu>
683
684         * ircd/msgq.c: finally remove the msgq_integrity() hack, as it's
685         turned up no more bugs
686
687         * ircd/ircd.c: use /* */ comments instead of // comments--all the
688         world's not gcc :(
689
690         * ircd/s_conf.c (conf_add_server): use /* */ comments instead of
691         // comments--all the world's not gcc :(
692
693         * ircd/runmalloc.c: finally garbage-collect unused file
694
695         * include/runmalloc.h: finally garbage-collect unused file
696
697         * ircd/<multiple files>: addition of '#include "config.h"' before
698         all other includes in most .c files
699
700         * include/<multiple files>: remove includes of config.h, which are
701         now going into the raw .c files
702
703 2001-04-20  Kevin L. Mitchell  <klmitch@mit.edu>
704
705         * ircd/m_whois.c (do_whois): display proper server name if the
706         user is looking up himself
707
708         * ircd/m_who.c (m_who): disable match by servername or display of
709         server names by non-opers
710
711         * include/ircd_policy.h: add define for
712         HEAD_IN_SAND_WHO_SERVERNAME to cover full intent of sub-motion 15
713         of CFV 165
714
715 2001-04-18  Kevin L. Mitchell  <klmitch@mit.edu>
716
717         * ircd/s_conf.c: keep the $R in memory so we can see it clearly
718         when we do a /stats k
719
720         * ircd/s_user.c (set_user_mode): pull-up of changes to prevent
721         users from turning on +s and +g
722
723         * ircd/s_misc.c (exit_client): pull-up of changes to turn off
724         net.split notice
725
726         * ircd/parse.c: pull-up of changes to disable /trace, /links, and
727         /map for users
728
729         * ircd/m_whois.c (do_whois): pull-up of server name masking for
730         /whois
731
732         * ircd/m_user.c (m_user): removal of umode and snomask defaulting
733         functions, pull-up
734
735         * ircd/m_stats.c (m_stats): pull-up of stats-disabling stuff
736
737         * ircd/m_map.c (m_map_redirect): pull-up of m_map_redirect()
738
739         * ircd/m_links.c (m_links_redirect): pull-up of m_links_redirect()
740
741         * ircd/channel.c (channel_modes): pull-up of channel key display
742         as *
743
744         * include/ircd_policy.h: pull-up of ircd_policy.h
745
746         * include/client.h: pull-up of Set/ClearServNotice()
747
748         * ircd/gline.c (do_gline): report client name in G-line message
749         (pull-up)
750
751         * ircd/s_user.c (register_user): pull-up--show IP address in some
752         server notices dealing only with users; report which connection
753         class has filled up
754
755         * ircd/s_stats.c (report_deny_list): use conf->flags &
756         DENY_FLAGS_IP insteaf of conf->ip_kill
757
758         * ircd/m_stats.c (report_klines): use conf->flags & DENY_FLAGS_IP
759         insteaf of conf->ip_kill
760
761         * ircd/s_conf.c: use flags field in struct DenyConf; pull-up of
762         K-line by real name
763
764         * include/s_conf.h: use a flags field in struct DenyConf; define
765         DENY_FLAGS_FILE, DENY_FLAGS_IP, and DENY_FLAGS_REALNAME for
766         pull-up of K-line by real name
767
768         * ircd/m_trace.c: pull-up of IP show for user connections
769
770         * doc/example.conf: pull-up of the realname K-line documentation
771
772         * ircd/ircd.c: forward port of pid file advisory locking mechanism
773
774 2001-04-16  Kevin L. Mitchell  <klmitch@mit.edu>
775
776         * ircd/send.c (sendcmdto_flag_butone): recast to just broadcast to
777         all servers, rather than to only servers that have +w/+g/whatever
778         users on them; among other things, this removes that atrocity
779         known as sentalong[] from this function
780
781         * ircd/m_admin.c: must include ircd.h to declare "me"; must
782         include hash.h to declare FindUser()
783
784         * ircd/m_wallusers.c: implementation of WALLUSERS
785
786         * ircd/m_desynch.c (ms_desynch): only send DESYNCHs to opers
787
788         * ircd/m_wallops.c: only send WALLOPS to opers
789
790         * ircd/parse.c: add WALLUSERS command to parser table
791
792         * include/handlers.h: declare wallusers handlers
793
794         * include/msg.h: add WALLUSERS command
795
796         * ircd/send.c (sendcmdto_flag_butone): if FLAGS_OPER is or'd with
797         flag, send only to appropriate opers
798
799 2001-04-13  Kevin L. Mitchell  <klmitch@mit.edu>
800
801         * ircd/uping.c: refit to use the new events interface
802
803         * ircd/res.c: refit to use the new events interface
804
805         * ircd/ircd_events.c: create timer_chg(), which permits a
806         (non-periodic) timer's expire time to be modified; change the
807         logic in timer_run() so that timers that were re-added while the
808         event was being processed will not be destroyed prematurely
809
810         * include/uping.h: include the events header, declare some extra
811         fields in struct UPing, remove timeout value, and define some
812         flags for marking which cleanup items have yet to be done
813
814         * include/ircd_events.h: add a prototype for timer_chg() to change
815         the expire time of a running timer
816
817 2001-03-13 Joseph Bongaarts <foxxe@wtfs.net>
818         * ircd/os_openbsd.c: Tweaked the openbsd hack a bit.
819         
820 2001-03-07  Joseph Bongaarts  <foxxe@wtfs.net>
821
822         * config/configure.in: Add check for OpenBSD
823
824         * ircd/os_openbsd.c: Add seperate os dep file for openbsd which
825         differs from generic BSD, particularly in its handling of
826         _XOPEN_SOURCE.
827         
828 2001-02-12  Kevin L. Mitchell  <klmitch@mit.edu>
829
830         * ircd/m_gline.c (ms_gline): propagate a G-line that happened to
831         have been added by a U-lined server, rather than going through the
832         activate/deactivate logic; propagate G-line removals by U-lined
833         servers as well
834
835         * ircd/gline.c: rename propagate_gline() to gline_propagate();
836         make gline_propagate() return an int 0 (convenience return); only
837         update lastmod in gline_activate() and gline_deactivate() if the
838         current lastmod is non-zero, since 0 lastmod is our flag of a
839         U-lined server having added a G-line
840
841         * include/gline.h (gline_propagate): exporting the G-line
842         propagation function
843
844         * ircd/m_list.c (m_list): duh; permit explicit channel name
845         specification only when /list gets two arguments ("Kev
846         #wasteland") rather than when /list gets more than two
847         arguments--nice braino
848
849 2001-01-29  Thomas Helvey <twhelvey1@home.com>
850
851         * ircd/ircd_reply.c (need_more_params): fix bug that allowed
852         unregistered clients to spam opers with protocol violation
853         messages. Note: the bugfix may have eliminated some useful
854         protocol violation messages.
855         Please send protocol violation messages explicitly from the
856         functions they are discovered in, you have much better context
857         for the error there and it helps to document the behavior of the
858         server. This was also a design bug in that it violated the
859         "A function should do one thing" heuristic. Patching this one
860         would have resulted in a continuous spawning of other bugs over
861         the next 3 years, so I killed it. Check around for stuff this
862         broke and readd the calls to protocol_violation in the functions
863         that need to send the message.
864
865 2001-01-29  Kevin L. Mitchell  <klmitch@mit.edu>
866
867         * ircd/channel.c (mode_parse_ban): stopper a tiny leak--if a ban
868         already existed, then the logic would (attempt to) skip it, but
869         would not free the ban string; now the ban string is free'd and
870         the ban count is decremented, releasing the ban for use
871
872         * ircd/s_user.c: make send_umode_out() take a prop argument
873         instead of testing for the PRIV_PROPAGATE privilege itself; fix
874         set_umode() to use this new argument, calculating it before
875         calculating the new privileges for a -o'd user
876
877         * ircd/m_oper.c (m_oper): pass the new prop argument to
878         send_umode_out()
879
880         * ircd/channel.c (mode_parse_ban): turn off MODE_ADD bit in bans
881         that we're not actually going to add because they already exist;
882         test that particular bit before adding to the linked list
883
884         * include/s_user.h: add a prop argument to send_umode_out() to
885         indicate whether or not to propagate the user mode
886
887 2001-01-24  Kevin L. Mitchell  <klmitch@mit.edu>
888
889         * ircd/msgq.c: ircd_vsnprintf() returns the number of bytes that
890         it would have written; upper-bound the number to prevent overflows
891         by proxy; also, tune buffer size given to ircd_vsnprintf() to take
892         into account the fact that ircd_vsnprintf() already takes the
893         terminal \0 into account
894
895 2001-01-22  Kevin L. Mitchell  <klmitch@mit.edu>
896
897         * ircd/msgq.c: add an incredibly ugly hack to attempt to track
898         down an apparent buffer overflow; remove msgq_map(), since it's no
899         longer used anywhere; slight tweaks to prevent off-by-one errors,
900         but these can't explain the problems we've seen
901
902         * include/msgq.h: remove msgq_map(), since it's no longer used
903         anywhere
904
905 2001-01-18  Kevin L. Mitchell  <klmitch@mit.edu>
906
907         * ircd/s_user.c (set_nick_name): call client_set_privs() after
908         parsing user modes
909
910 2001-01-17  Kevin L. Mitchell  <klmitch@mit.edu>
911
912         * ircd/s_bsd.c (read_message): fix a typo in the select version of
913         read_message()
914
915         * ircd/whowas.c (whowas_free): MyFree() is a macro that expects
916         its argument to be an lvalue, which means we can't use
917         whowas_clean()'s handy-dandy "return ww" feature
918
919         * ircd/ircd_features.c: default LOCOP_KILL to TRUE--oops...
920
921 2001-01-16  Kevin L. Mitchell  <klmitch@mit.edu>
922
923         * ircd/ircd_events.c (timer_run): it's possible that the timer got
924         deleted during the callback processing, so don't go to the bother
925         of requeuing it if the destroy flag is set
926
927         * ircd/engine_select.c: define FD_SETSIZE to be IRCD_FD_SETSIZE
928         out of config.h if this is a *BSD; include errno.h (oops);
929         decrement error count after an hour using a timer; use FD_SETSIZE
930         constant instead of IRCD_FD_SETSIZE constant; fill in event
931         processing code
932
933         * ircd/engine_poll.c: include errno.h (oops); decrement error
934         count after an hour using a timer; fill in event processing code
935
936         * ircd/engine_kqueue.c: include errno.h (oops); decrement error
937         count after an hour using a timer; assert events filter is either
938         EVFILT_READ or EVFILT_WRITE; fill in event processing code
939
940         * ircd/engine_devpoll.c: include errno.h (oops); decrement error
941         count after an hour using a timer; fill in event processing code
942
943 2001-01-15  Kevin L. Mitchell  <klmitch@mit.edu>
944
945         * ircd/client.c: fixed feattab; basically, when I changed features
946         to use small integers specifying bit positions, instead of the
947         bits themselves, I forgot to update feattab to not | these
948         privileges together; also fixed a bug in the antiprivs masking
949         loop in client_set_privs()--last index wouldn't get parsed
950
951 2001-01-11  Kevin L. Mitchell  <klmitch@mit.edu>
952
953         * ircd/ircd_events.c: call event_generate() with new data
954         argument; make it set that field in struct Event; make
955         socket_add() return the value of the eng_add callback
956
957         * ircd/engine_select.c: make engine_add() return a
958         successful/unsuccessful status; add bounds-checking outside of an
959         assert; use accessor macros; use log_write(), not the deprecated
960         ircd_log(); add an assert to engine_loop() to double-check for
961         data structure corruption
962
963         * ircd/engine_poll.c: make engine_add() return a
964         successful/unsuccessful status; add bounds-checking outside of an
965         assert; use accessor macros; use log_write(), not the deprecated
966         ircd_log(); add an assert to engine_loop() to double-check for
967         data structure corruption
968
969         * ircd/engine_kqueue.c: implementation of an engine for kqueue()
970
971         * ircd/engine_devpoll.c: implementation of an engine for /dev/poll
972
973         * include/ircd_events.h: define some accessor macros; add ev_data
974         to struct Event for certain important data--errno values, for
975         instance; make EngineAdd callback tell us if it was successful or
976         not; add extra argument to event_generate(); make socket_add()
977         return the status from EngineAdd
978
979 2001-01-10  Kevin L. Mitchell  <klmitch@mit.edu>
980
981         * ircd/ircd_events.c: pass initializer information about how many
982         total _filedescriptors_ may be opened at once
983
984         * ircd/ircd.c: use exported "running" instead of unexported
985         thisServer.running
986
987         * ircd/engine_select.c: implementation of an event engine based on
988         select()
989
990         * ircd/engine_poll.c: implementation of an event engine based on
991         poll()
992
993         * include/ircd_events.h: pass the engine initializer an integer
994         specifing how many _filedescriptors_ may be opened at once
995
996         * include/ircd.h: running has to be exported for the engine_*
997         event loops
998
999 2001-01-09  Kevin L. Mitchell  <klmitch@mit.edu>
1000
1001         * ircd/ircd_events.c: include some needed headers; add some
1002         comments; make evEngines[] const; bundle sig_sock and sig_fd into
1003         a struct named sigInfo; rework struct evInfo to have a queue of
1004         _generators_, and only when threaded; added a gen_init() function
1005         to centralize generator initialization; fix various compile-time
1006         errors; rework event_add() for new queueing scheme and checked for
1007         compile-time errors; add casts where needed; spell evEngines[]
1008         correctly; make engine_name() return const char*
1009
1010         * include/ircd_events.h: type EventCallBack depends on struct
1011         Event, so pre-declare it; put _event_ queue into generators, and
1012         only when threaded; give engine data a union to store both ints
1013         and pointers; make engine name a const; fix gen_ref_dec() macro;
1014         make engine_name() return a const char*
1015
1016         * ircd/ircd_events.c: gen_dequeue() is now exported, so move it
1017         down with the non-static functions; modify event_execute() to use
1018         the new gen_ref_dec() to simplify code; make sure event_generate()
1019         does not generate new events for generators marked for destruction
1020
1021         * include/ircd_events.h: the engines, at least, may need to modify
1022         reference counts to keep generators from going away while
1023         something still points at them, so add reference counter
1024         manipulators and export gen_dequeue() for them
1025
1026         * ircd/ircd_events.c: set up the list of engines to try; set up
1027         the signal struct Socket; rename netInfo to evInfo; move static
1028         functions near the beginning of the file; do away with
1029         signal_signal() (since we no longer keep a signal count ourselves)
1030         and call event_generate() directly from signal_callback--also
1031         renamed some functions; allow signal_callback() to read up to
1032         SIGS_PER_SOCK at once from the signal pipe; add event_init() to
1033         initialize the entire event system; add event_loop() to call the
1034         engine's event loop; initialize new struct GenHeader member,
1035         gh_engdata; remove timer_next(); add socket_add() function to add
1036         a socket; add socket_del() to mark a socket for deletion; add
1037         socket_state() to transition a socket between states; add
1038         socket_events() to set what events we're interested in on the
1039         socket; add engine_name() to retrieve event engine's name
1040
1041         * include/ircd_events.h: add engine data field to struct
1042         GenHeader; rename SOCK_ACTION_REMOVE to SOCK_ACTION_DEL; add a
1043         note about states vs s_events; remove signal count; fold union
1044         Generator back into struct Event; remove count members from struct
1045         Generators; redefine engine callbacks to not take a struct
1046         Engine*; add explanatory comments to callback definitions; add
1047         some engine callbacks to handle operations; remove struct Engine
1048         flag member--can detect single flag from eng_signal member; add
1049         event_init(), event_loop(), engine_name(), and the socket_*()
1050         functions; make timer_next() a macro to avoid a function call
1051
1052 2001-01-08  Kevin L. Mitchell  <klmitch@mit.edu>
1053
1054         * include/ircd_events.h: rename to ircd_events.h, since it handles
1055         events, not just networking stuff; add signal support; more
1056         structural rearrangement
1057
1058         * ircd/ircd_events.c: rename to ircd_events.c, since it handles
1059         events, not just networking stuff; add signal support; more
1060         structural rearrangement
1061
1062 2001-01-07  Kevin L. Mitchell  <klmitch@mit.edu>
1063
1064         * ircd/ircd_network.c: implement timer API; add reference counts
1065         appropriately
1066
1067         * include/ircd_network.h: firm up some pieces of the interface;
1068         split out members everything has into a separate structure; add
1069         reference counts; add timer API
1070
1071 2001-01-06  Kevin L. Mitchell  <klmitch@mit.edu>
1072
1073         * ircd/ircd_network.c: static data and event manipulation
1074         functions for new event processing system
1075
1076         * include/ircd_network.h: data structures for new event processing
1077         system
1078
1079 2001-01-03  Kevin L. Mitchell  <klmitch@mit.edu>
1080
1081         * ircd/whowas.c: Completely re-did the old allocation scheme by
1082         turning it into a linked list, permitting the
1083         NICKNAMEHISTORYLENGTH feature to be changed on the fly
1084
1085         * ircd/s_debug.c (count_memory): use FEAT_NICKNAMEHISTORYLENGTH
1086         feature instead of old #define
1087
1088         * ircd/ircd_features.c: add NICKNAMEHISTORYLENGTH feature as an
1089         integer feature with a notify callback (whowas_realloc)
1090
1091         * ircd/client.c (client_set_privs): second memset was supposed to
1092         be over antiprivs, not privs; thanks, Chris Behrens
1093         <cbehrens@xo.com> for pointing that out...
1094
1095         * include/whowas.h: new elements for an extra linked list in
1096         struct Whowas; a notify function for feature value changes
1097
1098         * include/ircd_features.h: new feature--FEAT_NICKNAMEHISTORYLENGTH
1099
1100         * config/config-sh.in: NICKNAMEHISTORYLENGTH is now a feature
1101
1102 2001-01-02  Kevin L. Mitchell  <klmitch@mit.edu>
1103
1104         * config/config-sh.in: get rid of DEFAULT_LIST_PARAMETER
1105         compile-time option--now in features subsystem
1106
1107         * ircd/motd.c (motd_init): rework motd_init() to be called as the
1108         notify function for MPATH and RPATH features (should probably
1109         split it up a bit, though...)
1110
1111         * ircd/m_privs.c (mo_privs): if called with no parameters, return
1112         privs of the caller, rather than an error
1113
1114         * ircd/m_list.c: pull usage message into its own function; pull
1115         list parameter processing into its own function that does not
1116         modify the contents of the parameter; add list_set_default() to
1117         set the default list parameter (uses the notify hook); rework
1118         m_list() to make use of these functions; removed dead code
1119
1120         * ircd/ircd_log.c (log_feature_mark): make sure to return 0, since
1121         we have no notify handler
1122
1123         * ircd/ircd_features.c: add notify callback for notification of
1124         value changes; give mark callback an int return value to indicate
1125         whether or not to call the notify callback; fix up feature macros
1126         for new notify callback; add DEFAULT_LIST_PARAM feature; rewrite
1127         string handling in feature_set() to deal with def_str being a null
1128         pointer; wrote feature_init() to set up all defaults appropriately
1129
1130         * ircd/ircd.c (main): call feature_init() instead of
1131         feature_mark(), to avoid calling notify functions while setting up
1132         defaults
1133
1134         * ircd/client.c: updated to deal with new privileges structure
1135
1136         * ircd/class.c: updated so init_class() can be called should one
1137         of PINGFREQUENCY, CONNECTFREQUENCY, MAXIMUM_LINKS, or
1138         DEFAULTMAXSENDQLENGTH be changed
1139
1140         * include/ircd_log.h: log_feature_mark() updated to fit with new
1141         API changes
1142
1143         * include/ircd_features.h: added DEFAULT_LIST_PARAM feature and
1144         feature_init() function (found necessary since adding the notify
1145         stuff and notifying motd.c during start-up...before we defined
1146         RPATH!)
1147
1148         * include/client.h: move privs around to enable addition of more
1149         bits if necessary; based on the FD_* macros
1150
1151         * include/channel.h: declare list_set_default (actually located in
1152         m_list.c *blanche*)
1153
1154         * ircd/s_user.c: retrieve MAXSILES and MAXSILELENGTH (now
1155         AVBANLEN*MAXSILES) from features subsystem
1156
1157         * ircd/s_debug.c (debug_serveropts): CMDLINE_CONFIG doesn't go to
1158         anything anymore
1159
1160         * ircd/s_bsd.c: retrieve HANGONGOODLINK and HANGONRETRYDELAY from
1161         the features subsystem
1162
1163         * ircd/s_auth.c (start_auth): NODNS migrated to the features
1164         subsystem
1165
1166         * ircd/random.c: created random_seed_set() function to set seed
1167         value, along with some stuff to make ircrandom() a little more
1168         random--state preserving, xor of time instead of direct usage,
1169         etc.; it's still a pseudo-random number generator, though, and
1170         hopefully I haven't broken the randomness
1171
1172         * ircd/m_version.c: FEATUREVALUES makes use of feature_int() calls
1173
1174         * ircd/m_join.c: use features interface to retrieve
1175         MAXCHANNELSPERUSER
1176
1177         * ircd/ircd_features.c: add NODISP flag for super-secret features;
1178         add a whole bunch of new features migrated over from make config
1179
1180         * ircd/ircd.c: use features interface to retrieve PINGFREQUENCY,
1181         CONNECTTIMEOUT, and TIMESEC
1182
1183         * ircd/client.c (client_get_ping): use features interface to
1184         retrieve PINGFREQUENCY
1185
1186         * ircd/class.c: use features interface to retrieve PINGFREQUENCY,
1187         CONNECTFREQUENCY, MAXIMUM_LINKS, and DEFAULTMAXSENDQLENGTH
1188
1189         * ircd/chkconf.c (DEFAULTMAXSENDQLENGTH): since it's now in the
1190         features subsystem, we have to add something explicit
1191
1192         * ircd/channel.c: use features interface to retrieve
1193         KILLCHASETIMELIMIT, MAXBANLENGTH, MAXBANS, and MAXCHANNELSPERUSER;
1194         note that MAXBANLENGTH is now calculated dynamically from MAXBANS
1195         and AVBANLEN
1196
1197         * ircd/Makefile.in: run make depend
1198
1199         * include/supported.h (FEATURESVALUES): update to reference
1200         feature settings
1201
1202         * include/random.h: add prototype for random_seed_set
1203
1204         * include/ircd_features.h: add several more features
1205
1206         * include/channel.h: move MAXBANS and MAXBANLENGTH into feature
1207         subsystem
1208
1209         * config/config-sh.in: feature-ized some more stuff
1210
1211         * include/motd.h: some new elements in motd.h for motd.c changes
1212
1213         * ircd/motd.c: motd_cache() now searches a list of already cached
1214         MOTD files; saves us from having duplicate caches in memory if
1215         there are two identical T-lines for two different sites...
1216
1217 2001-01-02  Perry Lorier <isomer@coders.net>
1218         * ircd/motd.c: don't core if the motd isn't found.  Bug found by
1219         Amarande.
1220
1221 2001-01-02  Perry Lorier <isomer@coders.net>
1222         * ircd/s_err.c: Added third param to 004 - the channel modes that tage params.  Used by hybrid/epic.
1223         * ircd/s_channels.c: Added fix for msg'ing a -n+m channel - thanks
1224                 to guppy for noticing, and hektik for providing the fix.
1225         * misc others: Minor cleanups, added more protocol_violations, ripped
1226                 out more P09 stuffs, bit more protocol neg stuff.
1227
1228 2000-12-19  Kevin L. Mitchell  <klmitch@mit.edu>
1229
1230         * ircd/m_ison.c (m_ison): Dianora says that ISON has to end with a
1231         space (*sigh* stupid clients...)
1232
1233         * ircd/s_user.c: make WALLOPS_OPER_ONLY a feature managed through
1234         ircd_features.[ch]
1235
1236         * ircd/s_err.c: get rid of GODMODE conditionals
1237
1238         * ircd/s_debug.c (debug_serveropts): switch to using appropriate
1239         calls into the features subsystem for various serveropts
1240         characters
1241
1242         * ircd/s_conf.c (find_conf_entry): get rid of USEONE conditional
1243
1244         * ircd/s_bsd.c: remove GODMODE conditional; use features subsystem
1245         to get value of VIRTUAL_HOST and CLIENT_FLOOD; remove
1246         NOFLOWCONTROL conditional
1247
1248         * ircd/s_auth.c: use features subsystem to determine value of
1249         KILL_IPMISMATCH
1250
1251         * ircd/parse.c: get rid of NOOPER and GODMODE conditionals; use
1252         features subsystem to determine the setting of IDLE_FROM_MSG
1253
1254         * ircd/numnicks.c: get rid of EXTENDED_NUMERICS conditionals
1255
1256         * ircd/motd.c: get value of NODEFAULTMOTD from features subsystem;
1257         use features subsystem to get motd file names
1258
1259         * ircd/m_settime.c: get value of RELIABLE_CLOCK from features
1260         subsystem
1261
1262         * ircd/m_server.c: get rid of CRYPT_LINK_PASSWORD, since it does
1263         us no good; use features subsystem to figure out if we need to do
1264         HUB-type stuff; make TESTNET debugging sendto_opmask_butone's use
1265         the Debug(()) macro instead; get value of RELIABLE_CLOCK from
1266         features subsystem
1267
1268         * ircd/m_privmsg.c: get IDLE_FROM_MSG from the features subsystem
1269
1270         * ircd/m_oper.c: get CRYPT_OPER_PASSWORD from the features
1271         subsystem
1272
1273         * ircd/m_connect.c: get SERVER_PORT from the features subsystem
1274
1275         * ircd/ircd_log.c (log_set_file): fix a bug that kept log files
1276         from getting marked if they were already set to something...
1277
1278         * ircd/ircd_features.c: add a flag to indicates read-only access;
1279         add several new features that used to be compile-time selected
1280
1281         * ircd/ircd.c: grab pidfile out of feature subsystem; don't check
1282         access to motd files (what the heck?); make sure to initialize the
1283         feature subsystem before trying to write the config file
1284
1285         * ircd/dbuf.c: use feature_int() to retrieve BUFFERPOOL settings;
1286         use feature_bool() to figure out if we're using the FERGUSON
1287         flusher
1288
1289         * ircd/Makefile.in: MPATH and RPATH are now done differently, so
1290         remove the clause that creates empty files of that name; also ran
1291         make depend
1292
1293         * include/sys.h: CLIENT_FLOOD is now a feature; unfortunately,
1294         there is no easy way to bounds-check it at present
1295
1296         * include/querycmds.h: make sure ircd_features.h is included; use
1297         feature_str(FEAT_DOMAINNAME) in calls to match()
1298
1299         * include/ircd_features.h: many new features that used to be
1300         compile-time selected
1301
1302         * config/config-sh.in: add * to DOMAINNAME; try also using first
1303         argument to search in /etc/resolv.conf; removed many compile-time
1304         options that now can be configured through the features system
1305
1306 2000-12-18  Kevin L. Mitchell  <klmitch@mit.edu>
1307
1308         * doc/api/log.txt: how to use the logging API
1309
1310         * doc/api/features.txt: how to use the features API
1311
1312         * doc/api/api.txt: how to write API documentation
1313
1314         * include/ircd_features.h: rearranged a couple of features for
1315         neatness purposes
1316
1317         * ircd/ircd_features.c: cleaned up the macros some; rearranged
1318         some code to all go into the switch; rearranged a couple of
1319         features for neatness purposes
1320
1321 2000-12-16  Greg Sikorski <gte@atomicrevs.demon.co.uk>
1322         * ircd/os_bsd.c: Added os_set_tos for BSD users.
1323
1324 2000-12-16  Kevin L. Mitchell  <klmitch@mit.edu>
1325
1326         * ircd/ircd_features.c: Isomer almost got it right; you need to
1327         use F_I(), since it's an integer value, not a boolean value.  The
1328         asserts in feature_int would catch you out...  Also made the F_*
1329         macros take flags
1330
1331         * ircd/s_err.c: define RPL_PRIVS reply
1332
1333         * ircd/parse.c: put new PRIVS command into command table
1334
1335         * ircd/m_privs.c (mo_privs): message handler to report operator
1336         privileges
1337
1338         * ircd/ircd_features.c: declare new features OPER_SET and
1339         LOCOP_SET; redo boolean testing routine to accept TRUE, YES, and
1340         ON for boolean TRUE, and FALSE, NO, and OFF for boolean FALSE
1341
1342         * ircd/client.c: simplify client_set_privs() with a table that
1343         defines what features to test for; add new client_report_privs()
1344
1345         * ircd/Makefile.in: compile new m_privs.c; run make depend
1346
1347         * include/numeric.h (RPL_PRIVS): new reply numeric for displaying
1348         an operator's privileges
1349
1350         * include/msg.h: define new command: PRIVS
1351
1352         * include/ircd_features.h: create new features OPER_SET and
1353         LOCOP_SET for controlling access to /set
1354
1355         * include/handlers.h (mo_privs): declare message handler for
1356         reporting oper privileges
1357
1358         * include/client.h (client_report_privs): declare function to
1359         report what privileges an oper has
1360
1361         * ircd/m_whois.c (do_whois): fix a bug that caused /whois to
1362         report that a user is an oper if the oper doing the /whois had
1363         PRIV_SEE_OPERS
1364
1365 2000-12-17  Isomer <Isomer@coders.net>
1366         * ircd/listener.c: added support for TOS twiddling as a 'feature'.
1367
1368 2000-12-17  Isomer <Isomer@coders.net>
1369         * ircd/os_linux.c: add TOS stuffs
1370
1371         * ircd/listener.c: add TOS stuffs
1372
1373 2000-12-16  Kevin L. Mitchell  <klmitch@mit.edu>
1374
1375         * ircd/whocmds.c (do_who): use HasPriv to determine whether or not
1376         to indicate a user is an oper
1377
1378         * ircd/s_user.c: clear privileges setting when deopping; don't
1379         propagate +o unless user has PRIV_PROPAGATE privilege
1380
1381         * ircd/s_debug.c (debug_serveropts): created debug_serveropts()
1382         function and replaced how the server option string is generated
1383
1384         * ircd/parse.c: remove conditional on CONFIG_OPERCMDS
1385
1386         * ircd/m_whois.c (do_whois): use HasPriv to determine whether or
1387         not to indicate the user is an operator
1388
1389         * ircd/m_who.c: use HasPriv to determine whether or not a user
1390         should be displayed in the list of opers
1391
1392         * ircd/m_version.c: call debug_serveropts() to get server option
1393         string
1394
1395         * ircd/m_userip.c (userip_formatter): use HasPriv to determine
1396         whether or not to show oper status
1397
1398         * ircd/m_userhost.c (userhost_formatter): use HasPriv to determine
1399         whether or not to show oper status
1400
1401         * ircd/m_restart.c (mo_restart): replace ugly #ifdef conditional
1402         checks with HasPriv check; remove dead code
1403
1404         * ircd/m_rehash.c (mo_rehash): replace ugly #ifdef conditional
1405         checks with HasPriv check
1406
1407         * ircd/m_opmode.c (mo_opmode): use HasPriv to check permissions;
1408         use feature_bool to check if disabled
1409
1410         * ircd/m_oper.c (m_oper): set oper priviliges
1411
1412         * ircd/m_mode.c (m_mode): replace #ifdef conditional with HasPriv
1413         check
1414
1415         * ircd/m_kill.c (mo_kill): use HasPriv checks to determine if we
1416         can kill
1417
1418         * ircd/m_kick.c (m_kick): replace #ifdef conditional with HasPriv
1419         check
1420
1421         * ircd/m_jupe.c (mo_jupe): rework permissions checking structure;
1422         use feature_bool to check if disabled
1423
1424         * ircd/m_join.c (m_join): remove BADCHAN conditional; replace
1425         #ifdef conditional with a HasPriv check
1426
1427         * ircd/m_gline.c (mo_gline): rework permissions checking
1428         structure; use feature_bool to check if any part is disabled
1429
1430         * ircd/m_die.c: replace ugly #ifdef conditionals with HasPriv
1431         check; remove dead code
1432
1433         * ircd/m_clearmode.c: use feature_bool() to detect if we're
1434         disabled; use HasPriv to figure out what we're permitted to do;
1435         only allow clearmode on moded channels
1436
1437         * ircd/ircd_features.c: define various features; use HasPriv to
1438         verify permissions to set/reset
1439
1440         * ircd/gline.c (gline_add): use HasPriv instead of #ifdef
1441         conditionals
1442
1443         * ircd/client.c (client_set_privs): function to set an oper's
1444         privileges
1445
1446         * ircd/channel.c: use HasPriv calls instead of #ifdef conditionals
1447
1448         * include/whocmds.h: deconditionalize several macros and
1449         substitute appropriate calls to HasPriv()
1450
1451         * include/s_debug.h: get rid of global serveropts[]; define new
1452         function debug_serveropts() to build that string on the fly
1453
1454         * include/ircd_features.h: define some features
1455
1456         * include/client.h: add privs member to struct Connection; define
1457         various priviledges
1458
1459         * include/channel.h: no longer using IsOperOnLocalChannel; remove
1460         conditional of MAGIC_OPER_OVERRIDE on OPER_WALK_THROUGH_LMODES
1461
1462         * doc/Configure.help: remove help information for deprecated
1463         options
1464
1465         * config/config-sh.in: remove certain deprecated options having to
1466         do with what opers can and cannot do--first stage in moving
1467         compile-time constants into the .conf
1468
1469 2000-12-16  Isomer <Isomer@coders.net>
1470         * ircd/parse.c: detect if the prefix is missing and try and recover
1471         instead of coring.
1472
1473 2000-12-15  Kevin L. Mitchell  <klmitch@mit.edu>
1474
1475         * ircd/ircd_log.c: found and fixed some bugs in the debug logging
1476         code that would sometimes result in the log file not being
1477         reopened--which meant that a user could connect and get the
1478         logging output--oops
1479
1480         * ircd/Makefile.in: run make depend...
1481
1482         * ircd/s_stats.c: get rid of report_feature_list()
1483
1484         * ircd/s_err.c: add the 'bad value' error message, shift error
1485         messages over somewhat
1486
1487         * ircd/s_debug.c (debug_init): call log_debug_init with the
1488         use_tty flag
1489
1490         * ircd/s_conf.c (read_configuration_file): unmark features before
1491         reading the config file, then reset unmarked features after
1492         reading the config file
1493
1494         * ircd/m_stats.c: use feature_report() instead of
1495         report_feature_list()
1496
1497         * ircd/ircd_log.c: fix log_debug_file (bogus assertion); add
1498         special 'mark' flags and use them; add the stuff needed by the
1499         features API
1500
1501         * ircd/ircd_features.c: rework the features API and add gobs of
1502         comments to try to explain what some of these complex functions
1503         are actually doing
1504
1505         * include/s_stats.h: get rid of report_feature_list(); use
1506         feature_report() instead
1507
1508         * include/numeric.h: added a new error message and shifted old
1509         values over some--this is, after all, an alpha
1510
1511         * include/ircd_log.h: log_debug_init now takes an integer to tell
1512         it if it should be using the tty; added a couple of functions
1513         required by the features API
1514
1515         * include/ircd_features.h: add an enum and some more functions to
1516         flesh out the feature API--it should now be possible to put all
1517         those compile-time constants in the config file!
1518
1519         * ircd/send.c: got the direction of the assert incorrect...
1520
1521         * ircd/send.c: implement the efficiency of flush_connections by
1522         creating a linked list of struct Connection's with queued data;
1523         also get rid of flush_sendq_except and make sure to yank
1524         connections out of the list when their sendQs become empty (notice
1525         the assertion in flush_connections!)
1526
1527         * ircd/s_bsd.c (close_connection): must yank the Connection out of
1528         the sendq list
1529
1530         * ircd/list.c (dealloc_connection): must yank the Connection out
1531         of the sendq list
1532
1533         * ircd/dbuf.c (dbuf_put): call flush_connections instead of the
1534         deprecated flush_sendq_except
1535
1536         * ircd/client.c: define a couple new helper functions for sendq
1537         threading--this will make the flush_connections function in send.c
1538         considerably more efficient by creating a linked list of
1539         Connections that have queued data to send
1540
1541         * include/send.h: remove flush_sendq_except, as it's not used
1542         anymore
1543
1544         * include/client.h: declare a couple new helper functions for the
1545         sendq threading system
1546
1547 2000-12-14  Kevin L. Mitchell  <klmitch@mit.edu>
1548
1549         * ircd/m_ison.c (m_ison): Apply Diane Bruce's patch to make ISON
1550         parse all arguments
1551
1552         * ircd/s_debug.c (count_memory): modify to report for clients and
1553         connections, not local clients and remote clients
1554
1555         * ircd/list.c: fiddle with the client-fiddling functions to take
1556         into account the divorce of struct Connection from struct Client
1557
1558         * ircd/ircd.c: define a struct Connection for me, initialize it,
1559         and link it into the right place (ewww, globals!)
1560
1561         * include/client.h: remove CLIENT_{LOCAL,REMOTE}_SIZE; split
1562         struct Client into struct Client and struct Connection; redefine
1563         local-portion accessor macros to go through struct Client to the
1564         struct Connection; define struct Connection accessor macros
1565
1566 2000-12-13  Kevin L. Mitchell  <klmitch@mit.edu>
1567
1568         * ircd/whowas.c: missed a couple of accesses to a struct Client
1569
1570         * ircd/uping.c: missed a couple of accesses to a struct Client
1571
1572         * ircd/send.c: missed a couple of accesses to a struct Client
1573
1574         * ircd/s_user.c: missed a couple of accesses to a struct Client
1575
1576         * ircd/s_misc.c: missed a couple of accesses to a struct Client
1577
1578         * ircd/s_conf.c: missed a couple of accesses to a struct Client
1579
1580         * ircd/s_bsd.c: missed a couple of accesses to a struct Client
1581
1582         * ircd/s_auth.c: missed a couple of accesses to a struct Client
1583
1584         * ircd/res.c: missed a couple of accesses to a struct Client
1585
1586         * ircd/parse.c: missed a couple of accesses to a struct Client
1587
1588         * ircd/m_whois.c: use new accessor macros for struct Client
1589
1590         * ircd/m_who.c: use new accessor macros for struct Client
1591
1592         * ircd/m_wallchops.c: use new accessor macros for struct Client
1593
1594         * ircd/m_version.c: use new accessor macros for struct Client
1595
1596         * ircd/m_userip.c: use new accessor macros for struct Client
1597
1598         * ircd/m_userhost.c: use new accessor macros for struct Client
1599
1600         * ircd/m_user.c: use new accessor macros for struct Client
1601
1602         * ircd/m_uping.c: use new accessor macros for struct Client
1603
1604         * ircd/m_trace.c: use new accessor macros for struct Client
1605
1606         * ircd/m_topic.c: use new accessor macros for struct Client
1607
1608         * ircd/m_time.c: use new accessor macros for struct Client
1609
1610         * ircd/m_stats.c: use new accessor macros for struct Client
1611
1612         * ircd/m_squit.c: use new accessor macros for struct Client
1613
1614         * ircd/m_silence.c: use new accessor macros for struct Client
1615
1616         * ircd/m_server.c: use new accessor macros for struct Client;
1617         remove dead code
1618
1619         * ircd/m_rpong.c: use new accessor macros for struct Client
1620
1621         * ircd/m_rping.c: use new accessor macros for struct Client
1622
1623         * ircd/m_quit.c: use new accessor macros for struct Client
1624
1625         * ircd/m_privmsg.c: use new accessor macros for struct Client
1626
1627         * ircd/m_pong.c: use new accessor macros for struct Client; remove
1628         dead code
1629
1630         * ircd/m_ping.c: use new accessor macros for struct Client
1631
1632         * ircd/m_pass.c: use new accessor macros for struct Client
1633
1634         * ircd/m_part.c: use new accessor macros for struct Client
1635
1636         * ircd/m_oper.c: use new accessor macros for struct Client
1637
1638         * ircd/m_notice.c: use new accessor macros for struct Client
1639
1640         * ircd/m_nick.c: use new accessor macros for struct Client
1641
1642         * ircd/m_names.c: use new accessor macros for struct Client
1643
1644         * ircd/m_mode.c: use new accessor macros for struct Client
1645
1646         * ircd/m_map.c: use new accessor macros for struct Client
1647
1648         * ircd/m_list.c: use new accessor macros for struct Client
1649
1650         * ircd/m_links.c: use new accessor macros for struct Client;
1651         remove some dead code
1652
1653         * ircd/m_kill.c: use new accessor macros for struct Client; remove
1654         some dead code
1655
1656         * ircd/m_kick.c: use new accessor macros for struct Client
1657
1658         * ircd/m_join.c: use new accessor macros for struct Client; remove
1659         some dead code
1660
1661         * ircd/m_ison.c: use new accessor macros for struct Client
1662
1663         * ircd/m_invite.c: use new accessor macros for struct Client
1664
1665         * ircd/m_info.c: use new accessor macros for struct Client
1666
1667         * ircd/m_gline.c: use new accessor macros for struct Client
1668
1669         * ircd/m_error.c: use new accessor macros for struct Client
1670
1671         * ircd/m_create.c: use new accessor macros for struct Client
1672
1673         * ircd/m_connect.c: use new accessor macros for struct Client;
1674         removed some dead code
1675
1676         * ircd/m_burst.c: use new accessor macros for struct Client
1677
1678         * ircd/m_away.c: use new accessor macros for struct Client
1679
1680         * ircd/m_admin.c: use new accessor macros for struct Client
1681
1682         * ircd/hash.c: missed a couple of accesses to a struct Client
1683
1684         * ircd/gline.c: missed a couple of accesses to a struct Client
1685
1686         * ircd/crule.c: missed a couple of accesses to a struct Client
1687
1688         * ircd/class.c: missed an access to a struct Client
1689
1690         * ircd/channel.c: missed a couple of accesses to a struct Client
1691
1692         * ircd/IPcheck.c: missed an access to a struct Client
1693
1694         * include/querycmds.h: fix a couple of stats macros to use
1695         structure accessor macros
1696
1697         * include/client.h: change structure member names to highlight any
1698         places in the code I've missed
1699
1700 2000-12-12  Kevin L. Mitchell  <klmitch@mit.edu>
1701
1702         * ircd/whowas.c: use new struct Client accessor macros
1703
1704         * ircd/whocmds.c: use new struct Client accessor macros
1705
1706         * ircd/send.c: use new struct Client accessor macros
1707
1708         * ircd/s_user.c: use new struct Client accessor macros; removed
1709         some dead code
1710
1711         * ircd/s_serv.c: use new struct Client accessor macros; removed
1712         some dead code
1713
1714         * ircd/s_numeric.c: use new struct Client accessor macros
1715
1716         * ircd/s_misc.c: use new struct Client accessor macros
1717
1718         * ircd/s_debug.c: use new struct Client accessor macros
1719
1720         * ircd/s_conf.c: use new struct Client accessor macros
1721
1722         * ircd/s_bsd.c: use new struct Client accessor macros
1723
1724         * ircd/s_auth.c: use new struct Client accessor macros
1725
1726         * ircd/parse.c: use new struct Client accessor macros
1727
1728         * ircd/packet.c: use new struct Client accessor macros
1729
1730         * ircd/numnicks.c: use new struct Client accessor macros
1731
1732         * ircd/motd.c: use new struct Client accessor macros
1733
1734         * ircd/listener.c: use new struct Client accessor macros
1735
1736         * ircd/list.c: use new struct Client accessor macros
1737
1738         * ircd/jupe.c: use new struct Client accessor macros
1739
1740         * ircd/ircd_snprintf.c: use new struct Client accessor macros
1741
1742         * ircd/ircd_reply.c: use new struct Client accessor macros
1743
1744         * ircd/ircd_relay.c: use new struct Client accessor macros
1745
1746         * ircd/ircd.c: use new struct Client accessor macros
1747
1748         * ircd/gline.c: catch some instances of me.<stuff> I missed
1749         previously
1750
1751         * ircd/client.c: use cli_ instead of con_
1752
1753         * ircd/class.c: use cli_ instead of con_
1754
1755         * ircd/channel.c: use cli_ instead of con_
1756
1757         * ircd/IPcheck.c: use cli_ instead of con_; catch some instances
1758         of me.<stuff> I missed previously
1759
1760         * include/client.h: use cli_ instead of con_...seemed like a good
1761         idea at the time *shrug*
1762
1763 2000-12-11  Kevin L. Mitchell  <klmitch@mit.edu>
1764
1765         * ircd/hash.c: use struct Client accessor macros
1766
1767         * ircd/gline.c: use struct Client accessor macros
1768
1769         * ircd/crule.c: use struct Client accessor macros
1770
1771         * ircd/client.c: use struct Client accessor macros; remove some
1772         dead code
1773
1774         * ircd/class.c: use struct Client accessor macros
1775
1776         * ircd/channel.c: use struct Client accessor macros; remove some
1777         dead code
1778
1779         * ircd/IPcheck.c: use struct Client accessor macros
1780
1781         * include/numnicks.h: use struct Client accessor macros
1782
1783         * include/client.h: first step to divorcing struct Client and
1784         struct Connection--define accessor macros and use them
1785
1786         * ircd/gline.c: When Uworld removed Uworld-set G-lines, only the
1787         uplink would remove them.  This is because the removal protocol
1788         message wasn't being sent to the uplinks.  This is fixed by fixing
1789         propagate_gline() to send the proper number of arguments depending
1790         on whether or not we're adding or deleting the Uworld gline, and
1791         by having gline_deactivate() make sure to turn off the active bit
1792         and call propagate_gline() if it's a Uworld gline
1793
1794 2000-12-10  Kevin L. Mitchell  <klmitch@mit.edu>
1795
1796         * ircd/os_generic.c: make sure IOV_MAX gets defined, just in case
1797
1798         * ircd/os_bsd.c: apparently BSD doesn't have IOV_MAX defined
1799         anywhere intelligent...
1800
1801 2000-12-09  Kevin L. Mitchell  <klmitch@mit.edu>
1802
1803         * ircd/send.c (send_queued): call deliver_it with appropriate
1804         arguments
1805
1806         * ircd/s_serv.c: reorder a couple of headers--cosmetic
1807
1808         * ircd/s_bsd.c (deliver_it): make deliver_it work with a struct
1809         MsgQ
1810
1811         * ircd/os_solaris.c (os_sendv_nonb): function for calling writev
1812         with appropriate iovec
1813
1814         * ircd/os_linux.c (os_sendv_nonb): function for calling writev
1815         with appropriate iovec
1816
1817         * ircd/os_generic.c (os_sendv_nonb): function for calling writev
1818         with appropriate iovec
1819
1820         * ircd/os_bsd.c (os_sendv_nonb): function for calling writev with
1821         appropriate iovec
1822
1823         * ircd/msgq.c (msgq_mapiov): add a len_p argument for totalling up
1824         exactly how much we're trying to write out to the fd
1825
1826         * include/s_bsd.h: make deliver_it take a struct MsgQ
1827
1828         * include/msgq.h: add a len_p argument to msgq_mapiov to help
1829         detect short writes that indicate possible socket blocking
1830
1831         * include/ircd_osdep.h: declare os_sendv_nonb()
1832
1833         * ircd/channel.c (modebuf_mode): don't add empty modes...
1834
1835 2000-12-08  Kevin L. Mitchell  <klmitch@mit.edu>
1836
1837         * include/send.h: add prio argument to send_buffer to select
1838         between normal and priority queues
1839
1840         * ircd/s_user.c (send_user_info): add prio argument to send_buffer
1841         call
1842
1843         * ircd/m_ison.c (m_ison): add prio argument to send_buffer call
1844
1845         * ircd/ircd_reply.c (send_reply): add prio argument to send_buffer
1846         call
1847
1848         * ircd/channel.c (send_channel_modes): add prio argument to
1849         send_buffer call
1850
1851         * ircd/send.c (send_buffer): add a prio argument to select the
1852         priority queue; update send.c functions to use it
1853
1854         * ircd/msgq.c (msgq_add): remove msgq_prio; fold msgq_link and
1855         msgq_add; add a prio argument to msgq_add to select the priority
1856         queue
1857
1858         * include/msgq.h: remove msgq_prio; add a prio argument to
1859         msgq_add
1860
1861         * ircd/send.c: remove sendbuf; remove GODMODE code; switch to
1862         using msgq functions instead of dbuf functions; remove old, dead
1863         sendto_* functions; redo send_buffer to take a struct MsgBuf;
1864         rework sendcmdto_* functions to make use of the new struct MsgBuf
1865
1866         * ircd/s_user.c: remove hunt_server; restructure send_user_info to
1867         make appropriate use of struct MsgBuf
1868
1869         * ircd/s_debug.c (count_memory): count memory used by the MsgQ
1870         system and report it
1871
1872         * ircd/s_conf.c (read_configuration_file): use
1873         sendto_opmask_butone instead of the now dead sendto_op_mask
1874
1875         * ircd/s_bsd.c: switch to using appropriate MsgQLength and other
1876         calls on sendQ
1877
1878         * ircd/parse.c (parse_server): get rid of a piece of GODMODE code
1879
1880         * ircd/msgq.c: add msgq_append and msgq_bufleft; fix a bug in
1881         msgq_clean
1882
1883         * ircd/m_version.c: fix spelling in comments marking dead code
1884
1885         * ircd/m_userip.c (userip_formatter): restructure to make use of
1886         struct MsgBuf
1887
1888         * ircd/m_userhost.c (userhost_formatter): restructure to make use
1889         of struct MsgBuf
1890
1891         * ircd/m_stats.c: use MsgQLength on a sendQ
1892
1893         * ircd/m_settime.c: use MsgQLength instead of DBufLength on a
1894         sendQ; mark a piece of dead code
1895
1896         * ircd/m_names.c: use send_reply instead of sendto_one
1897
1898         * ircd/m_mode.c: use new mode; remove old dead code
1899
1900         * ircd/m_ison.c (m_ison): restructure to make use of struct MsgBuf
1901
1902         * ircd/m_burst.c: use BUFSIZE instead of IRC_BUFSIZE; remove old
1903         dead code
1904
1905         * ircd/listener.c (accept_connection): use sendto_opmask_butone
1906         instead of sendto_op_mask
1907
1908         * ircd/list.c (free_client): use MsgQClear to clear sendQ
1909
1910         * ircd/ircd_reply.c: remove send_error_to_client; restructure
1911         send_reply to make use of struct MsgBuf
1912
1913         * ircd/dbuf.c (dbuf_put): remove argument to flush_sendq_except,
1914         since its no longer used (at least currently)
1915
1916         * ircd/channel.c: restructure send_channel_modes to make use of
1917         struct MsgBuf; remove set_mode, add_token_to_sendbuf, cancel_mode,
1918         and send_hack_notice; use BUFSIZE instead of IRC_BUFSIZE
1919
1920         * ircd/Makefile.in: add msgq.c to list of sources; run make depend
1921
1922         * ircd/IPcheck.c: use sendcmdto_one instead of sendto_one
1923
1924         * include/send.h: send_buffer now takes a struct MsgBuf * instead
1925         of a char *; flush_sendq_except now takes no arguments, as sendq
1926         flushing currently only happens in dbuf.h and sendQ is a struct
1927         MsgQ; remove prototypes for a lot of old sendto_* functions that
1928         aren't used anymore; remove sendbuf and IRC_BUFSIZE--the former is
1929         no longer needed, and the latter is identical to BUFSIZE in
1930         ircd_defs.h
1931
1932         * include/s_user.h: make InfoFormatter take a struct MsgBuf*
1933         instead of a char *; also make it return void, instead of char *
1934
1935         * include/msgq.h: add msgq_append and msgq_bufleft functions
1936
1937         * include/client.h: use a struct MsgQ instead of a struct DBuf for
1938         sendq
1939
1940         * doc/Configure.help: Remove help for compile-time options that
1941         have gone away
1942
1943         * config/config-sh.in: remove CONFIG_NEWMODE
1944
1945         * ircd/m_server.c (mr_server): don't send server IPs in any server
1946         notices
1947
1948         * ircd/msgq.c (msgq_vmake): add \r\n to messages
1949
1950 2000-12-07  Kevin L. Mitchell  <klmitch@mit.edu>
1951
1952         * include/msgq.h: declare the MsgQ API
1953
1954         * ircd/msgq.c: implementation of new MsgQ system
1955
1956 2000-12-06  Kevin L. Mitchell  <klmitch@mit.edu>
1957
1958         * ircd/ircd_features.c: #include was supposed to be for
1959           ircd_features.h, not features.h--missed when I had to do a
1960           rename because of namespace collision
1961
1962 2000-12-05  Greg Sikorski <gte@atomicrevs.demon.co.uk>
1963         * ircd/m_topic.c: Added missing braces that caused all remote
1964           topics to be ignored.
1965
1966 2000-12-04  Kevin L. Mitchell  <klmitch@mit.edu>
1967
1968         * ircd/m_create.c: I'm tired of the exit_client warning :)
1969         (ms_create): discovered that exit_client() was being called with
1970         too few arguments
1971
1972         * ircd/s_misc.c (exit_client): remove all dependance on
1973         FNAME_USERLOG, since that's now gone; log only to LS_USER
1974
1975         * ircd/s_debug.c: USE_SYSLOG no longer means anything
1976
1977         * ircd/m_oper.c (m_oper): no longer log to LS_OPERLOG--we already
1978         log to LS_OPER
1979
1980         * ircd/m_kill.c: no longer conditionalize on SYSLOG_KILL
1981
1982         * ircd/ircd_log.c: remove LS_OPERLOG, LS_USERLOG
1983
1984         * include/ircd_log.h: remove LS_OPERLOG, LS_USERLOG--they serve
1985         the same purpose as LS_USER and LS_OPER
1986
1987         * config/config-sh.in: remove no longer relevant log config
1988         variables
1989
1990         * ircd/uping.c (uping_init): use log_write instead of ircd_log
1991
1992         * ircd/s_misc.c (exit_client): use log_write instead of ircd_log
1993
1994         * ircd/s_conf.c: use log_write instead of ircd_log
1995
1996         * ircd/s_bsd.c (report_error): use log_write instead of ircd_log
1997
1998         * ircd/s_auth.c (timeout_auth_queries): use log_write instead of
1999         ircd_log
2000
2001         * ircd/res.c (send_res_msg): use log_write instead of ircd_log
2002
2003         * ircd/m_who.c: use log_write instead of write_log; no longer
2004         conditionalize on WPATH; mark dead ircd_log calls
2005
2006         * ircd/m_uping.c: mark dead ircd_log call
2007
2008         * ircd/m_server.c (mr_server): use log_write instead of ircd_log
2009
2010         * ircd/m_restart.c: use log_write instead of ircd_log; mark dead
2011         ircd_log calls
2012
2013         * ircd/m_rehash.c (mo_rehash): use log_write instead of ircd_log
2014
2015         * ircd/m_oper.c: use log_write instead of ircd_log; no longer
2016         conditionalize on FNAME_OPERLOG; mark dead ircd_log calls
2017
2018         * ircd/m_kill.c: mark dead ircd_log calls
2019
2020         * ircd/m_connect.c: use log_write instead of ircd_log; mark dead
2021         ircd_log
2022
2023         * ircd/m_clearmode.c: use log_write instead of write_log; no
2024         longer conditionalize on OPATH
2025
2026         * ircd/jupe.c: use log_write instead of write_log; no longer
2027         conditionalize on JPATH
2028
2029         * ircd/ircd_log.c: add USER subsystem; remove ircd_log() compat
2030         function; fix a couple of bugs
2031
2032         * ircd/ircd_alloc.c: fixed a comment
2033
2034         * ircd/ircd.c: use log_write instead of ircd_log; fold server
2035         notice generation in a couple of cases
2036
2037         * ircd/gline.c: use log_write instead of write_log; no longer
2038         conditionalize on GPATH
2039
2040         * ircd/channel.c (modebuf_flush_int): use log_write instead of
2041         write_log; no longer conditionalize on OPATH
2042
2043         * ircd/Makefile.in: run make depend, since dependencies have
2044         changed
2045
2046         * doc/example.conf: add system USER to documentation
2047
2048         * include/ircd_log.h: add system USER; remove old ircd_log()
2049         declarations
2050
2051 2000-12-04  Isomer <isomer@coders.net>
2052         * ircd/m_names.c: Add NAMES_EON to do_names to say add a
2053         'end_of_names' reply when done.
2054         * ircd/m_join.c: use NAMES_EON as mentioned above
2055
2056 2000-12-01  net  <simms@LUCIDA.QC.CA>
2057
2058         * ircd/motd.c: add a freelist for struct Motds
2059
2060 2000-11-30  Kevin L. Mitchell  <klmitch@mit.edu>
2061
2062         * ircd/s_stats.c (report_feature_list): report features--only
2063         local opers can see logging configuration, since it doesn't really
2064         mean anything to users
2065
2066         * ircd/s_err.c: add reply messages for new feature subsystem
2067
2068         * ircd/s_conf.c: add F lines to .conf
2069
2070         * ircd/parse.c: add the message descriptions for /set, /reset, and
2071         /get
2072
2073         * ircd/m_stats.c: add /stats f
2074
2075         * ircd/m_set.c (mo_set): implement /set
2076
2077         * ircd/m_reset.c (mo_reset): implement /reset
2078
2079         * ircd/m_rehash.c: /rehash m now flushes MOTD cache, and /rehash l
2080         reopens log files (for log file rotation)
2081
2082         * ircd/m_get.c (mo_get): implement /get
2083
2084         * ircd/ircd_log.c: use int instead of void return value; add
2085         log_report_features() and log_canon(); fix a function that
2086         disappears if DEBUGMODE not #define'd
2087
2088         * ircd/ircd_features.c: functions to manipulate feature settings
2089         either from the config file or with the new /set, /reset, and /get
2090         commands
2091
2092         * ircd/Makefile.in: add new .c files, run make depend
2093
2094         * include/s_stats.h: declare report_feature_list() (/stats f
2095         handler)
2096
2097         * include/numeric.h: add RPL_STATSFLINE, RPL_FEATURE,
2098         ERR_NOFEATURE, ERR_BADLOGTYPE, ERR_BADLOGSYS, and ERR_BADLOGVALUE
2099         reply numerics
2100
2101         * include/msg.h: add defines for SET, RESET, and GET
2102
2103         * include/ircd_log.h: add a function to canonicalize subsystem
2104         names; change some void return values to int
2105
2106         * include/ircd_features.h: new features subsystem handles all the
2107         manipulation of special features, like log files
2108
2109         * include/handlers.h: declare new mo_{s,res,g}et message handlers
2110         for fiddling with features run-time
2111
2112         * include/client.h (SNO_DEFAULT): don't set SNO_DEBUG by default;
2113         seemed like a good idea at the time...
2114
2115         * doc/example.conf: document new F lines
2116
2117 2000-11-29  Kevin L. Mitchell  <klmitch@mit.edu>
2118
2119         * ircd/s_debug.c: rewrite debug_init() and vdebug() in terms of
2120         new logging functions, which have special support for the debug
2121         log; added loop detection to vdebug(), so that I can
2122         sendto_opmask_butone() from log_vwrite() without incurring another
2123         call to vdebug()
2124
2125         * ircd/s_conf.c (rehash): call log_reopen() from rehash routine;
2126         this allows log file rotations
2127
2128         * ircd/m_kill.c: call log_write_kill() instead of ircd_log_kill()
2129
2130         * ircd/ircd_log.c: much more work fleshing out the interface;
2131         removed old interface; included backwards-compat ircd_log()
2132         function that logs to subsystem LS_OLDLOG
2133
2134         * ircd/ircd.c: switch to new log_init()/log_close()/log_reopen()
2135         functions
2136
2137         * include/ircd_log.h: include stdarg.h for va_list; move ordering
2138         warning to top of file; fill out LogSys enum; declare new
2139         log_debug_init(), log_vwrite(), log_write_kill(), and
2140         log_[sg]et_*() functions; add flags argument to log_write();
2141         defined flags to inhibit various logging actions
2142
2143         * include/client.h: added support for new SNO_DEBUG, enabled only
2144         if DEBUGMODE is defined
2145
2146 2000-11-28  Kevin L. Mitchell  <klmitch@mit.edu>
2147
2148         * ircd/ircd_log.c: make sure the various LOG_* constants are
2149         defined (probably not needed, since #include <syslog.h> isn't
2150         conditional); various static data needed for the new logging
2151         functions; definitions of new logging functions
2152
2153         * include/ircd_log.h: new LogSys enum, declarations for part of
2154         new logging API
2155
2156         * ircd/motd.c: we were setting type to MOTD_CLASS unconditionally,
2157         which was of course stupid; switched to using switch/case in
2158         initialization in motd_create(); zero the MotdList.other pointer
2159         from motd_clear()
2160
2161         * ircd/ircd.c (main): motd_init() has to come before init_conf(),
2162         or we overwrite init_conf()'s hard work with respect to T-lines
2163
2164 2000-11-27  Kevin L. Mitchell  <klmitch@mit.edu>
2165
2166         * ircd/s_stats.c: comment out report_motd_list and include a
2167         reference to motd_report()
2168
2169         * ircd/s_conf.c: rip out the old MOTD manipulation functions; call
2170         motd_add() from the conf parser; call motd_clear() from the rehash
2171         routine; remove the no longer needed memory clearing and reloading
2172         stuff from the rehash service routine
2173
2174         * ircd/motd.c: loads new API, including static internal functions
2175         to do allocation/deallocation, etc.
2176
2177         * ircd/m_stats.c: use new motd_report() instead of
2178         report_motd_list()
2179
2180         * ircd/m_motd.c: use new syntax for motd_send()
2181
2182         * ircd/ircd.c: use new motd_init() function
2183
2184         * ircd/Makefile.in (SRC): forgot to add motd.c to SRC in
2185         Makefile.(in); also ran make depend
2186
2187         * include/motd.h: don't need config.h, but now do need time.h;
2188         define new structures and constants; redefine old API and define
2189         new functions
2190
2191 2000-11-22  Kevin L. Mitchell  <klmitch@mit.edu>
2192
2193         * ircd/s_user.c (register_user): use motd_signon() instead of
2194         calling m_motd; much cleaner this way
2195
2196         * ircd/motd.c: write the new motd_* stuff to make MOTD handling
2197         less of a crock
2198
2199         * ircd/m_motd.c: rewrite m{,s}_motd to call out to new motd_*
2200         functions
2201
2202         * include/motd.h: define new MOTD API stuff
2203
2204 2000-11-20  Kevin L. Mitchell  <klmitch@mit.edu>
2205
2206         * ircd/ircd_reply.c (protocol_violation): rewrite
2207         protocol_violation so it'll actually work
2208
2209         oh, yeah, use %s -> cptr->name, instead of %c -> cptr, so we get
2210         the client's real name in there.
2211
2212         * ircd/m_motd.c (m_motd): Iso's addition of get_client_class(sptr)
2213         resulted in core dumps if NODEFAULTMOTD is defined, because m_motd
2214         gets called from register_user with a NULL sptr.  This is probably
2215         a design problem, but this bandaid will do for now...
2216
2217 2000-11-19  Isomer <isomer@coders.net>
2218         * ircd/ircd_reply.c: added 'protocol_violation', thus alerting us
2219         to problems in the server<->server protocol.
2220
2221         * ircd/m_connect.c: allow remote connects with a port of '0'
2222         meaning to use the port in the config file.
2223
2224         * ircd/m_create.c: Enable hacking protection, lets see how far we
2225         get.
2226
2227         * ircd/m_error.c: The RFC says never accept ERROR from unreg'd
2228         clients, so we don't any more.
2229
2230         * ircd/m_kill.c: The kill path is now made up of numnicks of servers,
2231         and the user@host is displayed of the victim.
2232
2233         * ircd/m_map.c: reloaded 'dump_map'.
2234
2235         * ircd/m_trace.c: allow per class T:
2236
2237         * ircd/m_stats.c: allow local opers /remote stats anywhere on the 'net.
2238
2239 2000-11-17  Isomer <isomer@coders.net>
2240
2241         * ircd/m_topic.c: Fixed bug where we'd only send to clients topics
2242         that were the *same* instead of different.  Oh the embarrasment!
2243
2244         * ircd/IPcheck.c: Merged net's fix.
2245
2246 2000-11-02  Kevin L. Mitchell  <klmitch@mit.edu>
2247
2248         * ircd/m_whois.c: remove compiler warning by adding a newline to
2249         end of file
2250
2251         * ircd/m_names.c: moved the flags up to s_user.h
2252
2253         * ircd/m_join.c: call do_names instead of m_names; restructure
2254         ms_join to never transmute a JOIN into a CREATE, but use the TS in
2255         the JOIN (if present) to timestamp the channel
2256
2257         * ircd/channel.c: send JOINs individually, instead of grouping
2258         them, so that we can send the channel's creation time
2259
2260         * include/s_user.h: declare do_names()
2261
2262 2000-10-30  Isomer <isomer@coders.net>
2263         * ircd/m_oper.c: Fixed warning
2264
2265 2000-10-30  Isomer <isomer@coders.net>
2266         * ircd/m_oper.c: Fixed over agressive cut and no paste
2267
2268 2000-10-30  Isomer <isomer@coders.net>
2269
2270         * ircd/m_topic.c: Restructured, fixed bug where topics on local
2271         channels are propergated (I forget who pointed this out to me, but
2272         thanks anyway).  Also to save bandwidth don't send the topic to
2273         users if the topic is already the same on the server (but still
2274         propergate to other servers).  X/W's "autotopic" feature must
2275         chew a lot of bandwidth, hopefully this will help reduce this.
2276
2277         * doc/rfc1459.rfc: Updated documentation on /topic.
2278
2279         * ircd/listener.c: snotice warnings about failed accept()'s
2280         potentially warning admins that they're running out of fd's.
2281
2282         * ircd/stats.c, ircd/class.c: Removed /stats v, added number of
2283         people in a class in /stats y
2284
2285         * ircd/m_create.c: Checks for timewarp hacking and squit's
2286         evil servers. (currently disabled)
2287         
2288
2289 2000-10-30  net <simms@lucida.qc.ca>
2290         
2291         * ircd/gline.c: Fixed various bugs Isomer left behind.
2292
2293 2000-10-26  Kevin L. Mitchell  <klmitch@mit.edu>
2294
2295         * ircd/m_join.c (m_join): reply on attempt to join a BADCHANed
2296         channel is now ERR_BANNEDFROMCHAN instead of ERR_BADCHANNAME
2297
2298 2000-10-24  Kevin L. Mitchell  <klmitch@mit.edu>
2299
2300         * ircd/channel.c: ok, now last mode rules; mode +ps will always
2301         result in +s (and won't send a mode if the channel is already +s);
2302         mode +sp will always result in +p; -n+n on a +n channel results in
2303         no mode change; -n+n on a -n channel results in a +n mode change;
2304         etc.
2305
2306 2000-10-23  Kevin L. Mitchell  <klmitch@mit.edu>
2307
2308         * ircd/channel.c: add "add" and "del" elements to ParseState to
2309         avoid not-too-pretty -p+s when +s is sufficient; fix a bug in
2310         mode_parse_limit that caused it to clear all channel modes
2311         prematurely; restructure mode_parse_mode to avoid calling
2312         modebuf_mode too early (ties in with first mentioned change);
2313         better logic for +p/+s mutual exclusivity; initialize "add" and
2314         "del" elements in mode_parse; send simple modes down to
2315         modebuf_mode after the loop in mode_parse
2316
2317 2000-09-28  Greg Sikorski <gte@atomicrevs.demon.co.uk>
2318         * ircd/m_names.c: Fixed a non-lethal logic error that 
2319         triggers an assert() in find_member_link while debugging.
2320         (Spotted by Maniac-).
2321 2000-09-19  Thomas Helvey <helveytw@home.com>
2322         * ircd/s_conf.c: move K:lines to their own list and data
2323         structures, add supporting code.
2324         * ircd/m_stats.c: cleanup stats processing a bit move
2325         kline listing code to a new function, haven't figured
2326         out where it goes yet tho'
2327         * ircd/s_stats.c: added K:line bulk lister
2328         * include/s_conf.h: added new DenyConf struct
2329         * *[ch]: fixeup code that depended on changes
2330
2331 2000-09-17  Thomas Helvey <helveytw@home.com>
2332         * ircd/class.c: encapsulate class list
2333         * include/class.h: clean up classes
2334         * * fixup code that depended on changes
2335
2336 2000-09-17  Thomas Helvey <helveytw@home.com>
2337         * ircd/s_conf.c: add me to local conf
2338         * include/s_conf.h: move CONF_ME macro to chkconf.c
2339         * ircd/s_bsd.c: cleanup initialization, allow virtual host
2340         to be changed by rehash
2341
2342 2000-09-17  Thomas Helvey <helveytw@home.com>
2343         * include/class.h: add missing prototype
2344         * ircd/class.c: make argument to get_conf_class const
2345
2346 2000-09-17  Thomas Helvey <helveytw@home.com>
2347         * ircd/*.c: merged in changes from 2.10.10.pl12, cleanup
2348         merge conflicts.
2349         * ircd/*.h: merged in changes from 2.10.10.pl12, cleanup
2350         merge conflicts
2351
2352 2000-09-16  Thomas Helvey <helveytw@home.com>
2353         * ircd/s_conf.c: add code for server struct
2354         * ircd/client.c: copy of class.c sort of, new file for client
2355         specific operations, will move things here as appropriate,
2356         currently only one function is exported from here.
2357         * ircd/*.c: general logic cleanups, convert negatives to
2358         positives in places.
2359
2360 2000-09-16  Thomas Helvey <helveytw@home.com>
2361         * ircd/s_conf.c: add code for new crule data structs, strip quotes
2362         * ircd/crule.c: clean up scary casting a bit, type safety stuff
2363         * include/s_conf.h: add CRuleConf struct and support, remove
2364         unused constants
2365         * include/crule.h: type safety cleanups
2366         * ircd/*.c: fixup code that depended on stuff I changed
2367
2368 2000-09-15  Thomas Helvey <helveytw@home.com>
2369         * ircd/s_conf.c: start adding code for new conf data structs, changed
2370         listeners, admin line, motd lines, class lines. Move validate_hostent
2371         to resolver. General mayhem.
2372         * include/s_conf.h: new data structs and accessors
2373         * ircd/res.c: move validate_hostent here, rewrite, use regular
2374         expression for validation.
2375         * doc/example.conf: update docs for port
2376
2377 2000-09-14  Thomas Helvey <helveytw@home.com>
2378         * ircd/s_conf.c (conf_init): rewrite conf file parser, start to break
2379         up conf_init into managable chunks.
2380         * ircd/listener.c (set_listener_mask): fix logic bug core dump.
2381         * include/s_conf.h: add new data struct for local info (unwinding the mess).
2382
2383 2000-09-13  Thomas Helvey <helveytw@home.com>
2384         * ircd/list.c: put Clients in free lists, pre-allocate MAXCONNECTIONS
2385         local clients.
2386         * ircd/list.c: put SLinks in free lists
2387         * ircd/channel.c: put Memberships in free lists
2388         * ircd/ircd.c: rearrange initializations a bit in main
2389         Note: With these changes, ircd NEVER frees Clients, SLinks or
2390         Memberships. It will also rarely need to allocate new
2391         ones during net bursts and other disruptions. This should
2392         cut down on memory fragmentation a bit as well.
2393
2394 2000-08-30  Kevin L. Mitchell  <klmitch@mit.edu>
2395
2396         * ircd/m_names.c (do_names): pull-up from do_names fix in
2397         u2.10.10.pl11
2398
2399 2000-07-15  Perry Lorier       <Isomer@coders.net>
2400         * various: IP only k:'s and G:'s now do bit tests instead of two(!) 
2401                  match()'s.  Major Major cpu savings.  Also speed up the
2402                  other case slightly.  As a side effect you can now
2403                  k/Gline *@10.0.0.0/8.  I'll do bans tomorrow, it's nearing
2404                  3am.
2405
2406 2000-07-15  Perry Lorier       <Isomer@coders.net>
2407         * various: Fixed warnings after compiling on an alpha.
2408 2000-07-09  Perry Lorier       <Isomer@coders.net>
2409         * doc/ircd.8: Applied grammitical changes by Liandrin, applied
2410                       changes suggested by various other people.
2411         * ircd/IPcheck.c: More bug fixes.  Current problem appears to be
2412                         that it gets a corrupt entry somehow.
2413 2000-07-09  Greg Sikorski <gte@atomicrevs.demon.co.uk>
2414         * ircd/m_oper.c: Clean up compiler warning.
2415
2416 2000-07-08  Perry Lorier       <Isomer@coders.net>
2417         * doc/ircd.8: Updated the documentation, it was slightly out of date
2418                       being updated around 1989.
2419         * ircd/m_whois.c: Rewrote for clarity, and probably a bit more speed.
2420                           fixed a few minor glitches.
2421         * doc/rfc1459.unet: Updated.
2422         * ircd/IPcheck.c: Fixed more bugs.
2423         * ircd/s_bsd.c: We now keep track of servers we've conected.
2424
2425 2000-07-02  Perry Lorier       <Isomer@coders.net>
2426         * ircd/s_misc.c: Fixed remote IPcheck bug.  Ok, I'm a moron, so sue
2427                         me.  Thanks to Hektik, thanks thanks thanks thanks
2428                         thanks thanks thanks thanks thank thanks thank thanks
2429
2430 2000-07-01  Perry Lorier       <Isomer@coders.net>
2431         * ircd/s_conf.c: "Fixed" the "bug" where people would "evade" K:'s.
2432         * ircd/s_conf.c, include/IPcheck.h: Fixed compile warnings.
2433
2434 2000-06-22  Perry Lorier       <Isomer@coders.net>
2435         * ircd/IPcheck.c: Large chunks redone.
2436         * ircd/s_conf.c: Changes due to IPcheck - ONE nolonger supported,
2437                         single AND double digit limits are allowed now.
2438         * misc other: Changes to IPcheck.
2439
2440 2000-06-30  Perry Lorier       <Isomer@coders.net>
2441         * ircd/ircd.c: Fix command line parameter bugs.
2442
2443 2000-06-30  Perry Lorier       <Isomer@coders.net>
2444         * ircd/m_kill.c: Fixed bug with LOCAL_KILL_ONLY
2445         * ircd/m_nick.c: Tidied things up.
2446
2447 2000-06-12 Joseph Bongaarts <foxxe@trms.com>
2448         * ircd/m_stats.c: Iso forgot mo_stats when he added /stats v
2449         
2450 2000-05-29  Perry Lorier       <Isomer@coders.net>
2451         * ircd/m_stats.c: add /stats v to do only the last part of the /trace
2452         * ircd/IPcheck.c: Cosmetic change, if we meddle with it enough do
2453                         you think it'll get bored and fix itself?
2454
2455 2000-06-09  Greg Sikorski <gte@atomicrevs.demon.co.uk>
2456
2457         * ircd/m_names.c: Clean up compiler warnings.
2458
2459 2000-06-09  Kevin L. Mitchell  <klmitch@mit.edu>
2460
2461         * ircd/channel.c (mode_parse_client): don't send warning if
2462         there's not enough arguments for a +/-o/v; means the habit of
2463         doing "/mode #channel +oooooo bob" doesn't result in a bunch of
2464         error messages
2465
2466 2000-06-04  Greg Sikorski <gte@atomicrevs.demon.co.uk>
2467
2468         * ircd/m_names.c: Re-factor code to remove unneccessary
2469         GlobalChannelList iteration every time someone joins a channel.
2470
2471 2000-06-02  Kevin L. Mitchell  <klmitch@mit.edu>
2472
2473         * ircd/s_user.c: add struct Gline * argument to register_user;
2474         look up global glines and repropagate them if necessary; send
2475         acknowledgement of gline to remote servers when registering users
2476
2477         * ircd/s_serv.c (server_estab): don't send acknowledgement of
2478         local glines to remote servers; do send gline acknowledgement of
2479         bursted users
2480
2481         * ircd/m_user.c (m_user): pass new struct Gline * argument to
2482         register_user
2483
2484         * ircd/m_pong.c: pass new struct Gline * argument to register_user
2485
2486         * ircd/m_nick.c (ms_nick): document protocol change
2487
2488         * ircd/gline.c: support GLINE_LASTMOD
2489
2490         * include/s_user.h: add struct Gline * argument to register_user
2491
2492         * include/gline.h: add GLINE_LASTMOD to look up non-zero lastmods
2493
2494         * ircd/s_conf.c (find_kill): add unsigned int argument to
2495         gline_lookup()
2496
2497         * ircd/gline.c: add GLINE_GLOBAL to lookup or find only global
2498         glines; add unsigned int argument to gline_lookup()
2499
2500         * include/gline.h: add GLINE_GLOBAL flag; add unsigned int
2501         argument to gline_lookup()
2502
2503         * ircd/m_server.c: Resend jupe only when there is no %<lastmod>
2504         parameter, or when it falls out of bounds: see comments prior to
2505         call to jupe_resend(); call server_estab with struct Jupe
2506         parameter, so that we place the appropriate %<lastmod> in the
2507         appropriate place.
2508
2509         * ircd/s_serv.c (server_estab): send %<lastmod> for introduced
2510         server, as well as for servers when we're sending the BURST
2511
2512         * include/s_serv.h: add a struct Jupe * to the arguments for
2513         server_estab() so that we can send the appropriate lastmod
2514         parameter
2515
2516         * ircd/m_gline.c (ms_gline): actually, this should be the
2517         slightest bit more efficient...
2518
2519         * ircd/m_jupe.c (ms_jupe): actually, this should be the slightest
2520         bit more efficient...
2521
2522         * ircd/m_gline.c (ms_gline): inhibit GLINE processing resends
2523         during netburst
2524
2525         * ircd/m_jupe.c (ms_jupe): inhibit JUPE processing resends during
2526         netburst
2527
2528         * ircd/channel.c (joinbuf_join): really remove user from local
2529         channels
2530
2531 2000-05-29  Perry Lorier       <Isomer@coders.net>
2532         * ircd/m_names.c: Removed redundant space. 
2533         * ircd/s_bsd.c: Fixed incorrect syntax on ERROR line.
2534
2535 2000-05-18  Kevin L. Mitchell  <klmitch@mit.edu>
2536
2537         * ircd/m_burst.c (ms_burst): er...that should have been a ",", not
2538         a " "
2539
2540 2000-05-04  Kevin L. Mitchell  <klmitch@mit.edu>
2541
2542         * ircd/channel.c: replace bogus assertions with returns, which is
2543         logically correct; only wipe out limit/key if they were originally
2544         set in the first place; remove user from channel when doing a
2545         PARTALL; only send MODE +o for user CREATEing channel if user is
2546         not MyUser--CREATE will only be used if the channel did not
2547         originally exist, therefore we can assume no one local is on the
2548         channel anyway, and we don't exactly need for the user to see an
2549         explicit +o for themselves
2550
2551         * doc/readme.gline: describe the syntax of the GLINE command
2552
2553         * doc/readme.jupe: update to reflect a couple of changes to JUPE
2554
2555         * ircd/gline.c: don't propagate local changes
2556
2557         * ircd/jupe.c: don't propagate local changes
2558
2559         * ircd/m_gline.c (mo_gline): force local flag when deactivating
2560         glines with 0 lastmod
2561
2562         * ircd/gline.c (gline_deactivate): G-lines with zero lastmod time
2563         are now removed instead of being deactivated
2564
2565         * ircd/m_gline.c (ms_gline): make G-lines of the form "GLINE *
2566         -<mask>" be accepted
2567
2568         * ircd/channel.c (send_channel_modes): deal with one of the last
2569         vestiges of sendbuf
2570
2571         * ircd/m_burst.c (ms_burst): debugged ban processing; removed
2572         debugging hooks
2573
2574         * ircd/channel.c (modebuf_extract): remove debugging
2575         sendto_opmask_butone calls
2576
2577 2000-05-03  Kevin L. Mitchell  <klmitch@mit.edu>
2578
2579         * ircd/channel.c: support a couple of new flags to support using
2580         mode_parse; fix some bugs with 0 struct ModeBuf *; implementation
2581         of modebuf_extract to extract added flags for use by ms_burst
2582
2583         * include/channel.h: a couple of new flags to support using
2584         mode_parse inside ms_burst
2585
2586         * ircd/m_burst.c (ms_burst): brand new implementation of BURST
2587
2588         * ircd/m_endburst.c: add loop to processing of end_of_burst to
2589         free empty channels after the BURST is over.
2590
2591         * ircd/m_server.c: convert to use new send.c functions--I wanted
2592         to rewrite it from scratch, but the logic's pretty complex; I may
2593         still rewrite it, though...
2594
2595 2000-05-02  Thomas Helvey <tomh@inxpress.net>
2596
2597         * ircd/ircd.c: fix broken header include ordering
2598
2599 2000-05-02  Thomas Helvey <tomh@inxpress.net>
2600         
2601         * ircd/IPcheck.c: cleanups for ZenShadow's cleanups
2602         review emailed privately
2603
2604         * include/IPcheck.h: removed unneeded include
2605
2606 2000-05-02  Kevin L. Mitchell  <klmitch@mit.edu>
2607
2608         * ircd/s_user.c (hunt_server): throw in a comment so I know what
2609         the sendto_one is for
2610
2611         * include/querycmds.h (Count_unknownbecomesclient): convert to
2612         sendto_opmask_butone
2613
2614         * ircd/send.c: start removing dead code
2615
2616         * include/send.h: start removing dead code
2617
2618         * ircd/m_rping.c: convert to sendcmdto_one / send_reply /
2619         hunt_server_cmd
2620
2621         * ircd/m_rpong.c: convert to sendcmdto_one / send_reply
2622
2623 2000-05-01  Kevin L. Mitchell  <klmitch@mit.edu>
2624
2625         * ircd/m_stats.c: convert to sendcmdto_one / send_reply
2626
2627         * ircd/m_kick.c: Completely reimplement m_kick
2628
2629         * ircd/channel.c: send_user_joins removed; it was dead code,
2630         anyway...
2631
2632 2000-05-01  Perry Lorier <isomer@coders.net>
2633         * ircd/m_invite.c: Fix for the rest of m_invite.c, and again.
2634         * ircd/channels.c: My fix for the part problem.  Untested, probably
2635                 won't work.  Can't be much worse than the current problem.
2636                 it'll either work or core, take your pick.
2637
2638
2639 2000-04-30  Perry Lorier <isomer@coders.net>
2640         * config/config-sh.in: Fix for CONNEXIT
2641         * ircd/s_{user,misc}.c: Fix for CONNEXIT
2642         * ircd/m_invite.c: Fix for incorrectly numnickified invite.
2643                         (Kev: Want to come talk to me about this?)
2644
2645 2000-04-30  Steven M. Doyle <steven@doyle.net>
2646         * ircd/ircd.c
2647           - general cleanups and readability enhancements
2648           - rewrite of setuid/chroot code.
2649           - server will no longer run as root
2650           - -DPROFIL compile option removed
2651           - Fixed IPcheck API calls
2652  
2653         * config/config-sh.in
2654           - Fixed up chroot compile options
2655           - Added options for debug and profile compiles
2656  
2657         * config/gen.ircd.Makefile
2658           - Support for new debug/profile options
2659  
2660         * ircd/Makefile.in
2661           - Support for new debug/profile options
2662  
2663         * ircd/ircd_signal.c
2664           - Removed -DPROFIL
2665
2666         * include/IPcheck.h
2667           - Removed old API prototypes, added new ones
2668         
2669         * ircd/IPcheck.c
2670           - Readability cleanups (well, I -think-...)
2671           - Changed IPRegistryEntry.last_connect to a time_t.  The previously
2672             used unsigned short was probably causing interesting things after
2673             a client had been connected longer than about 65,535 seconds...
2674           - Removed old API functions.
2675
2676         * ircd/whocmds.c
2677           - Removed IPcheck.h include
2678         
2679         * Additionally modified IPcheck API calls in:
2680           - ircd/m_nick.c
2681           - ircd/m_auth.c
2682           - ircd/s_bsd.c
2683           - ircd/s_conf.c
2684           - ircd/s_misc.c
2685           - ircd/s_serv.c
2686           - ircd/s_user.c
2687         
2688         
2689 2000-04-30  Perry Lorier <isomer@coders.net>
2690         * ircd/s_bsd.c: Sigh. :)
2691         * ircd/m_mode.c: fix for modeless channels by poptix.
2692
2693 2000-04-29  Kevin L. Mitchell  <klmitch@mit.edu>
2694
2695         * ircd/m_join.c: reimplement JOIN in terms of struct JoinBuf
2696
2697         * ircd/channel.c (clean_channelname): make clean_channelname also
2698         truncate long channel names
2699
2700 2000-04-28  Kevin L. Mitchell  <klmitch@mit.edu>
2701
2702         * ircd/m_create.c: reimplement CREATE in terms of struct JoinBuf
2703
2704         * ircd/channel.c: implemented joinbuf_init, joinbuf_join,
2705         joinbuf_flush
2706
2707         * include/channel.h: definitions and declarations for the struct
2708         JoinBuf abstraction
2709
2710 2000-04-29  Perry Lorier <isomer@coders.net>
2711         * ircd/s_bsd.c: Ok, so I thought I compiled and tested this...
2712
2713 2000-04-29  Perry Lorier <isomer@coders.net>
2714         * ircd/s_bsd.c: Add debugging code to IPcheck
2715
2716 2000-04-28  Kevin L. Mitchell  <klmitch@mit.edu>
2717
2718         * include/ircd_reply.h (SND_EXPLICIT): use instead of RPL_EXPLICIT
2719
2720         * ircd/ircd_reply.c (send_reply): use SND_EXPLICIT instead of
2721         RPL_EXPLICIT
2722
2723         * ircd/m_userhost.c (m_userhost): add a dead code comment
2724
2725         * ircd/m_desynch.c: forgot one...
2726
2727         * ircd/m_rehash.c (mo_rehash): er, duplicates :)
2728
2729         * ircd/m_proto.c (proto_send_supported): just change a comment so
2730         it doesn't show up in my scans
2731
2732         * ircd/ircd_reply.c (send_reply): fix a slight bug...
2733
2734         * ircd/s_numeric.c (do_numeric): use new sendcmdto_* functions,
2735         kinda hackish...
2736
2737         * ircd/parse.c (parse_server): argument wrangling to make
2738         processing in do_numeric a little easier to deal with
2739
2740         * ircd/s_serv.c (server_estab): SERVER should come from
2741         acptr->serv->up, not &me
2742
2743         * ircd/m_lusers.c: accidentally left out sptr for a %C
2744
2745         * ircd/send.c: hack to support doing wallchops...
2746
2747         * ircd/m_whowas.c: convert to new send functions
2748
2749         * ircd/m_whois.c: convert to new send functions
2750
2751         * ircd/m_who.c: convert to new send functions
2752
2753         * ircd/m_wallops.c: convert to new send functions
2754
2755         * ircd/m_wallchops.c: convert to new send functions
2756
2757         * ircd/m_version.c: convert to new send functions
2758
2759         * ircd/m_userip.c: convert to new send functions
2760
2761         * ircd/m_userhost.c: convert to new send functions
2762
2763         * ircd/m_uping.c: convert to new send functions
2764
2765         * ircd/m_trace.c: convert to new send functions
2766
2767         * ircd/m_topic.c: convert to new send functions
2768
2769         * ircd/m_time.c: convert to new send functions
2770
2771         * ircd/m_squit.c: convert to new send functions
2772
2773         * ircd/m_silence.c: convert to new send functions
2774
2775         * ircd/m_settime.c: convert to new send functions
2776
2777         * ircd/m_restart.c: convert to new send functions
2778
2779         * ircd/m_rehash.c: convert to new send functions
2780
2781         * ircd/m_privmsg.c: convert to new send functions
2782
2783         * ircd/m_pong.c: convert to new send functions
2784
2785         * ircd/m_ping.c: convert to new send functions
2786
2787         * ircd/m_pass.c: convert to new send functions
2788
2789         * ircd/m_opmode.c: convert to new send functions
2790
2791         * ircd/m_oper.c: convert to new send functions
2792
2793         * ircd/m_notice.c: convert to new send functions
2794
2795         * ircd/m_nick.c: convert to new send functions
2796
2797         * ircd/m_names.c: convert to new send functions
2798
2799         * ircd/m_motd.c: convert to new send functions
2800
2801         * ircd/m_mode.c: convert to new send functions
2802
2803         * ircd/m_map.c: convert to new send functions
2804
2805         * ircd/m_lusers.c: convert to new send functions
2806
2807         * ircd/m_list.c: convert to new send functions
2808
2809         * ircd/m_links.c: convert to new send functions
2810
2811         * ircd/m_kill.c: convert to new send functions
2812
2813         * ircd/m_jupe.c: convert to new send functions
2814
2815         * ircd/m_invite.c: convert to new send functions
2816
2817         * ircd/m_info.c: convert to new send functions
2818
2819         * ircd/m_help.c: convert to new send functions
2820
2821         * ircd/m_gline.c: convert to new send functions
2822
2823         * ircd/m_error.c: convert to new send functions
2824
2825         * ircd/m_endburst.c: convert to new send functions
2826
2827         * ircd/m_die.c: convert to new send functions
2828
2829         * ircd/m_destruct.c: convert to new send functions
2830
2831         * ircd/m_defaults.c: convert to new send functions
2832
2833         * ircd/m_connect.c: convert to new send functions
2834
2835 2000-04-28  Perry Lorier <isomer@coders.net>
2836         * RELEASE.NOTES: Describe a few more undocumented features.
2837         * config/config-sh.in: change the default paths for logging
2838         and the recommended number of channels.
2839         * include/supported.h: Rearrange slightly, added CHANTYPE's
2840
2841 2000-04-27  Kevin L. Mitchell  <klmitch@mit.edu>
2842
2843         * ircd/m_close.c: convert to send_reply
2844
2845         * ircd/m_clearmode.c: convert to send_reply, sendcmdto_serv_butone
2846
2847         * ircd/m_away.c: convert to send_reply and sendcmdto_serv_butone
2848
2849         * ircd/m_admin.c: convert to send_reply and hunt_server_cmd
2850
2851         * ircd/s_user.c (hunt_server_cmd): new hunt_server replacement
2852         that takes cmd and tok arguments, etc.  NOTE: THIS IMPLEMENTATION
2853         HAS A MAJOR HACK!!!  The whole hunt_server architecture should be
2854         carefully rethought...
2855
2856         * ircd/s_stats.c (hunt_stats): use new hunt_server_cmd
2857
2858         * include/s_user.h: hunt_server_cmd -- replacement for hunt_server
2859
2860         * ircd/s_misc.c: *sigh* 2.10.10 doesn't support squitting by
2861         numeric nick; therefore, we have to use the server name
2862
2863         * ircd/m_squit.c (ms_squit): allow to squit by server numeric nick
2864
2865         * ircd/send.c: fix minor bugs
2866
2867         * ircd/s_user.c (check_target_limit): mark dead code so I filter
2868         it when I grep
2869
2870         * ircd/s_serv.c (exit_new_server): mark dead code so I filter it
2871         when I grep
2872
2873         * ircd/parse.c: mark dead code so I filter it when I grep
2874
2875         * ircd/map.c: mark dead code so I filter it when I grep
2876
2877         * ircd/ircd.c: mark dead code so I filter it when I grep
2878
2879         * ircd/ircd_relay.c: convert over to new sendcmdto_*, send_reply
2880         functions
2881
2882         * ircd/channel.c: mark dead code so I filter it when I grep
2883
2884         * ircd/s_stats.c: use send_reply instead of sendto_one w/rpl_str;
2885         hope I'm not stepping on toes...
2886
2887         * ircd/s_conf.c: more sendto_opmask_butone / send_reply
2888         conversions; use ircd_snprintf in a couple of cases to negate the
2889         possibility of buffer overflow
2890
2891 2000-04-26  Kevin L. Mitchell  <klmitch@mit.edu>
2892
2893         * ircd/channel.c: convert as much as possible to new send
2894         semantics
2895
2896         * ircd/send.c (sendcmdto_common_channels): fix a subtle bug --
2897         test member->user->from->fd, not from->fd
2898
2899         * ircd/gline.c (gline_add): go ahead and add badchans; we just
2900         won't look for them in m_gline; this way, they always work...
2901
2902         * ircd/jupe.c: use ircd_vsnprintf conversion specifiers
2903
2904         * ircd/gline.c: since write_log now uses ircd_vsnprintf, use
2905         ircd_vsnprintf conversion specifiers
2906
2907         * ircd/support.c (write_log): use ircd_vsnprintf for write_log, so
2908         I have my conversion specifiers
2909
2910         * ircd/gline.c (do_gline): use send_reply for ERR_YOUREBANNEDCREEP
2911
2912         * ircd/send.c (sendcmdto_flag_butone): explicitly send WALLOPS to
2913         local users
2914
2915         * ircd/s_serv.c (exit_new_server): rewrite exit_new_server to be a
2916         little less brain-dead
2917
2918         * ircd/s_misc.c: use sendcmdto_one, sendrawto_one, and send_reply
2919
2920         * ircd/s_debug.c: use send_reply with RPL_EXPLICIT for
2921         RPL_STATSDEBUG
2922
2923         * ircd/res.c (cres_mem): use send_reply with RPL_EXPLICIT for
2924         RPL_STATSDEBUG
2925
2926         * ircd/list.c (send_listinfo): use send_reply with RPL_EXPLICIT
2927         for RPL_STATSDEBUG
2928
2929         * ircd/m_pong.c: use RPL_EXPLICIT for ERR_BADPING
2930
2931         * ircd/ircd.c: use RPL_EXPLICIT for ERR_BADPING
2932
2933         * ircd/s_user.c (register_user): use RPL_EXPLICIT for
2934         ERR_INVALIDUSERNAME
2935
2936         * ircd/ircd_reply.c (send_reply): support RPL_EXPLICIT
2937
2938         * include/ircd_reply.h (RPL_EXPLICIT): somewhat of a hack to mark
2939         a numeric as needing to use an explicit pattern, which will be the
2940         first argument in the variable argument list
2941
2942         * ircd/s_user.c: use sendrawto_one instead of sendto_one to send
2943         non-prefixed nospoof PING
2944
2945         * ircd/s_bsd.c: use sendrawto_one instead of sendto_one to send
2946         non-prefixed SERVER login
2947
2948         * ircd/ircd.c (check_pings): fix last sendto_one calls (except for
2949         a numeric usage further up)
2950
2951         * include/send.h: declare sendrawto_one
2952
2953         * ircd/send.c (sendrawto_one): new function to use ONLY for
2954         non-prefixed commands, like PING to client, or PASS/SERVER on
2955         server registration
2956
2957 2000-04-25  Kevin L. Mitchell  <klmitch@mit.edu>
2958
2959         * ircd/ircd_snprintf.c (doprintf): implement %H for possible
2960         future expansion (channel numerics?)
2961
2962         * include/ircd_snprintf.h: added documentation to # to explain use
2963         with %C; added documentation for : to explain use with %C; added
2964         documentation for %H for channels
2965
2966         * ircd/whocmds.c: use send_reply
2967
2968         * ircd/userload.c: use sendcmdto_one
2969
2970         * ircd/uping.c: use sendcmdto_one
2971
2972         * ircd/send.c: use new flags to %C format string; ':' prefixes
2973         client name with a colon for local connects, '#' uses
2974         nick!user@host form for local connects
2975
2976         * ircd/s_user.c: use send_reply, sendto_opmask_butone,
2977         sendcmdto_one, sendcmdto_serv_butone, sendcmdto_flag_butone
2978
2979         * ircd/s_serv.c: use sendcmdto_one, sendto_opmask_butone
2980
2981         * ircd/s_bsd.c: use sendto_opmask_butone, send_reply,
2982         sendcmdto_one
2983
2984         * ircd/s_auth.c: use sendto_opmask_butone
2985
2986         * ircd/res.c: use sendcmdto_one
2987
2988         * ircd/ircd_snprintf.c (doprintf): minor bug fixes and some
2989         debugging assertions
2990
2991 2000-04-24  Kevin L. Mitchell  <klmitch@mit.edu>
2992
2993         * ircd/support.c: dumpcore is no longer used, so get rid of it
2994
2995         * ircd/parse.c: use send_reply, sendcmdto_one
2996
2997         * ircd/map.c: use send_reply
2998
2999         * ircd/listener.c: use send_reply
3000
3001         * ircd/jupe.c: use sendto_opmask_butone, send_reply
3002
3003         * ircd/ircd_reply.c: use send_reply
3004
3005         * ircd/ircd.c: use sendto_opmask_butone
3006
3007         * ircd/gline.c: use sendto_opmask_butone, send_reply
3008
3009         * ircd/ircd_snprintf.c (doprintf): make it deal with incompletely
3010         registered clients; make FLAG_ALT print nick!user@host; make
3011         FLAG_COLON print :blah
3012
3013         * ircd/class.c (report_classes): use send_reply instead of
3014         sendto_one
3015
3016         * ircd/hash.c (m_hash): replace sendto_one with sendcmdto_one
3017
3018         * ircd/IPcheck.c (ip_registry_connect_succeeded): replace
3019         sendto_one with sendcmdto_one
3020
3021 2000-04-21  Kevin L. Mitchell  <klmitch@mit.edu>
3022
3023         * ircd/send.c: clean up logic in sendcmdto_channel_butone; use
3024         MyConnect() instead of IsServer() in sendcmdto_flag_butone; define
3025         sendcmdto_match_butone
3026
3027         * include/send.h: declare sendcmdto_match_butone
3028
3029 2000-04-20  Kevin L. Mitchell  <klmitch@mit.edu>
3030
3031         * ircd/jupe.c: update to use send_reply()
3032
3033         * ircd/gline.c: update to use send_reply()
3034
3035         * include/ircd_reply.h: declare send_reply
3036
3037         * ircd/ircd_reply.c (send_reply): send_error_to_client, but for
3038         replies; uses ircd_snprintf
3039
3040         * ircd/send.c: added comments to redirect searchers to appropriate
3041         sendcmdto_* function; moved new functions to end of file; added
3042         explanatory comments; reordered arguments; defined new functions
3043         mentioned below
3044
3045         * ircd/m_jupe.c: reorder arguments to sendcmdto_* functions
3046
3047         * ircd/m_gline.c: reorder arguments to sendcmdto_* functions
3048
3049         * ircd/jupe.c: reorder arguments to sendcmdto_* functions
3050
3051         * ircd/gline.c: reorder arguments to sendcmdto_* functions
3052
3053         * include/send.h: reorder arguments, add explanatory comments,
3054         declare new functions sendcmdto_flag_butone, sendto_opmask_butone,
3055         and vsendto_opmask_butone
3056
3057 2000-04-19  Kevin L. Mitchell  <klmitch@mit.edu>
3058
3059         * ircd/send.c: define sendcmdto_channel_butone, wrote a simplified
3060         vsendto_op_mask that uses '*' instead of the receiving client
3061         nickname
3062
3063         * include/send.h: declare sendcmdto_channel_butone; takes a skip
3064         argument that allows you to skip (or not to skip) deaf users,
3065         users behind bursting servers, and non channel operators
3066
3067 2000-04-17  Kevin L. Mitchell  <klmitch@mit.edu>
3068
3069         * ircd/send.c: new sendcmdto_channel_butserv -- note that old
3070         sendto_channel_butserv has a subtle bug; also wrote
3071         sendcmdto_common_channels.
3072
3073         * include/send.h: declare new sendcmdto_* functions
3074
3075         * ircd/jupe.c: support local deactivations of jupes
3076
3077         * ircd/gline.c: support local deactivations of glines
3078
3079         * include/jupe.h: JUPE_LDEACT allows jupes to be locally
3080         deactivated; if they aren't locally deactivated, then it slaves to
3081         the net-wide activation status; JupeIsRemActive() tests only
3082         whether the jupe is active everywhere else
3083
3084         * include/gline.h: GLINE_LDEACT allows glines to be locally
3085         deactivated; if they aren't locally deactivated, then it slaves to
3086         the net-wide activation status; GlineIsRemActive() tests only
3087         whether the gline is active everywhere else
3088
3089         * ircd/gline.c: detect overlapping G-lines; if an existing, wider
3090         gline expires after the new one will, we drop the new one,
3091         otherwise we add the G-line after that one (so the wide one will
3092         apply first); if the new one contains an existing G-line and if it
3093         will expire after the existing one, we drop the existing one to
3094         save memory
3095
3096         * ircd/m_gline.c (mo_gline): opers could issue remote local
3097         glines when CONFIG_OPERCMDS was off; fixed
3098
3099 2000-04-16  Kevin L. Mitchell  <klmitch@mit.edu>
3100
3101         * ircd/m_jupe.c (mo_jupe): allow target argument to be dropped if
3102         this is a local JUPE
3103
3104         * ircd/gline.c: add flags argument to gline_activate and
3105         gline_deactivate for future expansion
3106
3107         * ircd/m_gline.c: pass flags to gline_activate and
3108         gline_deactivate
3109
3110         * include/gline.h: add flags argument to gline_activate and
3111         gline_deactivate
3112
3113         * ircd/jupe.c: add flags argument to jupe_activate and
3114         jupe_deactivate for future expansion
3115
3116         * include/jupe.h: add flags argument to jupe_activate and
3117         jupe_deactivate
3118
3119         * ircd/m_jupe.c: pass a flags argument to jupe_add instead of
3120         local, active; pass flags to jupe_activate and jupe_deactivate
3121
3122         * include/gline.h: remove dead code
3123
3124         * ircd/gline.c: make gline expire times relative to CurrentTime,
3125         since that should be monotonically increasing, instead of
3126         TStime(), which can be set backwards, and which can therefore
3127         cause an expire time to increase; make local glines be removed
3128         instead of just deactivated; don't let gline_find() look for
3129         user@host glines if the mask being looked up is a channel mask
3130
3131         * ircd/send.c (vsendcmdto_one): forgot to account for the case
3132         where origin is a server and destination is a user
3133
3134         * ircd/jupe.c: make jupe expire times relative to CurrentTime,
3135         since that should be monotonically increasing, instead of
3136         TStime(), which can be set backwards, and which can therefore
3137         cause an expire time to increase; make local jupes be removed
3138         instead of just deactivated
3139
3140         * ircd/ircd_snprintf.c: d'oh, thanks for catching that; short for
3141         limit is fine.  any other warnings I should know about?
3142
3143 2000-04-15  Thomas Helvey <tomh@inxpress.net>
3144
3145         * ircd/*.c: const correctness and type safety cleanups to
3146         get code to compile with C++ compiler. Still has
3147         signed/unsigned comparison warnings.
3148
3149 2000-04-15  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3150
3151         * ircd/userload.c: change <sys/time.h> include to <time.h> for
3152           portability.
3153
3154 2000-04-14  Kevin L. Mitchell  <klmitch@mit.edu>
3155
3156         * ircd/m_gline.c (mo_gline): d'oh, target isn't a numeric; use %C
3157         and convert acptr...
3158
3159         * ircd/s_user.c: move gline_lookup function call into
3160         register_user, where it'll have a username to lookup!
3161
3162         * ircd/m_gline.c: modify to utilize new sendcmdto_* series of
3163         functions; also stuff send_error_to_client into return clauses
3164
3165         * ircd/m_jupe.c: modify to utilize new sendcmdto_* series of
3166         functions; also use send_error_to_client where that makes sense
3167
3168         * ircd/jupe.c: modify to utilize new sendcmdto_* series of
3169         functions; also use send_error_to_client where that makes sense
3170
3171         * ircd/gline.c: modify to utilize new sendcmdto_* series of
3172         functions; also fix gline_lookup() to deal properly with remote
3173         clients--boy, do struct Client and struct User need to be cleaned
3174         up!
3175
3176         * ircd/ircd_snprintf.c (doprintf): a dest of &me is a server,
3177         too...
3178
3179         * ircd/send.c: wrote sendcmdto_one(), vsendcmdto_one(), and
3180         sendcmdto_serv_butone(), all utilizing the %v conversion of
3181         ircd_snprintf()
3182
3183         * include/send.h: define IRC_BUFSIZE, max size of a message;
3184         declare sendcmdto_one(), vsendcmdto_one(), and
3185         sendcmdto_serv_butone()
3186
3187         * include/msg.h: define all the CMD_* constants needed to utilize
3188         the new sendcmdto_* series of functions
3189
3190         * ircd/Makefile.in (SRC): list ircd_snprintf.c; run make depend
3191
3192         * ircd/gline.c: remove old, dead code.
3193
3194         * ircd/m_gline.c (mo_gline): disallow setting of global G-lines
3195         unless CONFIG_OPERCMDS is enabled; disallow listing of all G-lines
3196         (don't advertise proxies); remove dead code
3197
3198         * ircd/parse.c: oper handler for JUPE only lists jupes unless
3199         CONFIG_OPERCMDS is enabled
3200
3201         * ircd/m_jupe.c (mo_jupe): don't compile mo_jupe() if
3202         CONFIG_OPERCMDS is not enabled; we'll disable it in parse.c
3203
3204         * ircd/m_opmode.c (mo_opmode): if CONFIG_OPERCMDS is not enabled,
3205         always return ERR_DISABLED
3206
3207         * ircd/m_clearmode.c (mo_clearmode): if CONFIG_OPERCMDS is not
3208         enabled, always return ERR_DISABLED
3209
3210         * ircd/s_err.c: add error message to indicate disabled commands
3211
3212         * include/numeric.h (ERR_DISABLED): to indicate disabled commands
3213
3214         * doc/Configure.help: add documentation for CONFIG_OPERCMDS
3215
3216         * config/config-sh.in: add CONFIG_OPERCMDS, default both it and
3217         CONFIG_NEW_MODE to 'y' for now
3218
3219         * ircd/gline.c (gline_list): fix a minor formatting bogon
3220
3221         * BUGS: since I fixed that bug, might as well mark it fixed.
3222
3223         * ircd/m_join.c: look up badchans with GLINE_EXACT
3224
3225         * ircd/m_gline.c: fix parc count problems; look up existing
3226         G-lines with GLINE_EXACT; only set new lastmod when
3227         activating/deactivating existing glines if old lastmod was not 0
3228
3229         * ircd/gline.c: forgot to copy the gline reason over; don't
3230         propagate a gline with 0 lastmod if origin is user; add
3231         GLINE_EXACT to force exact matching of gline mask
3232
3233         * ircd/ircd_snprintf.c (doprintf): forgot to deal with the zero
3234         flag properly
3235
3236         * ircd/s_conf.c (find_kill): gline_find() takes a char *userhost,
3237         but gline_lookup() actually takes a client--d'oh.
3238
3239 2000-04-13  Thomas Helvey <tomh@inxpress.net>
3240         * ircd/IPcheck.c: Back port BLMet's bugfix from 2.10.10
3241
3242 2000-04-13  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3243
3244         * ircd/whocmds.c: Don't make idle flag default in /who, to prevent:
3245           "/who * x"
3246           "Gte3 H*iwg Gte@212.49.240.217 :1 :0 I am the one that was."
3247           (Found by Plexus).
3248
3249         * ircd/whocmds.c: Change idle time calc from socket idle to user
3250           idle.
3251
3252 2000-04-13  Kevin L. Mitchell  <klmitch@mit.edu>
3253
3254         * config/aclocal.m4 (unet_CHECK_TYPE_SIZES): check size of void *,
3255         too, for ircd_snprintf.c
3256
3257         * include/ircd_snprintf.h: documentation for ircd_(v)snprintf, in
3258         comments; mostly descended from the Linux manpage for printf, but
3259         also documenting the extensions.
3260
3261         * ircd/ircd_snprintf.c: NULL dest is equivalent to going to a
3262         client; make 'q' be the same as 'L'; remove __inline__; only
3263         define EXTENSION if HAVE_LONG_LONG is defined
3264
3265         * include/handlers.h: declare m_gline()
3266
3267         * ircd/parse.c: gline can be called by users, but it only lists
3268         the glines.
3269
3270         * ircd/s_user.c (set_nick_name): resend gline if a remote server
3271         introduces a glined client
3272
3273         * ircd/s_serv.c (server_estab): burst glines, too
3274
3275         * ircd/gline.c: fix up all the expire times to be offsets;
3276         simplify gline_resend()
3277
3278         * ircd/m_gline.c: begin coding replacements for ms_gline(),
3279         mo_gline(), and m_gline()
3280
3281         * ircd/gline.c (gline_add): allow *@#channel to work correctly;
3282         also, prohibit local BADCHANs if LOCAL_BADCHAN not defined
3283
3284 2000-04-13  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3285
3286         * tools/Bouncer/*: Add comments/documentation/tags.
3287         * tools/Bouncer/*: Add debug defines, make task fork().
3288
3289 2000-04-12  Thomas Helvey <tomh@inxpress.net>
3290         * ircd/s_err.c: Cleanup s_err.c make one table so we
3291         don't have to do anything tricky to get an error string.
3292
3293 2000-04-12  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3294         * Add port bouncer for http (x/w)
3295
3296 2000-04-12  Kevin L. Mitchell  <klmitch@mit.edu>
3297
3298         * ircd/s_conf.c (find_kill): replaced call to find_gline() with a
3299         call to gline_find(); also used GlineReason() instead of direct
3300         reference to structure member
3301
3302         * ircd/m_join.c (m_join): replace bad_channel() calls with calls
3303         to gline_find(name, GLINE_BADCHAN), and also check to see if gline
3304         is active
3305
3306         * ircd/channel.c: nothing seems to be called anywhere...
3307
3308         * ircd/s_err.c: update a couple of replies to dovetail with new
3309         semantics
3310
3311         * ircd/gline.c: begin complete re-implementation of gline.c along
3312         the lines of the final design of jupe.c
3313
3314         * include/gline.h: begin complete re-implementation of gline.c
3315         along the lines of the final design of jupe.c
3316
3317         * ircd/channel.c (mode_process_clients): fix "Deop of +k user on
3318         %s by %s" message...
3319
3320         * ircd/ircd_snprintf.c: my new snprintf()-like functions
3321
3322         * include/ircd_snprintf.h: my new snprintf()-like functions
3323
3324 2000-04-11  Thomas Helvey <tomh@inxpress.net>
3325         * ircd/IPcheck.c: removed old dead code
3326         * ircd/s_user.c (send_user_info): removed non-standard
3327           user not found message for userhost/userip
3328
3329 2000-04-11  Greg Sikorski <gte@atomicrevs.demon.co.uk>
3330
3331         * ircd/s_err.c: Added missing quotes to ERR_DONTCHEAT numeric.
3332         * doc/p10.html: Work on chapter 4.
3333
3334 2000-04-10  Kevin L. Mitchell  <klmitch@mit.edu>
3335
3336         * ircd/channel.c (mode_parse_client): fix coredump on /mode
3337         #foobar +o nosuchnick
3338
3339 2000-04-10  Perry Lorier  <Isomer@coders.net>
3340         * BUGS: Added bug.
3341
3342 2000-04-09  Thomas Helvey <tomh@inxpress.net>
3343         * include/IPcheck.h: fix prototype
3344         * ircd/s_user.c: fix usage of IPcheck_remote_connect
3345         * ircd/IPcheck.c: removed unused args
3346
3347 2000-04-09  Thomas Helvey <tomh@inxpress.net>
3348         * include/IPcheck.h: add proto for IPcheck_expire
3349
3350         * ircd/IPcheck.c: Rewrote
3351
3352         * ircd/ircd.c: Add IPcheck_expire to main message loop
3353
3354         * ircd/s_user.c: Redo target hashing, refactor target code
3355
3356         * include/numeric.h: Cleaned up numerics, added which ones are
3357         in use by other networks and what they are in use for.
3358
3359         * ircd/channel.c: cleaned can_join(), allow anyone through anything
3360         if /invited, simplified the function.  Opers overusing OPEROVERRIDE
3361         will get a message explaining to them not to cheat.
3362
3363         * ircd/m_join.c: cleaned up the various join functions, should be
3364         a lot more efficient.  Still needs work.  Now assumes that s<->s
3365         won't send it a JOIN 0.  Service coders - note this and tread with
3366         care.
3367
3368         * ircd/m_stats.c: added Gte-'s stats doc patch.
3369
3370         * ircd/m_version.c: /version now returns the 005 numeric as well.
3371         as requested by Liandrin.
3372
3373
3374 2000-04-07  Kevin L. Mitchell  <klmitch@mit.edu>
3375
3376         * ircd/m_clearmode.c: add include for support.h for write_log()
3377
3378         * configure: move ircd/crypt/* to tools/*
3379
3380 2000-04-06  Thomas Helvey <tomh@inxpress.net>
3381         * ircd/s_auth.c: Shorten auth connect timeout to 60 seconds
3382           set client host to server alias if connection from localhost
3383
3384 2000-04-06  Perry Lorier <isomer@coders.net>
3385         * ircd/ircd.c: Fix core during pinging (oops)
3386         
3387 2000-04-06  Perry Lorier <isomer@coders.net>
3388         * ircd/send.c: fixed wrong ident being sent to channels bug.
3389         * include/numerics.h: Updated some of the numerics from other
3390         networks.  Flagged some as 'unused' by undernet.
3391
3392 2000-03-30  Perry Lorier <isomer@coders.net>
3393         * ircd/ircd.c: Lets see if this helps the ping problem at all.
3394         * ircd/whocmds.c, /doc/readme.who: Added %l specifier to get idle
3395         time for local clients. (as requested), extended who now returns all
3396         the flags (@+!) so you can tell the complete state of a client.
3397
3398 2000-03-30  Thomas Helvey <tomh@inxpress.net>
3399         * m_rping.c m_rpong.c: add Gte's rping/rpong fixes
3400
3401 2000-03-30  Perry Lorier <isomer@coders.net>
3402         * ircd/parse.c: oops, missed opers.
3403
3404 2000-03-30  Perry Lorier <isomer@coders.net>
3405         * ircd/parse.c: fixed mystifying ping bug thats been plaguing us
3406         for so long.  Remember: m_ping MUST be in the parse array. :)
3407
3408 2000-03-30  Perry Lorier <isomer@coders.net>
3409         * ircd/ircd.c: test in check_pings was wrong.  I move that we
3410         disallow cvs commit after 10pm localtime....
3411
3412 2000-03-30  Perry Lorier <isomer@coders.net>
3413         * ircd/m_pong.c: Fix it for servers too.
3414
3415 2000-03-30  Perry Lorier <isomer@coders.net>
3416         * ircd/m_pong.c: Fix ping timeout bugs
3417
3418 2000-03-30  Perry Lorier <isomer@coders.net>
3419         * ircd/channel.c: Bans had CurrentTime in their when field instead
3420         of TStime()
3421
3422 2000-03-31  Thomas Helvey <tomh@ixpress.net>
3423         * ircd/numnicks.c (SetXYYCapacity): fix for extended
3424         numerics.
3425
3426 2000-03-30  Perry Lorier <isomer@coders.net>
3427         * ircd/m_nick.c: send kills both ways so when we add nick change
3428         on collision we don't desync the network.
3429
3430         * ircd/map.c: Fixup the map a bit more.
3431
3432 2000-03-31  Kevin L. Mitchell  <klmitch@mit.edu>
3433
3434         * ircd/m_clearmode.c (do_clearmode): Log the CLEARMODE to OPATH
3435
3436         * ircd/m_opmode.c: Log the mode changes to OPATH
3437
3438         * ircd/channel.c (modebuf_flush_int): Log the mode changes to
3439         OPATH
3440
3441         * include/channel.h (MODEBUF_DEST_LOG): Log the mode changes to
3442         OPATH
3443
3444         * doc/Configure.help: help text for CONFIG_LOG_OPMODE / OPATH
3445
3446         * config/config-sh.in: added OPATH for opmode log file
3447
3448         * ircd/m_clearmode.c (do_clearmode): updated uses of
3449         modebuf_mode_string() for the new usage
3450
3451         * ircd/channel.c: added flag MODE_FREE and an int argument to
3452         modebuf_mode_string() to indicate that the string must be free'd;
3453         updated calls to modebuf_mode_string() for the new usage; called
3454         collapse(pretty_mask()) on the ban string and use allocated memory
3455         for it; added ban list length accounting; fixed a number of small
3456         bugs in ban processing
3457
3458         * include/channel.h: added flag MODE_FREE and an int argument to
3459         modebuf_mode_string() to indicate that the string must be free'd
3460
3461         * ircd/m_clearmode.c (do_clearmode): made sure clearmode removed
3462         keys and limits that are set
3463
3464 2000-03-30  Perry Lorier <isomer@coders.net>
3465         * ircd/ircd.c: rewrote check_pings() for maintainability
3466         and speed.  Also changed quit msg's so they don't have
3467         redundant nick[host] info in them.
3468
3469         * ircd/send.c: Changed write errors to report what error
3470         occured (if possible).
3471
3472         * ircd/gline.c: added gline comment to the quit.
3473
3474         * ircd/m_server.c: Added suggestions to server quits mentioning
3475         what went wrong so the admin can fix it earlier instead of asking
3476         questions...
3477
3478         * ircd/map.c: Changed m_map() to hide numerics, show a * beside
3479         servers that aren't fully burst yet.  And show '(--s)' for servers
3480         where its not sure.
3481
3482         * doc/example.conf: Fixed wrapped U:
3483
3484 2000-03-30  Kevin L. Mitchell  <klmitch@mit.edu>
3485
3486         * ircd/m_mode.c (ms_mode): implemented a new m_mode in terms of
3487         mode_parse() (version selectable at compile time)
3488
3489         * ircd/m_clearmode.c (mo_clearmode): clean_channelname(parv[1])
3490
3491         * ircd/m_opmode.c (mo_opmode): clean_channelname(parv[1])
3492
3493         * config/config-sh.in: add new config option to enable new m_mode
3494         implementation
3495
3496         * doc/Configure.help: add documentation for new config option
3497         CONFIG_NEW_MODE
3498
3499         * ircd/channel.c (mode_parse_client): /opmode #foobar -o -- 461
3500         MODE -v : Not enough parameters
3501
3502         * ircd/m_clearmode.c (do_clearmode): do_clearmode() would remove
3503         +k and +l even if they weren't set...
3504
3505         * ircd/m_opmode.c: implement the OPMODE command using mode_parse()
3506
3507         * ircd/channel.c: make mode_process_clients() clear the DEOPPED
3508         flag; fix +s+p exclusivity; add MODE_ADD/MODE_DEL to flag list
3509         for; test the 0-th member, not the i-th member, of the client
3510         change state stuff
3511
3512         * ircd/m_clearmode.c (do_clearmode): use the new
3513         mode_invite_clear() function
3514
3515         * ircd/channel.c: cleared up all the compile-time warnings and
3516         errors
3517
3518         * include/channel.h: added declarations for mode_ban_invalidate()
3519         and mode_invite_clear()
3520
3521         * ircd/channel.c: finished mode_parse(), then broke it up into a
3522         dozen or so helper functions to make the code easier to read
3523
3524 2000-03-29  Thomas Helvey <tomh@inxpress.net>
3525         * ircd/ircd.c: refactor server initialization a bit, use
3526         getopt for parsing command line, refactor init_sys, main,
3527         and other bits.
3528
3529         * ircd/s_bsd.c: add functions for initialization to clean
3530         up logic a bit and remove duplicated code.
3531
3532         * include/ircd.h: add struct for server process related
3533         variables.
3534
3535 2000-03-29  Kevin L. Mitchell  <klmitch@mit.edu>
3536
3537         * ircd/channel.c: initial definition of mode_parse(); flags to
3538         prevent doing the same thing multiple times; helper method
3539         send_notoper() to send a "Not oper"/"Not on channel" notice
3540
3541         * include/channel.h: declare mode_parse() and helper flags
3542
3543         * ircd/channel.c (modebuf_flush_int): fiddled with timestamp
3544         sending to match the current action of set_mode() closely enough
3545         that hopefully there won't be major conflicts
3546
3547         * ircd/channel.c (modebuf_flush_int): consolidated the mode string
3548         building logic, reversed the order of the arguments to mode
3549         commands to have '-' preceed '+'
3550
3551 2000-03-29  Thomas Helvey <tomh@inxpress.net>
3552         * ircd/s_bsd.c (add_connection): don't disable socket options
3553         let OS tune itself and allow important performance tweaks to 
3554         work.
3555
3556 2000-03-28  Kevin L. Mitchell  <klmitch@mit.edu>
3557
3558         * ircd/channel.c (modebuf_flush_int): use %d, not %-15d; I got
3559         confused by set_mode, which is doing some really weird logic;
3560         guess what I'm going to rewrite next?  ;)
3561
3562 2000-03-28  Kevin L. Mitchell  <klmitch@emc.com>
3563
3564         * include/channel.h: added MODE_SAVE for the bounds checking stuff
3565         in modebuf_flush
3566
3567         * ircd/channel.c: make modebuf_flush into modebuf_flush_int and
3568         make it do bounds checking on the buffer; all modes are sent only
3569         if the all parameter is 1; modebuf_flush is the exported wrapper
3570
3571         * include/channel.h: add BOUNCE, renumber flags to get a little
3572         more space
3573
3574         * ircd/channel.c (modebuf_flush): don't overload HACK2, add
3575         BOUNCE; send DESYNCH message
3576
3577 2000-03-27  Kevin L. Mitchell  <klmitch@emc.com>
3578
3579         * ircd/m_clearmode.c (do_clearmode): only mark the modes the
3580         channel actually has in effect for deletion
3581
3582         * ircd/channel.c: added explanatory comments to all added
3583         functions; made flushing take place at the correct place even if
3584         the MODEBUF_DEST_DEOP flag is set; rewrote build_string() helper
3585         to bash some stupid bugs; made modebuf_flush() return if ModeBuf
3586         is empty, fixed the apparent source, removed some bogus string
3587         termination code, properly terminate the mode strings, add support
3588         for HACK2 and HACK3, made limit strings not be sent if the limit
3589         is being removed, changed where '+' and '-' come from in sent
3590         strings, added support for DEOP flag, set up bouncing code for
3591         HACK2
3592
3593         * ircd/Makefile.in: ran make depend
3594
3595         * include/channel.h: added new defines for future functionality,
3596         made modebuf_flush() return int so I can use tail recursion
3597
3598         * ircd/m_clearmode.c: add msg.h to includes; other misc cleanups
3599         to make it all compile
3600
3601         * ircd/m_opmode.c: add msg.h to includes...
3602
3603         * ircd/m_clearmode.c: implemented mo_clearchan()/ms_clearchan()
3604
3605         * ircd/channel.c (modebuf_flush): realized I forgot to
3606         nul-terminate addbuf/rembuf properly...
3607
3608         * ircd/m_clearmode.c (do_clearmode): wrote do_clearmode()...
3609
3610         * ircd/channel.c (modebuf_flush): correct sendto_server_butone to
3611         sendto_serv_butone--blah^2
3612
3613         * ircd/send.c (sendto_serv_butone): stupid comments confused me
3614
3615         * ircd/channel.c (modebuf_flush): if there are no mode changes to
3616         propagate, we're done...
3617
3618         * ircd/channel.c (modebuf_flush): duh; it's sendto_server_butone,
3619         not sendto_all_butone
3620
3621         * ircd/m_clearmode.c: define skeleton for m{o,s}_clearmode
3622
3623         * ircd/m_opmode.c: define skeleton for m{o,s}_opmode
3624
3625         * ircd/Makefile.in (SRC): added m_opmode() and m_clearmode() to
3626         the list
3627
3628         * ircd/parse.c: added messages for opmode and clearmode
3629
3630         * include/handlers.h: added declarations for mo_opmode(),
3631         ms_opmode(), mo_clearmode(), and ms_clearmode()
3632
3633         * include/msg.h: define MSG_OPMODE, TOK_OPMODE, MSG_CLEARMODE, and
3634         TOK_CLEARMODE
3635
3636         * include/channel.h (MODEBUF_DEST_OPMODE): Define the
3637         MODEBUF_DEST_OPMODE flag
3638
3639         * ircd/channel.c (modebuf_flush): added new flag,
3640         MODEBUF_DEST_OPMODE; causes channel MODE/HACK(4) notice to appear
3641         to originate from source's server (or source itself, if
3642         IsServer(source)); also causes a server-level MODE to be sent as
3643         OPMODE instead
3644
3645         * include/channel.h: defined MODEBUF_DEST_SERVER,
3646         MODEBUF_DEST_HACK4
3647
3648         * ircd/channel.c: Add another argument to build_string() to handle
3649         numeric nicks; implemented MODEBUF_DEST_SERVER to send MODEs to
3650         servers; implemented MODEBUF_DEST_HACK4 to cause HACK(4) notices
3651         to be sent out
3652
3653 2000-03-27  Perry Lorier <isomer@coders.net>
3654
3655         * ircd/s_bsd.c: fixed missing 'u' typo.
3656
3657 2000-03-26  Kevin L. Mitchell  <klmitch@emc.com>
3658
3659         * ircd/channel.c: implement modebuf_init(), _mode(), _mode_uint(),
3660         _mode_string(), _mode_client(), _flush(); also implemented a
3661         simple build_string()
3662
3663         * include/channel.h: added definition of ModeBuf, modebuf_*
3664         manipulation functions, and a couple of helper macros
3665
3666 2000-03-24 Thomas Helvey <tomh@inxpress.net>
3667   * numicks.c: convert extended numerics to use original mask version
3668   * numnicks.h: ""
3669   * s_user.c:
3670 2000-03-23 Thomas Helvey <tomh@inxpress.net>
3671   * Merge in changes from production
3672 2000-03-22 Thomas Helvey <tomh@inxpress.net>
3673   * numicks.c: Tweak to numnick generator to reduce possibility of duplicates.
3674   * rfc1459.unet: Add Maniac's documentation for /names 0
3675 * Fix misc. jupe bugs that somehow made it into the tree
3676 * Escape /names 0 to mean /names --Maniac
3677 * Don't core when server asks for info --Maniac 
3678 * Add Kev's jupe patch --Bleep
3679 * Add Maniacs squit patch --Bleep
3680 * Merge in u2_10_10_beta07 changes --Bleep
3681 * Merge in u2_10_10_beta06 changes --Bleep
3682 * Start ircu2.10.11 development, beta branch u2_10_10 --Bleep
3683 #-----------------------------------------------------------------------------