]> code.citadel.org Git - citadel.git/blob - citadel/ChangeLog
* Fixed a bug in the allocation of per-session dynamic data for calendar module
[citadel.git] / citadel / ChangeLog
1  $Log$
2  Revision 601.87  2002/12/10 23:36:20  ajc
3  * Fixed a bug in the allocation of per-session dynamic data for calendar module
4
5  Revision 601.86  2002/12/09 06:07:29  ajc
6  * Finished the code to accept incoming calendar REPLY messages and
7    merge/save the updated event in the user's calendar.
8
9  Revision 601.85  2002/12/08 06:01:48  ajc
10  * More work on the reply handler.  Wrote functions to locate the message
11    containing the invitation being replied to.  Just need to write the
12    merge and resave functions now.
13
14  Revision 601.84  2002/12/08 00:23:08  ajc
15  * Began adding a calendaring subcommand to accept a reply to a meeting
16    invitation and update the event in the user's calendar.  (Not finished.)
17
18  Revision 601.83  2002/12/04 05:01:18  ajc
19  * When sending out invitations, encapsulate the VEVENT component inside a
20    VCALENDAR component, along with proper metadata such as product ID and
21    vcalendar version.  Move the METHOD:REQUEST property to the encapsulating
22    component rather than the event itself.  (Still need to add a VTIMEZONE).
23
24  Revision 601.82  2002/12/03 04:49:15  ajc
25  * Send out meeting requests!  (Need to test with various clients.)
26
27  Revision 601.81  2002/12/02 08:09:00  error
28  * Improvements to the new message formatter, including URL support and
29    doing the Right Thing for text/plain messages.
30
31  Revision 601.80  2002/12/01 11:02:57  error
32  * New experimental message formatter - try it, you'll like it!
33
34  Revision 601.79  2002/12/01 04:48:24  ajc
35  * The code to check for sending invitations needs to happen *after* save
36
37  Revision 601.78  2002/12/01 00:59:54  ajc
38  * Reliably detect when the user saving an event is listed as the meeting
39    organizer.  (Currently calls a stub function.  Still need to write the
40    function to generate and send invitations.)
41
42  Revision 601.77  2002/11/30 21:35:30  ajc
43  * just some trace messages
44
45  Revision 601.76  2002/11/30 05:39:28  ajc
46  * Started banging out some code to determine when a saved vEvent needs to
47    send out meeting invites.
48
49  Revision 601.75  2002/11/29 16:24:59  ajc
50  * When calling ical*_remove_*() routines, the caller then owns the object
51    which is removed.  Added ical*_free() calls to free the memory.
52
53  Revision 601.74  2002/11/29 15:44:41  ajc
54  * CC->cs_inet_email is now a string buffer, not a pointer
55  * Initialize CC->cs_inet_email with a default address, so it always
56    contains something even when the directory doesn't
57  * Augment CHEK command to return the user's preferred Internet e-mail addr.
58
59  Revision 601.73  2002/11/27 21:05:31  nixo
60  added dot ungoto functionality.
61  It allows you to enter a room to ungoto, it will look
62  through the ungoto list and goto there at the room position
63  you last goto-ed it from.
64  Don't blame me, this was Gary's idea.
65
66  Revision 601.72  2002/11/25 05:10:07  ajc
67  * Post a notification to Aide> when a user is manually deleted
68    (resolves Bugzilla enhancement request #73)
69
70  Revision 601.71  2002/11/25 04:57:43  ajc
71  * Allow set/clear of per-user Internet mail privilege
72  * Honor that flag
73
74  Revision 601.70  2002/11/23 13:35:47  error
75  * Makefile.in: Alphabetized all the source files
76
77  Revision 601.69  2002/11/21 05:38:13  ajc
78  * Added support for a "New User Greetings" room.  See docs/install.txt
79
80  Revision 601.68  2002/11/15 11:24:40  error
81  * serv_rwho.c: cmd_rwho(): move logged_in from param 8 to param 11
82    (see RWHO in techdoc/session.txt)
83
84  Revision 601.67  2002/11/13 17:20:57  ajc
85  * When in curses mode, call beep() instead of putc(7, stdout) to make it beep.
86
87  Revision 601.66  2002/11/12 04:30:16  ajc
88  * Completed the invitation accept/decline code.  It now sends back a
89    correctly formated reply!  (Tested with Evolution)
90
91  Revision 601.65  2002/11/11 06:21:55  error
92  * Fixed minor bugs with color handling; added explicit support for handling
93    the background color e.g. for transparent terminals
94
95  Revision 601.64  2002/11/11 04:17:24  ajc
96  * More work on reply to meeting invitation
97
98  Revision 601.63  2002/11/10 09:21:57  error
99  * messages.c: fixed <H>eader command
100
101  Revision 601.62  2002/11/10 09:19:38  error
102  * Convert some more routines to new IPC code
103
104  Revision 601.61  2002/11/10 09:14:16  error
105  * citadel.spec: updated for post-6.01
106
107  Revision 601.60  2002/11/10 09:12:06  error
108  * citadel.c: When terminating, don't mark messages new when using new
109    message semantics
110
111  Revision 601.59  2002/11/08 05:28:54  ajc
112  * Reply to VEVENT invitations: generate reply by cloning the request,
113    stripping out non-me attendees, setting the partstat to accept/decline,
114    and extracting the address of the organizer.   (Still not finished: right
115    now it does everything except actually sending the reply.)
116
117  Revision 601.58  2002/11/07 04:40:07  ajc
118  * Repaired the "remember username/password" functionality of the client
119    (it was broken during the transition to the new client protocol library)
120
121  Revision 601.57  2002/11/06 05:03:01  ajc
122  * No changes; just testing CVS permissions
123
124  Revision 601.56  2002/11/04 21:49:53  ajc
125  * Don't run the wait indicator when in an external editor
126
127  Revision 601.55  2002/11/01 04:57:56  ajc
128  * Fixed .AM and .AE commands
129
130  Revision 601.54  2002/10/29 20:14:56  error
131  * rooms.c: don't allow a blank floor name when creating a floor (in client)
132
133  Revision 601.53  2002/10/26 06:15:09  ajc
134  * cmd_cflr() - don't allow zero length floor names
135
136  Revision 601.52  2002/10/26 06:01:19  ajc
137  * Increase size of temp file name buffer in struct CitContext
138
139  Revision 601.51  2002/10/25 09:38:38  error
140  * Fixed broken .Goto by partial match
141
142  Revision 601.50  2002/10/25 09:26:26  error
143  * Fix the status line not updating with the new wait indicator; rearrange
144    the code so network_status_cb is a member function of ipc.
145
146  Revision 601.49  2002/10/25 04:39:38  ajc
147  * When in fullscreen mode, display an "X" icon in the lower right corner of
148    the screen while waiting for the server.
149
150  Revision 601.48  2002/10/24 09:04:53  error
151  * acconfig.h: add DISABLE_CURSES template
152
153  Revision 601.47  2002/10/23 04:06:41  ajc
154  * "conflicts" check now also tells the client whether a conflicting event
155    is really just an older version of the same object.
156
157  Revision 601.46  2002/10/23 03:55:21  ajc
158  * Finished: when saving an object of type text/calendar to the Calendar> room,
159    set the Citadel "extended message ID" to the UID of the VEVENT object.  This
160    causes the message base to automatically delete any existing instance(s) of
161    that object: automatic replacement.
162
163  Revision 601.45  2002/10/23 03:07:43  ajc
164  * First hack at UID-to-EMSGID mapping (for auto replacement)
165
166  Revision 601.44  2002/10/21 20:00:41  ajc
167  * List UID and SUMMARY properties of conflicting events
168
169  Revision 601.43  2002/10/21 17:14:42  ajc
170  * More work on conflict detects
171
172  Revision 601.42  2002/10/20 21:42:54  ajc
173  * More conflict checking stuff
174
175  Revision 601.41  2002/10/20 20:21:27  ajc
176  * Put in a skeleton "hunt for conflicts" code
177
178  Revision 601.40  2002/10/20 08:01:03  error
179  * docs/install.txt: add Mac OS X build instructions
180
181  Revision 601.39  2002/10/19 21:35:34  ajc
182  * Moved some of the calendar logic over from WebCit
183
184  Revision 601.38  2002/10/19 08:30:03  error
185  * dynloader.c:  Darwin places underscores in front of symbol names, just
186    like OpenBSD.
187
188  Revision 601.37  2002/10/19 08:18:06  error
189  * Disable any use of curses on Darwin (this is temporary until I beat
190    Apple's bizarre linker into submission)
191
192  Revision 601.36  2002/10/18 10:33:09  error
193  * More signed/unsigned fixes (for the new progress gauge)
194
195  Revision 601.35  2002/10/18 07:56:30  error
196  * fix self-service account creation at login prompt (accidentally called
197    CREU instead of NEWU).
198
199  Revision 601.34  2002/10/18 03:44:13  ajc
200  * Fixed a bug in CtdlRenameRoom() that caused the old room record not to be
201    deleted when there was a mailbox namespace attached.
202  * Reworked imap_rename() and imap_rename_backend() to not use nested functions
203
204  Revision 601.33  2002/10/17 12:56:44  error
205  * Bug fixes:  Fix numerous char array size mismatches, signed/unsigned
206    mismatches, and const correctness problems (though not nearly all)
207
208  Revision 601.32  2002/10/17 11:13:27  error
209  * Convert room listings and some aide functions to new IPC code
210
211  Revision 601.31  2002/10/16 13:46:19  ajc
212  * Remove some trace messages
213
214  Revision 601.30  2002/10/16 08:59:41  error
215  * Don't assume pointer to time_t is compatible with pointer to
216    struct timeval.tv_sec (it isn't on darwin)
217
218  Revision 601.29  2002/10/16 02:49:55  ajc
219  * CtdlWriteObject() encode in memory instead of on disk (not tested)
220
221  Revision 601.28  2002/10/15 17:41:20  ajc
222  * Numerous warning fixes and cleanups for compile on Linux for IBM S/390
223  * Name temp files with source code location of who created them
224
225  Revision 601.27  2002/10/15 06:47:11  error
226  * IPC support for resumable downloads
227
228  Revision 601.26  2002/10/15 06:44:55  error
229  * configure.ac check for malloc.h header file (Mac OS X needs this)
230
231  Revision 601.25  2002/10/15 03:56:33  ajc
232  * Run without crashing on Berkeley DB 4.1  :)
233
234  Revision 601.24  2002/10/15 03:30:52  ajc
235  * Build ok on Berkeley DB 4.1
236
237  Revision 601.23  2002/10/14 08:27:40  error
238  * Mac OS X build fixes (everything but serv_imap now builds)
239
240  Revision 601.22  2002/10/08 09:44:52  error
241  * Build environment:  cvs ignore .diff/.patch files
242
243  Revision 601.21  2002/10/07 18:59:37  ajc
244  * Build fixes for Solaris box without OpenSSL installed
245
246  Revision 601.20  2002/10/07 09:40:49  error
247  * Don't try to compile non-existent client_crypto.c (oops!)
248
249  Revision 601.19  2002/10/06 18:46:30  error
250  * Move (nearly) all IPC-related code to citadel_ipc.[ch].
251
252  Revision 601.18  2002/10/05 04:48:29  ajc
253  * Change MAXSETUP from 4 to 3 (bug reported by mavherzog, fix suggested by IO)
254
255  Revision 601.17  2002/10/04 07:11:56  error
256  * Fix bootstrap for Red Hat 7.3
257
258  Revision 601.16  2002/10/02 04:07:27  error
259  * status_line() now shows "new mail" only when there is new mail
260
261  Revision 601.15  2002/10/01 04:00:13  ajc
262  * html.c: speed improvement in html-to-ascii converter
263  * messages.c: MASSIVE speed improvement in message output
264
265  Revision 601.14  2002/09/30 08:07:11  error
266  * ipcdef.h: add extern "C" for linking to C++ programs
267
268  Revision 601.13  2002/09/30 07:32:09  error
269  * ipcdef.h: remove prototype for connection_died(), it doesn't belong there
270
271  Revision 601.12  2002/09/30 07:20:35  error
272  * Fix configure mis-detecting libical and zlib and a missing semicolon in
273    tools.h
274
275  Revision 601.11  2002/09/29 04:55:13  error
276  * File and attachment downloads now use the new IPC code.
277  * Implemented high-speed pipelined file download in IPC code.
278
279  Revision 601.10  2002/09/29 04:41:43  error
280  * file_ops.c: cmd_read() now returns a short read at end-of-file instead of
281    4096, this prevents trailing garbage on the downloaded file; also it now
282    succeeds if the requested number of bytes is > 4096; it simply returns
283    only 4096 bytes.
284
285  Revision 601.9  2002/09/27 06:53:20  error
286  * Allow multiple simultaneous IPC connections.  All changes necessary for
287    the client to use the new code are necessarily included.
288
289  Revision 601.8  2002/09/22 02:48:04  ajc
290  * axdefs.h: add "Notes" view
291
292  Revision 601.7  2002/09/17 03:18:15  ajc
293  * Create the Calendar> and Tasks> rooms at login time, and set their default
294    views to calendar and tasklist views.  Renamed "My Calendar>" to "Calendar>"
295    to be in sync with the KDE groupware project.
296
297  Revision 601.6  2002/09/15 03:24:28  ajc
298  * Renamed decode_base64() to CtdlDecodeBase64()
299  * Renamed decode_quoted_printable() to CtdlDecodeQuotedPrintable()
300  * These changes are to avoid namespace conflict with libical
301
302  Revision 601.5  2002/09/13 15:41:39  ajc
303  * serv_calendar.c: #include "serv_calendar.h", not "serv_ical.h"
304
305  Revision 601.4  2002/09/11 03:17:18  ajc
306  * [EXPERIMENTAL] Link in the "libical" calendar library if present
307  * Rename serv_ical to serv_calendar (because the resulting module would be
308    named "libical" which conflicts with the external library by that name)
309
310  Revision 601.3  2002/09/10 08:07:38  error
311  * update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00* update citadel.spec for 6.00
312
313  Revision 601.2  2002/09/09 03:03:18  ajc
314  * When a user logs in, create the Mail> room if it doesn't exist.  (Should
315    never happen, but one site had a situation where this patch came in handy.)
316
317  Revision 601.1  2002/09/08 04:15:28  ajc
318  * Also fixed a bug in <.T>erminate <S>tay which caused the terminal to
319    become wacky on second and subsequent sessions.
320
321  Revision 601.0  2002/09/08 03:51:30  ajc
322  * Let's call this 6.01, shall we?
323
324  Revision 600.2  2002/09/08 03:48:48  ajc
325  * Fixed a crashy crashy bug in the AGUP protocol function in the client
326
327  Revision 600.1  2002/09/07 03:24:23  ajc
328  * When displaying messages using MSG4, enumerate the attachments on the
329    client side, because the server won't add their descriptions to the
330    message text.
331
332  Revision 600.0  2002/09/04 03:06:58  ajc
333  * Committing the current code base as version 6.00
334
335  Revision 591.109  2002/09/03 14:09:04  ajc
336  * setup.c: automatically stop/start services
337
338  Revision 591.108  2002/09/03 04:42:15  ajc
339  * Added MSG4 support to client-side IPC
340  * Moved HTML-to-text conversion to the client side
341
342  Revision 591.107  2002/09/02 20:40:34  ajc
343  * Automation work for setup
344
345  Revision 591.106  2002/08/31 04:36:26  ajc
346  * IMAP APPEND no longer forces messages to appear as from the logged-in user
347    when appending to a mailbox room.  (Allows migration to Citadel from some
348    other type of server without losing all the sender names.)
349
350  Revision 591.105  2002/08/31 04:12:39  ajc
351  * Set version number to 6.00 in documentation and header files.
352  * Convert RFC822 newlines (CRLF) to Unix/Citadel newlines (LF) when
353    performing an IMAP APPEND command.
354
355  Revision 591.104  2002/08/28 03:18:06  ajc
356  * Make reply_to and reply_subject global (otherwise they don't work!)
357
358  Revision 591.103  2002/08/27 04:01:03  ajc
359  * Added the ability to run an external command from the client when new mail
360    arrives.  (Ok, I admit it: I just discovered http://www.dailywav.com and I
361    just *had* to have Bear in the Big Blue House tell me I've got mail)
362
363  Revision 591.102  2002/08/26 02:55:09  ajc
364  * Small bugfix for memory bounds checking in the MIME parser
365
366  Revision 591.101  2002/08/25 21:23:49  ajc
367  * Hide the SMTP queue and the sysconfig rooms.
368
369  Revision 591.100  2002/08/24 05:58:53  ajc
370  * Bugfixes and cosmetic changes to listsub system
371
372  Revision 591.99  2002/08/23 03:36:52  ajc
373  * Finished all of the subscribe/unsubscribe/confirm stuff!
374
375  Revision 591.98  2002/08/23 02:30:02  ajc
376  * Delete unconfirmed pending subscribe/unsubscribe requests after three days
377  * Don't allow multiple subscriptions of the same address to a list
378
379  Revision 591.97  2002/08/22 03:55:11  ajc
380  * Fixed bug in above
381
382  Revision 591.96  2002/08/22 03:40:00  ajc
383  * Add "unsubscribe" command (but not yet "confirm unsubscribe")
384
385  Revision 591.95  2002/08/21 21:58:00  ajc
386  * Completed self-service list subscription via web.
387    (Still need to implement unsubscribe.)
388
389  Revision 591.94  2002/08/16 21:04:56  ajc
390  * Add LPRM command
391
392  Revision 591.93  2002/08/14 20:21:52  ajc
393  * Extend GETR/SETR to allow twiddling of bits in the QRflags2 bucket
394  * New flag and config options to allow/disallow self-service list subscription
395    and unsubscription to a room
396
397  Revision 591.92  2002/08/14 02:36:05  ajc
398  * WebCit list subscription integration
399
400  Revision 591.91  2002/08/13 18:48:46  ajc
401  * Generate and send subscription confirmation requests.
402    (Still need to finalize the URL format)
403
404  Revision 591.90  2002/08/13 17:19:11  ajc
405  * Added email capability to quickie_message()
406
407  Revision 591.89  2002/08/13 04:02:06  ajc
408  * <R>eplace string is now case sensitive
409
410  Revision 591.88  2002/08/13 03:46:31  ajc
411  * More work on the self-service subscribe/unsubscribe infrastructure
412
413  Revision 591.87  2002/08/12 03:00:20  ajc
414  * Fixed bug in <R>eplacestring which caused it to lock up in certain conditions
415
416  Revision 591.86  2002/08/12 00:09:05  ajc
417  * Compress VISIT records using zlib if available.  This reduces the object
418    size from over 4k to about 70 bytes.  Experimental.
419  * Automatically uncompress database records found to be compressed (duh)
420
421  Revision 591.85  2002/08/08 22:01:35  ajc
422  * autoconf to look for zlib (for an upcoming experiment)
423
424  Revision 591.84  2002/08/08 03:25:56  ajc
425  * Bugfix for above
426  * Started writing some infrastructure for sub/unsub
427
428  Revision 591.83  2002/08/08 02:49:12  ajc
429  * serv_network.c: retain unknown commands in netconfigs and write them back
430  * techdoc/netconfigs.txt: specify commands for subscribe/unsubscribe pending
431  * serv_listsub.c: added (currently a stub)
432
433  Revision 591.82  2002/08/06 03:12:14  ajc
434  * Fixed and clarified "new mail has arrived" messages.
435
436  Revision 591.81  2002/08/06 03:02:29  ajc
437  * ;AE command -- Make it clearer which floor the user is editing
438
439  Revision 591.80  2002/08/06 02:58:01  ajc
440  * Cleaned up the output of digest mode.  It's usable now, but the self-service
441    subscribe/unsubscribe functions are not there yet.
442
443  Revision 591.79  2002/08/05 14:38:11  ajc
444  * rooms.c: corrected a typo reported by Campagnolo (Mike Poulin)
445
446  Revision 591.78  2002/08/03 19:48:40  ajc
447  * NULLify 'roomrec' before attempting partial match in <G>oto
448    (fixes heap corruption when this command is executed)
449
450  Revision 591.77  2002/08/03 04:13:46  ajc
451  * citadel_ipc.c: Attempted to clean up memory allocation
452
453  Revision 591.76  2002/08/01 05:41:53  ajc
454  * Completion of (most of) digest mode.  Still needs some polish.
455
456  Revision 591.75  2002/07/31 04:01:57  ajc
457  * Began implementing "digest mode" for listserving.  (Not complete)
458
459  Revision 591.74  2002/07/28 20:33:13  ajc
460  * Augmented the "headers only" functionality of the message reading API (as
461    well as the options of the server commands which expose it) to allow
462    headers+body, headers only, or body only.
463  * Adjusted message output of IMAP command FETCH BODY[1] when message is in
464    legacy Citadel format.  This fixes a bug exposed by SquirrelMail.
465
466  Revision 591.73  2002/07/23 04:00:06  ajc
467  * Completed the MSGP and MSG4 commands to set the client's preferred MIME
468    content types, and fetch messages with MIME content types.
469
470  Revision 591.72  2002/07/21 22:29:46  ajc
471  * Added in some infrastructure to switch the client's message reading from
472    conventional MSG0 to a MIME-download type thing, like WebCit does.
473
474  Revision 591.71  2002/07/21 15:45:07  error
475  * Remove duplicate call for server time in who_is_online(); IPC does this now
476
477  Revision 591.70  2002/07/21 15:43:57  error
478  * citadel_ipc.c: Fix for segfault on empty messages
479
480  Revision 591.69  2002/07/20 04:05:10  ajc
481  * Updated hack.txt with some fresh new information
482
483  Revision 591.68  2002/07/19 02:28:11  ajc
484  * citadel_ipc.c: changed various buffer lengths from 256 to SIZ in order to
485    accomodate long lines which often spew out (usually from spam unfortunately)
486
487  Revision 591.67  2002/07/18 21:29:37  nbryant
488  added a note about GNU make to the configure script output
489
490  Revision 591.66  2002/07/18 20:21:18  ajc
491  * Eliminated the 512-message limit in the client for reading messages.
492
493  Revision 591.65  2002/07/13 04:12:40  ajc
494  * Don't lie about format types in MSG0 anymore.  We no longer need to.
495
496  Revision 591.64  2002/07/13 03:24:32  ajc
497  * CtdlOutputMsg() caches the most recently fetched message in memory.  This
498    eliminates the need to do multiple database fetches when we go back for
499    additional MIME parts, etc.
500
501  Revision 591.63  2002/07/11 03:40:51  ajc
502  * When outputting a multipart MIME message, supply the client with "pref="
503    and "suff=" lines in addition to the "part=" lines.
504
505  Revision 591.62  2002/07/02 16:27:06  error
506  * prototypes in citadel_ipc.h updated
507
508  Revision 591.61  2002/06/29 23:26:55  error
509  * fixed some memory leaks
510
511  Revision 591.60  2002/06/29 18:36:31  error
512  * tools.c: Massively faster versions of extract_token() and remove_token().
513    These functions can now handle multi-kilobyte sized strings with hundreds
514    of tokens (or more?).
515
516  Revision 591.59  2002/06/29 15:55:07  error
517  * Convert whobbs, serv_info, misc. functions to new IPC code
518
519  Revision 591.58  2002/06/27 03:10:04  error
520  * rooms.c: converted most functions to new IPC code
521
522  Revision 591.57  2002/06/25 15:38:52  error
523  * fixed bug in dotgoto() causing free() to segfault
524
525  Revision 591.56  2002/06/25 15:13:27  error
526  * gotonext() now uses new IPC code to retrieve room listing
527
528  Revision 591.55  2002/06/25 14:21:35  error
529  * remove a debugging trap I accidentally left in the code
530
531  Revision 591.54  2002/06/24 20:17:43  error
532  * Fixed code for client segfault at login
533
534  Revision 591.53  2002/06/24 20:11:00  error
535  * Buffer overflow fixes and minor cleanup in IPC code
536
537  Revision 591.52  2002/06/24 16:07:42  error
538  * Message reading and other functions which use the fmout() screen
539    formatter now use the new IPC code.
540
541  Revision 591.51  2002/06/22 20:09:16  error
542  * Use a new IPC API (in citadel_ipc.c).  Partially converted citadel.c to
543    use the new API.
544
545  Revision 591.50  2002/06/21 12:32:48  ajc
546  * Minor documentation update
547
548  Revision 591.49  2002/06/19 21:52:13  ajc
549  * Support a transient room create as well
550
551  Revision 591.48  2002/06/19 21:42:57  ajc
552  * Added support for "transient goto" which allows entry into a private and/or
553    zapped room without putting the room [back] on your known rooms list.  This
554    is useful for the new administrative functions in WebCit (updating a user's
555    vCard without the Aide suddenly having that user's config room on their
556    list).
557
558  Revision 591.47  2002/06/18 16:34:06  error
559  * room_ops.c: Fix for old room record not being deleted when renaming
560    baseroom or aideroom
561
562  Revision 591.46  2002/06/16 21:01:11  ajc
563  * Allow Aides to create rooms in other users' namespaces (if global access
564    controls allow)
565
566  Revision 591.45  2002/06/15 20:48:50  ajc
567  * Fixed small bug in the e<X>pert mode toggle
568
569  Revision 591.44  2002/06/15 20:14:55  ajc
570  * Fixed a memory allocation bug in the vCard parser
571
572  Revision 591.43  2002/06/15 17:53:59  error
573  * citserver.c: MESG command can now send a different system message based
574    on the developer and client ID of the connected client
575
576  Revision 591.42  2002/06/15 04:52:26  ajc
577  * SpamAssassin connector is now configurable in <.A>ide <S>ysconfig <I>nternet.
578  * Allow more than one SA server (it'll try 'em all)
579  * Don't run SA for logged in users
580
581  Revision 591.41  2002/06/14 20:42:56  ajc
582  * Discovered that spamd works even without the Content-length: command, so I
583    was able to redo the spam checker to work without a temp file.
584
585  Revision 591.40  2002/06/14 20:37:03  ajc
586  * Disabled the spam strings checker I wrote a few days ago.
587  * When receiving SMTP, check to see if spamd (the SpamAssassin daemon) is
588    running on the local machine.  If yes, run the message through it and
589    reject if spam.
590
591  Revision 591.39  2002/06/12 03:42:21  ajc
592  * "Suppress message prompts" has been changed to "Prompt after each message"
593    and of course the effect has been reversed.
594  * "Be unlisted in userlog" has been moved to the end of the list of
595    configuration prompts, so it doesn't interrupt the flow of thought regarding
596    the prompting questions.
597
598  Revision 591.38  2002/06/10 22:25:25  ajc
599  * Configuration for spam filter
600
601  Revision 591.37  2002/06/09 23:59:38  ajc
602  * Started working on the spam filter
603
604  Revision 591.36  2002/06/07 22:10:51  ajc
605  * Added a new message function hook type EVT_SMTPSCAN which permits modules to
606    register hooks that can scan incoming SMTP messages and elect to reject them
607    (due to virus or spam content, for example).
608
609  Revision 591.35  2002/06/07 03:22:13  ajc
610  * Added a module "serv_mrtg" which allows activity reporting to MRTG
611    (http://www.mrtg.org) -- this will replace our stats program.
612
613  Revision 591.34  2002/06/02 16:42:17  error
614  * Support for Ctrl-W to erase a word when editing or at a prompt
615
616  Revision 591.33  2002/05/31 18:34:04  nbryant
617  better curses compatibility, and a couple makefile/configure tweaks
618
619  Revision 591.32  2002/05/28 13:59:02  ajc
620  * Removed the 'netsetup' and 'dnetsetup' utilities (obsolete)
621
622  Revision 591.31  2002/05/24 19:58:13  ajc
623  * Fixed the "idle timeout during paginator prompt" bug by reintroducting the
624    concept of a "half keepalive" and sending them during paginator prompts.
625
626  Revision 591.30  2002/05/23 03:33:21  ajc
627  * Added a GTSN (GeT list of SeeN messages) command
628
629  Revision 591.29  2002/05/20 14:29:59  ajc
630  * commands.c: fixed bug in the scan for idle_threshold= which didn't include
631    the = sign and ended up always setting this value to 0
632
633  Revision 591.28  2002/05/17 03:57:30  ajc
634  * When doing fixed_output() of converted HTML, output the whole block of
635    data at once instead of one character at a time
636
637  Revision 591.27  2002/05/16 04:44:58  ajc
638  * Reduce the number of socket writes when doing fixed_output() to avoid
639    getting killed by overhead.  (Thanks to IO for the insight)
640
641  Revision 591.26  2002/05/14 15:25:34  error
642  * room_ops.c: clarified aide message when room aide is removed
643
644  Revision 591.25  2002/05/14 15:18:43  error
645  * rooms.c: Print name of room aide if any when doing <i>nfo
646
647  Revision 591.24  2002/05/14 01:33:18  error
648  * Fixed some incredibly silly typos
649
650  Revision 591.23  2002/05/14 01:27:18  error
651  * Minor cosmetic changes, extraneous double spaces etc.
652
653  Revision 591.22  2002/05/14 01:15:54  error
654  * Idle threshold on the who list is now customizable in the citadel.rc
655
656  Revision 591.21  2002/05/14 01:09:57  error
657  * citadel.c: spacebar won't read New if there are no new messages
658
659  Revision 591.20  2002/05/12 23:00:11  ajc
660  * Removed an unused variable
661
662  Revision 591.19  2002/05/12 22:57:04  ajc
663  * Removed the unfinished moderation system.
664  * CtdlForEachMessage() - only fetch metadata when hunting for messages with
665    a specified Content-type.  Serious performance boost.
666
667  Revision 591.18  2002/05/05 17:33:09  error
668  * screen.c: fix lack of beeps in curses mode
669
670  Revision 591.17  2002/05/04 02:58:16  ajc
671  * Documented a small protocol change for the STEL command
672
673  Revision 591.16  2002/04/30 03:13:59  ajc
674  * When sending a page that results in the receiver's Sent/Received Pages>
675    room to be created, don't automatically grant the sender access to that room.
676  * Added a parameter to create_room() to implement the above
677
678  Revision 591.15  2002/04/23 13:38:08  ajc
679  * Minor docs update
680
681  Revision 591.14  2002/04/21 21:28:06  ajc
682  * Create the My Citadel Config> room along with the user account
683
684  Revision 591.13  2002/04/20 03:00:01  ajc
685  * One more fix for the RENAME command wrt namespaces.
686
687  Revision 591.12  2002/04/18 18:44:36  nbryant
688  don't use libtool -avoid-version for libcitserver - this might help for
689  OpenBSD
690
691  Revision 591.11  2002/04/17 04:35:06  ajc
692  * Finished the IMAP RENAME command.  (I ended up using nested functions
693    because it made the task much, much easier.  We can fix it later or convert
694    it to C++ if we find this becomes a problem.)
695
696  Revision 591.10  2002/04/15 13:25:47  ajc
697  * Add error responses to imap_rename() and set up subfolder framework
698
699  Revision 591.9  2002/04/14 22:42:49  ajc
700  * Began implementing RENAME command in IMAP.
701
702  Revision 591.8  2002/04/14 22:27:05  ajc
703  * Added access control checking to CtdlRenameRoom()
704
705  Revision 591.7  2002/04/14 22:11:22  ajc
706  * New back end function CtdlRenameRoom() which is used to rename a room and/or
707    move it to a different floor.
708  * cmd_setr() now uses CtdlRenameRoom() to do part of its work
709
710  Revision 591.6  2002/04/10 03:58:40  ajc
711  * Began work on IMAP RENAME
712
713  Revision 591.5  2002/04/09 14:26:43  ajc
714  * Allow INBOX to have subfolders.  There's no longer any reason not to.
715
716  Revision 591.4  2002/04/05 22:31:59  error
717  * Send time-of-day with pages sent via IMAP
718
719  Revision 591.3  2002/04/05 14:34:02  ajc
720  * Minor tweak to nested folder algorithm to handle nesting in mail root
721
722  Revision 591.2  2002/04/05 04:25:56  ajc
723  * Support nested folders in IMAP.  We might want to change the delimiter.
724
725  Revision 591.1  2002/04/04 23:25:30  ajc
726  * Experimental hacking to handle subfolderization in IMAP.  Seems to work ok
727    but it makes Mozilla mail hang.  Will investigate more later...
728
729  Revision 591.0  2002/04/01 05:13:20  ajc
730  * Tagged everything for 5.91 release
731
732  Revision 590.168  2002/04/01 05:12:57  ajc
733  * Prep for 5.91 release
734
735  Revision 590.167  2002/03/29 04:43:15  ajc
736  * Removed the BMBX command.  Mailbox security update now runs automatically when the
737    server starts and it sees data files version <5.91.
738
739  Revision 590.166  2002/03/26 05:58:35  nbryant
740  don't check for a database driver until after the openssl check is
741  complete. if the ld paths aren't set up for the db installation this
742  can interfere with the openssl check because it tries to run a program
743  linked against the libraries we've been finding.
744
745  Revision 590.165  2002/03/26 05:20:46  nbryant
746  removed last vestiges of "#ifdef CIT_CLIENT" conditional compilation,
747  which has been rendered unusable by the build system simplifications
748
749  Revision 590.164  2002/03/26 05:13:32  nbryant
750  fix monstrous shell script syntax in configure.ac
751
752  Revision 590.163  2002/03/26 04:38:31  nbryant
753   * support autoconf 2.53
754   * make a note that people should be using libtool 1.4d
755   * cut some of the more pointless bells and whistles out of the configure
756     script in an effort to make it more maintainable
757   * modularized ipc_c_tcp.c and client_crypto.o so that they're not tied
758     to the curses stuff.
759   * timezone/daylight and other FreeBSD fixes
760   * more effort in the configure script to detect the common
761     bastardizations (ahem, ports) of Berkeley DB without falling down
762
763  Revision 590.162  2002/03/25 03:09:39  nbryant
764  fix warning on platforms where pthread_t may be a pointer
765
766  Revision 590.161  2002/03/25 00:01:50  nbryant
767   * compatibility with Berkeley DB < 3.3
768   * squished symbol clashes with the OK symbol from curses in certain *n[iu]x
769  distributions. this is kind of a pain in the ass, but I had to rename our
770  OK to CIT_OK :-(
771
772  Revision 590.160  2002/03/22 04:35:38  ajc
773  * Handle vCard registration updates for users other than the one currently
774    logged in.  (Allows administrative editing of contact information.)
775
776  Revision 590.159  2002/03/20 19:03:27  ajc
777  * Don't re-declare timezone variables ('cuz FreeBSD chokes on that)
778
779  Revision 590.158  2002/03/19 04:34:42  ajc
780  * mime_parser.c: minor changes for easier porting between Citadel and WebCit
781
782  Revision 590.157  2002/03/19 04:19:33  ajc
783  * Saw what IO did with strchr() and did the same in a few more places
784
785  Revision 590.156  2002/03/17 00:08:02  error
786  * mime_parser.c: more robust parsing of Content-Type header
787
788  Revision 590.155  2002/03/16 05:22:59  ajc
789  * Post an error message to Aide> when unlink() is unable to delete old
790    database log files.
791
792  Revision 590.154  2002/03/14 04:35:26  nbryant
793  avoid symbol clash with curses' "timeout" function (which may be a macro
794  in some versions)
795
796  Revision 590.153  2002/03/14 04:24:20  nbryant
797  support window resizing in curses mode
798
799  Revision 590.152  2002/03/13 04:11:11  nbryant
800  fix up minor gotcha introduced by fgets change
801
802  Revision 590.151  2002/03/13 03:58:29  ajc
803  * Site-configurable option "Allow system Aides to gain access to mailboxes"
804
805  Revision 590.150  2002/03/13 03:34:38  nbryant
806  /* when running in curses mode, the scroll bar in most
807     xterm-style programs becomes useless, so it makes sense to
808     pause after a screenful of pages if the user has been idle
809     for a while. However, this is annoying to some of the users
810     who aren't in curses mode and tend to leave their clients
811     idle. keepalives become disabled, resulting in getting booted
812     when coming back to the idle session. but they probably have
813     a working scrollback in their terminal, so disable it in this
814     case:
815   */
816  if (!is_curses_enabled())
817         lines_printed = 0;
818
819  Revision 590.149  2002/03/12 23:34:37  nbryant
820  use ncurses in preference to curses if it's installed; it handles
821  background colors properly on dtterm, has a larger color pair palette,
822  and has a bigger terminal database than solaris curses
823
824  Revision 590.148  2002/03/12 22:47:17  nbryant
825  curses fix: map our normal color pairs into the 0-7 range instead of 1-8,
826  in order to make our pairs fit on terminals such as dtterm where COLOR_PAIRS=8.
827  map the white/blue color pair onto 8 instead of 9, but only if that slot
828  is available; fall back on white/black otherwise.
829
830  it seems there may be an off-by-one error in the color pair manpages for
831  the various curses packages (?) if not, our 0 entry is unusable, but that's
832  the DIM_BLACK color and we don't use it anyway.
833
834  Revision 590.147  2002/03/12 22:17:20  ajc
835  * Give mailbox owners access to "who knows room" command
836
837  Revision 590.146  2002/03/12 21:08:03  nbryant
838  support color under Solaris curses
839
840  Revision 590.145  2002/03/12 19:59:40  ajc
841  * Access control change: do not treat mailboxes as guessname rooms for Aides.
842    Open up INVT/KICK commands to non-Aides for their mailboxes.
843
844  Revision 590.144  2002/03/12 04:30:52  nbryant
845  if a filesystem node exists at /var/run/egd-pool, try to connect to it as
846  the EGD (Entropy Gathering Daemon) or PRNGD (pseudorandom number
847  generator daemon) socket and seed OpenSSL's RNG.
848
849  this is necessary on solaris and other systems which lack /dev/urandom.
850
851  Revision 590.143  2002/03/12 03:43:26  nbryant
852  squished the last remaining calls to sprintf
853
854  Revision 590.142  2002/03/12 03:36:55  nbryant
855  replace calls to gets with fgets
856
857  Revision 590.141  2002/03/12 03:19:09  nbryant
858  more sprintf bashing. now the only ones left are in mime_parser
859
860  Revision 590.140  2002/03/12 01:33:42  nbryant
861   - pass -Wcast-qual to gcc
862   - more sprintf bashing
863
864  Revision 590.139  2002/03/12 00:03:43  nbryant
865  more sprintf removals
866
867  Revision 590.138  2002/03/11 06:00:21  nbryant
868  use <db.h> before <db3/db.h> or <db4/db.h>
869  this is the only way i can think of to make it work everywhere; people on
870  systems like FreeBSD where the ports work the other way around will have to
871  specify an extra -I flag in their CPPFLAGS variable.
872
873  Revision 590.137  2002/03/11 05:42:46  nbryant
874  removed all references to sprintf from several files (not all files yet)
875  and replace with snprintf
876
877  Revision 590.136  2002/03/11 04:16:20  nbryant
878  warning fixes on sparc-sun-solaris2.8 with gcc 3.0.4, mostly for *printf
879  format strings
880
881  Revision 590.135  2002/03/11 03:55:24  nbryant
882   - fixes for building without OpenSSL
883   - setenv doesn't exist on all systems, use putenv instead
884   - support Solaris' curses implementation
885
886  Revision 590.134  2002/03/09 22:52:04  ajc
887  * Applied a patch submitted by <xperc@hotmail.com> to fix a potential buffer
888    overflow problem in lprintf().  I also did the same fix to cprintf().
889
890  Revision 590.133  2002/03/09 16:47:57  ajc
891  * Added BMBX to fix a problem
892
893  Revision 590.132  2002/03/09 06:18:37  ajc
894  * one more tweak
895
896  Revision 590.131  2002/03/09 05:22:29  ajc
897  * this should do it.
898
899  Revision 590.130  2002/03/09 05:02:20  ajc
900  * Attempts to fix the access control crap
901
902  Revision 590.129  2002/03/08 05:42:02  ajc
903  * Patch to allow invitations and admin access to mailbox rooms.  NEEDS TESTING!
904
905  Revision 590.128  2002/03/07 04:30:37  ajc
906  * Force recipient only in Mail>, not in all mailbox rooms
907
908  Revision 590.127  2002/03/05 22:45:40  error
909  * Autoconf fixes for DB4 support
910
911  Revision 590.126  2002/03/05 04:47:49  ajc
912  * vcard.c: another API update
913
914  Revision 590.125  2002/03/04 05:29:39  ajc
915  * Made a small API change to vcard.c for WebCit, brought the change over here too
916    in order to keep vcard.c identical everywhere.
917
918  Revision 590.124  2002/03/03 06:48:25  ajc
919  * Client and server options to disable self-service user account creation
920
921  Revision 590.123  2002/03/03 06:31:58  ajc
922  * Added password starred-out entry to newprompt() and strprompt()
923  * Applied the above setting to password set/change in <.A>ide <U>seredit
924
925  Revision 590.122  2002/03/03 06:18:45  ajc
926  * Implemented the CREU server command to administratively create user accounts
927  * Added the ability to create new user accounts to <.A>ide <U>seredit
928
929  Revision 590.121  2002/03/03 06:05:16  ajc
930  * Split up some of the code in order to prepare for user accounts to be
931    administratively created without logging in to them.
932
933  Revision 590.120  2002/03/02 05:56:48  ajc
934  * Properly implemented the network filter list.  Finished the server module and
935    did a client-side <.A>ide <S>ysconfig <F>ilterlist command.
936
937  Revision 590.119  2002/03/01 04:24:20  ajc
938  * Cosmetic change to Received: line
939
940  Revision 590.118  2002/03/01 04:16:22  ajc
941  * CtdlReadMessageBody() -- fixed bug that caused the prepend buffer to be
942    discarded instead of prepended.  "Received:" lines now work.
943
944  Revision 590.117  2002/02/23 19:20:51  ajc
945  * Do the use table purge in two phases to avoid crashy crashy
946
947  Revision 590.116  2002/02/20 22:42:19  ajc
948  * Started adding better management of source IP addressses in SMTP service
949
950  Revision 590.115  2002/02/15 04:28:57  ajc
951  * Wrote the expire/purge routine for the new use table
952
953  Revision 590.114  2002/02/15 04:05:08  ajc
954  * Began implementation of a networker use table that doesn't chew up oodles
955    of CPU time.  (It uses a cdb instead.)
956
957  Revision 590.113  2002/02/15 03:40:06  ajc
958  * Stu's changes (which he checked in without making any ChangeLog comments,
959    bad Stu!) didn't build properly without curses.  Added #ifdef's.
960
961  Revision 590.112  2002/02/13 22:15:10  ajc
962  * That was stupid.
963
964  Revision 590.111  2002/02/13 22:04:11  ajc
965  * added vcard_to_html() function
966
967  Revision 590.110  2002/02/13 15:48:55  ajc
968  * Allow the READ command to return packets bigger than 1 byte.  (ooops!)
969
970  Revision 590.109  2002/02/12 20:15:25  ajc
971  * Threw in a few more #ifdef's so the client build doesn't barf on
972    non-curses systems
973  * Added rc_prompt_control (<N>ext/<S>top active at paginator: on/off/user)
974
975  Revision 590.108  2002/02/11 15:52:10  ajc
976  * Don't crash when deleting "purge this vCard" messages
977
978  Revision 590.107  2002/02/10 22:36:41  nbryant
979   - replace cdb_trunc with a complete version of the code i had been
980     working on; fallback code for db < 3.3.x needed
981   - change 'can't connect to host.port' to 'can't connect to host:port'
982
983  Revision 590.106  2002/02/08 22:39:08  ajc
984  * If there's already a Subject line in memory, display it below the usual
985    headers when the user hits <E>
986
987  Revision 590.105  2002/02/08 22:36:23  ajc
988  * Changed the logic for printing RFC822 addresses (again)
989  * Implemented cdb_trunc() in database_sleepycat.c, using db_truncate()
990    (We need to either provide an alternative implementation or require DB >=3.3)
991  * Automatically Re: subject line in the client where appropriate
992
993  Revision 590.104  2002/02/08 19:02:25  ajc
994  * Added client and server side support for entering Subject lines in
995    messages when not using RFC822.
996
997  Revision 590.103  2002/02/08 18:10:07  ajc
998  * When outputting a message in non-RFC822 format, don't display an Internet
999    address if the user is local.
1000
1001  Revision 590.102  2002/02/07 04:42:49  ajc
1002  * Silently refuse to add directory entries for Internet addresses already
1003    belonging to other users.
1004  * cdb_trunc() for CtdlDirectoryInit: implemented for GDBM, stubbed for DB
1005
1006  Revision 590.101  2002/02/05 05:05:53  ajc
1007  * Don't crash when posting if the user doesn't have an Internet directory address
1008
1009  Revision 590.100  2002/02/03 15:29:03  error
1010  * fixed a silly oversight in serv_crypto.c when removing the ETLS command
1011
1012  Revision 590.99  2002/02/03 15:21:48  error
1013  * Remove the ETLS command, it is no longer needed
1014
1015  Revision 590.98  2002/02/02 21:44:04  ajc
1016  * If a user has at least one valid Internet directory address, stamp it onto
1017    any outgoing messages.
1018
1019  Revision 590.97  2002/02/01 05:11:26  ajc
1020  * Added a QDIR protocol command to do quick-and-dirty queries of the directory
1021  * In the client, check the directory for conflicts when selecting email addr.
1022
1023  Revision 590.96  2002/01/31 05:13:44  ajc
1024  * When deleting a vCard from the Global Address Book room, remove the
1025    corresponding address in the directory.  (Not tested.)
1026
1027  Revision 590.95  2002/01/30 19:03:41  ajc
1028  * Added a new DeleteFunctionHook type of thing.  These get called when a
1029    message is being deleted from a room.
1030  * When deleting messages from a room, do the AdjRefCount() calls (and now,
1031    the PerformDeleteHooks() calls) in a second pass.  This keeps that stuff
1032    outside of the S_QUICKROOM critical section.
1033
1034  Revision 590.94  2002/01/27 06:39:45  error
1035  * file_ops.c: fixed bug in cmd_read() which could cause server to report
1036    the wrong number of bytes for the client to download
1037
1038  Revision 590.93  2002/01/26 21:33:38  ajc
1039  * More internet addressing and global directory stuff.  I think it's all working now
1040    except for the purging of old entries.
1041
1042  Revision 590.92  2002/01/26 11:02:37  error
1043  * citadel.spec cleaned up
1044
1045  Revision 590.91  2002/01/26 09:23:40  error
1046  * setup now has a silent running mode (-q option) where it silently sets
1047    defaults for everything.  This is intended for use in scripts such as
1048    the RPM packages, eliminating a step from the installation process.
1049
1050  Revision 590.90  2002/01/26 09:19:16  error
1051  * citadel.spec has been completely overhauled, we can make RPMs now!
1052
1053  Revision 590.89  2002/01/26 04:59:57  ajc
1054  * smtp FROM command now validates sender using the validate_recipients() loop
1055    (yeah, it's good for that too) making it directory-aware
1056
1057  Revision 590.88  2002/01/26 04:01:10  error
1058  * Formatter now uses more of the available screen width
1059
1060  Revision 590.87  2002/01/26 03:57:30  error
1061  * Revised status_line() display, it's much more compact now
1062
1063  Revision 590.86  2002/01/26 03:50:26  error
1064  * Better error reporting in connection_died(), kills curses before printing
1065    error message, prints last errno.
1066
1067  Revision 590.85  2002/01/25 05:19:03  ajc
1068  * Greatly simplified the logic for validating recipient addresses for incoming
1069    SMTP.  This logic destroys the whitespace mangling for local names; I will
1070    fix this tomorrow.
1071
1072  Revision 590.84  2002/01/25 04:36:35  ajc
1073  * fixz to allow incoming vCards in the address book to actually get processed
1074
1075  Revision 590.83  2002/01/24 06:52:54  error
1076  * citadel_decls.h: fix unresolved extern errors
1077
1078  Revision 590.82  2002/01/23 05:04:05  ajc
1079  * Add vCards from incoming network messages in the GAB to the directory.
1080
1081  Revision 590.81  2002/01/23 03:39:32  ajc
1082  * Added a new hook type for handling incoming network messages
1083  * Wrote a skeleton module for net filtering
1084
1085  Revision 590.80  2002/01/22 10:46:25  error
1086  * read_message() and fmout() now accept a FILE to which to send their
1087    output; this fixes quoting in the fullscreen client
1088
1089  Revision 590.79  2002/01/20 08:03:43  error
1090  * curses client: use the status line as "input" line in chat mode
1091
1092  Revision 590.78  2002/01/20 07:43:07  error
1093  * serv_chat.c: Server no longer crashes when CHATLOG can't be opened
1094
1095  Revision 590.77  2002/01/20 05:22:07  error
1096  * curses client:  allow goodbye message to be seen on some terminals
1097
1098  Revision 590.76  2002/01/19 16:56:31  error
1099  * Fixed color support, now works when rc_ansi_color is on or auto
1100
1101  Revision 590.75  2002/01/19 15:10:25  error
1102  * Cosmetics for the client status line
1103
1104  Revision 590.74  2002/01/19 11:59:33  error
1105  * A real status line for the text client
1106
1107  Revision 590.73  2002/01/19 10:08:43  error
1108  * fix link for libcitserver.so to tools.o which I broke (oops!)
1109
1110  Revision 590.72  2002/01/19 09:59:08  error
1111  * Full-screen curses support for Citadel text client
1112
1113  Revision 590.71  2002/01/17 20:11:05  nbryant
1114  remove lock.c/lock.h; don't need them for what i was planning after all
1115
1116  Revision 590.70  2002/01/17 10:48:36  error
1117  * cosmetic fixes in the new trace file functionality
1118
1119  Revision 590.69  2002/01/17 10:32:14  error
1120  * lprintf() now logs the session ID for each log entry within a session.
1121    Also SMTP, IMAP, POP3 and Citadel protocol commands are differentiated.
1122
1123  Revision 590.68  2002/01/17 10:16:09  error
1124  * migratenet.c: cygwin fix: include limits.h
1125
1126  Revision 590.67  2002/01/17 10:13:31  error
1127  * serv_ical.c: set expire policy for My Calendar> to manual
1128
1129  Revision 590.66  2002/01/17 07:18:11  ajc
1130  * Changed all "free software" references to "open source" in order
1131    to piss off Richard Stallman
1132
1133  Revision 590.65  2002/01/17 00:22:35  nbryant
1134  added lock.[ch]: recursive read/write locking support. (not actually used yet)
1135
1136  Revision 590.64  2002/01/15 12:41:53  error
1137  * Implement alternate_semantics (see comments in citadel.rc file)
1138
1139  Revision 590.63  2002/01/15 11:07:51  ajc
1140  * vcard.c: updated vCard "object methods" to handle multiple instances of
1141    the same key name when necessary.
1142
1143  Revision 590.62  2002/01/15 06:38:39  error
1144  * Update citadelapi.txt with CtdlUnregister* calls, LogHook calls
1145
1146  Revision 590.61  2002/01/15 06:20:18  error
1147  * Modules can now unregister any of their hooks (though none yet take
1148    advantage of this).
1149
1150  Revision 590.60  2002/01/14 08:49:13  error
1151  * Fixed bug in cmd_cre8() causing protocol to get out of sync when creating
1152    a new room
1153
1154  Revision 590.59  2002/01/13 04:46:31  ajc
1155  * Allow incoming SMTP to relay to other Citadel nodes for whom we are
1156    providing directory service.
1157
1158  Revision 590.58  2002/01/13 04:06:33  ajc
1159  * Repaired the problems I created when moving the_mime_parser()'s variables
1160    from the stack to the heap.  (Hint: sizeof(char *) is 4, not 4096)
1161
1162  Revision 590.57  2002/01/11 15:46:57  error
1163  * Allow users to move/copy messages between personal rooms
1164
1165  Revision 590.56  2002/01/11 04:59:00  ajc
1166  * Finished most of the work for the Global Address Book.
1167
1168  Revision 590.55  2002/01/11 04:37:03  ajc
1169  * More code for the Global Address Book
1170
1171  Revision 590.54  2002/01/11 02:57:35  error
1172  * Don't print **** when sending a page or mail from an anonymous-only room
1173
1174  Revision 590.53  2002/01/10 21:22:37  ajc
1175  * Minor changes for global directory service
1176
1177  Revision 590.52  2002/01/10 04:29:28  ajc
1178  * Minor updates for directory service
1179
1180  Revision 590.51  2002/01/09 23:12:40  ajc
1181  * Allow users to zap mailbox rooms
1182
1183  Revision 590.50  2002/01/09 04:37:32  ajc
1184  * Finished the callback stuff for vCard address extraction
1185
1186  Revision 590.49  2002/01/09 04:05:53  ajc
1187  * Began writing code to harvest Internet e-mail addresses from vCards, and
1188    hacked together a temporary version (and writeup) of the IGAB command.
1189
1190  Revision 590.48  2002/01/08 16:34:22  ajc
1191  * serv_vcard.c: cosmetic cleanup
1192
1193  Revision 590.47  2002/01/06 22:44:21  error
1194  * Enable/disable encryption in client from command line and/or citadel.rc
1195
1196  Revision 590.46  2002/01/06 21:25:26  ajc
1197  * sysdep.c: in client_write(), handle redirect_fp and redirect_sock *before*
1198    handling redirect_ssl, because these need to be done the same way regardless
1199    of client session crypto
1200  * serv_crypto.c: pasted a bunch of Nathan's #ifdef blocks from sysdep.c in
1201    order to gain greater portability (or even to get it to compile on splorph)
1202
1203  Revision 590.45  2002/01/06 11:13:33  error
1204  * Enable SSL/TLS support in the client (again)
1205
1206  Revision 590.44  2002/01/06 11:11:31  error
1207  * Enable SSL/TLS in the client
1208
1209  Revision 590.43  2002/01/06 10:49:55  error
1210  * Add some #includes I apparently somehow missed
1211
1212  Revision 590.42  2002/01/06 10:33:10  error
1213  * SSL/TLS support for the Citadel/UX wire protocol
1214
1215  Revision 590.41  2002/01/06 08:54:58  error
1216  * user_ops.c: fixed become_session() when calling EVT_LOGOUT session hooks
1217
1218  Revision 590.40  2002/01/05 22:31:22  ajc
1219  * Removed some protocol commands and writeups that are no longer necessary
1220  * Began some of the framework for the Global Address Book
1221
1222  Revision 590.39  2002/01/05 12:44:43  error
1223  * serv_chat.c: allow a session to be killed while in chat
1224
1225  Revision 590.38  2002/01/05 12:31:04  error
1226  * user_ops.c: become_session() when calling EVT_LOGOUT session hooks
1227
1228  Revision 590.37  2002/01/05 04:51:36  error
1229  * stats now sorts its top 20 lists properly
1230
1231  Revision 590.36  2002/01/04 20:57:36  nbryant
1232  cygwin fix
1233
1234  Revision 590.35  2002/01/04 20:46:26  nbryant
1235  Makefile fix for cygwin (fix migratenet linkage)
1236
1237  Revision 590.34  2002/01/04 20:43:26  nbryant
1238  configure/genstamp: check for struct tm.tm_gmtoff
1239
1240  Revision 590.33  2002/01/03 22:01:17  ajc
1241  * Fixed mail to "sysop"
1242
1243  Revision 590.32  2002/01/03 21:35:07  ajc
1244  * I think this is the last of the fixes for the new submit queue.
1245
1246  Revision 590.31  2002/01/03 12:27:35  error
1247  * Fixed my name in docs/copyright.txt, why didn't I notice that before?
1248
1249  Revision 590.30  2002/01/03 12:21:02  error
1250  * Autoconf support for recognizing OpenSSL
1251
1252  Revision 590.29  2002/01/03 04:52:28  ajc
1253  * serv_network.c: migrated deliveries and bounces to the new message
1254    submission subsystem.  NOT TESTED.
1255
1256  Revision 590.28  2002/01/01 21:32:10  ajc
1257  * Finished the updates to serv_smtp.c, although I think there may be a
1258    problem with one-too-many reference counts when a message is submitted
1259    via SMTP.
1260
1261  Revision 590.27  2001/12/31 20:15:13  ajc
1262  * Almost finished converting serv_smtp.c to the new message submission
1263    framework.  Still not done yet; don't use this.
1264
1265  Revision 590.26  2001/12/30 06:20:46  error
1266  * More keys while reading messages:  Q or S same as Ctrl-C, N same as Ctrl-O.
1267
1268  Revision 590.25  2001/12/30 05:50:46  error
1269  * Security:  Citadel now drops privileges when called from telnetd, also
1270    checks to make sure you didn't set the setuid/setgid bits.  No more
1271    loginwrapper.sh!
1272
1273  Revision 590.24  2001/12/29 05:19:32  ajc
1274  * Minor cosmetic hack
1275
1276  Revision 590.23  2001/12/29 04:21:22  nixo
1277  stupid me. I didn't realize that asking for the header did what I wanted
1278  so I changed my little 'y' hack to not bother reading the text of the
1279  message. a little saving on the bandwidth.
1280
1281  Revision 590.22  2001/12/28 22:32:38  nixo
1282  Added a "read m<y> next" function in read mode. It will skip to the next
1283  message by the user in the current message list (whatever mode you're in
1284  be it read forward, last 50, whatever.)
1285
1286  Revision 590.21  2001/12/28 11:06:53  error
1287  * More server support for hostnames up to 63 characters (oops I missed a spot)
1288
1289  Revision 590.20  2001/12/28 09:39:10  error
1290  * Client support for hostnames up to 63 characters: truncated at 24 in
1291    short who list, full display in long who list.
1292
1293  Revision 590.19  2001/12/28 09:28:04  error
1294  * Server support for hostnames up to 63 characters
1295
1296  Revision 590.18  2001/12/26 05:01:30  ajc
1297  * Added a new developer ID for Anticlimactic Teleservices
1298
1299  Revision 590.17  2001/12/23 10:00:43  error
1300  * Pages are once again formatted to the caller's screen width.
1301
1302  Revision 590.16  2001/12/23 09:57:47  error
1303  * tools.c: added parameter to fmt_date() to allow for printing the seconds
1304    along with the time, e.g. 12:34 pm or 12:34:56 pm
1305
1306  Revision 590.15  2001/12/20 04:54:26  ajc
1307  * If you paid for this software, someone is ripping you off.
1308
1309  Revision 590.14  2001/12/18 08:24:56  nbryant
1310  more lovely configure tweaks (include paths for db)
1311
1312  Revision 590.13  2001/12/18 06:04:08  ajc
1313  * Moved the buffers in the_mime_parser() from the stack to the heap, because
1314    it was crashing boxen with small stack sizes.
1315
1316  Revision 590.12  2001/12/18 05:54:16  ajc
1317  * Added more load_floorlist() commands to the beginning and end of functions
1318    in the client that manipulate the floor list.  This fixes a bug in which
1319    new floors don't show up right away after being created.
1320
1321  Revision 590.11  2001/12/17 08:14:26  nbryant
1322  restored the checks for /usr/include/db3 and /usr/local/include/db3
1323  in configure.  there are too many variations on db installation; this is
1324  getting messy :-(
1325
1326  Revision 590.10  2001/12/17 08:00:45  nbryant
1327  set the pthreads stack size to 128K because FreeBSD's default of 64K
1328  seems too small. fixes crashes under FreeBSD.
1329
1330  Revision 590.9  2001/12/16 00:50:14  error
1331  * Added usersupp.lastcall to the parameters returned from the PASS/PAS2
1332    commands in logged_in_response().
1333
1334  Revision 590.8  2001/12/14 21:33:18  nbryant
1335  finally changed configure to complain if there's no database driver ;)
1336
1337  Revision 590.7  2001/12/14 08:29:30  error
1338  * Security: trace file is now only readable by owner, since it contains
1339    plain text passwords.
1340
1341  Revision 590.6  2001/12/14 07:04:24  ajc
1342  * Now you can send mail to yourself.  Hi from Stu.
1343
1344  Revision 590.5  2001/12/14 06:58:12  ajc
1345  * Hi from Stu
1346
1347  Revision 590.4  2001/12/13 22:36:30  nbryant
1348  make configure search for /usr/local/BerkeleyDB.4.0
1349
1350  Revision 590.3  2001/12/13 22:29:57  nbryant
1351  make it compile with Berkeley DB 4.0.x
1352
1353  Revision 590.2  2001/12/11 21:31:07  nbryant
1354   - test for -ldb3 before -ldb
1355
1356  Revision 590.1  2001/12/11 20:04:41  nbryant
1357   - fix library flags, includes for portability
1358   - malloc.h is deprecated
1359   - fix genstamp, hopefully
1360   - fix size_t *printf handling for portability
1361
1362  Revision 590.0  2001/12/08 03:31:41  ajc
1363  * THIS IS 5.90
1364
1365  Revision 580.95  2001/12/08 03:30:37  ajc
1366  * Final changes to networking docs for 5.90
1367
1368  Revision 580.94  2001/12/06 05:13:34  ajc
1369  * Added the documentation for room sharing and listserv
1370
1371  Revision 580.93  2001/12/04 05:24:15  ajc
1372  * Added two more bytes to the possible length of shared secrets in networking
1373    due to some legacy support requirements.
1374
1375  Revision 580.92  2001/12/04 05:16:19  ajc
1376  * mime_parser.c: change to memory allocation algorithm ... some badly done
1377    messages were crashing the server
1378
1379  Revision 580.91  2001/12/03 22:48:16  ajc
1380  * ooops.  Look for the QR2_SYSTEM flag in QRflags2, not QRflags.
1381
1382  Revision 580.90  2001/12/03 17:02:50  ajc
1383  * dynloader.c: fixed improperly done declaration and mallok()
1384
1385  Revision 580.89  2001/12/03 04:28:02  ajc
1386  * mime_parser.c: now uses built-in functions to decode base64 and
1387    quoted-printable attachments, instead of piping data to outboard programs.
1388
1389  Revision 580.88  2001/12/03 02:45:46  ajc
1390  * Began implementing some code to handle multiple recipients (but #define'd
1391    it all out because we're approaching a release)
1392
1393  Revision 580.87  2001/12/03 01:50:17  ajc
1394  * When sending mail, copy to the sender's "Sent Items>" room instead of to
1395    the sender's "Mail>" room.
1396
1397  Revision 580.86  2001/12/02 23:36:24  ajc
1398  * On a new system, set the default new user level to 4 instead of 1.
1399
1400  Revision 580.85  2001/12/02 23:27:01  ajc
1401  * Removed references to the old networker from the documentation.  Did not
1402    write any new documentation, so what's there now is kind of sparse.
1403
1404  Revision 580.84  2001/12/02 02:42:55  ajc
1405  * Implemented new room flag QR2_SYSTEM which supresses the room from all
1406    room listings, even for Aides (but it's still gotoable).  This will be used
1407    for rooms which hold system configuration and message queues.
1408
1409  Revision 580.83  2001/12/01 19:23:26  ajc
1410  * clientsocket.c: implement socket timeouts for read operations
1411
1412  Revision 580.82  2001/12/01 17:00:23  ajc
1413  * serv_smtp.c: when multiple MX's are the same preference, randomize them
1414
1415  Revision 580.81  2001/12/01 07:18:28  ajc
1416  * Fixed an SMTP delivery problem that was causing certain classes of
1417    transient errors to cause a message to never be delivered.
1418
1419  Revision 580.80  2001/12/01 05:26:01  ajc
1420  * Added a command "SMTP" to the Citadel protocol, to do some unimportant
1421    utility/diagnostic functions.
1422
1423  Revision 580.79  2001/11/27 17:08:29  ajc
1424  * When calling an external editor, set the environment variable
1425    WINDOW_TITLE to an appropriate value.
1426
1427  Revision 580.78  2001/11/26 03:27:08  ajc
1428  * new algorithm to load the use table
1429
1430  Revision 580.77  2001/11/17 19:55:08  ajc
1431  * Updated some of the documentation
1432
1433  Revision 580.76  2001/11/16 04:43:12  ajc
1434  * Eliminated the sock_puts_crlf() function and ensured that all SMTP client
1435    commands are sent out using a single sock_write() call.  There are broken
1436    SMTP server implementations that can't handle SMTP commands split across
1437    multiple writes.  (Thanks to Andru Luvisi and Ben Mehlman for the idea.)
1438
1439  Revision 580.75  2001/11/15 04:11:30  ajc
1440  * hack.doc: updated to reflect Cit86Net compatibility fields removed from the
1441    file format (since we dumbed down the gateway software)
1442  * ipc_c_tcp.c: removed SOCKS4 support.  Nobody uses it anymore.
1443  * ipc_c_tcp.c: fixed a bug which caused the client to fall back to defaultPort
1444    if a numeric port number was specified instead of a service name
1445
1446  Revision 580.74  2001/11/14 02:59:01  ajc
1447  * Network run frequency is now a site-definable setting
1448
1449  Revision 580.73  2001/11/13 22:05:23  ajc
1450  * Re-introduced the ability to enter IGnet mail into the system.
1451
1452  Revision 580.72  2001/10/29 22:59:22  ajc
1453  * Renamed "SuppMsgInfo" to "MetaData" because that's what it is
1454
1455  Revision 580.71  2001/10/29 16:39:54  ajc
1456  * Finished the migratenet utility (finally).
1457
1458  Revision 580.70  2001/10/28 05:18:51  ajc
1459  * migratenet almost finished
1460
1461  Revision 580.69  2001/10/26 04:26:45  ajc
1462  * more work on the net migrator
1463
1464  Revision 580.68  2001/10/23 03:37:33  ajc
1465  * Threw a few more lines of code into migratenet.c
1466
1467  Revision 580.67  2001/10/20 18:10:50  ajc
1468  * migratenet.c: added (not even close to being finished)
1469
1470  Revision 580.66  2001/10/17 21:07:20  nbryant
1471  further format string cleanups (for i686-linux type sizes)
1472
1473  Revision 580.65  2001/10/17 20:41:07  nbryant
1474   - declare *printf format specifiers if gcc detected
1475   - format string fixes (compiles w/o warnings on alpha osf/1)
1476
1477  Revision 580.64  2001/10/17 19:40:38  nbryant
1478  warning fixes and cleanups for 64-bit machines
1479
1480  Revision 580.63  2001/10/16 20:47:37  nbryant
1481  - backed out -export-dynamic, it doesn't do anything and i've found the real
1482  problem
1483  - remove declaration for make_message
1484
1485  Revision 580.62  2001/10/16 19:18:49  nbryant
1486  backed out that compiler detection change for Tru64. it's not incredibly
1487  important and results in broken autoconf macro expansions.
1488
1489  Revision 580.61  2001/10/16 18:36:33  nbryant
1490  reinstate -export-dynamic for citserver in case libtool decides to build
1491  static libraries (why?)
1492
1493  Revision 580.60  2001/10/16 18:21:53  nbryant
1494  add some explanatory text to bootstrap
1495
1496  Revision 580.59  2001/10/16 17:43:53  nbryant
1497   - further configure tweaks for FreeBSD and Tru64 Unix
1498   - updated to latest libtool configure fragment
1499   - there are two functions named make_message. (?) so declare them both
1500     static.
1501
1502  Revision 580.58  2001/10/16 01:48:55  nbryant
1503  - configury tweaks for a /usr/include/db3 goof and Digital/Tru64 Unix
1504  - #ifdef out inline on non-GCC compilers
1505
1506  Revision 580.57  2001/10/15 19:50:50  ajc
1507  * Fixed a bug in the loopzapper that was corrupting the use table saved copy.
1508  * Post notification in Aide> when the loopzapper catches a message.
1509
1510  Revision 580.56  2001/10/12 22:41:11  ajc
1511  * Wrote the rest of the use table code.  Finished except for a bug.
1512
1513  Revision 580.55  2001/10/10 18:35:12  ajc
1514  * Comments & cosmetics for previous update
1515
1516  Revision 580.54  2001/10/10 17:12:54  ajc
1517  * Bugfix for MSG0 command to properly handle multipart/alternative
1518
1519  Revision 580.53  2001/10/06 21:32:29  ajc
1520  * Finished the concurrency check for network polling.  (Now works both for
1521    polling and being polled.  Severe UUCP deja vu.)
1522
1523  Revision 580.52  2001/10/06 20:28:06  ajc
1524  * Began implementing some concurrency stuff for the networker
1525
1526  Revision 580.51  2001/10/06 19:51:47  ajc
1527  * Stripped the build of obsolete parts of the old networker no longer in use.
1528
1529  Revision 580.50  2001/10/03 20:05:50  ajc
1530  * serv_smtp.c: implement RFC2920 ESMTP "pipelining" extension on the server
1531    side.  (No changes required other than advertising the extension.)
1532
1533  Revision 580.49  2001/10/03 03:15:16  ajc
1534  * Implemented BOUNCE BOUNCE BOUNCE
1535
1536  Revision 580.48  2001/10/02 03:04:30  ajc
1537  * Allow non-Aides to terminate sessions belonging to them
1538
1539  Revision 580.47  2001/09/24 18:55:13  ajc
1540  * Completed migrating the "netpoll" utility into the serv_network module.
1541    Removed this utility.
1542
1543  Revision 580.46  2001/09/21 20:58:25  nbryant
1544  support different log_archive prototype in DB versions prior to 3.3
1545
1546  Revision 580.45  2001/09/20 04:17:10  ajc
1547  * Inbound network authentication working.  Fixed a bug in the split-horizon
1548    algorithm.  Still need to move the 'netpoll' command into the server.
1549
1550  Revision 580.44  2001/09/18 04:05:04  ajc
1551  * Added host/IP and port to node config (client side only)
1552
1553  Revision 580.43  2001/09/17 23:55:45  ajc
1554  * Support for IGnet routing (not tested)
1555
1556  Revision 580.42  2001/09/16 05:44:51  ajc
1557  * serv_smtp.c: instead of doubling delivery retry times unbounded, set a
1558    maximum retry time of SMTP_RETRY_MAX (currently set to 12 hours)
1559
1560  Revision 580.41  2001/09/09 16:19:29  error
1561  * Updated PAM configuration file citadel.pam for Red Hat 7.x.
1562
1563  Revision 580.40  2001/09/09 03:19:38  ajc
1564  * cdb_cull_logs() now removes log files as soon as the log_archive() function
1565    says it's ok to do so.
1566
1567  Revision 580.39  2001/09/08 18:58:38  ajc
1568  * More changes to the new networker.  Added client command for room sharing.
1569
1570  Revision 580.38  2001/09/07 04:05:27  ajc
1571  * You guessed it: still more code for the new networker.
1572
1573  Revision 580.37  2001/09/06 05:47:29  nbryant
1574  check for /usr/include/db3 (for RedHat 6.2; others?)
1575
1576  Revision 580.36  2001/09/06 05:23:14  nbryant
1577  #include fix for glibc 2.1.3
1578
1579  Revision 580.35  2001/09/06 04:02:34  ajc
1580  * A few more updates to the networker
1581
1582  Revision 580.34  2001/09/06 03:32:41  nbryant
1583  build fix for sparc-sun-solaris2.8; i think the dependencies should be
1584  set up properly for all platforms now.
1585
1586  Revision 580.33  2001/09/06 02:55:27  nbryant
1587  build fix for Linux
1588
1589  Revision 580.32  2001/09/06 02:49:22  ajc
1590  * Fixed paste-post mode (<.E>nter <A>scii) to append instead of replace when
1591    the user hits <C>ontinue (bug reported by Stu Mark)
1592
1593  Revision 580.31  2001/09/06 01:26:39  nbryant
1594   - port to Cygwin (DLL support, etc.)
1595   - don't build SMTP module if there's no resolver library (eg on Windows)
1596
1597  Revision 580.30  2001/09/06 00:54:01  nbryant
1598  updated to libtool 1.4.1 and automake 1.5
1599
1600  Revision 580.29  2001/08/29 02:51:25  ajc
1601  * More work on the new networker.
1602
1603  Revision 580.28  2001/08/25 05:04:57  ajc
1604  * Worked a little more on the in-server replacement for netproc
1605
1606  Revision 580.27  2001/08/22 04:18:17  ajc
1607  * Realized that there was lots of similarly broken code in
1608    process_rfc822_addr().  Wrote two new utility functions in tools.c
1609    stripout() and stripallbut() and used them where appropriate.  This should
1610    take care of all possible infinite loops.
1611
1612  Revision 580.26  2001/08/22 03:43:11  ajc
1613  * internet_addressing.c: fixed a bug in process_rfc822_addr() that caused the
1614    server to jump into an endless loop when an e-mail address contained
1615    unbalanced angle brackets.
1616
1617  Revision 580.25  2001/08/15 04:26:02  ajc
1618  * Added split horizon and delete-after-spool to the new networker
1619
1620  Revision 580.24  2001/08/14 02:41:57  ajc
1621  * Began the migration of netproc into part of the serv_network.c module instead
1622    of a standalone program.
1623
1624  Revision 580.23  2001/08/11 22:35:40  nbryant
1625  updated citadel-with-berkeley-db.txt.
1626   - updated build instructions
1627   - improved backup procedures to be safer and more space-efficient.
1628
1629  Revision 580.22  2001/08/11 19:18:41  ajc
1630  * Realized that I am stupid and started implementing server commands to load
1631    and save network configurations, when I had already lovingly implemented the
1632    CONF GETSYS and CONF PUTSYS commands to store arbitrary configuration sets
1633    in the Local System Configuration> room.  Ripped the newer crap out.
1634  * Implemented a skeleton of <.A>ide <S>ysconfig <N>etwork on the client side.
1635
1636  Revision 580.21  2001/08/11 03:51:56  ajc
1637  * Removed the idle timer from the client.  Dialup is dead.
1638
1639  Revision 580.20  2001/08/06 21:33:29  nbryant
1640  made the client fall back on port 504 if there's no /etc/services entry
1641
1642  Revision 580.19  2001/08/05 23:54:14  ajc
1643  * prep for new network node infrastructure
1644
1645  Revision 580.18  2001/08/03 16:53:21  ajc
1646  * Added some more "break" statements to the main switch..case loop in
1647    citadel.c where they were needed.
1648
1649  Revision 580.17  2001/08/03 16:43:53  ajc
1650  * database_sleepycat.c: when running txn_checkpoint(), handle DB_INCOMPLETE
1651    return code as a warning instead of an error worthy of aborting the server.
1652    See http://www.sleepycat.com/docs/api_c/txn_checkpoint.html for explanation.
1653
1654  Revision 580.16  2001/07/30 03:46:14  nbryant
1655  made ForEachUser use a read-only cursor, too. there is now only one piece of
1656  code in Citadel proper (not the database driver) that needs transactions.
1657  that's check_ref_counts; in other words it's the only thing standing in the way
1658  of a clean implementation of retryable transactions.
1659
1660  Revision 580.15  2001/07/29 22:24:04  nbryant
1661   - added a new function to the database interface, cdb_close_cursor().  always
1662  call this when you're finished with a traversal but didn't bother reading all
1663  the way to the end.
1664
1665   - removed several cdb_begin_transaction()/cdb_end_transaction() calls that are
1666  no longer needed because of the read-only cursor support.
1667
1668  Revision 580.14  2001/07/29 20:56:09  nbryant
1669  change ForEachRoom to use read-only cursors by default. it can be overridden to
1670  still use read/write cursors by doing:
1671
1672   cdb_begin_transaction();
1673   ForEachRoom(...);
1674   cdb_end_transaction();
1675
1676  the only place I found where it appears necessary to do so is check_ref_counts,
1677  so this checkin affects that function too.
1678
1679  Revision 580.13  2001/07/29 20:06:33  nbryant
1680  generate symlinks to .libs in modules directory
1681
1682  Revision 580.12  2001/07/28 00:02:50  nbryant
1683  implemented read-only cursors. one of the advantages to these is that
1684  transactions can be avoided; a cursor operation that occurs within a
1685  transaction will often acquire a read lock on every single database page.  in
1686  general, the Sleepycat documentation recommends avoiding transaction-protected
1687  read-only operations where practical. read/modify/write operations can still
1688  be transaction protected, of course.
1689
1690  to use a read-only cursor, call cdb_rewind without a previous call to
1691  cdb_begin_transaction. the DB driver will notice this and prevent the current
1692  thread from modifying data or starting a transaction until the cursor is
1693  closed.
1694
1695  Revision 580.11  2001/07/27 20:45:44  nbryant
1696  libtool has matured a lot since the last time i looked at it (years ago)
1697  so we now use it to handle the details of building shared libraries and
1698  the linker flags for the main executable.
1699
1700  in theory this should bring a lot more portability to the dynloader
1701  subsystem and enable us to do things like transparently detect GNU vs Sun
1702  linkers on solaris, for example
1703
1704  Revision 580.10  2001/07/27 03:29:04  nbryant
1705  missed one thing in the autoconf move
1706
1707  Revision 580.9  2001/07/27 02:57:43  nbryant
1708  support one cursor per database rather than one global cursor
1709
1710  Revision 580.8  2001/07/27 01:32:07  nbryant
1711  remove the automatic transaction demarcation on singleton read operations
1712
1713  Revision 580.7  2001/07/26 21:43:46  nbryant
1714   - move to autoconf 2.52
1715   - random warning fix
1716   - check for db 3.3
1717
1718  Revision 580.6  2001/07/24 13:17:54  ajc
1719  * New UI for mailing list setup
1720  * rooms.c: code cleanup
1721  * docs update
1722
1723  Revision 580.5  2001/07/20 23:48:23  nbryant
1724  fix build on solaris, check default install location for db 3.2, and silence
1725  gcc 3.0
1726
1727  Revision 580.4  2001/07/16 14:24:30  ajc
1728  * Silly cosmetic change to keep the wholist ordered by ascending session number
1729
1730  Revision 580.3  2001/07/13 00:01:36  ajc
1731  * Shuffled around some of the housekeeping loop code
1732
1733  Revision 580.2  2001/07/11 17:01:10  ajc
1734  * database_sleepycat.c: small changes to log messages
1735
1736  Revision 580.1  2001/07/11 04:35:40  nbryant
1737  moved dret initialization in cdb_fetch, just in case
1738
1739  Revision 580.0  2001/07/03 03:07:06  ajc
1740  * THIS IS 5.80
1741
1742  Revision 573.143  2001/07/03 03:06:50  ajc
1743  * Last minute doco update for 5.80
1744
1745  Revision 573.142  2001/07/01 15:44:32  nbryant
1746  configure.in: check for Berkeley DB first.
1747
1748  Revision 573.141  2001/06/27 23:34:30  ajc
1749  * Added some verbage to messages/roomaccess to placate a user who keeps
1750    bitching about privacy policy.
1751
1752  Revision 573.140  2001/06/19 03:41:04  ajc
1753  * Ooops... last_cull needs to be declared static
1754
1755  Revision 573.139  2001/06/19 03:33:19  ajc
1756  * imap_fetch.c: download MIME parts without decoding first.  We like that.
1757  * database_sleepycat.c: added automatic culling of log files which have not
1758    been written to in five days.
1759
1760  Revision 573.138  2001/06/17 19:42:23  nbryant
1761  fix all the <time.h> vs. <sys/time.h> issues, hopefully
1762
1763  Revision 573.137  2001/06/07 03:28:37  ajc
1764  * More tweaks to the MIME parser
1765
1766  Revision 573.136  2001/06/06 15:44:37  ajc
1767  * msgbase.c: output extra newline at end of RFC822 message if necessary to
1768    ensure that 000 termination string appears on a line by itself.
1769
1770  Revision 573.135  2001/06/06 04:22:25  ajc
1771  * Moved memreadline() to tools.c
1772  * internet_addressing.c: fixed conversion of fields to (hopefully) never get
1773    into an active loop when encountering badly formed headers
1774
1775  Revision 573.134  2001/05/27 05:23:03  ajc
1776  * Added a "no new messages" response in the client, displayed when a read
1777    command turns up a zero message count.
1778
1779  Revision 573.133  2001/05/18 20:12:09  ajc
1780  * Fixed bug in mime_parser.c that caused parts to be dropped when the last
1781    boundary was the very last line of the message.
1782  * serv_smtp.c: toned down some of the command response verbage.
1783
1784  Revision 573.132  2001/04/28 04:42:55  ajc
1785  * Updated some of the docs.  Bumped version number to 5.80 in anticipation
1786    of going into a release cycle soon.
1787
1788  Revision 573.130  2001/04/26 03:31:00  ajc
1789  * Finished the implementation of per-message seen/unseen logic, both in the
1790    server proper and in IMAP.  Citadel protocol uses new "seen" command.
1791
1792  Revision 573.129  2001/04/21 04:55:51  ajc
1793  * Began implementation of per-message seen/unseen attribute
1794
1795  Revision 573.128  2001/04/20 03:39:54  ajc
1796  * IMAP LIST/LSUB: made it case insensitive.  Also minor IMAP code cleanup.
1797
1798  Revision 573.127  2001/04/17 00:35:19  cough
1799  * Modified rooms.c in the client so that it would allow inviting into
1800    public rooms.  This is important since there is now a V_LOCKOUT
1801    flag which prevents users who have been kicked from rejoining
1802    a room unless/until you invite them back in.
1803
1804  Revision 573.126  2001/04/16 19:21:14  cough
1805  * Fixed bug in room_ops.c that wasn't allowing aides to goto passworded
1806    rooms without knowing the password.
1807
1808  Revision 573.125  2001/04/14 04:26:44  ajc
1809  * Fixed an unterminated string bug in IMAP APPEND.  Storing messages should
1810    work now.
1811
1812  Revision 573.124  2001/04/10 01:04:10  ajc
1813  * Finished coding IMAP APPEND.  It works, but there's a bug in it somewhere
1814    that is corrupting the memory.
1815
1816  Revision 573.123  2001/04/03 00:47:23  ajc
1817  * Began implementing IMAP APPEND
1818
1819  Revision 573.122  2001/04/01 22:05:44  cough
1820  * *Actually* fixed a botched ChangeLog entry.
1821
1822  Revision 573.121  2001/04/01 22:04:28  cough
1823  * Fixed a botched ChangeLog entry.
1824
1825  Revision 573.120  2001/04/01 22:03:10  cough
1826  * Changed two fclose()s to pclose()s.
1827
1828  Revision 573.119  2001/03/25 11:52:36  error
1829  * serv_pop3.c: Fixed APOP. Now logs in properly. Also cleaned up some non-
1830    RFC-compliant error messages.
1831
1832  Revision 573.118  2001/03/21 05:47:49  ajc
1833  * Added the new IMAP mailbox string compare submitted by Daniel Malament.
1834
1835  Revision 573.117  2001/03/20 01:33:55  ajc
1836  * Added the (\NoInferiors) tag to all rooms listed in IMAP.  This made Mozilla
1837    behave very nicely.
1838
1839  Revision 573.116  2001/03/13 17:19:33  ajc
1840  * support (BODY[HEADER.FIELDS(BLAH BLAH BLAH)]) and HEADER.FIELDS.NOT
1841
1842  Revision 573.115  2001/03/12 01:27:42  ajc
1843  * Implemented SUBSCRIBE and UNSUBSCRIBE commands
1844
1845  Revision 573.114  2001/03/11 23:00:29  ajc
1846  * Mega sexy hack to deliver express messages THROUGH IMAP!  uber coolness!!
1847
1848  Revision 573.113  2001/03/11 22:09:20  ajc
1849  * Replaced the "citlogin" binary wrapper with the "loginwrapper.sh" script.
1850
1851  Revision 573.112  2001/03/11 20:06:53  ajc
1852  * Fixed bug that created incorrect roomnames when sending pages
1853
1854  Revision 573.111  2001/03/11 19:23:32  ajc
1855  * IMAP DELETE command ... also split up access control for room delete cmds
1856
1857  Revision 573.110  2001/03/10 17:29:07  ajc
1858  * Implement proper access control for deleting messages from IMAP
1859
1860  Revision 573.109  2001/03/07 04:02:27  ajc
1861  * Fixed some small IMAP bugs
1862
1863  Revision 573.108  2001/03/06 04:44:00  ajc
1864  * Probable completion of STATUS, COPY, STORE, and EXPUNGE commands in IMAP
1865
1866  Revision 573.107  2001/03/06 03:31:58  nbryant
1867  database-related cleanups and paranoia tests;
1868  fixed a transaction-leak/deadlock problem in cdb_delete;
1869  solved the SIGPIPE mystery (GDB stops on SIGPIPE is all it was)
1870
1871  Revision 573.106  2001/03/05 04:59:31  ajc
1872  * IMAP COPY
1873
1874  Revision 573.105  2001/03/04 23:49:41  ajc
1875  * IMAP EXPUNGE responses -should- be correct now
1876
1877  Revision 573.94  2001/02/20 00:02:56  ajc
1878  * IMAP: implemented the STATUS command (sort of).
1879
1880  Revision 573.93  2001/02/19 22:24:41  ajc
1881  * IMAP server: added untagged, unsolicited server messages for newly arrived
1882    messages, and messages expunged by another session.
1883
1884  Revision 573.92  2001/02/17 05:53:35  ajc
1885  * Repaired the creation of page log rooms in the wrong namespace when the
1886    recipient does not yet have his/her log room created.
1887  * Rewrite "EXPI messages" to run in two passes: one to gather messages to
1888    purge and the next to delete them.  Works better in transactionland.
1889
1890  Revision 573.91  2001/02/14 08:11:27  error
1891  * citadel.rc: added $Id$ (it's about time!)
1892
1893  Revision 573.90  2001/02/14 04:23:54  ajc
1894  * Fixed POP3 server responses ending in \n instead of \r\n as they should be.
1895    This was causing some clients (such as Pine) to lock up.
1896
1897  Revision 573.89  2001/02/13 04:06:14  ajc
1898  * Worked out the remaining bugs in IMAP FETCH for the BODYSTRUCTURE and
1899    BODY[n] data items.  I think.  So much protocol crud, so little time...
1900
1901  Revision 573.88  2001/02/13 01:18:44  ajc
1902  * imap fetch
1903
1904  Revision 573.87  2001/02/12 04:31:34  ajc
1905  * sysdep.c ig_tcp_server() - use IPPROTO_TCP instead of getprotobyname()
1906
1907  Revision 573.86  2001/02/08 04:45:58  ajc
1908  * Fixed namespace problems resulting from the automatic namespece prefixing
1909    added to create_room().  Also added the ability to specify "create a mailbox
1910    but I've already supplied the namespace prefix" for situations where the
1911    namespace isn't that of the logged in user.
1912  * Made the POP3 server response messages slightly less humorous
1913
1914  Revision 573.85  2001/02/06 04:44:12  ajc
1915  * Added a floor listing (complete with \NoSelect flag) to LIST and LSUB
1916
1917  Revision 573.84  2001/02/06 02:09:38  ajc
1918  * citadel.rc: changed the default for local_screen_dimensions to 1, since
1919    Internet users now outnumber dialup users 100 to 0.
1920  * room_ops.c: added a really_create option to create_room().  Also moved the
1921    generation of personal namespace into that function.  MODULE OWNERS PLEASE
1922    CHECK YOUR CALLS TO AVOID MULTIPLE NAMESPACING!!
1923  * room_ops.c: fixed a bug in cgetfloor() that left bad pointers around
1924  * serv_imap.c: finished the CREATE command (finally)
1925
1926  Revision 573.83  2001/02/05 05:20:22  ajc
1927  * Made some changes to functions which translate between Citadel room names
1928    and IMAP folder names.  They're still buggy.
1929
1930  Revision 573.82  2001/02/04 23:17:28  ajc
1931  * Implemented the IMAP CREATE command
1932
1933  Revision 573.81  2001/02/04 02:40:07  ajc
1934  * more imap.  imap sucks.  die crispin die.
1935
1936  Revision 573.80  2001/02/03 10:02:12  error
1937  * serv_ical.c: Verify that objects posted to My Calendar> are of type
1938    text/x-calendar or text/calendar; abort saving if not
1939
1940  Revision 573.79  2001/02/03 09:30:46  error
1941  * serv_ical.c: now creates a My Calendar> personal room, sets attributes
1942
1943  Revision 573.78  2001/02/03 08:21:00  error
1944  * serv_ical.c and serv_ical.h added; skeleton code for now
1945
1946  Revision 573.77  2001/02/02 20:18:18  ajc
1947  * Changed the error message in cdb_delete() to actually *say* cdb_delete
1948    instead of cdb_store.  Useful to know which function failed...
1949
1950  Revision 573.76  2001/02/01 04:08:03  ajc
1951  * IMAP minor change to mailbox name output
1952  * Increased size of buffer in lprintf()
1953
1954  Revision 573.75  2001/01/28 09:50:02  error
1955  * sysdep.c: lprintf() now generates timestamps
1956
1957  Revision 573.74  2001/01/28 07:35:04  error
1958   * serv_bio.c: RBIO now also returns stats about a user, see session.txt
1959
1960  Revision 573.73  2001/01/16 04:03:13  ajc
1961  * yeesh ... more on the IMAP BODYSTRUCTURE
1962
1963  Revision 573.72  2001/01/16 01:51:12  ajc
1964  * imap bodystructure
1965
1966  Revision 573.71  2001/01/16 00:46:40  ajc
1967  * Changed the MIME parser API *again* because we now need the ability to
1968    supply callback functions to be executed before and/or after parsing a
1969    multipart.  (Need this for IMAP BODYSTRUCTURE output.  Crispin sucks.)
1970
1971  Revision 573.70  2001/01/15 23:59:26  ajc
1972  * user_ops.c: reject NULL password in CtdlTryPassword() instead of crashing
1973
1974  Revision 573.68  2001/01/15 20:34:04  ajc
1975  * "Path:" removed for now because it confuses brain-dead Microsoft shitware
1976    into thinking that mail messages are newsgroup messages instead.  When we
1977    add NNTP support back into Citadel we'll have to add code to only output
1978    this field when appropriate.
1979
1980  Revision 573.67  2001/01/15 16:30:31  ajc
1981  * temporary implementation of 901 asynchronous express messages
1982
1983  Revision 573.66  2001/01/14 14:55:39  ajc
1984  * Changed the format of <.W>holist <L>ong
1985
1986  Revision 573.65  2001/01/13 06:40:26  nbryant
1987  merged remaining changes from TRANSACTIONS (using cvs update -j TRANSACTIONS)
1988  which should now be considered closed.
1989
1990  Revision 573.64  2001/01/13 06:12:15  ajc
1991  * Added the ASYN command
1992
1993  Revision 573.63  2001/01/12 22:05:46  ajc
1994  * Fixed a bug that caused bogus wholist lines to be displayed when a non-aide
1995    reads a list containing stealth mode sessions.
1996
1997  Revision 573.62  2001/01/09 05:39:45  ajc
1998  * Merged in code from the TRANSACTIONS branch for testing.
1999
2000  Revision 573.61  2000/12/30 06:17:17  ajc
2001  * Still more work on IMAP.  Damn this is tedious.
2002
2003  Revision 573.60  2000/12/30 04:55:05  ajc
2004  * more buffer size stuff
2005
2006  Revision 573.59  2000/12/27 20:19:51  ajc
2007  * The size constant "256" which shows up everywhere as a buffer size has now
2008    been changed to SIZ.  And, SIZ has been defined now as 1024, not 256, because
2009    we need 1024 byte buffers for most Internet protocols.
2010
2011  Revision 573.58  2000/12/27 05:09:58  ajc
2012  * Added a skeleton IMAP "SEARCH" command (based on the FETCH logic)
2013
2014  Revision 573.57  2000/12/26 03:46:50  ajc
2015  * More IMAP tweaks
2016
2017  Revision 573.56  2000/12/25 22:50:43  ajc
2018  * Added an API function to extract and unfold specific RFC822 fields.
2019  * imap-->fetch-->envelope-->in-reply-to now works
2020  * More robust checking and reporting of temp file errors in the client
2021
2022  Revision 573.55  2000/12/25 20:43:24  ajc
2023  * imap_fetch.c: added support for fetch-->envelope-->from
2024
2025  Revision 573.54  2000/12/20 04:09:24  ajc
2026  * A few memory handling fixes to netproc.
2027
2028  Revision 573.53  2000/12/20 01:57:37  ajc
2029  * netproc.c: added bounds check to fpgetfield()
2030
2031  Revision 573.52  2000/12/19 20:41:55  ajc
2032  * Fixed generation of unique file names for network uploads etc.
2033
2034  Revision 573.51.2.11  2000/12/26 05:30:55  nbryant
2035  remove extraneous transaction around dynamic module initializations. this will
2036  fix the crash on database creation.
2037
2038  Revision 573.51.2.10  2000/12/24 23:00:58  nbryant
2039  clean: also remove parsedate.c
2040
2041  Revision 573.51.2.9  2000/12/20 01:38:42  nbryant
2042  require transactional cursors
2043
2044  Revision 573.51.2.8  2000/12/20 00:30:01  nbryant
2045  release any stale db handles at the end of a server command
2046  (unfinished transactions will be aborted to annoy lazy programmers)
2047
2048  Revision 573.51.2.7  2000/12/19 06:18:27  nbryant
2049  set sched_yield as sleepycat's yield function. this should improve locking
2050  performance.
2051
2052  Revision 573.51.2.6  2000/12/19 02:22:29  nbryant
2053  added automatic transaction start/end on cdb_fetch, cdb_delete, and cdb_store
2054
2055  Revision 573.51.2.5  2000/12/18 03:51:13  nbryant
2056  ditto S_USER_TRANS, S_CALLLOG, and S_HOUSEKEEPING, which are no longer used at
2057  all
2058
2059  Revision 573.51.2.4  2000/12/18 02:49:17  nbryant
2060  removed all references to S_MSGMAIN critical section; it wasn't really needed.
2061  this should make things significantly more scaleable.
2062
2063  Revision 573.51.2.3  2000/12/17 22:12:48  nbryant
2064  reworked shutdown sequence to wait for worker threads to terminate before
2065  checkpointing and closing databases. it is no longer safe to call
2066  master_cleanup() directly to force a shutdown; instead, just set
2067  time_to_die to a nonzero value
2068
2069  Revision 573.51.2.2  2000/12/17 05:06:09  nbryant
2070  added deadlock detection and cleaned up messages
2071
2072  Revision 573.51.2.1  2000/12/16 21:06:59  nbryant
2073  created TRANSACTIONS branch
2074  track cursor and transaction id's in thread-specific data
2075
2076  Revision 573.51  2000/12/14 18:36:34  ajc
2077  * Fixed the "users not in chat" wholist display
2078
2079  Revision 573.50  2000/12/12 18:06:46  ajc
2080  * Removed the transaction stuff (but left the log in).  It wasn't working.
2081
2082  Revision 573.49  2000/12/12 06:19:55  ajc
2083  * Stabilize, dammit!!
2084
2085  Revision 573.48  2000/12/12 04:20:03  ajc
2086  * Made the transaction open/close a global thing, in a frantic attempt to get
2087    Uncensored to stop crashing.  More fixes on the way...
2088
2089  Revision 573.47  2000/12/11 06:08:41  ajc
2090  * Removed the housekeeper thread, moved terminate_idle_sessions() out to a
2091    timer event, and check_sched_shutdown() to the end of the worker thread
2092    loop.  Seems to have improved reliability (but why?)
2093
2094  Revision 573.46  2000/12/11 03:22:11  ajc
2095  * Added server-side REQT command to issue client termination requests
2096
2097  Revision 573.45  2000/12/11 02:19:26  ajc
2098  * Client now honors EM_GO_AWAY flag, used by the server to request that a
2099    client log off.  (The server doesn't support sending that flag yet, though)
2100
2101  Revision 573.44  2000/12/09 06:20:06  ajc
2102  * A few final touches to the Sleepycat DB back-end
2103
2104  Revision 573.43  2000/12/08 17:06:33  ajc
2105  * Wrap txn_begin and txn_end in S_DATABASE mutex
2106
2107  Revision 573.42  2000/12/07 20:21:39  ajc
2108  * begin/end transaction in master_startup()
2109
2110  Revision 573.41  2000/12/07 16:59:02  nbryant
2111  added --with-db and --with-gdbm options to configure
2112
2113  Revision 573.40  2000/12/07 04:50:33  ajc
2114  * Wrap housekeeper and timer events in transaction open/close functions
2115  * Checkpoint the DB as an EVT_TIMER event instead of after each session
2116    (runs each minute, but actually limited by the parameters of the function)
2117
2118  Revision 573.39  2000/12/06 04:44:36  ajc
2119  * Changed netproc to keep the use table in a flat file instead of a database
2120
2121  Revision 573.38  2000/12/05 05:32:58  ajc
2122  * Added support for non-USA country identities in vCard and registration
2123  * User edit now asks whether it should prompt to change the password
2124
2125  Revision 573.37  2000/12/03 04:12:21  ajc
2126  * Finished (mostly) the Sleepycat DB backend ... added transaction logging
2127
2128  Revision 573.36  2000/11/30 03:23:17  ajc
2129  * Got the Sleepycat DB back end working, by opening the databases in a non
2130    shared, non threaded mode, and using Citadel's locking to serialize access.
2131
2132  Revision 573.35  2000/11/29 05:00:02  ajc
2133  * I think the db stuff is ok, but my db library is fux0red...
2134
2135  Revision 573.34  2000/11/27 14:12:09  error
2136  * commands.c: fixups to print_express() to make external command not print
2137    extraneous stuff to the terminal and make the displayed message consistent
2138
2139  Revision 573.33  2000/11/27 10:41:14  error
2140  * print_express(): now uses GEXP instead of old PEXP; displays timestamps
2141
2142  Revision 573.32  2000/11/27 10:29:59  error
2143  * serv_chat.c: fix send_express_message() to include timestamps
2144
2145  Revision 573.31  2000/11/27 03:44:27  ajc
2146  * Initial checkin of database_sleepycat.c (doesn't work yet)
2147
2148  Revision 573.30  2000/11/26 05:24:22  ajc
2149  * msgbase.c: Added new API function CtdlOutputPreLoadedMsg(), and
2150    re-implemented the existing CtdlOutputMsg() as a wrapper around it.
2151  * imap_fetch.c: used the above function to do all output pre-loaded
2152
2153  Revision 573.29  2000/11/25 09:36:18  error
2154  * Added a bit of detail to syslog entries; now shows session id attached to
2155    client, hostname, and username, and time the session ended.
2156
2157  Revision 573.28  2000/11/25 06:17:06  ajc
2158  * Minor IMAP tweaks.  It still doesn't work.  :(
2159
2160  Revision 573.27  2000/11/23 07:22:21  error
2161  * citadel.spec: update version number
2162
2163  Revision 573.26  2000/11/21 11:12:56  error
2164   * domain.h: changed the HP/UX compatibility code to use defines from
2165     typesize.h for integers of specific bit widths (needed for Solaris, etc)
2166
2167  Revision 573.25  2000/11/12 04:20:49  ajc
2168  * Optimized server side input of message text
2169
2170  Revision 573.24  2000/11/10 03:55:06  ajc
2171  * Ford's Fix for Faster Functionality (save position during reply)
2172
2173  Revision 573.23  2000/11/09 04:48:50  ajc
2174  * tools.c: striplt() strips all whitespace, not just spaces
2175
2176  Revision 573.22  2000/11/07 20:47:21  ajc
2177  * imap_fetch.c: added a skeleton "ENVELOPE" fetch.  Currently sends NIL's.
2178
2179  Revision 573.21  2000/11/07 15:54:53  ajc
2180  * xx FETCH n:n BODY[pn.MIME] now works
2181
2182  Revision 573.20  2000/11/06 05:10:01  ajc
2183  * Changed the mime_parser() API (again) to allow "don't decode" mode
2184
2185  Revision 573.19  2000/10/29 18:11:07  ajc
2186  * Start numbering top-level MIME parts as 1, 2... not 1.1, 1.2...
2187
2188  Revision 573.18  2000/10/28 14:14:19  error
2189  * msgbase.c: eliminated most gotos; a single goto in alias() remains because
2190    it actually makes sense to do it that way...
2191
2192  Revision 573.17  2000/10/25 21:37:09  ajc
2193  * Implemented the AUTHENTICATE LOGIN command in IMAP
2194
2195  Revision 573.16  2000/10/25 19:20:37  ajc
2196  * FETCH now works for ranges *and* sets, and with sequence numbers *and* UID's
2197
2198  Revision 573.15  2000/10/24 20:39:59  ajc
2199  * Added RFC822, RFC822.HEADER, RFC822.SIZE, RFC822.TEXT fetch keys to IMAP
2200
2201  Revision 573.14  2000/10/23 20:26:51  error
2202  * War on goto:  rewrote a few easy functions to eliminate unnecessary gotos
2203
2204  Revision 573.13  2000/10/11 23:03:44  error
2205  * utilsmenu: obey $PAGER environment var, if any.  Default to more if neither
2206    $PAGER nor less is available.
2207
2208  Revision 573.12  2000/10/11 22:55:25  error
2209  * citadel.c: when ansi_color=user, enable color at login, so Lobby> posts
2210    displayed at login are in color
2211
2212  Revision 573.11  2000/10/11 22:47:51  error
2213  * domain.c: getmx() returns hostname as MX if no MX records found a la RFC 974
2214
2215  Revision 573.10  2000/10/10 19:18:12  ajc
2216  * Added support of macros ALL, BODY, FAST, and FULL to the IMAP FETCH command
2217
2218  Revision 573.9  2000/10/06 03:31:55  ajc
2219  * Mark Crispin is a fscking idiot.  IMAP is a convoluted mess.
2220
2221  Revision 573.8  2000/10/05 22:23:16  ajc
2222  * Slowly and painfully writing IMAP support
2223
2224  Revision 573.7  2000/10/04 22:39:06  ajc
2225  * Added skeleton versions of the LIST and LSUB commands to the imap server
2226
2227  Revision 573.6  2000/10/04 17:48:21  ajc
2228  * Allow Aides to zap rooms (site configurable setting)
2229
2230  Revision 573.5  2000/10/03 01:45:00  ajc
2231  * Changed the <.A>ide <S>ysconfig <G>eneral command to explicitly allow the
2232    global page log room to be disabled (answer "no" to set the log room to a
2233    null string)
2234
2235  Revision 573.4  2000/09/28 10:27:38  error
2236  * commands.c: changed sttybbs() to support HP/UX termios VMIN and VTIME
2237
2238  Revision 573.3  2000/09/24 22:01:45  ajc
2239  * ipc_c_tcp.c: don't hardcode BBSDIR path for unix domain sockets
2240
2241  Revision 573.2  2000/09/21 04:16:44  ajc
2242  * Fixed logged_in_response() so it only displays responses during Citadel
2243    protocol sessions.  (This was affecting POP etc.)
2244
2245  Revision 573.1  2000/09/11 22:05:04  ajc
2246  * citadel.c: accept -h <host> and -p arguments, so citadel can be called
2247    directly by telnetd, bypassing /bin/login.  It works, but not recommended at
2248    this time because it has to run as root.
2249
2250  Revision 573.0  2000/09/05 18:35:22  ajc
2251  * Tagged everything for version 5.73 release
2252
2253  Revision 572.39  2000/09/04 03:59:15  ajc
2254  IO's changes:
2255  ----------------------------
2256  revision 572.4
2257  date: 2000/09/03 06:36:01;  author: error;  state: Exp;  lines: +5 -1
2258  Added HP/UX linker flag for dynamic modules to work
2259  ----------------------------
2260  revision 572.3
2261  date: 2000/09/01 06:50:00;  author: error;  state: Exp;  lines: +8 -1
2262  Changed to use integer macros from typesize.h for specific bit widths
2263  ----------------------------
2264
2265  Revision 572.38  2000/09/01 20:17:08  ajc
2266  * msgbase.c: cmd_opna() - increase desired_section buffer from 64 to 256 bytes
2267
2268  Revision 572.37  2000/09/01 17:31:47  ajc
2269  * Fixed oopseth in control.c that might call fileno(NULL)
2270
2271  Revision 572.36  2000/09/01 13:37:16  ajc
2272  * control.c: chown citadel.control to bbsuid when opening/creating as root
2273
2274  Revision 572.35  2000/09/01 03:55:44  ajc
2275  * Fixed a few more references to the deprecated uncnsrd.mt-kisco.ny.us name
2276
2277  Revision 572.34  2000/09/01 03:43:09  ajc
2278  * Added 'author' command-line arg to aidepost.  Closes enhancement request
2279    #71 on bugzilla.
2280  * Put the default SMTP and POP3 ports back to 25 and 110.  Now that the
2281    unix domain socket bug is fixed, it's ok if these binds fail.
2282
2283  Revision 572.33  2000/08/31 23:02:15  ajc
2284  * ig_tcp_server() and ig_uds_server()  -  check to make sure queue length is
2285    always at least 5.  Zero-length queues can cause connection lockups.
2286
2287  Revision 572.32  2000/08/31 21:32:44  ajc
2288  * Still trying to fix a socket connect bug
2289
2290  Revision 572.31  2000/08/31 16:37:08  ajc
2291  * docs/import-export.txt: added.
2292
2293  Revision 572.30  2000/08/28 19:51:51  ajc
2294  * messages.c: cosmetic cleanup (coding convention and comments)
2295
2296  Revision 572.29  2000/08/26 20:23:18  ajc
2297  * Finished up the back end code for mailing list sends.  Sends now work!
2298
2299  Revision 572.28  2000/08/24 02:48:18  ajc
2300  * Merged in IO ERROR's diffs to make Citadel work with HP/UX
2301
2302  Revision 572.27  2000/08/22 02:31:47  ajc
2303  * nonce (for APOP-style auth) is now generated when a context is created
2304    instead of during protocol greeting functions.
2305  * Moved Citadel protocol nonce output from greeting to INFO
2306
2307  Revision 572.26  2000/08/18 21:09:36  ajc
2308  * Added a little more mailing list code to serv_network.c
2309
2310  Revision 572.25  2000/08/10 04:36:25  ajc
2311  * Fixed a bug in keyboard polling (in commands.c) which was causing the
2312    client protocol to get out of sync in certain conditions.
2313
2314  Revision 572.24  2000/08/10 02:42:13  ajc
2315  * Changed all the "200 ok" responses to more descriptive strings
2316  * Added a *temporary* protocol sync check.  Remove this!
2317
2318  Revision 572.23  2000/08/09 17:14:34  ajc
2319  msgbase.c: fixed a bug in
2320             remove_any_whitespace_to_the_left_or_right_of_at_symbol() that was
2321             causing the <R>eply function to fail on names with whitespace in
2322             certain parts of the string.  This closes Bug #56.
2323
2324  Revision 572.22  2000/08/05 04:24:00  ajc
2325  * Added [idle] to client wholist display for sessions idle >15 minutes
2326  * Added a generic "void *userdata" field to CtdlForEachMessage()
2327  * More prep for mailing list handling in the server
2328
2329  Revision 572.21  2000/07/30 04:36:12  ajc
2330  * Set up the SNET (Send NETwork config) and GNET (Get NETwork config) commands
2331    for the network overhaul.
2332
2333  Revision 572.20  2000/07/29 05:29:19  ajc
2334  * Changed the format of RWHO output to provide non-masqueraded user/room/host
2335    names (to Aides only) as additional fields rather than an extra line of
2336    output.
2337  * Changed the client to display new RWHO fields, in the "long" wholist only.
2338  * Default SMTP and POP ports are now -1, not 25/110.  These services must now
2339    be activated manually.
2340
2341  Revision 572.19  2000/07/24 00:39:13  ajc
2342  * Fixed a path problem when calling netmailer from mailinglist.c
2343
2344  Revision 572.18  2000/07/22 03:44:17  ajc
2345  * Prepared infrastructure for the networker rewrite
2346
2347  Revision 572.17  2000/07/17 02:38:08  ajc
2348  * Completed serv_vandelay.c (importer/exporter module)
2349  * sendcommand.c: fix behavior of SEND_LISTING mode
2350  * sysdep.c: client_gets() fill buffer with "000" terminator when returning -1
2351
2352  Revision 572.16  2000/07/14 03:06:55  ajc
2353  * Added .ATN (DOWN) and .ATS (SCDN 1) commands to the client
2354
2355  Revision 572.15  2000/07/10 23:36:08  ajc
2356  * Another attempt to fix the crashy crashy bug in serv_vcard
2357  * Did more work on the Art Vandelay module
2358  * Replaced all instances of sprintf(tempfile, tmpnam(NULL)) with strcpy()
2359
2360  Revision 572.14  2000/07/10 04:01:12  ajc
2361  * added an unfinished serv_vandelay.c (Art Vandelay module - importer/exporter)
2362
2363  Revision 572.13  2000/07/09 02:47:40  ajc
2364  * Overhauled the keepalive logic in the chat client.  Closes bug #20.
2365
2366  Revision 572.12  2000/07/09 02:27:02  ajc
2367  * Eliminated the whole SIGINT/SIGQUIT based handling of Ctrl-O and Ctrl-C
2368    keyboard interrupts.  Replaced with a non-blocking check for keyboard input
2369    which sets the global variable 'sigcaught' if either key was pressed.
2370    fmout() and pprintf() switch to 'drain mode' if sigcaught is set.
2371    This closes Bug #18.
2372
2373  Revision 572.11  2000/07/06 20:26:36  ajc
2374  * updated .Help SUMMARY
2375
2376  Revision 572.10  2000/07/04 20:02:46  ajc
2377  * Fixed potential crashy crashy bug in serv_vcard.c
2378
2379  Revision 572.9  2000/06/28 03:42:56  ajc
2380  * Changed the comments at the beginning of each file to a consistent format
2381  * Improved the parameterization of commands in the IMAP module
2382
2383  Revision 572.8  2000/06/27 01:27:13  ajc
2384  * Coupla very small changes to get on the road to IMAP support
2385
2386  Revision 572.7  2000/06/22 21:41:48  ajc
2387  * Made the ICQ stuff far more reliable ... by removing it!
2388
2389  Revision 572.6  2000/06/21 03:46:20  ajc
2390  * IMAP is now legal but useless, supporting NOOP, LOGIN, and LOGOUT.
2391
2392  Revision 572.5  2000/06/15 20:15:52  ajc
2393  * Inserted a skeleton IMAP module into the build.  IT DOES NOT WORK AT ALL.
2394
2395  Revision 572.4  2000/06/04 02:30:56  ajc
2396  * CtdlForEachMessage() now returns the number of messages processed.  It also
2397    accepts the MSGS_EQ mode, for targeting a specific message number (useful
2398    for determining whether the specified message actually exists in a room).
2399  * Completed the server side of the moderation system (serv_moderate.c module
2400    which implements the MMOD command)
2401
2402  Revision 572.3  2000/06/03 05:47:57  ajc
2403  * Replaced most of the very repetitive and very redundant access level checks
2404    in most commands with a single API call:  CtdlAccessCheck()
2405  * serv_moderate.c: added (not finished)
2406
2407  Revision 572.2  2000/06/02 03:38:50  ajc
2408  * Bind unix socket prior to TCP socket for citadel protocol
2409  * Fixed bug in sendcommand.c which was causing it to crash on attach
2410
2411  Revision 572.1  2000/05/26 19:27:51  ajc
2412  * Changed some of the rev-level sensitive stuff to look at the actual version
2413    of Citadel running, not the last version with which we ran setup
2414  * Added a moderation system.  Default filter level for new users is in the
2415    config file.  Per-user setting is in usersupp.  Moderation level of each
2416    message is in SuppMsgInfo.  Tweaked CONF, GETU, and SETU.  Read filter is
2417    working.  Moderate message up/down commands are not here yet.  See
2418    techdoc/moderation.txt for more info.
2419
2420  Revision 572.0  2000/05/23 02:09:30  ajc
2421  * Updated docs and tagged everything for the 5.72 release
2422
2423  Revision 571.7  2000/05/20 23:28:20  ajc
2424  * Fixed bug in client API that was causing netproc to crash
2425
2426  Revision 571.6  2000/05/15 00:05:19  ajc
2427  * Double the retry interval for SMTP deliveries after each failed attempt.
2428
2429  Revision 571.5  2000/05/11 03:08:47  ajc
2430  * serv_smtp.c: clear the relevant state buffers after an SMTP DATA command
2431    completes, allowing multiple messages in one session.  Closes bug #58.
2432
2433  Revision 571.4  2000/04/24 03:36:43  ajc
2434  * Removed references to strucmp() and struncmp(), replaced them with
2435    strcasecmp() and strncasecmp() as we did in the server a while ago, and
2436    set up the config script to figure out whether they need to be compiled
2437    in.  Also moved them to tools.h
2438  * Wrote a password manager for the client
2439
2440  Revision 571.3  2000/04/19 03:17:10  ajc
2441  * Don't ever expire the Local System Configuration> room
2442
2443  Revision 571.2  2000/04/16 19:03:47  ajc
2444  * Minor changes to avoid host lookup for local clients
2445
2446  Revision 571.1  2000/04/15 19:55:52  ajc
2447  * Fixed "Unvalidated users appear even with registration disabled" bug #36
2448
2449  Revision 571.0  2000/04/13 02:43:24  ajc
2450  * Fixed a problem that crashed the client during <G>oto commands if a room
2451    existed with a name more than 32 characters (thanks to Magus for reporting
2452    this one).
2453  * Tagged everything and updated docs for the 5.71 release
2454
2455  Revision 570.18  2000/04/10 01:47:22  ajc
2456  * More paginator changes.  Shuffled code around, added pagination to a bunch
2457    of other functions, and replaced the old, cumbersome pagination with the
2458    new, easy, API-based one in everything except message output.
2459
2460  Revision 570.17  2000/04/09 17:51:18  ajc
2461  * Added pprintf() (paginated version of printf) to the client-side API.  Now
2462    any client side function can be paginated simply by changing all of the
2463    printf's to pprintf's.  I've already done this for the user list and wholist
2464    (removing the old style pagination) and for "read directory."
2465
2466  Revision 570.16  2000/04/08 04:52:48  ajc
2467  * Another minor stoopid little time display fix
2468
2469  Revision 570.15  2000/04/08 03:58:12  nbryant
2470   * backed out the previous changes since they didn't look good on some
2471     xterms with a blue bold mode. just set the background color to black
2472     instead. this makes black-on-white terminals actually readable, if not
2473     particularly good looking.
2474
2475  Revision 570.14  2000/04/08 01:36:30  nbryant
2476   * citadel.c, commands.c: comment out cls() as this wasn't called if
2477     ansi_color=user anyway, and we have no way of knowing whether the user's
2478     terminal does background color erase, which was the reason for adding this
2479     in the first place. with the recent changes to color(), the display will get
2480     screwed up if they *do* have background color erase. perhaps this is a job
2481     for terminfo.
2482
2483  Revision 570.13  2000/04/08 00:37:42  nbryant
2484   * commands.c: fix color support for black-on-white color terminals such as
2485     CDE's dtterm. this just avoids white-on-white text; some color combinations
2486     such as yellow-on-white still aren't very legible due to contrast. There's
2487     not much I can think to do about that without affecting the look on the
2488     white-on-black terminals which probably account for most users.
2489
2490  Revision 570.12  2000/04/07 20:22:34  ajc
2491  * Fixed am/pm bug in time display
2492
2493  Revision 570.11  2000/04/07 19:22:45  ajc
2494  * For services disabled by setting port number to -1, administratively skip
2495    the bind instead of just allowing it to fail.
2496
2497  Revision 570.10  2000/03/31 04:31:02  ajc
2498  * Quick fix to 'stats' utility to purge records with bogus timestamps
2499
2500  Revision 570.9  2000/03/31 02:10:52  ajc
2501  * Caved in to pressure and enabled <R>eply in public rooms.
2502
2503  Revision 570.8  2000/03/28 03:55:53  ajc
2504  * Modified <.RU> to allow search for partial match
2505
2506  Revision 570.7  2000/03/27 03:08:19  ajc
2507  * Third parameter of CtdlDeleteMessages() now takes "" instead of NULL to
2508    specify 'any MIME type'.
2509
2510  Revision 570.6  2000/03/27 01:14:08  nbryant
2511   * Makefile.in: generate parsedate.c automatically
2512   * configure.in: check for bison/byacc/yacc. bison seems to build cleaner
2513     code.
2514   * parsedate.c: removed from CVS
2515   * parsedate.y: added #include <stdlib.h> so it builds with bison
2516
2517  Revision 570.5  2000/03/27 00:46:10  nbryant
2518   * First cut at Solaris fixes. There may still be some *printf("%s", NULL)
2519     type of issues lurking in the shadows.
2520
2521  Revision 570.4  2000/03/25 18:29:58  nbryant
2522  changed my email address
2523
2524  Revision 570.3  2000/03/23 02:41:50  ajc
2525  *** empty log message ***
2526
2527  Revision 570.2  2000/03/21 03:23:24  ajc
2528  * Experimental new linebreak mode
2529
2530  Revision 570.1  2000/03/20 14:43:19  ajc
2531  * "Brown paper bag" fix for SMTP bug (incoming long fields crash logger)
2532
2533  Revision 570.0  2000/03/19 23:42:34  ajc
2534  * This is the official 5.70 release.
2535
2536  Revision 1.494  2000/03/19 23:04:08  ajc
2537  * Small cosmetic change to date/time output
2538
2539  Revision 1.493  2000/03/19 05:02:39  ajc
2540  * SMTP hacks to deal with AOL braindamage
2541
2542  Revision 1.492  2000/03/18 18:18:04  ajc
2543  * Support multiline responses from SMTP servers when sending mail
2544
2545  Revision 1.491  2000/03/17 16:26:57  ajc
2546  * Set up a private "Sent/Received Pages" room for each user
2547
2548  Revision 1.490  2000/03/17 04:11:24  ajc
2549  * Moved bio-related commands out to a loadable module
2550
2551  Revision 1.489  2000/03/16 17:58:54  smw
2552  Created a docs directory.
2553  Moved install.txt to docs.
2554  Added inetmailsetup.txt (BBS server side e-mail)
2555  Added inetmailsetupmx.txt (local mail AND bbs e-mail
2556  Added inetsiteconfig.txt (describes the .asi command)
2557  Added siteconfig.txt (describes .asg)
2558  Added chat.txt (describes changes and new chat functionality)
2559  Made a couple of changes to install.txt (references to new documentation)
2560  Added Steve Williams to copyright.txt as the document writer.
2561
2562 Revision 1.488  2000/03/15 03:04:51  ajc
2563 * Added DEXP server command to disable incoming express messages.
2564 * <Q>uiet mode client side command to set/clear DEXP mode.
2565 * <K>nown rooms list displays through the paginator.
2566
2567 Revision 1.487  2000/03/12 00:21:35  ajc
2568 * Removed the semi-broken "chat room" functionality in the chat system, and
2569   replaced it with direct mapping to the actual Citadel room the user is in.
2570 * Display masqueraded roomname in chat, if applicable.  Fixes bug #19.
2571
2572 Revision 1.486  2000/03/11 21:29:37  ajc
2573 * SM_ flags for CtdlSaveMsgPointerInRoom() need to be a bit bucket, not an
2574   enum, since more than one can be passed.  Changed SM_DONT_BUMP_REF_COUNT
2575   from 3 to 4.  This also fixes bug #33.
2576
2577 Revision 1.485  2000/03/11 20:26:03  ajc
2578 * Reworked the <R>eply logic in messages.c - fixes bug #34
2579
2580 Revision 1.484  2000/03/11 19:22:19  nbryant
2581  * commands.c: improved timing of background keepalives if connection is
2582                lagged
2583
2584 Revision 1.483  2000/03/11 05:08:48  nbryant
2585  * commands.c: oops, that mutex stuff wasn't necessary
2586
2587 Revision 1.482  2000/03/11 04:09:03  nbryant
2588  * new threaded client code for background keepalives
2589
2590 Revision 1.481  2000/03/10 21:40:04  ajc
2591 * Changes to message base and networker to support Internet-style message
2592   ID's instead of the conventional Citadel style.
2593
2594 Revision 1.480  2000/03/08 03:36:37  ajc
2595 * Shut off hostname resolution when dealing with Unix domain sockets
2596 * Cleaned up the 'citmail' MDA tool
2597 * Added POP3 and SMTP port numbers to global system configuration
2598
2599 Revision 1.479  2000/03/07 21:54:58  ajc
2600 * Fixed the naming conventions and permissions for unix domain sockets.
2601
2602 Revision 1.478  2000/03/05 07:33:23  ajc
2603 * Added support for protocols over Unix domain sockets.
2604
2605 Revision 1.477  2000/03/04 22:36:23  ajc
2606 * Remove nulls appended to editor files during replace, edit, and print
2607   operations.  Truncate temp files during same operations.
2608   Closes bugs #6 and #7.
2609
2610 Revision 1.476  2000/03/04 05:29:18  ajc
2611 * Relax restrictions on editing of base rooms.  Renaming is not allowed but
2612   all other attributes can be edited.  Closes feature request #21.
2613 * Sending pages from the client now uses the same message editing functions
2614   as entering messages, allowing edit/abort.  Closes feature request #25.
2615
2616 Revision 1.475  2000/03/03 04:50:14  ajc
2617 * Moved all of the wholist masquerading commands into the serv_rwho module
2618
2619 Revision 1.474  2000/03/03 04:12:37  ajc
2620 * Finished the inbound side of gateway domain service
2621
2622 Revision 1.473  2000/02/27 04:55:51  ajc
2623 * Added "keymenu()" generic menu-maker to commands.c
2624 * Blocked non-numeric input to intprompt()  (fixes bug #16)
2625
2626 Revision 1.472  2000/02/27 03:57:35  ajc
2627 * Completed 'fsck'-like reference count verifier (server and client)
2628
2629 Revision 1.471  2000/02/26 18:30:40  ajc
2630 * Properly handle all aliases specified in network/mail.aliases for incoming
2631   SMTP mail (uses the alias() function, so if we replace that function with
2632   something that uses the same calling convention, it'll still work)
2633
2634 Revision 1.470  2000/02/26 05:15:38  ajc
2635 * Fortified the message base and SMTP code so that misdirected bounce messages
2636   end up in the Aide> room instead of getting dereferenced
2637 * Started writing a message reference count verifier ('fsck' for message base)
2638
2639 Revision 1.469  2000/02/25 06:14:05  ajc
2640 * Modularized the RWHO (Read WHO is online) command, basically as a pilot
2641   for modularizing all "non-API" functionality.
2642
2643 Revision 1.468  2000/02/24 03:44:00  ajc
2644 * Implemented holdoff time (15 minutes) for SMTP send retry.
2645 * Implemented "try for 3 days and then give up" on SMTP send.
2646
2647 Revision 1.467  2000/02/24 00:51:48  ajc
2648 * Client protocol synchronization check during exit from chat.
2649   This closes Bug #15.
2650
2651 Revision 1.466  2000/02/22 16:37:28  ajc
2652 * Minor tweaks to RFC822 output to keep brain-damanged MS Outlook from dying
2653
2654 Revision 1.465  2000/02/22 04:17:56  ajc
2655 * Got bounce messages working (mostly ... testers, please beat this up!)
2656 * Changed 'FIX' comments to 'FIXME' (less conflict, plus vim highlights it!)
2657
2658 Revision 1.464  2000/02/18 22:29:18  ajc
2659 * Coded up the "bounce" functions.  Still a coupla bugs.
2660
2661 Revision 1.463  2000/02/18 05:10:50  ajc
2662 * Made the <.ASI> command a bit friendlier.
2663 * SMTP sender now pays attention to "smarthost" entries in the system's
2664   Internet configuration, using them if one or more is present.
2665
2666 Revision 1.462  2000/02/17 05:27:39  ajc
2667 * Got the "MAIL From:" command sending the correct data.  (unnnhhhhnnhhhh...)
2668
2669 Revision 1.461  2000/02/16 22:06:26  ajc
2670 * Altered the display and conversion of RFC822 messages
2671
2672 Revision 1.460  2000/02/16 03:43:28  ajc
2673 * Added the resolver library to the configure script
2674
2675 Revision 1.459  2000/02/16 01:19:39  ajc
2676 * Vanquished the evil dn_expand() beast.  getmx() now seems to be working.
2677
2678 Revision 1.458  2000/02/14 04:36:14  ajc
2679 * sysdep.c: added new event hook type EVT_TIMER.  Timer event hooks are called
2680   once per minute by any worker thread.
2681 * msgbase.c: removed dependence on nested functions in CtdlOutputMsg() by
2682   replacing them with an API call CtdlRedirectOutput() in sysdep.c, which
2683   can temporarily redirect a session's output to an arbitrary file or socket.
2684 * serv_smtp.c: implemented the purging of messages in the queue for which all
2685   deliveries have been completed.
2686 * serv_smtp.c: removed temporary 'QQQQ' server command and replaced it with
2687   a timer event hook that runs the queue once per minute (this needs to be
2688   made more robust)
2689
2690 Revision 1.457  2000/02/08 21:00:47  ajc
2691 * Implemented the deprecated "LAST" command in POP3.  Some clients need it.
2692 * POP3 sessions now set the last-read pointer in Mail>.
2693
2694 Revision 1.456  2000/02/07 05:15:00  ajc
2695 * Renamed CtdlLocalHost() to CtdlHostAlias() and worked it a little deeper into
2696   the message routing logic.  Still needs some work on the gateway-domain
2697   stuff.
2698 * Twiddled CtdlOutputMsg() a bit for 'all Internet' situations.  Still needs
2699   some work to avoid printing dual headers when both Cit and RFC822 exist.
2700
2701 Revision 1.455  2000/02/03 03:57:35  ajc
2702 * Formalized the 'Internet Configuration' logistics.  Added new API call
2703   CtdlLocalHost() to detect aliases for the local host.  Used in SMTP listener.
2704
2705 Revision 1.454  2000/01/31 02:13:05  ajc
2706 * <.A>ide <S>ystem configuration <I>nternet  in the client (unfinished)
2707
2708 Revision 1.453  2000/01/26 02:41:27  ajc
2709 * SMTP delivery is working but still *very* rough.
2710
2711 Revision 1.452  2000/01/25 04:45:50  ajc
2712 * Wrote enough of the SMTP sender to get Patriot drooling over it, but not
2713   enough to complete the transmission of mail.
2714
2715 Revision 1.451  2000/01/23 21:25:45  ajc
2716 * Temporary hack to ig_tcp_server() to listen on an arbitrary port if the
2717   one specified is not bindable (for development only)
2718 * Added SM_DONT_BUMP_REF flag to CtdlSaveMsgPointerInRoom() to be used only
2719   in very specific and special situations
2720 * Generate delivery instructions when outbound SMTP mail is created from
2721   within Citadel (as opposed to being from the SMTP module)
2722
2723 Revision 1.450  2000/01/23 05:22:41  ajc
2724 * Coded up some more of the SMTP-sender (still not done)
2725
2726 Revision 1.449  2000/01/22 05:13:56  ajc
2727 * Added some more functionality to the string tokenizer
2728
2729 Revision 1.448  2000/01/17 20:57:43  ajc
2730 * CR to CRLF hacks (lose, lose, lose)
2731
2732 Revision 1.447  2000/01/17 18:30:27  ajc
2733 * Completed POP3 server.  All RFC1939 commands except APOP are implemented.
2734
2735 Revision 1.446  2000/01/17 17:09:23  ajc
2736 * Implemented LIST and STAT commands in the pop3 server
2737
2738 Revision 1.445  2000/01/17 05:38:14  ajc
2739 * citserver.c: cleanup hook functions are now run under the proper context,
2740                even when initiated by the housekeeper thread
2741 * serv_pop3.c: establish a place to hold the message list
2742
2743 Revision 1.444  2000/01/17 04:26:39  ajc
2744 * Modified CtdlOutputMsg() to handle output to arbitrary sockets or files.
2745   This uses nested functions and may not be portable beyond GCC...
2746
2747 Revision 1.443  2000/01/15 18:29:15  ajc
2748 * Added a generic (void *) parameter to the ForEachUser() and ForEachRoom()
2749   callback mechanisms, to allow callers and callbacks to pass arbitrary data
2750   between each other without requiring TSD variables.
2751 * room_ops.c: eliminated the need for 'FloorBeingSearched' TSD variable
2752 * internet_addressing.c: eliminated 'buffer1' and 'buffer2' TSD variables
2753
2754 Revision 1.442  2000/01/15 04:31:44  ajc
2755 * Removed UI_DIALOG mode in setup.  Can't count on 'dialog' to be consistent.
2756
2757 Revision 1.441  2000/01/15 04:07:17  ajc
2758 * Fixed the access rights on auto-created rooms (the same changes that were
2759   made to version 5.62 in the stable tree)
2760
2761 Revision 1.440  2000/01/13 03:32:36  ajc
2762 * techdoc/delivery-list.txt: added (syntax for delivery lists)
2763 * domain.*: added (will contain MX lookup code)
2764 * internet_addressing.c, logging.c: fixed some buffer overflow bugs
2765
2766 Revision 1.439  2000/01/12 03:56:27  ajc
2767 * sysdep.c: start the housekeeping thread *after* dropping root perms.
2768
2769 Revision 1.438  2000/01/09 19:03:16  ajc
2770 * Removed the fifo-based protocol downloads and replaced it with a less
2771   elegant "download temporary file to client, then sx/sb/sz" because
2772   downloading through a fifo was confusing some software.
2773
2774 Revision 1.437  2000/01/08 22:19:44  ajc
2775 * Completed spool to outbound delivery queue (still no queue sender implemented)
2776
2777 Revision 1.436  2000/01/08 05:00:09  ajc
2778 * Reworked some of the data structures to handle multiple recipients
2779 * Began implementation of the delivery queue
2780 * Added CtdlReallocUserData()
2781 * CtdlSaveMsg() now returns the local message ID in the database
2782
2783 Revision 1.435  2000/01/06 03:50:34  ajc
2784 * Replaced citmail.c with a new one that simply SMTP-forwards to Citadel
2785 * Started outbound SMTP queue work
2786
2787 Revision 1.434  1999/12/30 04:56:29  ajc
2788 * Got initial SMTP delivery working in a very specific situation (delivery
2789   to a single, local user)
2790
2791 Revision 1.433  1999/12/29 04:44:00  ajc
2792 * client_chat.c: display "No message sent" if a send page is aborted.
2793   Closes bug #2 in bugzilla.
2794
2795 Revision 1.432  1999/12/26 21:50:07  ajc
2796 * serv_vcard: don't run hooks when not logged in (such as in SMTP sessions)
2797 * serv_pop3: added.  This is the skeleton for a module implementing POP3.
2798
2799 Revision 1.431  1999/12/23 04:46:23  ajc
2800 * "Finished" initial hack of RFC822 import
2801
2802 Revision 1.430  1999/12/22 04:46:34  ajc
2803 * Fixed up the "Date:" headers to be RFC822-compliant
2804
2805 Revision 1.429  1999/12/13 05:30:57  ajc
2806 * Removed our naive 'conv_date()' RFC822-to-unixtime conversion function
2807   and replaced it with the public domain 'parsedate()' function from UseNet
2808
2809 Revision 1.428  1999/12/10 23:58:25  ajc
2810 * internet_addressing.c: added.  (Internet address to Citadel mapping)
2811
2812 Revision 1.427  1999/12/10 21:34:19  ajc
2813 * serv_smtp: implemented RFC821 "VRFY" and "EXPN" commands
2814
2815 Revision 1.426  1999/12/09 05:01:14  ajc
2816 * Split cmd_user() and cmd_pass() into frontend/backend functions
2817 * serv_smtp: implemented AUTH LOGIN for client authentication
2818
2819 Revision 1.425  1999/12/09 00:22:58  ajc
2820 * Finished the "arbitrary service" registration.
2821 * Eliminated "special" master socket for Citadel protocol - just register it
2822   like any other protocol.
2823 * Began initial implementation of native SMTP service.
2824
2825 Revision 1.424  1999/12/08 18:09:10  ajc
2826 * Added CtdlRegisterServiceHook() and its data type, for implementing arbitrary
2827   TCP-based services directly in the Citadel server.  Not finished yet.
2828
2829 Revision 1.423  1999/11/29 17:39:07  nbryant
2830 * citserver.c: Solaris lacks inet_aton; use inet_addr instead
2831
2832 Revision 1.422  1999/11/29 17:26:15  nbryant
2833 * citserver.c: include <sys/types.h>; may help portability to Solaris
2834
2835 Revision 1.421  1999/11/22 00:27:42  ajc
2836 * Added some temporary variables to OpenCmdResult().  Hopefully fixes
2837   bug #14 when running on FreeBSD.
2838
2839 Revision 1.420  1999/11/21 18:30:16  ajc
2840 * Protected cmd_move() from buffer overrun (no longer crashes the server)
2841 * cmd_chat() -- truncate input at 100 characters to prevent buffer overruns.
2842   Also handle broken client sockets properly.  (Thanks to DME for bug report)
2843
2844 Revision 1.419  1999/11/19 01:57:40  ajc
2845 * Fixed a *serious* memory leak in the database function wrappers.
2846 * Updated version number to 5.60 -- run setup when installing this version.
2847
2848 Revision 1.418  1999/11/18 03:29:20  ajc
2849 * Changed the order of parameters in <.A>ide <S>ystem config into a more
2850   logical grouping.
2851
2852 Revision 1.417  1999/11/18 02:31:50  ajc
2853 * Updated some of the documentation
2854 * Brought the internal version number up to 5.60
2855
2856 Revision 1.416  1999/11/17 04:15:05  ajc
2857 * Removed the session_count() function.  Instead, keep a reference count
2858   updated when sessions begin and end.
2859 * Replaced fixed number of worker threads with lower and upper limits; current
2860   code now tries to make thread count == session count, within these limits
2861
2862 Revision 1.415  1999/11/15 03:17:39  ajc
2863 * Put lockfile in /tmp instead of in /var/lock.   The latter is not guaranteed
2864   to exist, nor is it guaranteed to be writable by BBSUID
2865   (Resolves bug #11 from the Bugzilla repository)
2866
2867 Revision 1.414  1999/11/15 03:07:24  ajc
2868 * Fixed the network-wide vCard purge logic so that it (1) actually works,
2869   and (2) forces a netproc run immediately when a purge is entered
2870
2871 Revision 1.413  1999/11/09 21:20:44  nbryant
2872 * configure.in: include <sys/types.h> when doing checks which require <utmp.h>
2873   (should fix Bug #10 on FreeBSD)
2874
2875 Revision 1.412  1999/11/05 03:53:47  ajc
2876 * Issue 'cancel' messages for vCard when a user is deleted.
2877 * Try to delete 'cancel' messages locally after they've been distributed.
2878
2879 Revision 1.411  1999/11/03 04:01:20  ajc
2880 * Fixed buffer overrun problems in cmd_rchg(), cmd_hchg(), and cmd_uchg()
2881 * Removed my email address as the feedback content from the docs; replaced
2882   it with a reference to the Citadel/UX web site.
2883
2884 Revision 1.410  1999/11/02 19:51:23  ajc
2885 * Fixed timeout problem for remote client sessions (all timeouts were set to
2886   1 second ... probably a temporary hack that was missed in the cleanup)
2887
2888 Revision 1.409  1999/11/02 03:03:27  ajc
2889 * Several fixes to msgbase.c and netproc.c to prevent corrupted incoming
2890   network traffic from crashing the server.  Reject bad messages.
2891
2892 Revision 1.408  1999/11/01 04:21:34  ajc
2893 * Fixed a concurrency bug which crashed the server when multiple sessions
2894   terminated simultaneously.
2895
2896 Revision 1.407  1999/11/01 00:54:02  ajc
2897 * CtdlFetchMessage() - generate a "<no text>" message body if there's none
2898   on disk.  Too much stuff goes haywire if there's no M field.
2899
2900 Revision 1.406  1999/10/31 18:17:17  ajc
2901 * Fixed buffer overrun in cmd_rchg()
2902 * Call master_cleanup() when time_to_die==1 for proper shutdown
2903
2904 Revision 1.405  1999/10/31 16:26:55  ajc
2905 * Fixed incorrect assignment of new session ID's
2906
2907 Revision 1.404  1999/10/31 04:17:17  ajc
2908 * Fixed a bug which was crashing the server during very long message entry.
2909
2910 Revision 1.403  1999/10/29 01:48:45  ajc
2911 * database.c: Removed arbitrary limit on maximum number of sessions
2912
2913 Revision 1.402  1999/10/29 01:03:03  ajc
2914 * Debugged all possible ways for a session to terminate; do them cleanly.
2915 * Assign session numbers in a more portable and less arbitrary way.
2916
2917 Revision 1.401  1999/10/28 19:50:55  ajc
2918 * Fixed a problem where the client protocol would spit out two responses
2919   and therefore get out of sync if ASUP command set the access level to
2920   0 and therefore deleted the user (thanks to Eric McDonald)
2921
2922 Revision 1.400  1999/10/28 05:08:49  ajc
2923 * Removed all of the thread cancellation cruft that is no longer necessary
2924 * Moved the now non-system-dependent RemoveContext() out of sysdep.c (now
2925   it's part of cleanup() in citserver.c)
2926 * Removed all references to pthread_* from all modules except sysdep.c
2927
2928 Revision 1.399  1999/10/28 03:20:17  ajc
2929 * Fixed the problem of worker threads waking up prematurely.
2930 * 'QUIT'-terminated sessions now exit properly.
2931
2932 Revision 1.398  1999/10/27 04:26:58  ajc
2933 * Initial hack of worker-thread rearchitecture.  Right now it is successfully
2934   dispatching worker threads to active client sockets (and to the master
2935   socket too, of course).  Removing sessions is currently broken.
2936
2937 Revision 1.397  1999/10/26 20:20:29  ajc
2938 * Removed the auto-reconnect stuff... it was locking the client in an active
2939   loop more often than it was reconnecting.
2940
2941 Revision 1.396  1999/10/26 13:59:11  ajc
2942 damn bugs
2943
2944 Revision 1.395  1999/10/26 03:48:39  ajc
2945 * Shuffled around the order of events when a thread is terminating.  All
2946   mutex operations now happen prior to the freeing of the CitContext structure,
2947   otherwise begin_critical_section() and end_critical_section() try to
2948   manipulate the context's mutex count when there isn't any context.
2949
2950 Revision 1.394  1999/10/26 03:21:16  ajc
2951 * Changed a lot of strncpy() calls to safestrncpy() and replaced most of their
2952   hardcoded size arguments with 'sizeof' based arguments.
2953
2954 Revision 1.393  1999/10/24 19:22:51  nbryant
2955         * Makefile.in, configure.in: added --enable-icq flag; made checks for
2956           authentication libraries more intelligent.
2957
2958 Revision 1.392  1999/10/23 03:39:12  ajc
2959 * Finished moving vCard functionality to the new message base functions.
2960
2961 Revision 1.391  1999/10/21 00:50:14  ajc
2962 * Finished up the flags and replication checks in CtdlSaveMsgPointerInRoom().
2963
2964 Revision 1.390  1999/10/20 16:46:27  ajc
2965 * More code shuffle.  Added some flags to CtdlSaveMessagePointerInRoom() and
2966   enabled the MOVE command to also do a "copy" operation (actually just
2967   creates a second link and bumps the ref count).  Implemented "<C>opy" in
2968   the client.
2969
2970 Revision 1.389  1999/10/20 16:07:48  ajc
2971 * Wholist fixes for users who are in chat mode
2972
2973 Revision 1.388  1999/10/20 03:42:29  ajc
2974 * In the wholist, only show <private room> if the user viewing the list
2975   doesn't know that room.  Otherwise show the name.
2976
2977 Revision 1.387  1999/10/20 02:59:22  ajc
2978 * Code reorganization.  Making it easier to move/copy messages without
2979   duplicating existing code.
2980
2981 Revision 1.386  1999/10/17 02:25:18  ajc
2982 * Discovered a huge design flaw in the replication algorithm.  Ripped it
2983   out and replaced it with something a bit more robust.
2984
2985 Revision 1.385  1999/10/16 05:30:17  ajc
2986 * Changes to message replication code.  Don't do server-side hooks during
2987   an ENT3 command.  Also fixed a bug in cmd_whok() that caused crashes
2988   after a file format change.
2989
2990 Revision 1.384  1999/10/14 03:04:16  ajc
2991 * Finished the netproc side of Z (zap/supersede) processing for replication
2992
2993 Revision 1.383  1999/10/13 04:24:18  ajc
2994 * Added search-by-header-fields to CtdlForEachMessage(), and then to the
2995   server MSGS command.  This will have lots of uses.
2996
2997 Revision 1.382  1999/10/13 01:36:39  ajc
2998 * Starting some work on network zap (supersede) mode for replication
2999
3000 Revision 1.381  1999/10/08 02:55:57  ajc
3001 * More vCard-related debugging
3002
3003 Revision 1.380  1999/10/07 02:58:46  ajc
3004 * Semi-broken vCard replacement implementation in place.
3005 * Added "Z" (Zap, supersede) field to message format
3006
3007 Revision 1.377  1999/10/04 03:19:52  ajc
3008 * We now have a housekeeping thread and a housekeeping queue.
3009
3010 Revision 1.376  1999/10/03 21:48:21  ajc
3011 * Added serv_upgrade.h to automagically convert pre-5.55 format user records
3012   to 5.55 format user records and generate vCards.
3013
3014 Revision 1.375  1999/09/29 21:13:17  ajc
3015 * CtdlWriteObject() can now store objects in personal rooms for any specified
3016   user -- rather than only the current user or non-personal rooms.
3017
3018 Revision 1.374  1999/09/29 17:26:56  ajc
3019 * serv_vcard.c: fixed crashola bug in cmd_greg()
3020 * tools.c: simplified and improved the string tokenizer.  Now it runs in a
3021            single pass with no intermediate buffer.
3022
3023 Revision 1.373  1999/09/28 03:27:37  ajc
3024 * Fully migrated cmd_greg() and cmd_regi() into serv_vcard (still has bugs)
3025
3026 Revision 1.372  1999/09/27 03:33:40  ajc
3027 * cmd_regi() is now in serv_vcard and writes to the vcard instead of to the
3028   usersupp file.  Still needs tweaking.
3029
3030 Revision 1.371  1999/09/24 03:32:19  ajc
3031 * "read my vCard" and "write my vCard" are written and tested.
3032
3033 Revision 1.370  1999/09/24 02:54:17  ajc
3034 * Worked a little more on the vCard stuff.  The serv_vcard module is now in
3035   place, and a "read my vcard" function is there; "write my" is next...
3036
3037 Revision 1.369  1999/09/23 03:07:56  ajc
3038 * The vCard 'class' is now linked into the server, though it's not really
3039   functional yet.  Its constructors/destructors are debugged, though.
3040
3041 Revision 1.368  1999/09/19 21:28:33  ajc
3042 * Finished off the message architecture stuff with a new class of hooks to
3043   enable future server-side handlers.
3044
3045 Revision 1.367  1999/09/19 15:57:06  ajc
3046 * migrated cmd_ent3() to CtdlSaveMessage()
3047
3048 Revision 1.366  1999/09/19 05:13:57  ajc
3049 * Debugged the new version of CtdlWriteObject()
3050
3051 Revision 1.365  1999/09/16 03:23:23  ajc
3052 * Did most of the migration from save_message() to CtdlSaveMsg().  The
3053   latter builds a "struct CtdlMessage" (so we can run server-side handlers
3054   against it later on), then serializes it and stores to disk.
3055 * BROKEN BUILD ALERT!!  cmd_ent3() and CtdlWriteObject() are still not
3056   migrated.  They are stubbed out and will MALFUNCTION if used right now!!
3057
3058 Revision 1.364  1999/09/07 01:42:42  ajc
3059 * cmd_msg3() now uses serialize_message() for its output.  All message
3060   commands will eventually exist as a "struct CtdlMessage" at some point
3061   so that we can install server-side handler hooks.
3062
3063 Revision 1.363  1999/09/07 00:04:13  ajc
3064 * netproc.c: put outgoing messages into the use table, too -- this prevents
3065   locally originated messages from showing up again if a remote system is
3066   misconfigured and spools them back to us.
3067
3068 Revision 1.362  1999/09/06 03:39:15  ajc
3069 * citadel.c: run strproc() on new passwords
3070
3071 Revision 1.361  1999/09/03 17:50:26  playcow
3072 For URL view, don't prompt user to select url if there is only one.  Display
3073 <U>RL View prompt if message contains url(s). -Ben
3074
3075 Revision 1.360  1999/09/02 02:09:59  ajc
3076 * msgbase.c: new function serialize_message() for future use
3077
3078 Revision 1.359  1999/09/01 21:09:25  ajc
3079 * database.c: display the GDBM version string on startup
3080
3081 Revision 1.358  1999/09/01 02:36:34  ajc
3082 * Actually _enforce_ the max msg len limit
3083
3084 Revision 1.357  1999/09/01 01:51:48  ajc
3085 * Added the ability to handle embedded URL's from the text client
3086
3087 Revision 1.356  1999/09/01 01:02:47  ajc
3088 * Implemented "maximum message length" in global system config
3089
3090 Revision 1.355  1999/08/31 00:57:17  ajc
3091 * Handle multipart/alternative properly during legacy message outputs.
3092   Basically it just prints the first alternative and skips the rest.
3093
3094 Revision 1.354  1999/08/29 21:12:24  ajc
3095 * Made some changes to the output of MIME (especially multipart) messages.
3096
3097 Revision 1.353  1999/08/29 19:56:43  ajc
3098 * HTML updates
3099
3100 Revision 1.352  1999/08/24 02:01:03  ajc
3101 * html.c: added.  This is an overly simplistic HTML-to-text converter.
3102
3103 Revision 1.351  1999/08/21 18:37:29  ajc
3104 * Minor cosmetic cleanup.  No code changes.
3105
3106 Revision 1.350  1999/08/21 05:15:34  ajc
3107 * mailinglist.c, netmailer.c: fixed to allow list submissions from all posters
3108   on a Citadel network rather than only on the local system.
3109
3110 Revision 1.349  1999/08/08 00:25:45  ajc
3111 * Made one more byte available in locate_host() and in all the structs which
3112   its output gets written to (client can display 24 positions but we were only
3113   saving 23).
3114
3115 Revision 1.348  1999/08/07 16:34:38  nbryant
3116 * serv_icq.c: warning fixes
3117
3118 Revision 1.347  1999/08/06 02:57:26  ajc
3119 * locate_host.c: use strdoop() and phree() instead of strdup() and free()
3120 * serv_icq.c: run learned IP's through Citadel's locate_host() & put in Wholist
3121
3122 Revision 1.346  1999/08/05 17:58:59  ajc
3123 * RWHO command now returns express message code in postion 3
3124
3125 Revision 1.345  1999/08/04 02:21:45  ajc
3126 * Fixed some bugs in the ICQ metaclient, and documented the new protocol cmds
3127
3128 Revision 1.344  1999/08/03 11:34:35  ajc
3129 * Added client_icq.c and client_icq.h
3130
3131 Revision 1.343  1999/08/03 03:14:51  ajc
3132 * Wrote the client side of the ICQ gateway.  Now on to other projects.  :)
3133
3134 Revision 1.342  1999/08/03 01:52:06  ajc
3135 * Redesigned the client protocol commands for dealing with ICQ
3136 * Implemented page function priority ordering to prevent pages from being
3137   simultaneously delivered over multiple IM systems
3138 * Migrated serv_icq.* into the Makefile
3139
3140 Revision 1.341  1999/08/01 21:36:30  ajc
3141 * EXTREME coolness.  The server side of the ICQ metaclient is now working.
3142   It is set up using ICQL and ICQA commands, it automatically logs the user
3143   onto ICQ along with Citadel, and displays all non-offline ICQ contacts
3144   in the Wholist.
3145
3146 Revision 1.340  1999/07/31 07:18:01  ajc
3147 * Restructured the express message infrastructure, adding a class of function
3148   hooks for the addition of multiple paging modules with message routing
3149
3150 Revision 1.339  1999/07/30 22:20:19  ajc
3151 * Applied bugfix patches contributed by Vaggelis Tsirkas:
3152   * rooms.c: buffer overrun fix
3153   * room_ops.c: cmd_rdir() now behaves better when directory doesn't exist
3154
3155 Revision 1.338  1999/07/30 03:32:24  ajc
3156 * Added strdoop(), a leak-checked version of strdup()
3157 * Small fixes to new API functions in msgbase.c
3158 * ICQ metaclient stores/reads config using the message base API functions
3159
3160 Revision 1.337  1999/07/29 03:36:37  ajc
3161 * msgbase.c: reorganized.  output_message() now uses CtdlFetchMessage(),
3162   cmd_msg3() now fetches directly from disk and spews to the client.
3163
3164 Revision 1.336  1999/07/28 04:02:37  ajc
3165 * Server modules are now labelled with their RCS ID instead of a complex and
3166   manually-updated data structure.
3167
3168 Revision 1.335  1999/07/28 03:50:24  ajc
3169 * serv_expire.c: expire-by-age now calls CtdlFetchMessage() instead of
3170   calling output_message() in MT_DATE mode.
3171 * msgbase.c: removed MT_DATE mode ('twas a sleazy hack)
3172
3173 Revision 1.334  1999/07/27 22:47:26  ajc
3174 * Implemented new data type "CtdlMessage" which will eventually be used as
3175   widely as possible to represent a message in memory.
3176 * Implemented CtdlFetchMessage() which is intended to become the back-end to
3177   output_message() as well as a bunch of other things.
3178
3179 Revision 1.333  1999/07/27 20:00:24  ajc
3180 Removed all references to CC->msglist and CC->num_msgs, and all utility
3181 functions which relied upon them.  Citadel Is Now Better.
3182
3183 Revision 1.332  1999/07/27 19:32:22  ajc
3184 Removed serv_upgrade.c and all references to it in Makefile.in
3185 Reworked new-mail-count to not use MessageFromList() etc.
3186
3187 Revision 1.331  1999/07/25 02:59:37  ajc
3188 Fixed reference count problem in cmd_move()
3189
3190 Revision 1.330  1999/07/24 22:50:38  ajc
3191 Continued replacing references to [get|put]_msglist() with better code.
3192 For some reason, cmd_msgs() still doesn't always work right.
3193
3194 Revision 1.329  1999/07/24 22:16:41  ajc
3195 Experimenting with automatic updating of ChangeLog by CVS.  Simply twiddle
3196 ChangeLog a bit (i.e. by adding or removing a newline from the end of the
3197 file) before issusing "cvs commit", and the comments recorded by CVS will
3198 automatically appear at the beginning of ChangeLog.
3199
3200 Revision 1.328  1999/07/24 22:14:21  ajc
3201 cmd_move() now uses CtdlDeleteMessages().
3202 WARNING: build is temporarily broken.  Currently removing all references
3203 to the "msglist" kept in CitContext.  It's ugly and must die.
3204
3205 Thu Jul 22 22:26:50 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3206         * Moved message deletion into new API function CtdlDeleteMessages()
3207         * Added CtdlWriteObject() to store generic data in the msgbase
3208         * Fixed really dumb error that prevented network msgs from posting
3209
3210 Tue Jul 20 22:14:54 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3211         * Moved the actual work done in cmd_msgs() into a new API function
3212           called CtdlForEachMessage() which is supplied a callback function.
3213
3214 Mon Jul 19 23:24:18 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3215         * Keep the (unqualified) content-type in the SuppMsgInfo record.  We'll
3216           be using this shortly to search rooms for specific object types.
3217
3218 Sun Jul 18 14:53:16 EDT 1999 Art Cancro <ajc@uncensored.citadel.org> 
3219         * Changes to dynloader et al to handle ICQ module being written
3220         * serv_icq.c, serv_icq.mk: added (separate makefile is temporary)
3221
3222 1999-07-17 Nathan Bryant <bryant@cs.usm.maine.edu>
3223         * chkpwd.c: DELETED CVS REVISION 1.3 (backed out Art's last change)
3224           use 'cvs update -r 1.2 chkpwd.c; cvs update -A chkpwd.c' NOW to
3225           avoid problems with working directories.
3226         * Makefile.in: don't install chkpwd setuid if make install isn't
3227           being run as root.
3228         * citadel.spec: chmod u+s chkpwd during %install stage
3229
3230 Fri Jul 16 18:39:04 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3231         * PEXP and GEXP no longer trip the idle time display
3232         * Fixed bug which duplicated incoming private mail to Trashcan
3233         * Improved auto-reconnect by NOT using SIGPIPE and longjmp(); also
3234           implemented a 15 second delay to wait for a crashed server to restart
3235         * Relaxed the security check in chkpwd.c a bit; it was just flat-out
3236           preventing logins on my system otherwise
3237
3238 Thu Jul 15 22:57:32 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3239         * eliminate redundant "name" parameter in [l]putuser(), now uses
3240           usbuf->fullname to guarantee the correct name for the index
3241
3242 1999-07-12 Nathan Bryant <bryant@cs.usm.maine.edu>
3243         * Makefile.in, configure.in: link netproc with gdbm
3244         * netproc.c: only include gdbm.h if HAVE_GDBM_H
3245         * user_ops.c: warning fix
3246
3247 Mon Jul 12 19:51:30 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3248         * Mail is now saved in both sender and recipient mailboxes.  This is
3249           structured in a way that will allow a separate "outbox" room and/or
3250           multiple recipients in the future.
3251
3252 Sun Jul 11 18:46:48 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3253         * netproc.c: msgfind() no longer uses the timestamp as a message-ID
3254           when no other message-ID is available (it screws up the loopzapper)
3255         * room_ops.c: eliminate room name parameter in putroom() and its ilk;
3256           get data from quickroom.QRname instead; prevents incorrect indexes
3257         * Tentative implementation of "personal rooms" (user-private namespace)
3258         * Added supplementary message info records for info that may change
3259           at some time later than when the message is saved (i.e. ref counts)
3260         * Implemented msg reference count increment/decrement; delete messages
3261           whose reference count reaches zero
3262
3263 Wed Jul  7 23:25:09 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3264         * control.c: create citadel.control if it doesn't exist (yikes!)
3265         * serv_expire.c: purge mailbox rooms belonging to non-existent users
3266         * user_ops.c: don't delete user's mailbox at user-delete time
3267
3268 Mon Jul  5 17:01:29 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3269         * utilsmenu: removed menu items for defunct utilities
3270
3271 Mon Jun 28 16:24:10 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3272         * Changed any remaining references to UUCP, to "Internet" instead.
3273
3274 Thu Jun 24 11:13:23 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3275         * added server command line option "-f" to defrag databases on startup
3276         * control.c: better performance and reliability in [get|put]_control()
3277         * netproc.c: Finished the loopzapper
3278
3279 Mon Jun 21 00:04:15 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3280         * netproc.c: started writing a vortex checker.  Not finished.
3281
3282 Wed Jun  9 23:34:25 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3283         * Replaced all code that generated temporary filenames with calls to
3284           tmpnam().  Rewrote using tmpfile() where possible.
3285
3286 Thu Jun  3 11:35:18 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3287         * base64.c: mapped fi and fo to stdin and stdout using
3288           actual code rather than assignment at declaration time
3289           (several users of Red Hat Linux 6.0 reported problems)
3290
3291 Fri May 21 20:05:00 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3292         * Added function CtdlGetDynamicSymbol() for dynamic symbol allocation
3293         * server.h: Changed discrete #define's to enum's where appropriate
3294         * sysdep.c: Changed the startup message to give credit to the whole
3295           development team :)  Also made the message more GNU-ish.
3296
3297 Thu May 20 20:01:30 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3298         * database.c: print log messages for file defragmentations
3299         * citserver.c: implemented CtdlAllocUserData() and CtdlGetUserData()
3300           for arbitrary per-session data storage (by modules etc.) without
3301           having to add fields to struct CitContext
3302         * msgbase.c: removed "desired_section" from struct CitContext and
3303           implemented it using CtdlGetUserData() as a test.
3304
3305 Wed May 19 19:30:28 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3306         * commands.c, commands.h, routines.c: began color scheme changes
3307
3308 1999-05-15 Nathan Bryant <bryant@cs.usm.maine.edu>
3309         * configure.in: Added untested support for BSDI 4.x.
3310
3311 1999-05-13 Nathan Bryant <bryant@cs.usm.maine.edu>
3312         * acconfig.h, configure.in, routines.c: fix for certain SYSV variants
3313           which lack utmp.ut_host
3314         * citadel.h, file_ops.c, msgbase.c, netproc.c, serv_chat.c: fix
3315           namespace collision with <sys/stream.h> on aforementioned SYSV
3316           variant
3317         * configure.in, getutline.c: check for paths.h
3318         * configure.in, Makefile.in: check for -lsocket and -lnsl
3319
3320 1999-05-11 Nathan Bryant <bryant@cs.usm.maine.edu>
3321         * chkpwd.c: fixed excessive paranoia; it used to refuse to run when
3322           invoked by root and BBSUID != 0
3323         * Makefile.in: ignore errors while installing /etc/pam.d/citadel
3324
3325 1999-04-27 Art Cancro <ajc@uncensored.citadel.org>
3326         * file_ops.c: fixed NDOP to not crash the server if it has trouble
3327           with a download file
3328         * netpoll.c: upped default packet size
3329
3330 Mon Apr 26 22:06:57 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3331         * Repaired IGnorant security hole blunder re. citmail
3332
3333 Sun Apr 25 12:44:08 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3334         * serv_chat.c: notify user of number of participants upon entering chat
3335         * Built the 5.53 distribution
3336
3337 Wed Apr 21 22:23:13 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3338         * aidepost.c: add -r flag to allow posting to rooms other than Aide>
3339         * serv_expire.c: now posts transcripts of all auto-purged rooms/users
3340
3341 Tue Apr 20 12:45:55 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3342         * messages.c: downloading more than MAX_MSGS messages now truncates
3343           (off the beginning of the list) rather than crashing.
3344
3345 Mon Apr 19 12:11:48 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3346         * whobbs.c: auto-detect when being called from a webserver, and act
3347           as a CGI (print HTTP headers and HTML output)
3348
3349 1999-04-18 Nathan Bryant <bryant@cs.usm.maine.edu>
3350         * serv_chat.c: fixed some potential buffer overruns (thanks dme)
3351
3352 Wed Apr 14 21:32:28 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3353         * Makefile.in: chmod 4755 citmail to prevent citmail from aborting
3354           when called from sendmail due to citadel.config security check
3355
3356 1999-04-13 Nathan Bryant <bryant@cs.usm.maine.edu>
3357         * dynloader.c: OpenBSD places underscores in front of symbol names
3358         * Makefile.in: fixed a few sillies
3359         * aidepost.c, citmail.c, file_ops.c, logging.c, msgbase.c, netmailer.c,
3360           netproc.c, rcit.c, routines.c, serv_upgrade.c: fixed time_t handling
3361           (have to cast it to long for printf/scanf)
3362
3363 Mon Apr 12 22:13:26 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3364         * aidepost.c: rewrote to unlink temp file before writing to it so that
3365           it will automatically go away if interrupted. Also ran indent -kr -i8
3366
3367 1999-04-12 Nathan Bryant <bryant@cs.usm.maine.edu>
3368         * configure.in, Makefile.in: taught it how to generate OpenBSD shared
3369           libraries
3370         * config.c, sysdep.c: fix -h option not setting proper modules dir
3371         * configure.in, citadel.spec: make --enable-chkpwd the default
3372         * setup.c: don't chown chkpwd
3373
3374 1999-04-11 Nathan Bryant <bryant@cs.usm.maine.edu>
3375         * configure.in: another OpenBSD fix, but we're still not quite there yet
3376         * serv_chat.c: warning fix
3377
3378 Thu Apr  8 22:51:28 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3379         * config.c: now requires a setup run for *any* rev level difference
3380         * Updated docs & confs for 5.53b1 release
3381         * setup.c: sets the 0600 permission bits on citadel.config that
3382           is checked for in config.c
3383
3384 1999-04-08 Nathan Bryant <bryant@cs.usm.maine.edu>
3385         * citserver.c: improved is_public_client(), also if a public_client
3386           only supplies a numeric address, attempt to resolve it
3387         * locate_host.c: verify that the forward DNS matches the reverse
3388         * locate_host.c, locate_host.h: more general interface
3389         * configure.in, acconfig.h: fixes for Digital UNIX
3390
3391 Wed Apr  7 21:36:16 EDT 1999 Art Cancro <ajc@uncensored.citadel.org>
3392         * Implemented "access level required to create rooms" (client & server)
3393
3394 1999-04-07 Nathan Bryant <bryant@cs.usm.maine.edu>
3395         * configure.in: updated help messages, OpenBSD support
3396         * setup.c: if /etc/inittab doesn't exist, don't ask to create an
3397           entry in it
3398         * server.h, sysdep.c: fix a potential deadlock/data corruption bug
3399         * room_ops.c: fixed the 'gdbm error: Illegal data' message when
3400           deleting a room which had never been posted to
3401         * user_ops.c: include errno.h
3402         * dynloader.c: fix for OpenBSD
3403
3404 1999-04-06 Nathan Bryant <bryant@cs.usm.maine.edu>
3405         * Makefile.in, configure.in, getutline.c, sysdep.c:
3406           fixes/bug workarounds for FreeBSD
3407
3408 1999-04-03 Nathan Bryant <bryant@cs.usm.maine.edu>
3409         * Makefile.in, configure.in, chkpwd.c, acconfig.h: support for
3410           `chkpwd', a setuid helper program for machines which use shadow
3411           passwords (configure --enable-chkpwd)
3412         * Makefile.in, configure.in, auth.c, citadel.pam, user_ops.c: support
3413           for PAM or shadow passwords (configure --with-pam)
3414         * Makefile.in: made some messages simpler
3415         * citadel.spec: updated for 5.53; correct name of tarball; build with
3416           --enable-chkpwd and --with-pam; add defattr tags so rpm's can be
3417           built by non-root user
3418         * commands.c: cosmetic cleanup
3419         * config.c: (security/paranoia) check permissions on citadel.config
3420         * configure.in: check for ncurses if we can't find curses
3421         * dynloader.c: warning fix
3422         * sysdep.c: don't complain if initgroups() fails
3423         * citadel.c: fix systems with SYSV-style signal handling (e.g. libc5)
3424         * Makefile.in: New! Improved! Cleaner! Shinier!
3425
3426 Sun Mar 21 14:21:47 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3427         * messages.c: cosmetic cleanups to message reading loop
3428
3429 Sat Mar 13 21:33:19 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3430         * commands.c: use bright colors by default in color mode
3431         * citserver.c: initialize wholist fields with (not logged in) etc.
3432
3433 1999-03-08 Nathan Bryant <bryant@cs.usm.maine.edu>
3434         * sysdep.c: call DLoader_Init() with an absolute path so that gdb can
3435           find module symbols
3436         * database.c: bail out if opening databases fails
3437
3438 Sat Mar  6 01:55:55 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3439         * serv_chat.c: use memfmout(), *not* cprintf() to transmit express
3440           messages.  Calling cprintf() on strings >256 bytes crashes the server
3441         * msgbase.c: minor logging fix in save_message()
3442
3443 1999-03-05 Nathan Bryant <bryant@cs.usm.maine.edu>
3444         * sysdep.c: add undocumented -r flag to citserver to prevent it from
3445           dropping root permissions.
3446         * sysdep.c: also drop supplementary groups
3447
3448 1999-03-04 Nathan Bryant <bryant@cs.usm.maine.edu>
3449         * config.c: error checking in put_config()
3450         * setup.c: chgrp files to the login group associated with BBSUID
3451         * sysdep.c: copyright 1987-1999; drop root perms; load modules and call
3452           master_startup() after dropping perms
3453
3454 Wed Mar  3 00:00:55 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3455         * Prevent buffer overruns in lowercase_name in [get|put]user()
3456         * client_chat.c: use citedit() for page composition
3457
3458 Sat Feb 27 07:47:36 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3459         * rooms.c: download_to_local_disk() prompts for a filename if a blank
3460           filename was supplied to it (for attachments without names)
3461         * mime_parser.c: strip leading whitespace in content_type & disposition
3462
3463 1999-02-24 Nathan Bryant <bryant@cs.usm.maine.edu>
3464         * configure.in: improved check for pthreads
3465         * configure.in, routines.c, acconfig.h: check for ut_type in struct utmp
3466         * configure.in, Makefile.in: support for building server modules as
3467           relocatable objects for BSDI (which still uses a.out *gag* *choke*)
3468         * configure.in: compiler choice & flags for BSDI; check for libtermcap
3469         * database.c: don't use a critical section in open_databases()
3470         * housekeeping.c: use getfloor()/putfloor() instead of
3471           lgetfloor()/lputfloor() in check_ref_counts()
3472         * mime_parser.c: include <errno.h>
3473         * msgbase.c: include <limits.h>
3474         * sysdep.c: hacks for BSDI. use signals to fake thread cancellation;
3475           don't call master_cleanup() directly from signal handler.
3476         * routines.c: prototype getutline() if necessary
3477         * getutline.c: stupid bugfix
3478         * acconfig.h, configure.in, locate_host.c, server.h: work around
3479           nonreentrant gethostbyaddr() on BSDI
3480
3481 Mon Feb 15 22:59:00 EST 1999 Vaggelis Tsirkas
3482         * citadel.c: increased hostname buffer size to handle very big names
3483
3484 1999-02-15 Nathan Bryant <bryant@cs.usm.maine.edu>
3485         * sysdep.c(main): initialize alen before call to accept()
3486
3487 1999-02-04 Nathan Bryant <bryant@cs.usm.maine.edu>
3488         * configure.in: improved check for cygwin
3489         * configure.in, routines.c: access utmp directly instead of calling
3490           `who' if getutline() is available.
3491         * configure.in, Makefile.in, getutline.c: replace getutline() on
3492           systems which don't have it
3493         * routines.c: now always access utmp directly unless we can't find
3494           utmp.h
3495
3496 1999-02-02 Nathan Bryant <bryant@cs.usm.maine.edu>
3497         * Fixes for Cygwin:
3498           - ifdef out file download methods that require named pipes (client)
3499           - include pthread.h and gdbm.h only if they are present (fixes
3500             auto dependency generation)
3501           - include snprintf.h where needed
3502           - handle .exe suffixes for "make install"
3503
3504 Tue Feb  2 22:15:08 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3505         * Overhauled the express messaging system (again)
3506
3507 Mon Feb  1 19:48:04 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3508         * messages.c: implemented client download of MIME attachments
3509
3510 Sun Jan 31 18:29:18 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3511         * Added qpdecode.c to the distribution (decodes quoted-printable)
3512         * Finished the MIME parser
3513         * Gave MSG0 a reasonable behaviour for MIME messages
3514         * Added the OPNA command for downloading attachments
3515
3516 Sat Jan 30 18:39:53 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3517         * Look for citadel.rc in current directory if not found elsewhere
3518         * More work on the MIME parser
3519         * Added base64.c to the distribution
3520
3521 1999-01-29 Nathan Bryant <bryant@cs.usm.maine.edu>
3522         * fixes for IRIX (thanks to wr and family for use of the Indy):
3523           - use memset()/memcpy() instead of bzero()/bcopy() in all cases
3524           - configure updates
3525           - handle `long' pid's
3526           - a few other little bits
3527
3528 Mon Jan 25 21:23:07 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3529         * Fixed bug in save_message() which crashed the server on mail to sysop
3530         * Rewrote pop_march() to be smarter about <G>oto heuristics
3531
3532 Sat Jan 23 14:32:19 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3533         * Changed internal storage of express messages from a linked list to
3534           a single, resizable buffer.
3535         * Added a "room order" key to the room record, to allow some control
3536           over room listing order.
3537         * Made the room list commands aware of the room order key.
3538         * Overhauled <G>oto heuristics to pay attention to floor & room order
3539
3540 Wed Jan 20 19:21:51 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3541         * Added some more code to the unfinished MIME parser
3542         * Changed module loading path to simply "modules" because after calling
3543           get_config(), the cwd is guaranteed to be the correct BBS directory.
3544
3545 Tue Jan 19 21:28:29 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3546         * Fixed a bug in the user editing command (client side)
3547         * Started a rewrite of the MIME parser
3548
3549 Thu Jan 14 21:21:15 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3550         * Brought over the mime_parser from WebCit and began preliminary work
3551           on supporting MIME format messages.
3552
3553 Tue Jan 12 22:30:00 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3554         * Various changes to begin work on support for MIME messages
3555                 - Defined format type 4 for MIME
3556                 - msgbase.c: *temporary* hacks in output_message() for Type 4
3557                 - citmail.c: added more robust header parsing, and support
3558                              for Type 4.  Also eliminated the crappy built-in
3559                              SMTP server.
3560                 - Updated some of the technical documentation
3561
3562 Sun Jan 10 13:34:36 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3563         * Fixed access to page log room
3564
3565 Fri Jan  8 12:35:09 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3566         * control.c: include <limits.h> to fix PATH_MAX undefined
3567         * serv_chat.c: made the following changes to cmd_sexp() --
3568                 * Send zero-length message to check only, don't send
3569                 * Send "-" message on the command line to invoke
3570                   the SEND_LISTING transfer mode for a multi-line message
3571         * Added facilities to log all pages to a room (site configurable)
3572
3573 Tue Jan  5 23:24:52 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3574         * Replaced all occurances of malloc(), realloc(), and free() in the
3575           server and server-modules with mallok(), reallok(), and phree().
3576           Wrote macros and a set of leak-tracking functions.
3577
3578 Sun Jan  3 20:38:45 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3579         * Documentation changes
3580
3581 Fri Jan  1 01:01:45 EST 1999 Art Cancro <ajc@uncensored.citadel.org>
3582         * Fixed security problem relating to private rooms
3583
3584 Wed Dec 30 20:10:52 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3585         * sysdep.c: put a bigger string buffer into lprintf() to avoid overruns
3586
3587 Sat Dec 26 16:56:46 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3588         * internetmail.config: commented this file more clearly
3589
3590 Wed Dec 23 20:42:49 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3591         * citadel.c: added some experimental code to automatically reconnect
3592           to the server if the connection is broken.  For some reason, it only
3593           works once.
3594
3595 Wed Dec 23 18:47:12 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3596         * sysdep.c: ignore SIGPIPE.  This keeps broken connections from
3597           crashing the whole server.
3598         * Tagged everything for the official 5.50 release.
3599
3600 Mon Dec 21 07:54:20 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3601         * housekeeping.c: call kill_session() with session_to_kill,
3602           not ccptr->cs_pid (was crashing the server)
3603
3604 Sat Dec 19 13:57:48 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3605         * Added "-i" flag to netproc to make it skip the export phase.
3606           Updated other programs to call netproc in this way when appropriate.
3607         * Updated network.txt to reflect the usage for netproc (which has
3608           been wrong for several releases)
3609
3610 Thu Dec 17 00:17:04 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3611         * Started removing the word "beta" from the docs and code.
3612           Preparing for an actual release.
3613         * msgbase.c: generate an 'I' field when requested (i.e. on locally
3614           originating messages.  this was breaking parts of the network)
3615
3616 1998-12-15 Art Cancro <ajc@uncensored.citadel.org>
3617         * msgbase.c: remove extra call to alias() which was causing
3618           Citadel-to-Citadel mail to fall into the bit bucket.
3619         * msgbase.c: fixed tempfile naming problem that could cause a new
3620           outgoing netmail message to overwrite another if netproc had not been
3621           run in between
3622
3623 1998-12-14 Art Cancro <ajc@uncensored.citadel.org>
3624         * More session table stability nonsense
3625
3626 Sun Dec 13 17:40:08 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3627         * sysdep.c, citserver.c: (hopefully) fixed a session table concurrency
3628           bug which was causing the server to occasionally crash.
3629         * removed serv_test.so from the default build
3630
3631 Fri Dec 11 18:50:00 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3632         * setup.c: default value for maxsessions is now 0 (no limit)
3633         * room_ops.c: don't allow users to create a room called "Mail"
3634         * serv_expire.c: fixed "number of messages purged" display
3635         * commands.c: when using color, default to low-intensity colors
3636
3637 Tue Dec  8 07:58:16 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3638         * Beta 2
3639
3640 Sat Dec  5 01:24:03 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3641         * Added a new type of module hook for adding logging functions
3642         * Removed whitespace to left and right of '@' in netmail recipients
3643         * sysdep.c: read citadel.config _before_ initializing loadable modules
3644         * stats.c: fixed segfault resulting from extracting log lines
3645         * Ripped most of the "attachments" stuff out of both the client and
3646           server.  (Thought of a better way to handle it ... LATER.)
3647
3648 1998-12-03 Nathan Bryant <bryant@cs.usm.maine.edu>
3649         * setup.c: create citadel.config with mode 0600
3650         * Makefile.in: don't chmod sendcommand
3651         * serv_upgrade.c: don't create citadel.config if it doesn't already
3652           exist (paranoia)
3653         * setup.c: saner defaults for nodename and fqdn
3654
3655 Wed Dec  2 20:37:05 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3656         * msgbase.c: modified AddMessageToRoom() and all functions that call it
3657           to use a more reliable/accurate method to set quickroom.QRhighest
3658         * weekly.in: don't sort/purge filedir where filedir doesn't exist
3659
3660 1998-12-02 Nathan Bryant <bryant@cs.usm.maine.edu>
3661         * weekly is now generated by configure
3662
3663 Mon Nov 30 19:48:52 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3664         * room_ops.c: added sort_msglist() to move and save operations
3665         * sendcommand.c: added (also updated utils.txt, weekly, Makefile.in)
3666         * BETA 1
3667
3668 Sun Nov 29 23:57:39 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3669         * Fixed cmd_regi() to not display a second result code after xfer
3670         * Makefile.in: Removed "chmod 4755 citmail netmailer"
3671
3672 1998-11-23 Nathan Bryant <bryant@cs.usm.maine.edu>
3673         * citadel.spec: added
3674
3675 1998-11-22 Nathan Bryant <bryant@cs.usm.maine.edu>
3676         * Makefile.in: split install target into install-exec, install-data,
3677           and install-doc subtargets
3678
3679 Sat Nov 21 16:53:30 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3680         * Added a fourth color mode in the client: "user" which turns color
3681           on or off according to a per-user flag stored on the server.  Added
3682           server-side support for this too, of course.
3683         * import.c: removed
3684         * serv_expire.c: finished the code to purge stale visits
3685         * sysdep.c: strip trailing nonprintables in client_gets()
3686         * routines2.c: fixed <.AS> command; all configs now work properly
3687         * Moved num_parms() and all the extract() type functions into tools.c
3688           and removed them from all other files.  Linked in tools.[o|ro] there.
3689         * netproc.c: handled incoming file transfers to correct room directory
3690         * room_ops.c: fixed incorrect naming of files in info and images dirs
3691
3692 Fri Nov 20 20:29:07 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3693         * setup.c: removed all prompts that can be configured from within the
3694           client in order to simplify the setup procedure
3695
3696 Thu Nov 19 23:28:33 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3697         * Fixed serv_upgrade.c and export5.c (found elsewhere) to use a new
3698           export format which treats visits as a separate section
3699         * serv_expire.c: began writing functions to purge rooms and visits
3700           (neither work yet), and added a way to call defrag_databases()
3701
3702 Wed Nov 18 23:51:17 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3703         * Reimplemented 'visit' structs stored globally instead of as
3704           lists-per-user
3705
3706 Tue Nov 17 22:37:48 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3707         * Started implementing global room numbers.
3708
3709 Sun Nov 15 20:32:34 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3710         * room_ops.c: mailbox rooms always appear on the main floor
3711         * made QR_MAILBOX rooms non-editable
3712         * cmd_setr() delete old room record when room name changes
3713           (This causes a big mess that exposes a flaw in the whole design.)
3714         * room_ops.c: users can delete messages from their mailboxes
3715
3716 Thu Nov 12 23:59:13 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3717         * Rewrote cmd_rchg() and also increased the size of the "fakename"
3718           buffer.  Overruns are probably what was causing the crashes.
3719         * Changed the way cmd_ent3() handles mail messages; the previous code
3720           rerouted all private mail to the trash.
3721
3722 Wed Nov 11 17:57:39 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3723         * citserver.c: slight changes to cmd_rchg() and cmd_hchg() [crashes]
3724         * citserver.c, msgbase.c, user_ops.c: hide the owner-prefix of mail
3725           rooms in a couple more places: set_wtmpsupp() and make_message()
3726         * sysdep.c: added an fflush() to lprintf() for "tail -f"-able logs
3727         * serv_expire.c: purge ops are now a command instead of a cleanup
3728           function.  This is probably temporary as well.
3729         * citadel.c: fixed the way <.WL> parses the returned data from a
3730           TIME command.
3731
3732 1998-11-11 Nathan Bryant <bryant@cs.usm.maine.edu>
3733         * serv_upgrade.c: fix uninitialized variable
3734
3735 Wed Nov 11 00:47:32 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3736         * msgbase.c: fixed a bug that was misrouting incoming network msgs
3737         * server.h, database.c: wrapped all GDBM calls in critical sections
3738           to avoid making those calls re-entrantly (gdbm fatal: lseek error)
3739
3740 1998-11-10 Nathan Bryant <bryant@cs.usm.maine.edu>
3741         * Makefile.in: link in snprintf.o where needed
3742
3743 1998-11-09 Nathan Bryant <bryant@cs.usm.maine.edu>
3744         * client_chat.c: eliminate calls to sprintf()
3745         * commands.h, routines.c, routines2.c: warning fix
3746         * commands.c, control.c, cux2ascii.c, file_ops.c, import.c,
3747           ipc_c_tcp.c: eliminate sprintf() calls
3748
3749 Mon Nov  9 19:15:31 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3750         * serv_upgrade.c: added all missing fields to export/import
3751         * serv_expire.c: support per-user purge time when purging users
3752         * user_ops.c: added per-user purge time to AGUP and ASUP commands
3753         * routines.c: added more stuff to <.A>ide <E>dit user
3754
3755 Sun Nov  8 22:56:53 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3756         * serv_expire.c: created; moved message expiry from serv_test.c,
3757           moved user purge from userpurge.c
3758         * userpurge.c: deleted
3759         * routines2.c: finished <.AS> command
3760         * room_ops.c: fixed Aide room access (for some reason, the Aide
3761           room had the QR_MAILBOX flag set)
3762
3763 1998-11-08 Nathan Bryant <bryant@cs.usm.maine.edu>
3764         * useradmin.c: really removed (cvs remove)
3765         * aidepost.c, citadel.c: convert all sprintf() calls to snprintf()
3766         * sysdep.c: fix overrun in lprintf() described by dme/Dead Monkey
3767         * citmail.c, citserver.c: convert all sprintf() call to snprintf()
3768
3769 Sun Nov  8 13:19:36 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3770         * useradmin.c: removed
3771         * utils.doc: removed references to useradmin and sysoputil
3772
3773 Fri Nov  6 20:22:20 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3774         * citadel.h (and related files): removed defunct parameters,
3775           c_defent and c_msgbase (erase your test bbs)
3776         * Implemented CONF server command for site-global configs
3777         * Shuffled yesno() and yesno_d() from routines.c to commands.c
3778         * commands.c: implemented boolprompt()
3779         * routines2.c: started adding CONF questions to <.AS> command
3780         * room_ops.c: began a fix for the mysterious disappearing Aide room
3781
3782 1998-11-05 Nathan Bryant <bryant@cs.usm.maine.edu>
3783         * snprintf.c: warning fix propagated over from gcit
3784
3785 1998-11-04 Nathan Bryant <bryant@cs.usm.maine.edu>
3786         * added RCS Id keyword strings to sources
3787         * citmail.c: reverted to version 1.10
3788
3789 Wed Nov  4 10:53:13 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3790         * messages.c: temporarily set screenwidth to a fixed value of 80
3791           during <P>rint operations.
3792
3793 Mon Nov  2 12:59:03 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3794         * setup.c: looks for 'citadel', 'bbs', or 'guest' in /etc/passwd to
3795           try to get a default for bbsuid if it's currently set to 0
3796         * citmail.c: changed usersupp.eternal to usersupp.usernum (why didn't
3797           it complain about this before?)
3798         * serv_upgrade.c: began writing an "export" command to do sidegrades
3799
3800 Sun Nov  1 18:47:42 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3801         * serv_upgrade.c: cosmetic changes
3802         * Implemented message expiry by date (this really needs to be moved
3803           out of serv_test.c, but where does it belong?)
3804
3805 1998-11-01 Nathan Bryant <bryant@cs.usm.maine.edu>
3806         * serv_upgrade.c: warning fixes
3807         * acconfig.h: remove ANSI_COLOR
3808         * Configure, Makefile.tmpl: removed
3809
3810 Sat Oct 31 20:48:44 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3811         * More stoopid ANSI colour additions here and there.
3812         * ANSI colour selection is now in citadel.rc instead of an option in
3813           the configure script.  "on" "off" and "auto" are available.
3814         * added "build.txt" to the techdoc directory, with LS's build notes
3815
3816 1998-10-31 Nathan Bryant <bryant@cs.usm.maine.edu>
3817         * citadel.c, commands.c, commands.h: set background color to black
3818           before clearing screen, so that we can actually see text on
3819           black-on-white xterms.
3820
3821 1998-10-29 Nathan Bryant <bryant@cs.usm.maine.edu>
3822         * rooms.c: fix color of Mail>
3823         * citadel.c: send ANSI detect sequence after attach_to_server() so the
3824           terminal doesn't send the answerback sequence to the shell if we
3825           can't connect.
3826
3827 Wed Oct 28 20:20:14 EST 1998 Art Cancro <ajc@uncensored.citadel.org
3828         * citadel.c: Added a splash of colour to the Wholist
3829
3830 1998-10-28 Nathan Bryant <bryant@cs.usm.maine.edu>
3831         * configure.in: added comments
3832         * mkinstalldirs: new file to be used for `make install'
3833         * aclocal.m4, missing: new files, also swiped from automake
3834         * citadel.c: don't mung the terminal if we can't find citadel.rc
3835         * Makefile.in: added `install' target, `clean' removes
3836           *.mo, rebuild configure when configure.in changes.
3837         * configure.in: check for install and autoconf
3838         * configure.in, Makefile.in: only pass -fPIC to gcc
3839         * policy.c: warning fix for OSF/1 (use memset() instead of bzero())
3840
3841 Tue Oct 27 22:25:42 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3842         * Unified the "unpacked database" format for both upgrades and
3843           sidegrades (also see export5.c elsewhere)
3844         * citserver.c: clear out cmdbuf before reading a command; some server
3845           commands were accidentally extracting parameters from previous cmds
3846         * rooms.c: removed the warning about the ineffectiveness of kicking
3847           users out of public rooms, because the new server can do lockouts
3848
3849 1998-10-27 Nathan Bryant <bryant@cs.usm.maine.edu>
3850         * sysdep.c (client_gets), ipc_c_tcp.c (serv_gets): improved handling
3851           of long lines. 
3852         * Makefile.in: partial support for VPATH builds, autodependency fix
3853
3854 Tue Oct 27 00:08:16 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3855         * minor documentation changes
3856
3857 Sun Oct 25 14:57:40 EST 1998 Art Cancro <ajc@uncensored.citadel.org>
3858         * messages.c: fixed an oversight that was allowing attachments even
3859           when disabled in citadel.rc
3860
3861 1998-10-25 Nathan Bryant <bryant@cs.usm.maine.edu>
3862         * routines2.c: warning fix
3863
3864 Sat Oct 24 22:07:56 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3865         * Client: added message expiration policy questions to room edit
3866         * Client: added <.A>ide <S>ystem configuration command
3867
3868 1998-10-24 Nathan Bryant <bryant@cs.usm.maine.edu>
3869         * Makefile.in: Auto dependency generation (may require GNU make, but
3870           does at least function without this feature on OSF/1 make);
3871           Makefile is regenerated when Makefile.in changes (ditto);
3872           `realclean' is now known as `distclean';
3873           portability fixes for older Unix make utilities
3874         * citadel.c, citadel.h, commands.c: make client suspendable
3875
3876 Fri Oct 23 19:34:38 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3877         * setup.c: default node name is now obtained from uname()
3878         * config.c: added put_config()
3879         * policy.c: added, moved GetExpirePolicy() from room_ops.c
3880         * policy.c: implemented cmd_gpex() and cmd_spex()
3881
3882 Wed Oct 21 22:24:48 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3883         * Mail rooms now hide their owner-prefix from the client.
3884         * proxy.c: added configurability and primitive message expiry
3885
3886 1998-10-20 Nathan Bryant <bryant@cs.usm.maine.edu>
3887         * Makefile.tmpl: fix to build client with old Configure script
3888         * configure.in: autologin defaults to enabled if crypt() is available
3889         * room_ops.c: fix improper null-termination bug I introduced
3890
3891 Mon Oct 19 20:52:55 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3892         * Client ability to force display of prompts in Mail rooms, even when
3893           the user has prompting turned off (citadel.rc option)
3894
3895 1998-10-16 Nathan Bryant <bryant@cs.usm.maine.edu>
3896         * sysdep.c (cprintf): generate a newline on truncated buffer
3897         * room_ops.c: exploitable overrun fixes
3898
3899 Thu Oct 15 19:27:32 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3900         * msgbase.c: reimplemented cmd_move()
3901           room_ops.c: wrote AddMessageToRoom() which is used for both entering
3902           and moving messages.
3903         * setup.c: system-default message expire policy of "number of
3904           messages, 150" is now a default configuration instead of a temp hack
3905         * proxy.c: cache dir create now dies on any error except EEXIST
3906
3907 Wed Oct 14 22:41:16 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3908         * Misc code cleanup
3909
3910 1998-10-13 Nathan Bryant <bryant@cs.usm.maine.edu>
3911         * configure.in: don't check for -lcrypt unless autologin is enabled
3912         * file_ops.c: fix another overrun
3913
3914 Mon Oct 12 15:27:21 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3915         * Killed the "rooms" subdirectory (it isn't used anymore)
3916         * dynloader.c: Made dynamically added server commands case-insensitive
3917         * import.c is now serv_upgrade.c, a module
3918         * Removed most of the "level 9" trace messages no longer needed
3919
3920 1998-10-12 Nathan Bryant <bryant@cs.usm.maine.edu>
3921         * Makefile.in: simplified to use pattern rules; files compiled with
3922           -D_REENTRANT go to *.ro to allow the same files to be used with both
3923           client and server
3924         * tools.c, tools.h: new files; misc routines used by both client and
3925           server go here. contains safestrncpy() at the moment.
3926         * rooms.c: fix several exploitable buffer overruns
3927         * sysdep.c: fix infinite loop when long lines are received from the
3928           client; fix exploitable buffer overrun in cprintf()
3929         * ipc_c_tcp.c: fix infinite loop on long line from server
3930         * serv_upgrade.sh: remove uncnsrd-dependent absolute path
3931         * .cvsignore: add *.ro
3932
3933 Sun Oct 11 23:17:48 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3934         * Built some more of the message expiry infrastructure
3935
3936 1998-10-11 Nathan Bryant <bryant@cs.usm.maine.edu>
3937         * citserver.c: fix two more overruns, one of which was preventing
3938           the "From Host" from showing up in the <W>ho listing.
3939
3940 Sun Oct 11 02:51:55 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3941         * Moved "struct visit" and its associated defs from citadel.h to
3942           server.h where they belong
3943         * Set up data structures for room policies (expiry, etc.)
3944
3945 1998-10-10 Nathan Bryant <bryant@cs.usm.maine.edu>
3946         * citserver.c: fix overrun which caused segv's on servers with long
3947           hostnames.
3948
3949 Fri Oct  9 18:34:06 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3950         * user_ops.c: added PurgeStaleRelationships() to do processing at
3951           session logout time to remove visits for rooms which no longer exist
3952         * user_ops.c: implemented NewMailCount()
3953
3954 1998-10-09 Nathan Bryant <bryant@cs.usm.maine.edu>
3955         * serv_chat.c: fix buffer overrun that was resulting in segv's
3956         * serv_chat.c: fix another overrun that could cause sessions to hang,
3957           and cleaned up some other strncpy()-related stuff. DON'T FORGET TO
3958           NULL-TERMINATE DESTINATION BUFFERS AFTER STRNCPY CALLS.
3959
3960 Fri Oct  9 13:22:37 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3961         * Implemented "lazy mode" traversal - pressing the space bar will do
3962           <N>ext messsage, <G>oto next room, or read <N>ew as appropriate.
3963         * room_ops.c: modify CtdlRoomAccess() to allow access to mailbox rooms
3964           only to their owners.
3965
3966 Thu Oct  8 17:13:27 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3967         * messages.c, citadel.rc: added the ability to display message numbers
3968           in the header when reading messages.  I think this is butt ugly, but
3969           some of the DaveCode afficionados seem to like it...
3970
3971 Thu Oct  8 15:34:45 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3972         * room_ops.c: Added is_noneditable() function to replace all of the
3973           duplicated code present in all functions which edit room parameters.
3974
3975 1998-10-08 Nathan Bryant <bryant@cs.usm.maine.edu>
3976         * lots of warning fixes; builds with -std1 on dec unix
3977         * aidepost.c, citadel.h, citmail.c, file_ops.c, msgbase.c, netmailer.c,
3978           netproc.c, rcit.c, server.h, stats.c, userlist.c: use time_t where
3979           needed
3980         * control.c, room_ops.c, serv_chat.c, sysdep.c: use memset() instead of
3981           bzero()
3982         * dynloader.c, dynloader.h, messages.c, server.h, sysdep.c,
3983           sysdep_decls.h: function pointer/prototyping fixes
3984         * rooms.c: use mkfifo(3) instead of system("mkfifo")
3985
3986 1998-10-07 Nathan Bryant <bryant@cs.usm.maine.edu>
3987         * snprintf.c, snprintf.h: new files
3988         * Makefile.in, configure.in, dynloader.c, sysdep.c: support for the
3989           above; citserver now builds and runs on Digital Unix 4.0d with the
3990           GNU-style configure script. there is a bug with the hostname display
3991           in the wholist.
3992         * netproc.c: sillyness fix
3993         * room_ops.h: prototype delete_room()
3994         * client_chat.c, commands.c, serv_chat.c, sysdep.c:
3995           use HAVE_SYS_SELECT_H macro
3996
3997 Mon Oct  5 17:01:32 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
3998         * Began fixing the stuff I broke
3999
4000 Sun Oct  4 23:35:18 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4001         * Did the big migration to the new data structures.  Lots of stuff is
4002           now broken.  Basic moving from room to room works, but Mail is
4003           broken, and some of the administrative commands are unimplemented.
4004
4005 1998-10-02 Nathan Bryant <bryant@cs.usm.maine.edu>
4006         * configure.in: autologin now defaults to disabled
4007
4008 Fri Oct  2 00:04:31 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4009         * Finally removed all three usersupp.foo[MAXROOMS] elements, and
4010           migrated all the code that used them to use "struct visit" instead.
4011
4012 Thu Oct  1 23:02:20 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4013         * Rewrote [l][get|put]room() functions to use room names rather than
4014           room index numbers.  Temporarily prepended a "n" to these four
4015           function names until they are put to use.
4016
4017 Thu Oct  1 16:27:13 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4018         * Removed a few more references to usersupp.lastseen[]
4019
4020 1998-10-01 Nathan Bryant <bryant@cs.usm.maine.edu>
4021         * .cvsignore: add so_locations (generated by osf1 ld with shared libs)
4022         * Makefile.in: restructured variables for greater consistency, use
4023           @echo to print out notices during the make process, add so_locations
4024           to `cleaner'
4025         * configure.in, Makefile.in: configure checks for -rdynamic
4026         * ipc_c_tcp.c: fix DEC compiler warning wrt unsigned char
4027         * stats.c: add semicolon to placate DREC compiler
4028         * user_ops.c: define _POSIX_C_SOURCE, include <limits.h>
4029         * configure.in: pass -pthread to DEC compiler, don't check for
4030           libpthread[s] on DEC Unix
4031
4032 1998-09-30 Nathan Bryant <bryant@cs.usm.maine.edu>
4033         * Makefile.in: new variable PTHREAD_DEFS for portability
4034         * aidepost.c, citadel.c, citmail.c, mailinglist.c, msgform.c,
4035           netmailer.c, netpoll.c, netproc.c, rcit.c, readlog.c, setup.c,
4036           stats.c, userlist.c, whobbs.c: return type of main() is int
4037         * citadel.c, commands.c, messages.c: use time_t properly
4038         * citserver.c: include <limits.h>
4039         * config.guess, config.sub, install-sh: new files
4040         * configure.in: don't use gcc on Digital Unix
4041
4042 Tue Sep 29 23:17:34 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4043         * room_ops.c: modified usergoto() to look at the new data structures
4044           for counting new messages and such.
4045
4046 1998-09-29 Nathan Bryant <bryant@cs.usm.maine.edu>
4047         * user_ops.c: fix compiler warning and potential memory leak,
4048           include sysdep.h
4049         * configure.in, Makefile.in: only build the server if we find pthreads
4050         * Makefile.in: realclean removes config.{cache,log,status}
4051
4052 Tue Sep 29 13:20:14 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4053         * Removed code from some of the utilities which was still attempting
4054           to access the old non-gdbm data store.
4055         * housekeeping.c: rewrote check_ref_counts() to do a ForEachRoom()
4056           traversal instead of a MAXROOMS loop.
4057         * sysdep.c: set up a dummy CitContext record to be used during server
4058           startup, during which time there is no real context.
4059
4060 Mon Sep 28 23:51:51 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4061         * Implemented the function ForEachRoom() to handle all-rooms traversal
4062           (this will work with both the old and new paradigms, because both
4063           use a GDBM database with one room per record).  Migrated all room
4064           list commands to use it.
4065
4066 Mon Sep 28 22:05:35 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4067         * Implemented the function CtdlRoomAccess() to handle *all* of the
4068           user-access-to-rooms functionality.  Migrated all room list commands
4069           to use it.  Still need to migrate gotos.
4070
4071 1998-09-28 Nathan Bryant <bryant@cs.usm.maine.edu>
4072         * configure.in, acconfig.h: new files; partially functional GNU
4073           autoconf configure script. Run autoheader; autoconf; ./configure
4074           --prefix=`pwd` to test.
4075         * Makefile.tmpl: new file; this is what Makefile.in used to be. Used by
4076           Configure.
4077         * Makefile.in: modified to work with autoconf-style configure script
4078         * Configure: modified to use Makefile.tmpl and generate autoconf-style
4079           macros. Removed procfs detection. Pass -O2 to gcc, -O to other
4080           compilers. Removed mknod/mkfifo detection; code should use mkfifo(3).
4081         * citmail.c, msgform.c, netproc.c, routines.c, support.c, userlist.c,
4082           whobbs.c: use HAVE_STRERROR macro rather than NO_STRERROR
4083         * commands.c: use HAVE_TERMIOS_H macro rather than POSIX_TERMIO
4084         * netproc.c: remove procfs stuff. simply attempt to kill the target
4085           process with signal zero instead; this checks whether the process
4086           exists.
4087         * setup.c, useradmin.c: use HAVE_CURSES_H macro
4088
4089 Sun Sep 27 23:41:29 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4090         * BOTH the old and new generation systems are being written to at
4091           this point.  Code that reads stuff is still using the old system.
4092
4093 Sun Sep 27 16:10:49 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4094         * Changed all "generation" variables from char to long, in preparation
4095           for removing MAXROOMS.  Generations for new rooms are now timestamps.
4096         * Defined "struct visit" to hold user/room relationships.
4097         * Removed some #define's from citadel.h that are no longer used.
4098
4099 Wed Sep 23 13:41:49 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4100         * More changes to support attachments.  They mostly work, but only
4101           in fixed-format messages.
4102
4103 Mon Sep 21 21:19:17 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4104         * msgbase.c: began laying the groundwork to support attachments.
4105           Purchased Rogaine(tm) in preparation for expected hair loss.
4106
4107 1998-09-21 Nathan Bryant <bryant@cs.usm.maine.edu>
4108         * msgbase.c: include dynloader.h
4109         * citadelapi.h: removed
4110         * dynloader.h: prototype CtdlRegisterUserHook()
4111
4112 Sun Sep 20 18:56:37 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4113         * Added a UserFunctionHook category to implement hooks which perform
4114           operations on various users or usernames
4115
4116 Fri Sep 18 21:14:41 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4117         * citserver.c: removed cmd_extn() and related code
4118
4119 1998-09-18 Nathan Bryant <bryant@cs.usm.maine.edu>
4120         * user_ops.c: include dynloader.h
4121         * roomstats.{c,mk}: removed
4122         * Configure, Makefile.in: autodependency-related fixes
4123
4124 Thu Sep 17 22:55:29 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4125         * Various changes to allow "new messages" to work correctly with Mail
4126
4127 Thu Sep 17 22:21:45 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4128         * server.h, dynloader.c, citserver.c, user_ops.c: reduced the number
4129           of hook types by inventing an EventType field to the Session hook.
4130         * proxy.c: added pre-fetching
4131
4132 1998-09-17 Nathan Bryant <bryant@cs.usm.maine.edu>
4133         * Makefile.in: add SERV_MODULES and PROXY_TARGETS to `cleaner'
4134         * dynloader.[ch], serv_{chat,test}.[ch], sysdep.c: cleaned
4135           up the dynamic loader interface as follows:
4136           - all the symbol table stuff is gone.
4137           - modules are loaded once at server startup and never unloaded.
4138           - Added a new function CtdlRegisterProtoHook() to handle the stuff
4139             that was being done with the symbol tables.
4140           - Dynamic_Module_Init() now returns a pointer to a static struct
4141             DLModule_Info; this structure itself has been modified to use char*
4142             fields instead of fixed char arrays.
4143         * roomstats.c: include <stdarg.h> not <stdargs.h> (is this file still
4144           in use?)
4145         * Configure, Makefile.in: added autodependency support
4146
4147 Wed Sep 16 22:25:13 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4148         * Implemented separate structs, lists, and functions for each type
4149           of server-side hook available.
4150
4151 1998-09-16 Nathan Bryant <bryant@cs.usm.maine.edu>
4152         * ipc_c_tcp.c: Fixed up some #include/prototyping stuff, call memcpy()
4153           instead of bcopy()
4154         * hooks.h: removed
4155         * sysdep.c, user_ops.c: removed reference to hooks.h
4156
4157 Wed Sep 16 11:42:42 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4158         * ipc_c_tcp.c: Reversed any changes that have been made to this file,
4159           because something was causing abominally slow response time.
4160         * proxy.c: added.  This will eventually become a caching, pre-fetching
4161           multiuser proxy server for the Citadel protocol.
4162
4163 1998-09-15 Nathan Bryant <bryant@cs.usm.maine.edu>
4164         * Makefile.in: remove support.o from serv_chat.so, add -fPIC to compile
4165           flags for serv_chat.o
4166         * dynloader.c: include "sysdep_decls.h", use RTLD_NOW not RTLD_LAZY
4167         * dynloader.h: prototype CtdlRegisterHook()
4168         * .cvsignore: added data
4169
4170 Mon Sep 14 20:49:08 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4171         * Tried my hand at adding the ability for server extensions to
4172           register various types of "hooks" in addition to just adding
4173           server commands.  This is probably not final.
4174
4175 Tue Sep  8 12:11:56 EDT 1998 Brian Costello <btx@calyx.net>
4176         * Added support for dynamic server modules.  Reworked serv_chat.c
4177           to be such a module.
4178
4179 Tue Sep  1 23:09:50 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4180         * userpurge.c: rewrote using functions from the server core, rather
4181           than the now-defunct external API.  This'll be ready once the module
4182           loading code is done.  (I just had to commit _something_ tonight.)
4183
4184 Mon Aug 31 22:47:58 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4185         * Yanked the citadelapi.c module.  This wasn't working out well.
4186         * techdocs/citadelapi.txt - began documenting the new API to be used
4187           by modules which will be dynamic linked into the server - most of
4188           this API is existing server functions.
4189         * Added a ForEachUser() function with callback mechanism, and reworked
4190           cmd_list() to use it.
4191
4192 Sun Aug 30 21:52:43 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4193         * Moved all of the gdbm databases to a separate "data" directory.
4194
4195 1998-08-26 Nathan Bryant <bryant@cs.usm.maine.edu>
4196         * Makefile.in: realclean removes Makefile, fixed `touch citadel.h'
4197           problem
4198
4199 1998-08-25 Nathan Bryant <bryant@cs.usm.maine.edu>
4200         * room_ops.c: include time.h
4201         * userlist.c, whobbs.c, serv_chat.c, user_ops.c, sysdep.c, stats.c,
4202           citadel_decls.h, commands.c, messages.h, routines.h, routines2.h:
4203           remove duplicated declarations
4204
4205 Mon Aug 24 23:45:01 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4206         * setup.c: Removed yesno_s()
4207         * citadel.h, room_ops.c: added QRmtime field to struct quickroom,
4208           modified whenever a room is modified or posted in.
4209         * citadelapi.c: Added CtdlForEachRoom() function
4210
4211 Mon Aug 24 20:04:04 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4212         * Makefile.in: new target `cleaner' does the same as `realclean' 
4213           without removing sysdep.h
4214         * proto.h: is bad. eliminate. I've moved the prototypes into several
4215           header files, one per .c file
4216
4217 Mon Aug 24 00:45:55 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4218         * Added a CtdlGotoRoom() function to the CitadelAPI.
4219  
4220 Sun Aug 23 21:47:00 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4221         * sysoputil is finally dead!  Removed it from the build.
4222         * Added userpurge.c server extension (initial implementation)
4223
4224 Tue Aug 18 00:42:33 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4225         * Makefile.in: `clean' target no longer rm's sysdep.h; new target
4226           `realclean' removes everything clean does, plus sysdep.h, plus
4227           target binaries.
4228         * Configure: add -Wstrict-prototypes to CFLAGS for gcc systems
4229         * *.[ch]: protoized. Added several new header files containing
4230           prototypes and other external declarations; many duplicated
4231           declarations still should be moved to header files. proto.h must die
4232           as well, IMHO.
4233
4234 Mon Aug 17 23:52:13 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4235         * Implemented a bunch of user account related functions in the
4236           CitadelAPI library.
4237
4238 Mon Aug 17 20:01:18 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4239         * Fixed the crash problem.  It wasn't AGUP/ASUP, but rather a buffer
4240           overrun in getuser() (thanks, Nathan).  Implemented overrun checks
4241           in getuser(), getroom(), and getfloor() to prevent future problems.
4242
4243 Mon Aug 17 00:06:52 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4244         * Updated citmail.c with the latest stuff from the production system.
4245         * Implemented AGUP and ASUP commands, but AGUP crashes the server
4246           after its first successful use (user-not-found's don't affect it).
4247
4248 Thu Aug  6 19:25:01 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4249         * Got the CitadelAPI library to the point where the server can start
4250           up an extension, and the extension will connect to the server, do
4251           some initialization, call a user-supplied CtdlMain(), and exit.  Also
4252           hacked together a _temporary_ form of the new EXTN server command.
4253  
4254 Wed Aug  5 23:02:22 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4255         * Second attempt at getting the server API started.  Now it runs
4256           outside of the server and builds a connection.
4257
4258 Tue Aug  4 18:33:06 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4259         * Modified the appearance of Internet addresses when they arrive on
4260           a Citadel system.
4261         * Removed the <E> field from the message format writeup in hack.txt.
4262         * Fixed-up citmail.c so that it doesn't try to do database lookups.
4263
4264 Mon Aug  3 23:01:37 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4265         * Started developing the server-side API.  This is in its very
4266           initial stages.  See serverapi.c and techdoc/api.txt
4267
4268 1998-08-02  Nathan Bryant  <bryant@cs.usm.maine.edu>
4269         * Makefile.in: added config_decls.h to dependencies
4270
4271 Sun Aug  2 21:09:09 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4272         * config_defs.h: renamed to config_decls.h
4273         * config.c, sysoputil.c: updated to reflect the above
4274
4275 Sun Aug  2 18:52:05 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4276         * config_defs.h: new file, contains external declarations from config.c
4277         * config.c: moved defs to config_defs.h, use PATH_MAX from <limits.h>
4278           for bbs_home_directory
4279         * mailinglist.c, support.c: include <string.h>
4280         * sysoputil.c: include <string.h>, <limits.h>, "config_defs.h", remove
4281           duplicated defs, replace gets() call with fgets()
4282         * user_ops.c: define _XOPEN_SOURCE_EXTENDED
4283
4284 Sat Aug  1 18:32:52 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4285         * ipc_c_tcp.c: fixed order of memcpy parameters after gethostbyname
4286
4287 Sun Jul 19 17:26:12 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4288         * ChangeLog: reordered; the GNU standard is to add new entries to the
4289           top.
4290         * .cvsignore: added userlist
4291
4292 Sun Jul 12 20:58:59 EDT 1998 Art Cancro <ajc@uncensored.citadel.org>
4293         * Finished migrating everything to the new data store.
4294         * Replaced the binary "calllog" with the ASCII "citadel.log"
4295         * Began converting broken utilities that depend on the old data store
4296
4297 Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant <bryant@cs.usm.maine.edu>
4298         * Makefile.in: removed msgstats
4299
4300 Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
4301         * Initial CVS import
4302