12004-03-16  Bruce.Guenter.dyndns.org  <bruce@lorien.untroubled.org>
2
3	* daemon/listdomain.cc: The code is internally NUL-terminated, so
4	don't add another NUL on output.
5
62004-03-15  Bruce.Guenter.dyndns.org  <bruce@lorien.untroubled.org>
7
8	* cgi/vadduser.cc, cgi/vaddalias.cc: Fixed several one-off bugs.
9
10	* commands/vupgrade.cc (open_table): Fixed up the test to see if
11	the new vpwtable reader is valid.
12
13	* commands/dumpvuser.cc: Added new source.
14
15	* commands/vadduser.cc (add_alias), commands/vsetup.cc
16	(setup_alias): Make sure even aliases have a userdir set.
17
182002-05-03  Bruce Guenter  <bruce@lorien.untroubled.org>
19
20	* commands/vadduser.cc: Fixed incorrect usage note for vaddalias.
21
22	* lib/config/Makefile.am (noinst_LIBRARIES): Fixed the use of
23	libstdc++ in showvconfig.
24
252001-03-07  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
26
27	* commands/vcheckquota.cc: Fixed abbreviated error message.
28
29	* doc/FAQ.sgml: Added note regarding mixing system and virtual
30	accounts.
31
32	* Moved from old "cli" library to renamed "cli++" library.
33
342000-11-20  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
35
36	* lib/vpwentry/to.cc (to_record): Fixed typo -- flags is now 5
37	bytes, not 3.
38
392000-10-30  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
40
41	* commands/vdeliver.cc (cli_main): Make 99 return codes from
42	executed programs cause vdeliver to exit (with code 99) without
43	delivering the message.
44
45	* lib/misc/exec.cc (execute): Don't silently ignore the 99 error
46	code.
47
482000-10-27  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
49
50	* commands/vchforwards.cc (cli_main): Fixed the same bug here as
51	for daemon/lookup.cc -- need to lookup users with nodefault set.
52
532000-10-25  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
54
55	* python/commands.py (adduser): Added the new has_mailbox
56	parameter, defaulting to false.
57
58	* python/daemon.py (encode_str): Explicitly cast non-string
59	objects to string before encoding.
60
61	* daemon/adduser.cc (CMD(adduser3)): Renamed the file adduser2.cc
62	to adduser.cc; Renamed the adduser2 command to adduser3 to make
63	the additional argument explicit.
64
652000-10-13  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
66
67	* Most code was restructured to accomodate the below two changes.
68
69	* lib/vpwtable/vpwtable.h (class vpwtable_reader): Modified this
70	interface to return a vpwentry*.
71
72	* lib/vpwentry/vpwentry.h (struct vpwentry ): Modified this data
73	structure to rename "mailbox" to "directory", and add a
74	"has_mailbox" flag.  Also made the default constructor and
75	set_defaults protected.
76
772000-10-10  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
78
79	* daemon/stat.cc: Added a rewritten version of this support from
80	Eugene Miretskiy to retrieve statistics about a maildir.
81
822000-10-07  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
83
84	* commands/vpasswd2db.cc: Converted to use new vpwtable_writer
85	interface.
86
87	* lib/vpwtable/vpwtable.h: Added new vpwtable_writer interface.
88
892000-10-05  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
90
91	* python/daemon.py (Daemon.read_response_noraise): Fixed a bug in
92	reading zero-length responses (like from listdomain) on certain
93	OSes.
94
952000-09-30  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
96
97	* Released version 0.96.9
98
99	* python/commands.py (adduser): Fixed a typo that prevents users
100	without a mailbox from being added.
101
1022000-09-15  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
103
104	* authenticate/authvlib.cc (check): Always set VUSER, even if
105	virtname is blank.
106
1072000-09-14  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
108
109	* daemon/main.cc: Exit immediately if a SIGPIPE or SIGALRM is
110	caught.
111
1122000-09-12  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
113
114	* pyadmin/vmailmgr_lib.py (Flag.html): Added this method to print
115	out a HTML select list with the correct item selected.
116
117	* pyadmin/vmailmgr_sessiond.py: New program set up to track
118	session status in memory instead of on disk.
119
120	* pyadmin/vmailmgr_pyadmin.py (cgi_main): Create a Context object
121	for passing in to format_page.
122
123	* pyadmin/vmailmgr_parser.py (Context): Defined this context
124	object that wraps context data.  This will be extended to stack
125	contexts.  When doing a __getitem__, if the key is not found in
126	the context dictionary, that key is evaluated as an expression
127	with the dictionary as local variables.
128	(Foreach.do_end): Pass the formatted sections to
129	stack.append_or_print instead of printing them directly.
130
1312000-09-11  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
132
133	* Removed all old Python support code, replace by the new
134	"pyadmin" interface.
135
1362000-09-05  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
137
138	* daemon/dispatch.cc (dispatch_cmd): Don't add "-virtuser" to
139	baseuser name if virtuser is empty.
140
1412000-09-04  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
142
143	* python/vmailmgr_cgi.py.in (Session): Added prototype for new
144	class to manage session data.
145
146	* daemon/check.cc (CMD): Simplified the logic, elimited the return
147	value.  Now returns either error or OK.
148
1492000-09-01  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
150
151	* doc/FAQ.sgml: Added section on long POP3 logins.
152
1532000-08-22  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
154
155	* commands/vdeliver.cc (deliver_partial): Fail permanently if: the
156	open failed, EDQUOT is defined, and the error number is EDQUOT.
157
1582000-08-15  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
159
160	* daemon/deluser.cc (CMD): Use new form of vdomain::deluser.
161
162	* lib/vpwtable/reader.cc (vpwtable_reader): Removed the call to
163	end here, which produced a missing reference to
164	vpwtable_reader::end.
165
1662000-08-13  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
167
168	* commands/*.cc: Moved all the POD man page documentation into the
169	source files using a new CLI documentation generator.
170
1712000-08-11  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
172
173	* commands/vdeluser.cc: Added an option to prevent vdeluser from
174	deleting a user with a mailbox.
175
176	* lib/vdomain/deluser.cc (deluser): Added a flag to make deluser
177	not delete users with a mailbox.
178
179	* daemon/main.cc: Fixed up some of the cli_* values.
180
181	* doc/FAQ.sgml: Added note regarding difference between vmailmgr
182	and vpopmail.
183
184	* lib/vpwtable/gdbm_read.cc (class gdbm_vpwtable_reader): Added
185	this new subclass of vpwtable_reader.
186
187	* lib/vpwtable/cdb_read.cc (class cdb_vpwtable_reader): Added this
188	new subclass of vpwtable_reader.
189
190	* lib/vpwtable/vpwtable.h (class vpwtable_reader): Removed the
191	short-sighted conditional mess in this class with virtual methods.
192
1932000-08-10  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
194
195	* Released version 0.96.8
196
197	* authenticate/authvlib.cc (set_user): Call pwentry::export_env
198	instead of doing it manually.
199
200	* lib/misc/pwentry_export_env.cc (export_env): Added this routine
201	to export USER and HOME for a real user.
202
203	* commands/vcheckquota.cc (link_softquota_message): Fixed bug in
204	multiple use of atoi.
205
206	* doc/HOWTO.sgml: Added a note on vsetup.
207
2082000-08-04  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
209
210	* doc/FAQ.sgml: Added notes on location of qmail-autoresponder and
211	the CVS repository.
212
213	* daemon/autoresponse.cc (autoresponse_read): If the normal
214	autoresponse file can't be read, try the disabled file.
215	(autoresponse_status): Added status command.
216
217	* commands/vcheckquota.cc (link_softquota_message): Added code to
218	symlink in warning message if softquota fails.  This will link the
219	message in each time soft quota fails.
220
2212000-08-03  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
222
223	* commands/vdeliver.cc (cli_main): Make sure to rewind stdin
224	before executing vdeliver-postdeliver.
225
226	* daemon/lookup.cc: Rewritten to output the entire virtual user
227	data instead of just the mailbox and aliases.
228
229	* commands/vcheckquota.cc: Changed many instances of "int" to
230	"unsigned".
231	(check_quota): Always check incoming message size, and check max
232	count even if no quotas apply.
233
234	* lib/misc/exec.cc (execute_one): Fixed a bug where this would
235	return the raw status value instead of WEXITSTATUS(status).
236
2372000-08-02  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
238
239	* daemon/autoresponse.cc (autoresponse_write): Applied bugfix that
240	would allow disabled autoresponses to be written.
241
2422000-08-01  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
243
244	* commands/vcheckquota.cc (exit_msg): Fixed typo (used to say
245	"vdeliver:").
246	(cli_main): Fixed another typo -- VUSER_MAILDIR is not set, plain
247	MAILDIR is.
248
249	* authenticate/checkvpw.cc (main): Removed call to execute
250	checkvpw-postsetuid.
251
252	* authenticate/authvlib.cc (set_user): Added a hook to execute the
253	proper presetuid script.
254	(authenticate): Added a hook to execute the proper postsetuid
255	script.
256
2572000-07-31  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
258
259	* daemon/lookup.cc (lookup_and_validate): Set the "nodefault" flag
260	in vdomain::lookup to true instead of false -- it's never correct
261	to look up the default user in the daemon.
262
2632000-07-18  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
264
265	* commands/vcheckquota.cc: Added this new program, originally
266	authored by Eugene Miretskiy, and subsequently modified.
267
2682000-07-17  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
269
270	* doc/HOWTO.sgml, doc/FAQ.sgml: Updated documentation.
271
2722000-07-05  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
273
274	* Released version 0.96.7.
275
276	* lib/vpwtable/cdb_read.cc: Added CDB support for the vpwtable
277	reader class.
278
279	* daemon/listdomain.cc (CMD_FD): Adjusted to use the new vpwtable
280	reader.
281
282	* commands/listvdomain.cc (cli_main): Adjusted to use new vpwtable
283	reader.
284
285	* lib/vpwtable/gdbm_read.cc (vpwtable_reader): Added this new
286	class to replace the stream reading support from the vpwtable
287	class.
288
2892000-07-04  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
290
291	* lib/vpwtable/gdbm_getbyname.cc (getbyname): Lowercase the name
292	before retrieving it.
293
294	* commands/listvdomain.cc (cli_main): Exit with error if listing
295	an individual user fails.
296
297	* lib/vpwtable/gdbm_get.cc (start): Fixed missing gdbm_firstkey.
298
299	* commands/vpasswd2db.cc: Added new utility to convert plain text
300	password tables into whatever vpwtable format was configured.
301
3022000-06-25  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
303
304	* python/vmailmgr.py.in: Added deluser and chattr commands.
305
3062000-06-24  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
307
308	* doc/configuration.texi (socket-file): Reinstated this config
309	section.
310
311	* daemon/autoresponse.cc (autoresponse_delete): Added a new
312	command to delete the autoresponse data.
313
314	* lib/misc/maildir.cc (delete_directory): Renamed from
315	delete_maildir.
316
317	* daemon/autoresponse.cc (autoresponse_write): Create the
318	autoresponse directory if it does not already exist.
319
3202000-06-19  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
321
322	* lib/vpwtable: Added GDBM support in the gdbm_*.cc files.
323
324	* lib/vpwtable/cdb_vpwtable.cc: Made the ".cdb" string a constant.
325
326	* lib/vpwtable: Renamed all the .cc files to "cdb_*.cc".
327
3282000-06-14  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
329
330	* doc/configuration.texi: Added notes on the autoresponse
331	configuration items, removed the notes on max-fork and
332	socket-file.
333
3342000-06-13  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
335
336	* daemon/main.cc (cli_main): Rewrote main to use the cli library.
337	This removes extra command line parsing code and incidentally
338	fixes a problem with random not being initialized.
339
340	* daemon/log.cc (log): Revised handling of printing PIDs.
341
342	* daemon/dispatch.cc: Removed "forkstat" command.
343
344	* daemon/main.cc: Removed support code needed to create and accept
345	connections on a UNIX domain socket, in favour of using the new
346	ucspi-unix package.
347
3482000-06-01  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
349
350	* Released version 0.96.6
351
352	* commands/vdeliver.cc (cli_main): Fixed typo in order of
353	operands in call to exit_msg.
354
355	* lib/misc/map_table.cc (map_table): Lower case all keys to allow
356	for case insensitive comparisons.
357
358	* lib/misc/lookup_domain.cc (find_virtual): Fixed bug: domain
359	names are not case sensitive.
360
3612000-05-31  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
362
363	* python/vmailmgr.py.in (VUser.from_binary): Fixed some bugs in
364	the conversion of flags.
365
3662000-05-25  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
367
368	* python/vmailmgr_cgi.py.in (print_html): Added code to print out
369	a HTML error if the requested file could not be printed.
370	(wrap_print): Print out basename+"-success" on success, and
371	provide a default error response if the error file does not
372	exist.
373
374	* daemon/daemon.h (CMD): Removed a bogus "const" from the
375	declarations of the CMD and CMD_FD macros.
376
377	* daemon/autoresponse.cc (CMD_FD): Added proper command logging to
378	this command.
379	(CMD_FD): Fixed type -- a virtual user's password is acceptable.
380
381	* daemon/log.cc: Added a new LOG_MESSAGE constant.
382
383	* doc/FAQ.sgml: Added a brief section on how to configure
384	qmail+patches for use with vmailmgr.
385
386	* doc/configuration.texi (qmail-root): Added this missing section.
387
3882000-05-24  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
389
390	* python/vmailmgr_cgi.py.in (cgi_main): Trap trying to run the
391	program outside of a CGI environment.
392
393	* python/vmailmgr.py.in (VUser): Added this class to represent the
394	data associated with a virtual user.  A special __getitem__
395	routine allows the data to be read as a dictionary.
396	(Daemon): More code reorganization in this class.
397	(listdomain): Added this command, which returns a dictionary of
398	all the users in the domain.
399	(adduser): Added this command to add a virtual user.
400	(autoresponse): Added this command, which executes the daemon
401	"autoresponse" command.
402
403	* python/vmailmgr_cgi.py.in (wrap_print): Added this new routine,
404	which wraps a call to a vmailmgr command in a try/except block,
405	and prints an output file based on the results.
406
407	* Added SGML documentation from Dan Kuykendall.
408
4092000-05-16  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
410
411	* python/vmailmgr_cgi.py.in: Moved all the CGI specific
412	functionality into this new module.
413
414	* python/vmailmgr.py.in: Removed the "Response" class and turned
415	error responses into exceptions.  The server socket is not closed
416	at the end of a command to allow a listdomain command to read more
417	data after the initial response.
418
4192000-05-09  Bruce Guenter  <bruce@bruce-guenter.dyndns.org>
420
421	* commands/vdeliver.cc (cli_main): Error exits from executing
422	"vdeliver-predeliver" would unconditionally result in a temporary
423	failure for qmail.  Fixed to return the actual error number to
424	qmail.
425
4262000-05-02  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
427
428	* cgi/vchforwards.cc (CGI_MAIN ): Fixed an internal glitch -- the
429	new "do_enable" and "do_disable" internal variables were
430	duplicated.
431
432	* daemon/lookup.cc (lookup_and_validate): Modified to use the new
433	set_defaults method.
434
435	* commands/vchattr.cc: Make size limits refer to bytes.
436
437	* doc/configuration.texi: Indicate that size limits are in units
438	of bytes.
439
440	* commands/vadduser.cc: Make size limits refer to bytes
441	everywhere.
442
443	* commands/vsetup.cc (setup_alias): Modified to use the new
444	set_defaults method.
445
446	* commands/vpasswd2cdb.cc (getpw): Removed set_defaults call,
447	since from_record calls set_defaults after doing conversion from
448	the old format data.
449
450	* commands/vaddusers.cc (add_one): Modified to use the new
451	set_defaults method.
452
453	* lib/vpwentry/from_old.cc (from_old_record): Modified to use the
454	new set_defaults method.
455
456	* commands/vadduser.cc: Modified to use the new set_defaults
457	method.
458
459	* lib/vpwentry/defaults.cc (set_defaults): Add a flag to set the
460	creation time to either now (true) or 0 (false -- for old
461	records), as well as a flag to set the boolean flags.
462
463	* lib/misc/strtou.c: Use UINT_MAX instead of (unsigned)-1.
464
465	* lib/config/showvconfig.cc.in: Use UINT_MAX instead of
466	(unsigned)-1.
467
468	* lib/config/configrc.in: Use UINT_MAX instead of (unsigned)-1.
469
470	* lib/misc/lookup_domain.cc (find_virtual): Use UINT_MAX instead
471	of (unsigned)-1.
472
473	* lib/vpwentry/defaults.cc (set_defaults): Use UINT_MAX instead of
474	(unsigned)-1.
475
476	* lib/misc/utoa.cc (utoa): Use UINT_MAX instead of (unsigned)-1.
477
478	* lib/vpwentry/from_ver1.cc (from_ver1_record): Set the flags
479	before returning.
480
481	* lib/vpwentry/from_old.cc (from_old_record): Set the flags before
482	returning.
483
4842000-04-19  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
485
486	* doc/vchattr.pod: Added note regarding personal information.
487
488	* doc/vmailmgr-cgi.texi (Top): Added note regarding personal
489	information.
490
491	* commands/vchattr.cc: Allow changing the personal information.
492
493	* lib/vdomain/chattr.cc (chattr): Added code to handle changing
494	the personal information.
495
4962000-04-18  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
497
498	* doc/FAQ.texi (Does vmailmgr support IMAP?): Updated to describe
499	current status of IMAP support.
500
501	* daemon/dispatch.cc: Added autoresponse dispatch entry.
502
503	* daemon/autoresponse.cc: Added autoresponse command from Mike Bell.
504
5052000-04-14  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
506
507	* Modified the spec file to put the Courier IMAP module into a
508	seperate package.
509
510	* Copied the necessary sources from Courier IMAP to build a
511	minimal stand-alone libauthmod in order to build the
512	authentication module without needing the Courier IMAP sources.
513
5142000-04-13  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
515
516	* Released version 0.96.5
517
518	* doc/vchattr.pod: Wrote a man page for the vchattr command.
519
5202000-04-12  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
521
522	* commands/vdeliver.cc (cli_main): Check if the account has
523	expired before delivering.
524
525	* authenticate/authvlib.cc (check): Check if the acount has
526	expired and fail if so.
527
528	* lib/vpwentry/export_env.cc (export_env): Set
529	"VUSER_MAILBOX_ENABLED" to the new flag.
530
531	* authenticate/authvlib.cc (check): If looking up the base user
532	fails, and virtual_only is set, return instead of failing hard.
533
534	* daemon/chattr.cc (CMD): Allow mailbox enabled flag to be changed
535	by virtual users.
536
537	* commands/listvdomain.cc (show_user): Print out "(disabled)" next
538	to the mailbox directory if the "is_mailbox_enabled" flag is not
539	set.
540
541	* cgi/listvdomain.cc (show_user): Adapted to using
542	vpwentry::from_record instead of vpwentry::from_ver1_record.
543
544	* lib/vpwentry/vpwentry.cc: Set the flag defaults here on creation
545	instead of in set_defaults.
546
547	* lib/vdomain/chattr.cc (chattr): Modified to use the new vpwentry
548	is_mailbox_enabled flag.
549
550	* lib/vpwentry/from_ver1.cc (from_ver1_record): Made this a
551	protected non-static method.
552
553	* lib/vpwentry/from_ver2.cc (from_ver2_record): Made this a
554	protected non-static method.
555
556	* lib/vpwentry/from_old.cc (from_old_record): Made this a
557	protected non-static method.
558
559	* lib/vpwentry/from.cc (from_record): Made this a non-static method.
560
561	* lib/vpwentry/decode.cc: Moved the common pieces from from_ver1
562	and from_ver2 into seperate routines and moved them here.
563
564	* lib/vpwentry/from_ver2.cc (from_ver2_record): Added this routine
565	to do conversions from the new binary record format.
566
567	* lib/vpwentry/to.cc (to_record): Modified to create the new
568	binary record format.
569
570	* lib/vpwentry/from_uint.cc (from_uint): Moved this routine out of
571	from_ver1.cc, as it's common to both ver1 and ver2 (and other)
572	records.
573
574	* lib/vdomain/chattr.cc: Returned the extraneous definition of
575	strtou from here.
576
577	* lib/config/read_uns.cc (read_uns): Coded to use our strtou.
578
579	* lib/misc/strtou.c (strtou): Renamed the C++ source to a C
580	source, and added a header file.  Added a null-pointer and leading
581	space check.
582
583	* lib/vpwentry/vpwentry.h (struct vpwentry ): Removed the
584	enable/disable routines and added a "is_mailbox_enabled" boolean
585	flag.
586
5872000-04-11  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
588
589	* cgi/vadduser.cc (CGI_MAIN ): Added code to handle adding
590	forwarding at the same time as the user.
591
592	* lib/misc/lookup_baseuser.cc (lookup_baseuser): Modified to use
593	mystring::left instead of a hacked-up constructor call.
594
595	* cgi/vchforwards.cc (CGI_MAIN ): Added code here to handle
596	enabling and disabling the mailbox.
597
598	* commands/vchattr.cc: Added handling in this code for the new
599	flag.
600
601	* lib/vdomain/chattr.cc (chenabled): Added this function to enable
602	or disable delivery to a virtual user.
603
604	* lib/vpwentry/is_enabled.cc (is_enabled): Modified this routine
605	to return false if no mailbox path is set.
606
607	* commands/vdeliver.cc (cli_main): Handle the "enabled" flag here
608	by not doing mailbox delivery if is_enabled returns false.
609
610	* lib/vpwentry/is_enabled.cc (is_enabled): Created this routine to
611	determine if the account has been disabled.
612
613	* lib/vpwentry/disable.cc: Created routines here to enable and
614	disable an account by removing and creating a "disabled" file in
615	the virtual user's mailbox directory.
616
617	* Released version 0.96.4
618
619	* lib/misc/exec.cc (presetenv): Changed this routine to allocate a
620	new string (char*) that it never frees.  This seems to fix the
621	problems with garbage making its way into the environment.
622
6232000-04-10  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
624
625	* lib/vpwentry/export_env.cc (export_env): Moved the setenv
626	routine that exported a vpwentry to this method of vpwentry.
627
628	* lib/misc/exec.cc (presetenv): Renamed "setenv" to this, to
629	prevent confusion with any built-in "setenv" functions.
630
631	* authenticate/authvmailmgr.cc: Made the user name, pass phrase,
632	and domain name into globals, to prevent their memory from being
633	deallocated prematurely.
634
6352000-04-09  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
636
637	* doc/vmailmgr-cgi.texi: Adjusted this documentation to fit the
638	new CGIs.
639
640	* cgi/vaddalias.cc (CGI_MAIN ): Modified to handle a
641	comma-seperated list of destinations.
642
643	* cgi/vchforwards.cc: Renamed vchalias to this file, to match the
644	command-line program's name change.
645	(CGI_MAIN ): Modified to handle a comma-seperated list of destinations.
646
6472000-04-07  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
648
649	* Updates for new mystring and fdbuf libraries.
650
651	* commands/vsetup.cc: Added a "quiet" flag.
652
653	* commands/vpopbull.cc: Added a "quiet" flag.
654
655	* commands/vpasswds.cc: Added a "quiet" flag.
656
657	* commands/vpasswd2cdb.cc: Added a "quiet" flag.
658
659	* commands/vpasswd.cc: Added a "quiet" flag.
660
661	* commands/vdeluser.cc: Added a "quiet" flag.
662
663	* commands/vaddusers.cc: Added a "quiet" flag.
664
665	* commands/vdeliver.cc: Added a "quiet" flag.
666
667	* commands/vchforwards.cc: Added a "quiet" flag.
668
669	* commands/vchattr.cc: Added a "quiet" flag.
670
671	* commands/listvdomain.cc: Added a "quiet" flag.
672
673	* commands/vadduser.cc: Added a "quiet" flag.
674
675	* authenticate/authvlib.cc (check): make the virtual / non-virtual
676	decision here rather than in authenticate, in order to handle
677	"baseuser-virtuser" type usernames.  This fixes the Courier-IMAP
678	auth module problems.
679
6802000-04-06  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
681
682	* doc/FAQ.texi (Upgrading from Previous Versions): Added this
683	section to answer questions regarding what needs to be done to
684	upgrade to the current version.
685
6862000-04-05  Bruce Guenter  <bguenter@daedalus.bfsmedia.com>
687
688	* Released version 0.96.3
689
6902000-04-04  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
691
692	* doc/vmailmgr-cgi.texi (Top): Expanded the "vadduser" section to
693	explain the new optional "userdir" field.
694
695	* cgi/vadduser.cc (CGI_MAIN ): Modified to use the new adduser2
696	interface.
697
698	* cgi/vaddalias.cc (CGI_MAIN ): Modified to use the new adduser2
699	interface.
700
701	* daemon/dispatch.cc: Removed dispatch entries for adduser,
702	addalias, and addaliasp.
703
704	* daemon/adduser2.cc (CMD): Added this new command, which combines
705	the functionality of adduser, addalias, and addaliasp.
706
707	* daemon/addaliasp.cc (CMD): Modified to use build_forwards.
708
709	* daemon/addalias.cc (CMD): Modified to use build_forwards.
710
711	* daemon/adduser.cc (CMD): Only add non-empty forwarding addresses.
712	(build_forwards): Moved the forward-list building code common to
713	adduser, addalias, and addaliasp into this routine.
714
715	* daemon/main.cc (handle_connection): Log command response before
716	attempting to send data back to client.
717	(abortreq): Log abort code before closing FD.
718	(decode_data): Removed the test to check for empty parameters,
719	since some of the modules expect this possibility.
720
7212000-04-03  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
722
723	* authenticate/vauthenticate.cc (getdata): Buffer doesn't need to
724	be static.
725
726	* authenticate/checkvpw.cc (getdata): buffer doesn't need to be
727	static.
728
729	* lib/vpw/vpwtable.h (class vpwtable): Moved the vpwtable class
730	definition into this file.
731
7322000-04-01  Bruce Guenter  <bruceg@daedalus.bfsmedia.com>
733
734	* Released version 0.96.2
735
736	* daemon/state.cc: Since the daemon always forks, remove all of
737	the uid/gid saved state, and never restore it.  This class should
738	be renamed, since it does not really "save" any significant state.
739
740	* commands/vaddalias: Fixed quoting bug in this script.
741
7422000-03-21  Bruce Guenter  <bruceg@daedalus.bfsmedia.com>
743
744	* authenticate/vauthenticate.cc (main): Authenticate as virtual
745	only, and print out the user data if authentication succeeds.
746
747	* authenticate/authvlib.cc (authenticate): Fixed typo declaring
748	"baseuser" twice, preventing authentication from working.
749
7502000-03-07  Bruce Guenter  <bruceg@daedalus.bfsmedia.com>
751
752	* authenticate/vauthenticate.cc: Added this simple module that
753	accepts domain name, user name, and pass phrase on stdin, and
754	exits successfully if they can be authenticated.
755
7562000-02-12  Bruce Guenter  <bruceg@daedalus.bfsmedia.com>
757
758	* commands/vaddalias: Made this mini-program into a shell script.
759
760	* daemon/chattr.cc (CMD): Translate multiple values into a single
761	NUL-delimited list.
762
763	* commands/vsetup.cc (cli_main): Added error messages if execution
764	of vsetup-pre or vsetup-post fails.
765
766	* Removed old php3 support and placed Mike Bell's PHP3 code in.
767
768	* Applied patches by Mike Bell to allow vsetup to run a command
769	before and after executing.
770
7712000-02-03  Bruce Guenter  <bruceg@daedalus.bfsmedia.com>
772
773	* doc/FAQ.texi: Fixed typo reversing virtuser and baseuser.
774
7752000-01-12  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
776
777	* authenticate/authvmailmgr.cc: Completed initial coding of this
778	module, still needs testing.
779
780	* authenticate/checkvpw.cc (fail): Removed unused string "r".
781
7822000-01-05  Bruce Guenter  <bguenter@bguenter.pointsnorth.com>
783
784	* authenticate/authvmailmgr.cc: Started authentication module for
785	Courier IMAP.
786
787	* authenticate/authvlib.cc: Moved some of the functions out of
788	checkvpw.cc and generalized them here.
789
790	* authenticate: Moved checkvpw directory here.
791
7921999-10-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
793
794	* checkvpw/checkvpw.cc (authenticate): Changed logic here to
795	assume a missing entry in both locals and virtualdomains is
796	intended to be local.
797
7981999-10-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
799
800	* daemon/*.cc: Modified to use new validate_forward.
801
802	* lib/misc/vdomain_chattr.cc (chdest): Modified to use new
803	validate_forward.
804
805	* lib/misc/vdomain_validate.cc (validate_forward): Renamed
806	validate_redirect to this, and removed the handling for a
807	comma-seperated list of addresses.
808
809	* commands/vchforwards.cc (cli_main): Added code to validate the
810	forwarding addresses.
811
812	* commands/vadduser.cc (make_user): Validate the forwarding
813	addresses before creating the user.
814
8151999-10-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
816
817	* daemon/chattr.cc (CMD): Changed call to strtol to strtoul.
818
819	* lib/config/read_uns.cc (read_uns): Modified this routine to
820	treat all negative numbers as -1, and changed the call from strtol
821	to strtoul.
822
8231999-10-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
824
825	* doc/FAQ.texi: Updated the answers and added information about
826	how mail gets delivered.
827
828	* lib/misc/vdomain_add.cc: Removed both vdomain::addalias and
829	vdomain::adduser.
830
831	* commands/vsetup.cc (setup_alias): Removed the use of
832	vdomain::addalias.
833
834	* commands/vadduser.cc (add_alias): Removed the use of
835	vdomain::addalias.
836
837	* commands/vaddusers.cc (add_one): Removed the use of
838	vdomain::adduser and vdomain::addalias.
839
8401999-10-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
841
842	* Released version 0.96.1
843
844	* doc/vmailmgr-cgi.texi: Updated listvdomain documentation.
845
846	* cgi/listvdomain.cc (show_user): Merged show_mbox and show_alias
847	into this one routine.
848	(load_users): Fixed length of incoming code.
849	(show_user): Changed formatting of aliases.
850
8511999-10-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
852
853	* cgi/listvdomain.cc: Recoded to use modified listdomain protocol
854	interface.
855
856	* lib/misc/vdomain_add.cc (addalias, adduser): Call set_defaults
857	on new vpwentry.
858
859	* lib/misc/vpwentry_from_old.cc (from_old_record): Call
860	set_defaults on resulting vpwentry.
861
862	* commands/vadduser.cc (make_user): Call set_defaults on new
863	vpwentry.
864
865	* daemon/lookup.cc (lookup_and_validate): Call set_defaults on new
866	vpwentry.
867
868	* lib/misc/vpwentry.cc: Moved vpwentry::set_defaults into its own
869	module, and removed the call to set_defaults from the constructors.
870
871	* lib/misc/vpwentry_from.cc: Made the from_old_record and
872	from_ver1_record public, and moved them into their own modules.
873
874	* daemon/listdomain.cc (CMD_FD): Changed the protocol to strip the
875	count from the initial message, to output each entry as a seperate
876	response (with length and all), and to include full vpwentry
877	details in each entry rather than requiring seperate lookups.
878
8791999-09-30  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
880
881	* Released version 0.96
882
883	* checkvpw/checkvpw.cc (main): Removed extraneous ; causing bug.
884
885	* lib/misc/exec.cc (execute): Skip over directories with identical
886	parents, to prevent double execution.
887
888	* checkvpw/checkvpw.cc (check): Fixed inverted "nodefault" flag to
889	domain->lookup.
890
891	* lib/misc/vpwentry_from.cc (from_record): Turned the if/else
892	block into a switch statement.
893
894	* commands/vadduser.cc (set_defaults): Turn off creation of a
895	mailbox if the base command name is "vaddalias".
896	Also, use argv0base instead of "vadduser" for the command name.
897
898	* lib/misc/vpwentry_from.cc (from_ver1_record): Fixed bug in
899	importing version 1 records.
900
901	* commands/vdeliver.cc (dump): The input needs to be rewound here
902	the second time through, so rewind it always.
903
9041999-09-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
905
906	* commands/listvdomain.cc (cli_main): Print out a banner before
907	the listing.
908
9091999-09-27  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
910
911	* doc/configuration.texi: Updated the configuration documentation
912	to match current implementation aspects.
913
914	* lib/misc/exec.cc (execute): Changed behavior of execute to
915	execute the global before the local directories, and to abort on
916	any error, but translate 99 to 0 (no error).
917
9181999-09-23  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
919
920	* cgi/vaddalias.cc (CGI_MAIN ): Adjusted for changed parameter
921	ordering.
922
923	* daemon/log.cc: Added several password-obscuring constants,
924	rather than repeating them in each command.
925
926	* daemon/lookup.cc (CMD): Changed format of result.
927
928	* daemon/check.cc (CMD): Changed format of result to seperate
929	parts with a NUL.
930
931	* daemon/addalias.cc (CMD): Now takes multiple destinations.
932
933	* daemon/addaliasp.cc (CMD): Changed order of parameters to allow
934	for multiple destination parameters.
935
936	* daemon/log.cc (logcommand): Removed all varieties of this
937	function except the one that takes a single "command" argument.
938
939	* daemon/adduser.cc (CMD): Added handling for a list of forwards.
940
941	* daemon/dispatch.cc (dispatch_cmd): Changed handling of commands:
942	there is now a minimum and a maximum number of arguments, and the
943	"decode_virtual" is a manditory -- if set, the "baseuser-virtual"
944	format is not allowed.  This means all the server commands now
945	require seperate domain name and virtual user name arguments (all
946	the CGIs do this anyways).
947
948	* daemon/check.cc (CMD): Added handling for mailbox and multiple
949	forwards of virtual users.
950
951	* daemon/dispatch.cc: Added check back into the list of commands.
952
953	* cgi/vcommand.py (main): Adapted to new interface.
954
955	* cgi/vmailmgr.py: Revised the interface to be somewhat more
956	object based, and tested minimally.
957
9581999-09-22  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
959
960	* cgi/listvdomain.cc (setup_format): Added handling for cell and
961	title prefix and suffix strings, as well as cell, paragraph, and
962	table alignment.
963
9641999-09-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
965
966	* cgi/vmailmgr.py: Split off most of the generic functionality
967	from vcommand.py into this module, completed base CGI
968	functionality.
969
9701999-09-19  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
971
972	* cgi/vcommand.py: Started this generic Python vmailmgr command
973	CGI.
974
9751999-09-16  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
976
977	* commands/vdeliver.cc (cli_main): Adapted to the new execution
978	framework.
979
980	* checkvpw/checkvpw.cc (check): Adapted to the new execution
981	framework.
982
983	* lib/misc/exec.cc (execute): Removed the old "exec" framework in
984	favour of this function, which traverses through the configuration
985	directories and tries to execute the named file.
986
987	* doc/vadduser.pod: Updated this documentation.
988
989	* commands/vadduser.cc: Added an option to not create a mailbox
990	for this user, allowing this program to be used in place of
991	vaddalias.
992	(add_user): Modified logic to optionally ask for a password.
993
994	* commands/vconf2dir: Fixed quoting when creating the new config
995	files, and removed the "set -x" flag at the top.
996
997	* commands/vchforwards.cc (cli_main): Adapted this program from
998	vchalias, and removed vchalias from the distribution.
999
1000	* commands/vchattr.cc: Wrote this command to change a virtual
1001	user or users' attributes.
1002
10031999-09-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1004
1005	* checkvpw/checkvpw.cc: Login failures cause execution of
1006	"config/checkvpw-loginfail", and other failures cause execution of
1007	"config/checkvpw-error", both with an error message in
1008	$CHECKVPW_ERROR.
1009
1010	* commands/vdeliver.cc (deliver_partial): Rewrote loop so that
1011	looping will always sleep.  If the file creation failed, it would
1012	previously loop immediately.
1013
10141999-09-14  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1015
1016	* doc/FAQ.texi: Replaced references to vmailmgr.conf with
1017	vmailmgr/
1018
10191999-09-11  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1020
1021	* doc/vpopbull.pod: Wrote a man page for vpopbull.
1022
10231999-09-10  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1024
1025	* lib/misc/vpwentry_auth.cc (authenticate): Wrote this new
1026	routine, to replace the use of crypt_cmp when authenticating
1027	virtual users.
1028
1029	* lib/misc/pwentry_auth.cc (authenticate): Wrote this new routine,
1030	to replace the use of crypt_cmp when authenticating users.
1031
10321999-09-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1033
1034	* commands/listvdomain.cc: Added options to list only users, only
1035	aliases, or selected names listed on the command line.
1036
1037	* lib/misc/vpwentry_from.cc (from_ver1_record): Fixed off-by-one
1038	bug.
1039
1040	* lib/misc/vpwentry_to.cc (to_record): Fixed problem in creating
1041	records without any forwarding addresses.
1042
1043	* commands/vadduser.cc: Commented out extra-data handling.
1044
1045	* lib/misc/exec.cc (setenv): Commented out
1046
1047	* lib/misc/vpwentry.h (struct vpwentry ): Commented out the extra
1048	data string.
1049
1050	* cgi/vchattr.cc (CGI_MAIN ): Wrote this simple modification to
1051	vchalias, which can change any attribute.
1052
1053	* daemon/chattr.cc (CMD): Convert the attr string to an integer
1054	before running domain.chattr.
1055
1056	* lib/misc/vdomain_chattr.cc (chattr): Added attribute handlers
1057	for message size/count and account expiry.
1058
1059	* lib/misc/vdomain.h (class vdomain): Changed attribute name
1060	constants from strings to integers.
1061
10621999-08-23  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1063
1064	* doc/configuration.texi (Search Order): Corrected a typo: the
1065	local directory is named ".vmailmgr", not "vmailmgr".
1066
10671999-08-21  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1068
1069	* commands/vadduser.cc: Added hard/soft quota options, and a
1070	password option for vaddalias.
1071
1072	* lib/misc/vpwentry.h (struct vpwentry ): Added hard/soft quota
1073	values.
1074
10751999-08-18  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1076
1077	* commands/vpasswd.cc (cli_main): Modified to call
1078	vdomain::chattr.
1079
1080	* commands/vpasswds.cc (change_one): Modified to call
1081	vdomain::chattr.
1082
1083	* cgi/vchalias.cc (CGI_MAIN ): Use ATTR_DEST instead of a
1084	hard-coded string.
1085
1086	* cgi/vpasswd.cc (CGI_MAIN ): Use ATTR_PASS instead of a
1087	hard-coded string.
1088
1089	* daemon/chattr.cc (CMD): Modified to call vdomain::chattr.
1090
10911999-08-16  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1092
1093	* lib/misc/vdomain_chattr.cc (chattr): Created this new routine to
1094	generalize attribute modification.
1095
10961999-08-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1097
1098	* lib/misc/exec.cc (exec_list): Takes a strlist parameter instead
1099	of a string.
1100
1101	* lib/misc/strlist.h (class strlist ): Removed the NUL constant.
1102
1103	* lib/misc/vpwentry.h (struct vpwentry ): Removed the NUL constant
1104	in favour of the new one in mystring.
1105
1106	* lib/config/read_list.cc (read_list): Adapted to use
1107	strlist::read instead of a custom list reading function.
1108
11091999-08-14  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1110
1111	* lib/misc/strlist.h (class keystrlist): Split off the
1112	functionality to handle keyed strings ("key=value" format) into a
1113	seperate class.
1114
1115	* lib/misc/vpwentry.h (struct vpwentry ): Adapted to using strlist
1116	functions.
1117
1118	* lib/misc/strlist.h (class strlist ): Moved the string list
1119	management into its own class.
1120
1121	* commands/vquota.cc: Started writing this quota management
1122	utility.
1123
1124	* commands/vdeliver.cc (cli_main): Fixed invocation of exec*
1125	functions.
1126
1127	* commands/vadduser.cc: Added code to set the default values of
1128	the new data items, and to set them when creating the user.
1129
1130	* checkvpw/checkvpw.cc (main): Fixed invocation of exec*
1131	functions.
1132
11331999-08-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1134
1135	* doc/configuration.texi: Did some minor re-organization, and
1136	added a higher level note regarding environment variables and
1137	return codes for executed programs.
1138
11391999-08-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1140
1141	* lib/misc/exec.cc (setenv): Set environment variables for quota,
1142	message size, message count, creation time, expiry time, personal
1143	data, and all the extra data.
1144	(exec_list): Changed interface to all the exec_* routines: the
1145	error message string is passed as a parameter, and the return
1146	value is the error return code or zero.
1147
1148	* lib/misc/vpwentry_from.cc (from_uint): Modified to accept "-*"
1149	as the negative pattern.
1150
1151	* lib/misc/utoa.cc (utoa): Moved this routine into its own module.
1152
11531999-08-10  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1154
1155	* cgi/vpasswd.cc (CGI_MAIN ): Modified to call "chattr".
1156
1157	* cgi/vchalias.cc (CGI_MAIN ): Modified to call "chattr".
1158
1159	* daemon/dispatch.cc: Removed entries for chpass, chalias, and
1160	delalias.
1161
1162	* daemon/chattr.cc (CMD): Merged the functions of chalias and
1163	chpass into this new command.
1164
1165	* lib/misc/vdomain.h (class vdomain): Removed delalias command.
1166
1167	* lib/misc/vdomain_deluser.cc (deluser): Removed mailbox test to
1168	see if the named entry was a "user".
1169
1170	* commands/vdeliver.cc (inject): Handle failure properly here.
1171
11721999-08-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1173
1174	* commands/vdeliver.cc (deliver_partial): Rewrote the delivery
1175	mechanism to do partial file delivery.
1176	(write_envelope): Rewrote the envelope handling code to use
1177	mystring_iter (big simplification).
1178
1179	* commands/vconf2dir: Fixed non-portable increment statement.
1180
1181	* commands/vadduser.cc: Added options for the extra virtual user
1182	data, but not the code to handle the options.
1183
11841999-08-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1185
1186	* commands/vpasswd2cdb.cc (getpw): Call vpwentry::from_record,
1187	since the original text file format is compatible with its import
1188	routine.
1189
1190	* lib/misc/vdomain_validate.cc (validate_redirect): Call exists
1191	instead of lookup.
1192
1193	* lib/misc/vdomain_lookup.cc (exists): Wrote this routine to test
1194	if a name exists in a virtual domain.
1195
1196	* lib/misc/vpwtable_exists.cc (exists): Added this routine to do a
1197	simple check if a user exists, without doing any format
1198	translations.
1199
1200	* lib/misc/vpwentry.h (class vpwtable): Turned the "cdb" pointer
1201	into a void pointer to allow for easier extension to non-CDB
1202	formats.
1203
1204	* lib/config/*: Added new default configuration items for the
1205	quota and expiry items.
1206
1207	* lib/misc/vdomain_*.cc: Adpoted to the new vpwentry conventions.
1208
1209	* lib/misc/exec.cc (setenv): Always set MAILDIR to vpw->mailbox,
1210	which will be empty for an alias user.
1211
1212	* lib/misc/vpwentry.cc (set_defaults): Added this new routine to
1213	set the defaults on a vpwentry from the current configuration.
1214
1215	* lib/misc/vpwentry_from.cc (from_record): Moved this routine into
1216	its own module, and added parsing for the new fields.
1217
1218	* lib/misc/vpwentry_to.cc (to_record): Moved this routine into its
1219	own module.
1220
1221	* lib/misc/vpwentry.h (struct vpwentry ): Added new fixed fields
1222	to the structure: personal, quota, msgsize, msgcount, ctime, and
1223	expiry.
1224
12251999-08-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1226
1227	* lib/misc/vpwentry_getset.cc (get): Added this routine to get the
1228	value of a data variable.
1229	(set): Added this routine to add a variable to the data set,
1230	replacing its value if it already exists.
1231
1232	* lib/misc/vpwentry.cc (to_record): Rewrote this routine to output
1233	the new "version 1" record format.
1234
1235	* lib/misc/vpwentry.h (struct vpwentry ): Expanded this structure,
1236	replacing the "dest" field with "mailbox" and "forwards" items,
1237	and added a "datastr" field.
1238
1239	* lib/misc/vpwentry.cc (from_old_record): Adapted this code from
1240	the old vpwentry::from_record routine.
1241
1242	* Released version 0.95
1243
12441999-08-06  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1245
1246	* commands/vpopbull.cc (scan_bulletins): Modified the logic here
1247	to not fail if one of the bulletin scans fails.
1248
1249	* commands/vdeliver.cc (inject): Fixed missing argv[0] in call to
1250	execl here.
1251
12521999-08-05  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1253
1254	* commands/vpopbull.cc: Moved this program into the commands
1255	directory.
1256	(scan_bulletins): Added specific information to error messages.
1257
1258	* lib/misc/exec.cc (setenv): Moved the common code to set up the
1259	environment for virtual users into a common routine here from
1260	checkvpw.cc and vdeliver.cc.
1261
12621999-08-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1263
1264	* doc/configuration.texi: Added sections for the new execution
1265	hooks.
1266
1267	* checkvpw/checkvpw.cc (check): Fixed this to set the VUSER
1268	environment variable immediately after looking up the base user.
1269
12701999-08-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1271
1272	* checkvpw/checkvpw.cc (main): Modified to execute the contents of
1273	checkvpw-postexec.
1274
1275	* lib/config/showvconfig.cc.in: Built this new program template to
1276	show the config parameters.
1277
1278	* commands/vdeliver.cc (cli_main): Make vdeliver execute a list of
1279	commands before and after doing the delivery.  Will set $MAILDIR
1280	and $VUSER.
1281
1282	* checkvpw/vpopbull.cc: Moved bulletins.cc into this file, built a
1283	main routine, and added error logging.
1284
1285	* lib/misc/exec.cc (exec_list): Created this routine to execute a
1286	list of commands, returning the first error as a string.
1287	(exec_one): Created this routine to shell and execute a single
1288	command using "/bin/sh -c '<command>'".
1289
1290	* checkvpw/checkvpw.cc: Added a hook to execute a list of programs
1291	before and after running setuid.  The "before" programs are read
1292	from the global config to avoid security holes.  $HOME and $USER
1293	are set for both, and $MAILDIR and $VUSER are set for the "after"
1294	programs.
1295
12961999-08-02  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1297
1298	* Released version 0.94
1299
1300	* daemon/dispatch.cc: Commented out the "stat" and "statall"
1301	commands, that no longer do anything useful (the forking daemon
1302	causes the statistics to be meaningless).  Also removed the code
1303	in "dispatch" to count invocations of a particular method.
1304
1305	* daemon/lookup.cc (lookup_and_validate): Fixed a false negation
1306	in the logic when checking for an existing virtual user.
1307
1308	* lib/misc/maildir.cc (mkdirp): Fixed off-by-one bug in recursive
1309	case.
1310
1311	* commands/vdeliver.cc: Fixed bug caused by assigning from an int
1312	to a bool through a pointer (since bools are only a single byte).
1313
1314	* checkvpw/checkvpw.cc: Rewrote this code to do the password
1315	checking directly without calling up to the daemon.
1316
1317	* daemon: moved lookup_baseuser into lib/misc, removed the call to
1318	setup a saved_state from it, and adjusted all the calls to
1319	lookup_baseuser in the daemon to fit.
1320
13211999-07-30  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1322
1323	* commands/vdeliver.cc: Moved this program from clients into
1324	commands, and made it work the the CLI library.
1325	(cli_main): Does a call to domain.lookup now instead of a server
1326	call.
1327	(read_me): Rewrote to use config->qmail_root() instead of a
1328	hard-coded /var/qmail.  This is the last place (verified with
1329	grep) that has a hard-coded /var/qmail.
1330
13311999-07-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1332
1333	* lib/config/config_read.cc (config_read): Fixed a typo: I had
1334	typed '=' instead of '+' to create the full name.
1335
13361999-07-27  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1337
1338	* daemon/chpass.cc (CMD): Calls the vdomain::chpass routine
1339	instead of doing it by hand through the vpwtable code.
1340
1341	* commands/vpasswd2cdb.cc (cli_main): Removed an extraneous call
1342	to end_getpw.
1343
1344	* lib/misc/vpwentry.h (class vpwtable): Added this new
1345	abstraction, a virtual password table, that contains all the
1346	low-level table manipulation routines.  All other code has been
1347	adjusted to fit this model.
1348
13491999-07-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1350
1351	* lib/misc/lookup_domain.cc: Moved is_local and find_virtual into
1352	this file from daemon/lookup.cc.
1353
1354	* daemon/lookup.cc (CMD): Converted to using vdomain::lookup.
1355
1356	* daemon/check.cc (CMD): Converted to using vdomain::lookup.
1357
1358	* lib/misc/vdomain_lookup.cc (lookup): Moved the daemon function
1359	lookup_virtuser into this method.
1360
1361	* Inserted the latest cli library and adapted all the command line
1362	programs to handle the changes.
1363
1364	* Inserted the latest mystring class and adapted all the code to
1365	handle it.
1366
1367	* Rewrote the virtual user manipulation code from lib/misc/vuser*,
1368	and moved it all into the vdomain class (was struct).  Adjusted
1369	all other references to use this new code.
1370
13711999-07-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1372
1373	* Released version 0.93
1374
1375	* daemon/adduser.cc (CMD): Prefix the user dir destination with
1376	"./".
1377
1378	* lib/misc/vuser_set.cc (vuser_set): Allow leading '/' in
1379	destination string, in addition to leading '.' and '&'.
1380
13811999-07-22  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1382
1383	* commands/vsetup.cc (setup_passwd): Modified to use the new
1384	string iterator class.
1385
1386	* lib/misc/stringiter.h (class mystring_iter): Wrote this class to
1387	provide an iterator over a newline (or NUL, even) seperated list
1388	within a string.
1389
13901999-07-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1391
1392	* commands/vsetup.cc (setup_passwd): Changed the alias seperator
1393	character from ',' to '\n'.
1394
1395	* lib/config/read_list.cc (read_list): Wrote this routine to read
1396	a config item containing a list of values.
1397
1398	* lib/config/config_readlist.cc (config_readlist): Wrote this new
1399	routine to read a list of values from a file, newline seperated.
1400
14011999-07-19  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1402
1403	* doc/configuration.texi: Wrote this new document describing the
1404	new configuration structure, adapted from the now obsolete
1405	vmailmgr.conf.sample.
1406
14071999-07-18  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1408
1409	* lib/config/read_*.cc: Moved the overhead for maintaining the
1410	cache into these read functions instead of duplicating it in each
1411	config variable function.
1412
1413	* lib/config/build-config.sh: Create a cache for each config
1414	variable in order to eliminate duplicate readings of a single
1415	variable.
1416
1417	* daemon/pwentry_table.cc (operator[]): Replaced the previous
1418	implementation (a cache) with one that just calls getpwnam.  This
1419	avoids creating extra dynamic data in the form of many pwentry
1420	structures.
1421
1422	* daemon/lookup.cc (lookup_baseuser): Removed an extraneous
1423	re-creation of the pwentry returned from the pwentry_table.
1424
1425	* lib/config/read_*.cc: Removed the translation from '_' to '-'
1426	for filenames from the code and moved it into the build-config.sh
1427	script.  This moves the constant conversion from run-time to
1428	build-time.
1429
1430	* lib/config/configrc.cc (configuration): Made the constructor
1431	take a pointer instead of a reference, which was probably the
1432	saner thing to do from the start.
1433
1434	* lib/config/read_dir.cc (read_dir): Modified the logic here so
1435	that the macros for creating the config reading routines can be
1436	completely uniform.
1437
1438	* daemon/state.cc (saved_state): Since the saved state is never
1439	un-saved, don't try to establish what the previous state is with
1440	getuid and getegid.
1441
1442	* daemon/state.h: Turned the CHANGE_STATE macro into a no-op,
1443	since the state is already saved when doing any lookup.
1444
1445	* daemon/lookup.cc (lookup_baseuser): Set up the saved state
1446	immediately upon successfully doing a base user lookup.
1447
1448	* daemon/state.h (class saved_state): Removed the pwentry pointer
1449	and made the domain a non-pointer as well.
1450
14511999-07-17  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1452
1453	* daemon/state.cc: Modified these routines to set up a pwentry
1454	before setting up the vdomain, as well as properly restoring the
1455	old config pointer.
1456
1457	* commands/*.cc: Replaced all instances of "domain->" with
1458	"domain.", since "domain" is no longer a pointer.
1459
1460	* clients/vdeliver.cc (main): Modified to set up a pwentry before
1461	setting up the vdomain.
1462
1463	* clients/checkvpw.cc (set_user): Modified to set up a pwentry
1464	before setting up the vdomain.
1465
1466	* commands/vcommand.cc (go_home): Modified to create a global
1467	pwentry named "user", and build the domain and config based on
1468	that.
1469
1470	* lib/misc/vdomain.cc (vdomain): Modified the constructors to take
1471	a pwentry parameter to build the domain config from.
1472
1473	* lib/misc/pwentry.cc: Moved this file here from daemon, added a
1474	"config" structure entry, and added a default constructor.
1475	(pwfile): Removed the pwfile_cache member, which was a kluge for
1476	what I thought was a bug somewhere else.
1477
14781999-07-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1479
1480	* Forwarded-ported envelope delivery re-write from 0.92.2 for
1481	clients/vdeliver.cc.
1482
14831999-07-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1484
1485	* daemon/lookup.cc: Converted is_local and find_virtual to use the
1486	qmail_root config item.
1487
1488	* Forwarded-ported logic fix from 0.92.1 for clients/vdeliver.cc.
1489
1490	* clients/vdeliver.cc (inject): Use the new qmail_root config item
1491	to locate the qmail-queue binary.
1492
14931999-06-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1494
1495	* daemon/hash_table.h: Fixed a typo in the hash table prime list
1496	(the last numbers were truncated).
1497
14981999-06-14  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1499
1500	* doc/FAQ.texi: Added a "troubleshooting" section, to be filled in
1501	as questions arrive.
1502
15031999-06-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1504
1505	* Modified all the sources to use the new configuration class
1506	members.
1507
1508	* commands/vcommand.cc (go_home): Initialize the password_file
1509	global from config->password_file() here.
1510
1511	* lib/config/configrc.cc: Totally re-wrote the configuration
1512	system to use a subdirectory style config, with individual files
1513	containing the configuration values on their first line.  The
1514	configuration modules are also built by a script, and broken down
1515	into individual object modules to reduce the size of programs that
1516	don't use all the options.
1517
15181999-06-05  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1519
1520	* daemon/*.cc: Moved the calls to CHANGE_STATE to immediately
1521	after validating the user, to allow the config set up by the
1522	saved_state to be used immediately.
1523
1524	* clients/checkvpw.cc (set_user): Set up a vdomain here and set
1525	the config to allow for locally-configured bulletin directories.
1526	(main): Moved the call to set_user higher, to allow the config to
1527	be used earlier to set the error maildir.
1528
1529	* clients/vdeliver.cc (main): Set up a vdomain and set the config
1530	to its config, to load a local configuration when doing
1531	deliveries.
1532
1533	* daemon/pwentry.cc: Removed the definitions for user_dir_rel and
1534	user_dir_abs, since vdomain::userdir will do the job now (it seems
1535	that user_dir_abs wasn't even used, too).
1536
1537	* daemon/state.cc: Moved the constructor and desctuctor for
1538	saved_state into this object, and added a call to push a new
1539	configuration if state was changed successfully.
1540
1541	* commands/vcommand.cc: Moved the go_home routine into here, and
1542	added a global "domain" pointer that will point to the current
1543	virtual domain.
1544	(go_home): Push the domain config onto the config stack.  Now all
1545	the command programs will use a local configuration.  This routine
1546	will eventually be rewritten to handle multiple domains in the
1547	same user.
1548
1549	* commands/vadduser.cc: Converted to using a vdomain object.
1550
1551	* Converted all instances of "config." to "config->" where
1552	appropriate (the vdomain class has a non-pointer config member, so
1553	it doesn't count).
1554
1555	* lib/misc/server.cc: Rewrote call and connect to take as a
1556	parameter the socket filename to use.  server_call::call has a
1557	default argument now of config->socket_file to prevent having to
1558	change any code, but this might disappear, too.
1559
1560	* lib/misc/configrc.cc: Turned the global 'config' item into a
1561	pointer, to allow other code to essentially push down local
1562	configurations onto it.  Wrote config_push and config_pop to
1563	assist with this.
1564
1565	* commands/vaddusers.cc (add_one): Make the alias name lower case
1566	before using it, call vuser_adduser with the maildir argument set.
1567
1568	* lib/misc/vuser_add.cc (vuser_adduser): Modified this routine to
1569	remove the call to userdir, forcing the maildir name to be created
1570	at a higher level.
1571
15721999-06-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1573
1574	* lib/misc/configrc.cc (configuration): Eliminated the #defined
1575	default constants, as they are used only once, and moved them
1576	directly into the default configuration constructor.
1577
1578	* lib/misc/configrc.h (class configuration ): Added a "parent"
1579	member item that points to the object from which the defaults for
1580	this configuration was set (set to NULL in the default object).
1581
1582	* lib/misc/vdomain.cc: Created this construct to represent a
1583	virtual domain.  Copied the functionality from userdir.cc into
1584	here (with the plan of removing userdir.cc in the future).  This
1585	will become the status-holder for multiple domains within a single
1586	real user.
1587
1588	* lib/misc/configrc.cc (configuration): Added a new constructor
1589	that copies the values from a set of defaults and reads in a
1590	config file to override those defaults.  To be used for local
1591	configuration handling.  Relegated the default constructor to only
1592	setting the default values, and added a new global const object
1593	config_defaults to hold these.
1594
1595	* commands/*: Added a call to go_home in every cli_main.
1596
1597	* commands/go_home.cc (go_home): Wrote this routine to chdir to
1598	the user's HOME directory.
1599
16001999-06-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1601
1602	* commands/listvdomain.cc (cli_main): I forgot to check the return
1603	value of start_getpw here, leading to a core dump when the
1604	password table can't be opened.  Fixed.
1605
16061999-06-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1607
1608	* commands/vsetup.cc (setup_qmail_default): Changed the mode of
1609	the created .qmail-default file to 0444 (minus umask) instead of
1610	0666 to prevent qmail from complaining on systems where umask
1611	defaults to 002 instead of 022, and to prevent inadvertent editing
1612	of the .qmail-default file.
1613
16141999-05-30  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1615
1616	* Released version 0.92
1617
16181999-05-28  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1619
1620	* clients/vdeliver.cc: Rewrote the alias delivery routines to send
1621	the email to qmail-queue instead of qmail-inject, since
1622	qmail-inject will attempt to reformat the message.
1623
16241999-05-27  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1625
1626	* daemon/check.cc (CMD): Added a check to ensure that checking the
1627	password for an alias fails.
1628
1629	* doc/*: Changed references from qcc.sk.ca to em.ca.
1630
16311999-05-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1632
1633	* daemon/addaliasp.cc (CMD): Added this new command to add an
1634	alias with a password.
1635
1636	* doc/vmailmgr-cgi.texi: Updated the documentation for vaddalias.
1637	Changed all instances of "necessary" to "required".
1638
1639	* cgi/vaddalias.cc (CGI_MAIN ): Now allows for an optional new
1640	password field pair, and calls addaliasp if they are not empty.
1641
1642	* lib/misc/server.cc (server_call): Added a new server_call for 5
1643	parameters.
1644
1645	* daemon/log.cc (logcommand): Added a new logcommand routine to
1646	handle 5 parameters.
1647
1648	* daemon/dispatch.cc: Modified the dispatch entry for addalias.
1649
1650	* daemon/chpass.cc (CMD): Removed the custom password checking
1651	since it is now merged into lookup_and_validate.
1652
1653	* daemon/chalias.cc (CMD): Call lookup_and_validate with the
1654	"userpass" flag set to true to allow owners of virtual aliases set
1655	up with a password to change their alias.
1656
1657	* daemon/lookup.cc (lookup_and_validate): Modified to optionally
1658	do comparisons against the virtual user's password if the
1659	comparison against the administrator's password fails.  Removed
1660	the allowance for empty passwords.  Made all the password
1661	mis-match messages the same.  The admin password check is done
1662	before the virtual user check to avoid giving away information
1663	about virtual users.
1664
1665	* commands/vaddalias.cc (cli_main): Set passwords on aliases by
1666	passing in a '-p' or '--password' flag.
1667
1668	* lib/misc/vuser_add.cc (vuser_addalias): Modified to allow
1669	passwords on aliases.
1670
16711999-05-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1672
1673	* Released version 0.91
1674
16751999-05-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1676
1677	* daemon/chalias.cc (CMD): Bug fix: was passing "false" for
1678	"mustexist" to lookup_and_validate, when it should have been
1679	"true".
1680
1681	* commands/vdelalias.cc, commands/vdeluser.cc,
1682	commands/vaddusers.cc, commands/vaddalias.cc,
1683	commands/vpasswds.cc, commands/vchalias.cc: Added a mechanism to
1684	count and report the number of errors encountered.
1685
1686	* doc/vmailmgr-cgi.texi: Added a chapter for the chalias command.
1687	Also added sections for vdelalias and vdeluser, as well as sorting
1688	the sections into alphabetical order.
1689
1690	* cgi/vchalias.cc: Wrote the CGI program to call the chalias
1691	command.
1692
1693	* doc/vchalias.pod: Wrote the documentation page for the vchalias
1694	command.
1695
16961999-05-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1697
1698	* lib/misc/configrc.cc (DEFAULT_DEFAULT_USERNAME): Changed the
1699	default default username from '*' to '+', to avoid shell
1700	screwups.  Updated documentation.
1701
17021999-05-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1703
1704	* doc/checkvpw.pod: Fixed filename glitch -- replaced all
1705	instances of virtualhosts with virtualdomains.
1706
17071999-05-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1708
1709	* lib/misc/vpwentry_putpw.cc (putpw): Changed logic of "onlyadd"
1710	parameter.  If set, will fail if the name already existed.  If not
1711	set, will fail if the name did not already exist.
1712
1713	* daemon/dispatch.cc: Added a dispatch entry for chalias.
1714
1715	* daemon/chalias.cc (CMD): Created this server command to change
1716	an existing alias to a new destination, using the new vuser_set.
1717
1718	* daemon/adduser.cc (CMD): Changed to use vuser_set.
1719
1720	* daemon/addalias.cc (CMD): Changed to use vuser_set.
1721
1722	* lib/misc/vuser_add.cc: Changed to use vuser_set.
1723
1724	* commands/vadduser.cc (add_user): Changed to use vuser_set.
1725
1726	* lib/misc/vuser_set.cc (vuser_set): Renamed vuser_add to
1727	vuser_set, and moved it into this file.  vuser_set can be used to
1728	change existing entries as well as to add new entries.
1729
1730	* commands/vrehash.cc (lock_dir): Set permissions on created CDB
1731	file to 0600.
1732
1733	* commands/vpasswd2cdb.cc (cli_main): Set permissions on created
1734	CDB file to 0600.
1735
1736	* lib/misc/vpwentry_putpw.cc (putpw): Set permissions on created
1737	CDB file to 0600.
1738
1739	* lib/misc/vpwentry_delpw.cc (delpw): Set permissions on created
1740	CDB file to 0600.
1741
1742	* clients/vdeliver.cc: Changed all I/O to use fdbuf primitives.
1743	(deliver): Changed permissions on created file to 0666 to 0600
1744	(mail should be private).
1745
17461999-04-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1747
1748	* Released version 0.90.2
1749
17501999-04-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1751
1752	* lib/misc/userdir.cc (userdir): Use the multiple-argument
1753	mystring constructor to make pasting the slices together more
1754	efficient.
1755
1756	* daemon/main.cc: Added include of <stdio.h> to pull in perror
1757	properly.
1758
17591999-04-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1760
1761	* Released version 0.90.1
1762
17631999-04-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1764
1765	* lib/misc/vpwentry_putpw.cc: Removed include of errnos.h
1766
1767	* lib/misc/md5-crypt.c: Added definitions for MIN and MAX if they
1768	aren't defined.
1769
17701999-04-05  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1771
1772	* doc/vmailmgr.conf.sample: Removed the entry for
1773	cdb-password-file, as that variable is not used.
1774
17751999-04-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1776
1777	* Released version 0.90
1778
1779	* doc/FAQ.texi: Noted that the C++ libraries are no longer
1780	needed.
1781
1782	* clients/bulletins.cc (stat_maildir): Fixed two bugs: timestamp
1783	file was named "maildir/cur/.timestamp" instead of just
1784	"maildir/.timestamp"; timestamp file was opened for writing
1785	without a mode, causing the resulting file to have an
1786	indeterminate mode.
1787
1788	* doc/FAQ.texi: Added an answer regarding IMAP support.
1789
17901999-04-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1791
1792	* daemon/main.cc (handle_connection): Only print out the "Accepted
1793	connection" message if the verbose flag is set.
1794
17951999-04-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1796
1797	* lib/misc/md5-crypt.c (md5_crypt_r): This routine depended on the
1798	result of "strncpy" pointing to the end of the destination
1799	string.  This is non-standard behavior.  Fixed such that the "cp"
1800	pointer tracks its position manually.
1801
1802	* cgi/listvdomain.cc: Converted to fdbuf.
1803
1804	* daemon/main.cc (usage): Converted to fdbuf.
1805
1806	* daemon/log.cc: Converted to fdbuf.
1807
1808	* daemon/map_table.cc (map_table): Converted to fdbuf.
1809
1810	* daemon/list_table.cc (list_table): Converted to fdbuf.
1811
1812	* commands/*: Converted from iostream to fdbuf.
1813
1814	* lib/cli/main.cc: Use the new "operator<<" methods of fdobuf.
1815
1816	* lib/misc/validate.cc (validate_redirect): Converted from using
1817	ostrstream to mystring for growing error messages.
1818
1819	* lib/misc/configrc.cc (read_config): Use the new "operator<<"
1820	methods of fdobuf for writing messages.
1821
1822	* lib/misc/passwdfn.cc: Converted to using fdbuf objects.
1823
18241999-03-31  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1825
1826	* lib/misc/pwcrypt.cc: Adapted these routines to using the GNU MD5
1827	library and the md5_crypt routine.
1828	(crypt_cmp): Revised the algorithm here to use the old MD5 routine
1829	only for old passcodes, md5_crypt for hashes starting with "$1$",
1830	and crypt otherwise.  This should be compatible with all
1831	implementations.
1832
1833	* lib/misc/configrc.cc (read_config): Modified to use fdibuf
1834	instead of ifstream.
1835	(cmp): Fixed logic to properly parse "STR *= *STR" instead of
1836	"STR *(=+ *)+STR".
1837
1838	* Changed the copying policy to GPL.
1839
18401999-03-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1841
1842	* Released version 0.89.1
1843
1844	* configure.in: Add a --enable-md5 flag to set USE_MD5.
1845
1846	* lib/misc/pwcrypt.cc: Imported implementation of crypt_cmp and
1847	pwcrypt from 0.87, using USE_MD5 as a selector.
1848
18491999-03-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1850
1851	* Released version 0.89
1852
1853	* daemon/main.cc (handle_connection): Move the exit(0) out of the
1854	if block so that the child always exits.
1855
1856	* daemon/fork.cc (do_fork): Bump up the fork counters in the child
1857	as well as the parent so that the accounting commands work
1858	properly.
1859
1860	* clients/bulletins.cc (stat_maildir): Fixed type: open the
1861	timestamp file for output, not the maildir.
1862
18631999-03-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1864
1865	* clients/bulletins.cc (stat_maildir): The timestamp on the "cur"
1866	directory is unreliable.  Create a zero-length ".timestamp" file
1867	and use its modification mode for last-login information.
1868
18691999-03-18  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1870
1871	* daemon/listdomain.cc (CMD): Fixed a non-incrementing loop
1872	counter.
1873
1874	* daemon/fork.cc (handle_children): Now checks for both pid == -1
1875	and pid == 0 to terminate the wait loop.
1876
1877	* lib/misc/vpwentry_putpw.cc (putpw): If the input file does not
1878	exist, skip the loop and add the record to a new output file.
1879
1880	* lib/cdb++/cdb_reader.cc (cdb_reader): Set the failed flag to the
1881	result of opening the file.
1882
1883	* lib/misc/vpwentry_putpw.cc (putpw): Fixed inverted boolean bug.
1884
1885	* daemon/lookup.cc (lookup_baseuser): Fixed bug: the pwentry
1886	pointer returned by operator[] on the pwentry_table gets deleted
1887	when the pwentry_table goes out of scope (and all kinds of weird
1888	things happen to the data).
1889
1890	* daemon/pwentry.cc (pwfile): Cache the value of pwfile for future
1891	calls.
1892
1893	* daemon/lookup.cc (lookup_baseuser): Use "right" instead of the
1894	silly pointer increment logic to get the virtual name substring.
1895
18961999-03-17  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1897
1898	* daemon/dispatch.cc (dispatch_cmd): Remove all fork handling from
1899	this routine.
1900
1901	* daemon/main.cc (handle_connection): Call do_fork immediately
1902	after accepting the connection.
1903
19041999-03-16  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1905
1906	* commands/vsetup.cc (setup_qmail_default): Set the initial value
1907	of .qmail-default to "|@BINDIR@/vdeliver".
1908
1909	* commands/vrehash.cc: Rewrote to use CDB functions.
1910
1911	* daemon/listdomain.cc (CMD): Send output to 'fd' instead of
1912	hard-coded file descriptor 2.
1913
1914	* daemon/dispatch.cc (dispatch_cmd): Pass the file descriptor to
1915	the dispatched function.
1916
1917	* daemon/main.cc (handle_connection): Modified logic to better
1918	suit the always-fork mentality.
1919
1920	* daemon/dispatch.cc (dispatch_cmd): Changed logic to always
1921	fork.
1922
1923	* At this point, all cache support in vmailmgrd has been removed,
1924	and all virtual password table functions will read CDBs.
1925
1926	* daemon/lookup.cc: Converted the functions here to using the
1927	tables instead of the caches.
1928
1929	* daemon/pwentry_table.cc (pwentry_table): Converted the
1930	implementation of pwentry_reader into this class.
1931
1932	* daemon/hash_table.h (class hash_table): Fixed a long-standing
1933	const method issue.
1934
1935	* daemon/list_table.cc (list_table): Converted the implementation
1936	of list_reader into this class.
1937
1938	* daemon/map_table.cc (map_table): Converted the implementation of
1939	map_reader into this class.
1940
1941	* daemon/listdomain.cc (CMD): Removed the use of the vpwentry
1942	cache table.
1943
1944	* lib/misc/vpwentry_get.cc (rewind_getpw): Wrote this routine to
1945	rewind an open cdb table witout re-opening it.
1946	(getpw): Converted to using autodelete.
1947
1948	* daemon/chpass.cc (CMD): Removed the use of the vpwentry cache
1949	table.
1950
1951	* daemon/lookup.cc (lookup_virtuser): Removed the use of the
1952	vpwentry cache table.
1953
1954	* daemon/pwentry.h (struct pwentry): Removed the vpwtable entry.
1955
19561999-03-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1957
1958	* lib/misc/vpwentry_*.cc: Append ".cdb" to the filename for the
1959	CDB file name.
1960
1961	* lib/misc/configrc.cc: Removed the cdb_password_file entry.
1962
19631999-03-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1964
1965	* lib/misc/vpwentry_putpw.cc (putpw): Converted to using CDB
1966	functions.
1967
1968	* commands/passwd2cdb.cc (cli_main): Converted to use to_record.
1969
1970	* lib/misc/vpwentry.cc (to_record): Wrote this one-liner to build
1971	a CDB record from the entry.
1972
1973	* lib/misc/vpwentry_delpw.cc (delpw): Converted to using CDB
1974	functions.
1975
1976	* lib/misc/vpwentry_get.cc (start_getpw): Rewrote to use
1977	vpwentry::from_record.
1978
1979	* lib/misc/vpwentry_getpw.cc (getpw_byname): Rewrote to use
1980	vpwentry::from_record.
1981
1982	* lib/misc/vpwentry.cc (from_record): Wrote this routine to build
1983	a vpwentry from a CDB record.
1984
19851999-03-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
1986
1987	* lib/misc/vpwentry_getpw.cc (getpw_byname): Converted to using
1988	CDB functions.
1989
1990	* lib/misc/vpwentry_get.cc: Converted to using CDB functions.
1991
1992	* lib/misc/configrc.cc: Added support for configuring the CDB
1993	password table name.
1994
1995	* commands/passwd2cdb.cc: Wrote this program to convert a standard
1996	virtual password table into a CDB table.  The initial record
1997	format is identical to the old to reduce library conversion
1998	issues.
1999
2000	* lib/misc/vpwentry_get.cc (start_getpw): This routine now returns
2001	bool to indicate if the table was opened successfully.
2002
2003	* Major reorganization of the libraries and header files.  All the
2004	libraries are in subdirectories under "lib", and the headers under
2005	"include" (with a pile of symlinks).
2006
20071999-03-11  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2008
2009	* Released version 0.88
2010
2011	* configure.in: Check for libinet and libsocket.
2012
20131999-03-10  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2014
2015	* doc/vmailmgr-cgi.texi (Top): Removed warning about passwords
2016	being limited to eight characters.
2017
2018	* commands/vpasswds.cc (change_one): Removed warning about
2019	passwords being truncated to eight characters.
2020
2021	* lib/passwdfn.cc (getpasswd_interactive): Removed warning about
2022	passwords being truncated to eight characters.
2023	(getpasswd_stdin): Removed another eight character warning.
2024
20251999-03-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2026
2027	* lib/pwcrypt.cc: Add a passcode type digit to the MD5 hashes on
2028	output, and check for this digit on comparison to determine what
2029	type of hashing to use.
2030
20311999-03-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2032
2033	* daemon/check.cc (CMD): Tidied up result string creation code.
2034
2035	* lib/vpwentry_getpw.cc (getpw_byname): Copied logic from getpw.
2036
2037	* lib/vpwentry_get.cc (getpw): Fixed minor logic flaws.
2038
2039	* lib-dbi/passcode.cc: Added a stub for MD5 authentication.
2040
2041	* daemon/chpass.cc (CMD): Use renamed pwcrypt.
2042
2043	* daemon/adduser.cc (CMD): Use renamed pwcrypt.
2044
2045	* commands/vadduser.cc (add_user): Use renamed pwcrypt.
2046
2047	* lib/vuser_add.cc (vuser_adduser): Use renamed pwcrypt.
2048
2049	* lib/vuser_chpass.cc (vuser_chpass): Use renamed pwcrypt.
2050
2051	* lib/pwcrypt.cc (crypt_cmp): Modified to automatically handle MD5
2052	hashed passcodes.
2053	Renamed encrypt to pwcrypt, which calls encrypt_md5 to produce MD5
2054	hashed passcodes.
2055
2056	* Completed conversion of source packaging from custom makefiles
2057	to automake.
2058
20591999-02-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2060
2061	* Released version 0.87
2062
2063	* Removed my kludged handling for building shared libraries.  This
2064	greatly simplifies the process of moving to both automake and
2065	libtool.  The executables are somewhat larger, but still come in
2066	under about 25K each (on i386 Linux).
2067
2068	* clients/bulletins.cc (scan_bulletins): Skip scanning the local
2069	bulletin directory if the user is non-virtual.
2070
2071	* clients/checkvpw.cc (struct user_data): Added a non_virtual flag
2072	to this data, indicating that the user is not a virtual user.
2073	(main): Pass the non_virtual flag into scan_bulletins.
2074
2075	* lib/ac-wait.h: Moved the #include ladder that is required to use
2076	wait(2) functions here.
2077
2078	* lib/ac-dirent.h: Moved the #include ladder that is required to
2079	use dirent functions here.
2080
2081	* lib/ac-time.h: Moved the #include ladder that is required to use
2082	time functions here, and rewrote all the files that include either
2083	<time.h> or <sys/time.h> to instead include "ac-time.h"
2084
2085	* commands/vpasswds.cc (cli_main): Removed call to srandom.
2086
2087	* commands/vpasswd.cc (cli_main): Removed call to srandom.
2088
2089	* commands/vaddusers.cc (cli_main): Removed call to srandom.
2090
2091	* commands/vadduser.cc (cli_main): Removed call to srandom.
2092
2093	* lib-cli/main.cc (main): Call srandom here to give all the CLI
2094	programs a properly initialized random function automatically.
2095
20961999-02-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2097
2098	* daemon/main.cc: All signal handlers call signal to re-enable
2099	signal handling on systems that reset signals.
2100
2101	* daemon/fork.cc (handle_children): Re-assert the SIGCHLD signal
2102	handler after a signal is received, since some systems will reset
2103	the behavior of signals after they've been received.
2104
21051999-02-22  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2106
2107	* lib-cgi/cgi-base.cc (main): Eliminated the timezone setup since
2108	it is totally unnecessary.
2109
21101999-02-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2111
2112	* lib-dbi/user.h: Moved the password validation method out of the
2113	ruser/vuser classes into struct passcode.  This class may
2114	eventually be split into multiple classes, one per passcode type.
2115
21161999-02-06  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2117
2118	* Released version 0.86
2119
2120	* clients/bulletins.cc: Changed logic in all routines to not fail
2121	if an error occurrs.
2122	(link_file): Fixed several logic flaws.
2123
21241999-01-30  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2125
2126	* clients/bulletins.cc: Completed prototype code.
2127
21281999-01-28  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2129
2130	* clients/bulletins.cc (scan_bulletins): Roughed-in bulletin
2131	scanning support.
2132
2133	* clients/checkvpw.cc (main): Added call to scan bulletins.
2134
2135	* lib/configrc.h (class configuration ): Added variables to be
2136	used to set up bulletin directories.
2137
21381999-01-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2139
2140	* commands/vadduser.cc: Modified to accept a "directory" argument
2141	of where to put the user's mailbox.
2142
21431999-01-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2144
2145	* Rewrote various sources to take advantage of new mystring
2146	library constructor functions.
2147
2148	* Inserted revised mystring library.
2149
21501999-01-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2151
2152	* Released version 0.85
2153
2154	* daemon/vpwentry_cache.cc (dirname): Fixed stupid bug -- used
2155	"right" instead of "left" to get the directory part of the
2156	filename.  This bug was introduced by the following change.
2157
2158	* All files: reworked code to remove cases where an automatic
2159	conversion from type mystring to "const char*' was expected.
2160	Instead, all the code uses the c_str() function in mystring.
2161
2162	* Added a note in the FAQ regarding the default username.
2163
2164	* lib-cli/main.cc: Rewrote the CLI library to remove dependance on
2165	the GNU libiberty getopts.
2166
21671998-12-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2168
2169	* clients/vdeliver.cc (main): Changed the default for adding the
2170	leading "From " line to false.
2171
2172	* Released version 0.84
2173
21741998-12-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2175
2176	* lib/response_read.cc (read): Removed the __GNUG__ cruft here
2177	that was only really necessary to optimize on old "mystring" use
2178	(and probably only added nearly useless complexity even then).
2179
2180	* lib/userdir.cc (userdir): Added a work-around for the apparent
2181	egcs inlining bug to fix those core dumps when running vadduser
2182	and friends.  Using egcs -finline-functions causes them to core
2183	dump, without inlining everything works OK.
2184
21851998-12-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2186
2187	* commands/vadduser.cc (cli_main): Fixed off-by-one error
2188	introduced by the use of lib-cli.
2189
21901998-12-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2191
2192	* configure.in: Added a check to determine if the C++ compiler is
2193	buggy and abort if so.
2194
21951998-12-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2196
2197	* configure.in: Modified the tests for -fno-exceptions and
2198	-fno-rtti to actually run the C++ compiler and check its result.
2199
22001998-12-02  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2201
2202	* commands/*.cc: Refitted all the command programs to use lib-cli.
2203
22041998-11-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2205
2206	* commands/vaddalias.cc: Refitted to use lib-cli.
2207
2208	* lib-cli/main.cc: Wrote a top-level command-line interface
2209	helper, which handles automatic help-screen generation, short and
2210	long argument parsing, and will eventually handle switching
2211	between "standard" command use and server-call usages.
2212
22131998-11-28  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2214
2215	* commands/listvdomain.cc: Wrote this program to list the contents
2216	of a virtual domain.
2217
2218	* configure.in: Added a somewhat poor hack to handle support for
2219	static vs shared libraries.
2220
2221	* lib/vpwentry_get.cc: added start_getpw, end_getpw, and getpw
2222	routines.
2223
22241998-11-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2225
2226	* daemon/main.cc: Fixed handling of aborted and timed out
2227	requests.  A timed out request will result in two error messages,
2228	one from the alarm, and one from the failed read.
2229
22301998-11-07  Bruce Guenter  <bguenter@hal.qcc.sk.ca>
2231
2232	* Released version 0.83
2233
2234	* doc/vmailmgr-cgi.texi: Added a section to describe the use of
2235	the listvdomain CGI.
2236
2237	* cgi/listvdomain.cc (show_dest): Split original show_user into
2238	show_dest which calls show_mbox or show_alias.
2239	(show_mbox): Modified output to show mailbox destination.
2240	(CGI_MAIN ): Accepts form inputs mboxlink and aliaslink, which are
2241	links inserted on each mailbox or alias name, with '%' replaced by
2242	the mailbox or alias name.
2243
22441998-10-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2245
2246	* daemon/main.cc (handle_connection): It appears that accept may
2247	return with an error if a signal occurred while the accept was
2248	being processed.  So, loop around accept until a valid fd is
2249	returned.
2250
22511998-10-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2252
2253	* lib/cgi-*: Moved these files into lib-cgi.
2254
22551998-10-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2256
2257	* */*.cc, */*.h: Changed all remaining instances of "const
2258	mystring&" to "mystring".
2259
22601998-09-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2261
2262	* lib/server.cc, lib/response*.cc: Changed all instances of "const
2263	mystring&" to "mystring".
2264
2265	* cgi/listvdomain.cc (CGI_MAIN ): Forgot to output a content type
2266	before the HTML content.  Fixed.
2267	(show_domain): The user list is now sorted on output.
2268
2269	* lib/cgi-args.cc: Changed all instances of "const mystring&" to
2270	"mystring".
2271
2272	* lib/cgi-base.cc: Exported content_type function.
2273	Changed all instances of "const mystring&" to "mystring".
2274
22751998-09-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2276
2277	* Released version 0.82
2278
22791998-09-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2280
2281	* daemon/main.cc (exit_fn): Check the count of active forked
2282	processes and sleep until they are all no longer active.
2283
2284	* daemon/daemon.h: Moved parts of this file into command.h and
2285	log.h.
2286
2287	* daemon/*.cc: Replaced all instances of "cout" that produce log
2288	messages with "log()" or "log(msg)".
2289
2290	* daemon/log.cc (log): Added new routine that prefixes log lines
2291	with "[pid] " if the log is being output from a child process.
2292
2293	* cgi/listvdomain.cc (show_domain): Fixed loop logic to properly
2294	truncate the buffer when repeating.  Set up the output to display
2295	a table instead of a list.
2296	(show_user): Added this routine to output a single user, doing a
2297	lookup to determine if the name is a mailbox or alias.
2298
2299	* daemon/dispatch.cc: Changed all the entries that would modify a
2300	user to be "forked" methods.
2301
23021998-09-23  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2303
2304	* daemon/listdomain.cc (CMD): write_buf returns true on success,
2305	not false.  Fixed.
2306
2307	* lib/response_message.cc (message): Fixed a minor bug: the "msg"
2308	portion of the response was treated as a NUL-terminated C string
2309	instead of as binary data, causing potential truncation when used
2310	with the listdomain facility.
2311
23121998-09-21  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2313
2314	* clients/checkvpw.cc (authenticate): Modified to handle extra
2315	maildir value in string, eliminating an extra lookup.
2316
2317	* daemon/check.cc (CMD): Modified return string to include a
2318	maildir for virtual users.
2319
2320	* daemon/fork.cc: Removed all the code that dealt with process
2321	slots to fix a race condition: the forked process could exit
2322	before the parent registers it as a child, causing the active
2323	process counts to become incorrect and eventually prevent any
2324	further forks.
2325
23261998-09-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2327
2328	* daemon/main.cc (handle_connection): Modified to use new fork
2329	logic.
2330	(usage): Added -v/-V option to usage message.
2331
2332	* daemon/dispatch.cc (dispatch_cmd): Fixed logic of "did_fork"
2333	flag to become two flags: needs_write and needs_exit.
2334
2335	* daemon/main.cc (main): Removed use of atexit(exit_fn) to
2336	automatically remove the socket file, since it must not be removed
2337	when exiting from a forked routine.
2338
2339	* daemon/dispatch.cc (dispatch_cmd): dup2 returns -1, not
2340	non-zero, on error.  Fixed.
2341
2342	* doc/vmailmgr.pod: Added the full list of programs that are part
2343	of this package to a "SEE ALSO" list.
2344
23451998-09-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2346
2347	* clients/checkvpw.cc (main): Fixed design flaw in the "missing
2348	maildir" design caused by setting the MAILDIR environment variable
2349	before checking for the existance of the maildir.
2350	(find_maildir): Changed search logic -- if no matching string is
2351	found, indicate that the last argument is the "maildir" argument.
2352	(main): Removed several redundant checks that were a result of the
2353	above change.
2354
23551998-09-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2356
2357	* lib/response_read.cc (read_response): Fixed the missing "break"
2358	in the switch statement.
2359
23601998-09-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2361
2362	* daemon/main.cc (handle_intr): Ignore PIPE signals while exiting,
2363	as there is a potential for an infinite loop to occur if stdout is
2364	a pipe that closes before this program exits.
2365
23661998-09-05  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2367
2368	* lib/response_read.cc (receive_string): Moved this routine here
2369	from lib/server.cc.
2370	(read): Moved the former implementation of response::response(int)
2371	into a static read_response routine, and renamed it response::read.
2372
2373	* lib/server.cc: Fixed several compile bugs.
2374
2375	* cgi/listvdomain.cc: Fixed compile bugs, still not tested.
2376
23771998-08-21  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2378
2379	* cgi/listvdomain.cc (CGI_MAIN ): Completed the preliminary
2380	implementation of this CGI.
2381
2382	* lib/server.cc (call): Modified to use the new response
2383	constructor to read the response from the client.
2384
2385	* lib/response.h (struct response): Added a constructor to read
2386	the data from a file descriptor.
2387
23881998-08-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2389
2390	* daemon/lookup.cc (lookup_and_validate): Fixed the behavior when
2391	the password table contains a "default" user, the requested user
2392	does not exist, and the "mustexist" flag is set.
2393
23941998-07-31  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2395
2396	* cgi/listvdomain.cc: Started this CGI program to list the users
2397	in a virtualdomain, using the new "listdomain" server function.
2398
2399	* lib/server.h (class server_call): Added a routine 'socket' to
2400	return the open socket.
2401
2402	* lib/server.cc (call): Modified to record the file descriptor for
2403	the connection and to close it when the server_call is destructed.
2404
24051998-07-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2406
2407	* daemon/dispatch.cc (dispatch_cmd): In the case of a forked
2408	dispatch, move the output to fd #2 (usually stderr), to give it a
2409	constant location.
2410
2411	* lib/response.h (struct response): Added the 'maxsize' constant
2412	representing the maximum size of any one transmitted message.
2413
2414	* daemon/listdomain.cc (CMD(listdomain)): Completed implementation
2415	of this command.
2416
2417	* daemon/lookup.cc: Moved the functions is_local and find_virtual
2418	into this file from dispatch.cc.
2419
24201998-07-21  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2421
2422	* daemon/listdomain.cc (CMD(listdomain)): Started building this
2423	routine to list the users in a virtual domain.
2424
24251998-07-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2426
2427	* daemon/main.cc (parse_options): Added support for a "verbose"
2428	flag.
2429
2430	* daemon/fork.cc (do_fork): Wrote this new routine to fork a new
2431	process and record its pid in a table (if slots are available in
2432	the table).
2433	(handle_children): Wrote this new routine to handle any children
2434	that were forked and have exited.
2435
2436	* daemon/main.cc (handle_connection): Added support for commands
2437	that cause forked connections.
2438
2439	* lib/configrc.h (class configuration ): Added new configuration
2440	variable "max_fork" -- the maximum number of forked processes to
2441	handle.
2442
2443	* daemon/main.cc (handle_connection): Modified this routine to
2444	simply close the socket fd and continue if the previous operation
2445	forked (the other "half" of the fork will handle the output).
2446
2447	* daemon/dispatch.cc (struct dispatch ): Added a field to this
2448	structure to indicate that the operation needs to fork.
2449
24501998-07-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2451
2452	* Released version 0.80
2453
2454	* clients/checkvpw.cc (getdata): Fixed a longstanding error in
2455	setting the password/stamp fields.  Fortunately, this error had no
2456	impact at all on the data we use, but would have been immediately
2457	visible if we were to try to use the timestamp.
2458
2459	* daemon/lookup.cc (lookup_virtuser): Added code to look up a
2460	default user if the lookup of a named user fails.
2461
2462	* lib/configrc.h (class configuration ): Added a new configuration
2463	variable "default_username".
2464
2465	* clients/vdeliver.cc (build_command): Fixed a bug that would
2466	cause an infinite loop when delivering to multiple destinations.
2467	(build_command): Moved the appending of the hostname from enqueue
2468	into here, to allow it to be added on each recipient.
2469
24701998-06-17  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2471
2472	* doc/vrehash.pod: Started man page for vrehash.
2473
2474	* commands/vrehash.cc: Wrote this program to move all users
2475	directories around into the proper hashed directory (see the man
2476	page).
2477
2478	* commands/vpasswds.cc (change_one): Fixed incorrect status
2479	message (was "vpasswd:" should be "vpasswds:").
2480
24811998-06-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2482
2483	* lib/maildir.cc (make_maildir): Modified this routine to make all
2484	the directories leading up to the named directory.
2485
2486	* lib/configrc.h (class configuration ): Added the fields
2487	user_dir_bits and user_dir_slices to support userdir.
2488
2489	* lib/vuser_add.cc (vuser_add): Modified an error message to make
2490	it more informative.
2491
2492	* daemon/pwentry.cc (user_dir_abs): Modified to use userdir.
2493	(user_dir_rel): Modified to use userdir.
2494
2495	* lib/vuser_add.cc (vuser_adduser): Modified to use userdir.
2496
2497	* lib/userdir.cc (userdir): Wrote this routine, which produces a
2498	relative user directory name, including a hashed-out path and
2499	subdirectories, from a username.
2500
25011998-06-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2502
2503	* clients/checkvpw.cc (main): Added a test to check if the user's
2504	maildir exists and, if not, set the maildir to the configured
2505	"error_maildir" string.
2506
2507	* daemon/main.cc (handle_intr): Fixed shutdown logic to handle
2508	both cases: interrupted while handing a connection, or while
2509	waiting for a connection.
2510
2511	* lib/configrc.h (class configuration ): Added new configuration
2512	variable "error_maildir", which is a read-only maildir that
2513	contains an error mail message.
2514
25151998-06-11  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2516
2517	* lib/configrc.cc (configuration): Commented out the code to read
2518	a local configuration file.
2519
2520	* lib/configrc.h: Moved the DEFAULT_* definitions out of here and
2521	into configrc.cc again.
2522
2523	* Backed out all the vdomain and configuration patches, in order
2524	to fix all the confusion I had been generating.
2525
2526	* daemon/main.cc (main): Changed the "interrupt" logic to exit
2527	after the current request instead of potentially exiting during
2528	the request (and leaving files in a indeterminate state).
2529
25301998-06-09  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2531
2532	* daemon/vdomain.h (struct vdomain): Added a "config" item to this
2533	class.
2534
25351998-06-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2536
2537	* daemon/state.h (class saved_state): Added code to effectively
2538	push/pop a local configuration when entering a saved_state.
2539
2540	* */*.cc: Changed the use of the "config" variable to account for
2541	it being a pointer.
2542
2543	* commands/*.cc: Added the line "config = local_config();" to the
2544	main routine before anything else is executed.
2545
2546	* lib/configrc.cc (local_config): Added this routine to create a
2547	local configuration based on the given home directory.
2548
2549	* lib/configrc.h: Moved the DEFAULT_* definitions out of here and
2550	into configrc.cc (the only place they are referenced).
2551	Modified the constructors to support "stacking" of configurations.
2552	Made the global "config" variable into a pointer to allow it to
2553	change.
2554
2555	* daemon/vdomain.h (struct vdomain): Wrote this new structure to
2556	encapsulate a virtual domain.  These domains are stored in a hash
2557	table "vdomains", indexed by base directory.
2558
2559	* daemon/chpass.cc, daemon/lookup.cc: Adjusted to use the new
2560	vdomains global.
2561
2562	* daemon/pwentry.h (struct pwentry): Removed the vpwentry_cache
2563	from this structure.  This will eliminate the expensive lookups at
2564	startup (the file "passwd" is looked up for each real user) and a
2565	significant amount of memory overhead.
2566
25671998-06-05  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2568
2569	* Released version 0.79
2570
25711998-06-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2572
2573	* lib/passwdfn.cc: Got rid of __GLIBC__ ifdef for crypt.h
2574
2575	* lib/pwcrypt.cc: Got rid of __GLIBC__ ifdef for crypt.h
2576
25771998-05-31  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2578
2579	* lib/configrc.h: Removed the comment regarding DO_SHADOW.
2580
2581	* daemon/pwentry_cache.cc: Modified the reader to make only a
2582	single pass through the password and shadow password files.
2583
2584	* lib/configrc.h: Renamed lib/config.h to this to avoid name
2585	conflicts with the autoconf/configure-generated config.h.
2586
2587	* various: Fixups mandated by the use of autoconf.
2588
25891998-05-29  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2590
2591	* daemon/dispatch.cc: Made the "echo" daemon command conditionally
2592	compiled if TEST_DAEMON is defined.
2593
2594	* daemon/vpwentry_cache.cc: Added code to log when the virtual
2595	password caches are loaded/reloaded.
2596
2597	* daemon/pwentry_cache.cc: Added code to log when the password
2598	cache is loaded/reloaded.
2599
2600	* commands/vsetup.cc (setup_passwd): Modified to use the new
2601	postmaster config variables.
2602
2603	* lib/config.cc (read_config): Changed the "postmaster"
2604	configuration variable into "postmaster_email" and added
2605	"postmaster_aliases".
2606
26071998-05-27  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2608
2609	* Released version 0.78
2610
2611	* lib/vpwentry_putpw.cc (putpw): Fixed logic to deal with an
2612	existant but non-readable original password file.
2613
2614	* lib/vuser_add.cc (vuser_add): Changed the order of creating the
2615	maildir and adding the user to the passwd file.  This allows the
2616	maildir to be erased if adding the user fails, since the newly
2617	created maildir is guaranteed to be empty.
2618
2619	* lib/maildir.cc (make_maildir): Modified the code to remove any
2620	newly-created directories if creation of any directory fails.
2621
2622	* lib/passwdfn.cc (getpasswd_stdin): Changed use of "gets" to
2623	"cin.get".
2624
26251998-05-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2626
2627	* commands/vpasswd.cc (main): Changed the "fprintf" to use
2628	IOStreams.
2629
2630	* lib/passwdfn.cc (getpasswd_*): Print a warning if the password
2631	is longer than 8 characters.
2632
2633	* commands/vpasswds.cc: Wrote this new program to change the
2634	passwords of a list of users.  The input for this list is taken
2635	from standard input and is of the form "name password".  Anything
2636	following the password is ignored.
2637
2638	* lib/config.cc: Added a new configuration item: postmaster.
2639
2640	* commands/vadduser.cc (main): Removed the call to setup.
2641
2642	* commands/vaddusers.cc (main): Removed the call to setup.
2643
2644	* commands/vsetup.cc: Wrote this program to set up a new virtual
2645	domain with the proper ".qmail-default" file and a users
2646	directory, along with some useful system aliases.
2647
2648	* daemon/vpwentry_cache.cc (write): Use "rename" system call.
2649
2650	* lib/vpwentry_putpw.cc (putpw): Use "rename" sytem call.
2651
2652	* lib/vpwentry_delpw.cc (delpw): Use "rename" system call instead
2653	of "unlink/link/unlink" combination to guarantee atomicity of the
2654	operation.
2655
2656	* commands/_setup.cc (setup): Moved this routine out of
2657	vadduser.cc so that it could be shared with vaddusers.cc.  It
2658	should probably go into the shared library under a different
2659	name.
2660
2661	* commands/vaddusers.cc: Wrote this new program that adds a list
2662	of users.  The input for this list is taken from standard input
2663	and is of the form "name password [alias ...]".
2664
2665	* lib/vpwentry_putpw.cc (putpw): Fixed a bug in the logic that
2666	prevented the temporary password file from being renamed to a
2667	non-existant original file.
2668
26691998-05-25  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2670
2671	* Released version 0.77
2672
2673	* lib/vpwentry_putpw.cc (putpw): Fixed bug that would cause a
2674	failed addition to leave behind a temporary file as well as merged
2675	the case if the file does not already exist.
2676
26771998-05-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2678
2679	* daemon/pwentry_cache.cc: Fixed this code to deal with shadow
2680	passwords.  Thanks to Andrew Gillespie for the initial patch to
2681	show the problems.  The new code properly deals with caching both
2682	the contents of /etc/shadow and /etc/passwd, as well as handling
2683	the case where shadow passwords don't exist.
2684
26851998-05-22  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2686
2687	* Released version 0.76
2688
2689	* daemon/file_cache.h (write_file): Call force_valid to avoid
2690	having to re-read the cached table immediately after having
2691	written its contents.  Do this _before_ unlocking the directory to
2692	avoid a race condition.
2693
2694	* daemon/file_cache.cc (force_valid): Added this routine to force
2695	the cache state to indicate that the file is valid (if the file is
2696	present).
2697
26981998-05-15  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2699
2700	* daemon/dispatch.cc (find_virtual): Fixed bug preventing use of
2701	wildcards in virtualdomains.
2702
27031998-05-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2704
2705	* daemon/vpwentry_cache.cc (write): Set the new file mode to 0600.
2706
2707	* lib/vpwentry_putpw.cc (putpw): Set the new file mode to 0600,
2708	not 0700 (no execute bit).
2709
27101998-05-12  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2711
2712	* daemon/vpwentry_cache.cc (operator): Modified code to delete
2713	entries that fail insertion into the table (ie duplicates).
2714
2715	* daemon/chpass.cc (CMD): Removed the calls to begin/end_modify.
2716
2717	* daemon/file_cache.h (file_cache_writer::write_file): Removed the
2718	begin/end_modify routines and bundled them into this routine.
2719
27201998-05-11  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2721
2722	* daemon/vpwentry_cache.cc (unlock): Fixed bug in unlocking the
2723	directory.
2724
2725	* daemon/chpass.cc (CMD): Modified to use the file cache to modify
2726	the password table instead of the vuser_chpass routine.
2727
27281998-05-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2729
2730	* Released version 0.75
2731
2732	* daemon/main.cc (TIMEOUT): Changed the connection timeout to one
2733	second, as values larger than that are useful only for debugging
2734	the connection handling code.
2735
2736	* lib/vpwentry_putpw.cc (putpw): Modified to use '\n' instead of
2737	the endl operator to mark line ends.
2738
2739	* lib/vpwentry_delpw.cc (delpw): Modified to use '\n' instead of
2740	the endl operator to mark line ends (allows the output stream to
2741	properly buffer writes).
2742
27431998-05-07  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2744
2745	* clients/checkvpw.cc, clients/vdeliver.cc: Moved these to files
2746	from "commands" to the "clients" subdirectory
2747
2748	* daemon/pwentry_cache.cc (operator): Convert the user names to
2749	lowercase before inserting.
2750
2751	* daemon/vpwentry_cache.cc (operator): Fixed bug: make the
2752	virtual users' names lowercase before inserting into the table.
2753
2754	* daemon/check.cc (CMD): Fixed bug: initialize virtpw pointer.
2755
2756	* daemon/lookup.cc (lookup_maildir): Removed obsolete routine.
2757	(CMD): Fixed bug: must initialize the pointers that previously
2758	used autodelete.
2759
2760	* daemon/vpwentry_cache.cc (operator): Fixed a bug that caused the
2761	password and destination strings to be both stored in the password
2762	field.
2763
2764	* daemon/file_cache.cc (validate_cache): Check both the last
2765	modification time on the file and the inode number to determine if
2766	the file has changed.
2767
2768	* daemon/*.cc: Changed all variables of type "autodelete<vpwentry>"
2769	back to type "vpwentry*".
2770
2771	* daemon/pwentry.cc: Removed the "getpw_byname" routine, now
2772	obsoleted by the pwentry_cache.
2773
2774	* daemon/lookup.cc (lookup_virtuser): Modified to handle the new
2775	vpwtable cache in the pwentry.
2776
2777	* daemon/pwentry.cc (pwentry): Initialize the vpwtable on
2778	creation.
2779
2780	* daemon/pwentry.h (struct pwentry): Added a vpwentry_cache to
2781	this object.
2782
2783	* daemon/vpwentry_cache.cc (write): Changed the end-of-line marker
2784	from endl to "\n", as endl will cause the buffer to be flushed.
2785
2786	* daemon/main.cc (read_data): Removed support for protocol one
2787	requests (which allows me to remove one more read syscall from the
2788	fast path, shrinking it down to a total of two reads).
2789
27901998-05-06  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2791
2792	* daemon/main.cc (read_data): Modified to read messages using
2793	either protocol one or two.
2794
2795	* lib/server.cc (build_msg): Modified to build messages using
2796	protocol 2.
2797
2798	* daemon/qmail.*: Removed these obsolete source files.
2799
2800	* daemon/dispatch.cc (find_virtual): Wrote this routine that
2801	mimics the old behavior of find_virtual from qmail.cc to find a
2802	mapping from a virtual domain name to a prefix, using a map_cache
2803	on control/virtualdomains.
2804
2805	* daemon/file_cache.h (class file_cache): Modified the behavior to
2806	automatically load the cache on construction, instead of waiting.
2807
2808	* daemon/map_cache.h: Wrote the classes for map_cache, a generic
2809	qmail-style map-file cache (the key and value pair is separated by
2810	a colon, one per line).
2811
2812	* daemon/list_cache.h: Renamed locals_cache to list_cache, as a
2813	generic list-file cache class.
2814
2815	* daemon/dispatch.cc (is_local): Fixed to check the cached result.
2816
2817	* daemon/file_cache.cc: Moved the actual code for file_cache_base
2818	here.
2819
2820	* daemon/file_cache.h (class file_cache_base): Created this class
2821	to contain the common code in the file_cache template.
2822
2823	* daemon/lookup.cc (lookup_baseuser): fixed the lookup to only
2824	read the cached "pwentries" object once per invocation, and to
2825	check the result.
2826
2827	* daemon/qmail.cc (is_local): Removed this routine, as its
2828	functionality can be duplicated with a locals cache.
2829
2830	* daemon/locals_cache.cc: Wrote this object to cache the "locals"
2831	table used by qmail to determine what domains are "local".
2832
2833	* daemon/qmail.cc: Moved this object here from lib.
2834
2835	* daemon/*.cc: Changed all variables of type "autodelete<pwentry>"
2836	back to type "pwentry*", as the lookup functions that would set
2837	these variables now return non-deletable references.
2838
2839	* daemon/lookup.cc: Modified the various lookup routines that look
2840	up base users to use the pwentries cache.
2841
2842	* daemon/file_cache.h:
2843	* daemon/hash_table.h:
2844	* daemon/crc32.h:
2845	* daemon/crc32.cc:
2846	* daemon/crc_hash.h:
2847	* daemon/pwentry_cache.cc:
2848	* daemon/pwentry_cache.h:
2849	* daemon/vpwentry_cache.cc:
2850	* daemon/vpwentry_cache.h: Merged from temporary development
2851	tree.  Current functionality consists of a generic hash table,
2852	mapping from mystring keys to generic objects; a file cache that
2853	will automatically reload a cached object only when necessary; and
2854	specific code for building caches of the base user password table
2855	(pwentry_cache) and virtual password tables (vpwentry_cache).
2856
2857	* lib/vpwentry_putpw.cc (putpw): Now opens the temporary file with
2858	"noreplace" to avoid races, and mode 0700.
2859
2860	* lib/vpwentry_delpw.cc (delpw): Now opens the temporary file with
2861	"noreplace" to avoid races, and mode 0700.
2862
28631998-05-04  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2864
2865	* daemon/pwentry.*: Moved these files here from lib, as no other
2866	module uses them.
2867
2868	* lib/pwentry.cc (getpw_byname): Moved this function here from
2869	pwentry_getpw.cc.
2870
2871	* lib/vpwentry_delpw.cc: Renamed this file from pwentry_delpw.cc
2872
2873	* lib/vpwentry_putpw.cc: Renamed this file from pwentry_putpw.cc
2874
2875	* lib/vpwentry_getpw.cc: Added the getpw_byname function from
2876	pwentry_getpw.cc.
2877
2878	* lib/pwentry_getpw.cc: Removed the vpwentry function.
2879
28801998-05-03  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2881
2882	* lib/vuser.h: Only include "vpwentry.h", not "pwentry.h"
2883
2884	* lib/vpwentry.cc: Moved the vpwentry constructors and destructors
2885	here.
2886
2887	* lib/pwentry.cc: Removed the vpwentry portions.
2888
2889	* lib/pwentry.h: Removed the portions that only deal with
2890	vpwentry's.
2891
2892	* lib/vpwentry.h: Split the portions of pwentry.h that only deal
2893	with vpwentry's into this file.
2894
2895	* spec: Forgot to add a call to "ldconfig" in %post.
2896
28971998-04-24  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2898
2899	* Released version 0.74.
2900
29011998-04-23  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2902
2903	* daemon/chpass.cc (CMD): modified to use save_state.
2904
2905	* daemon/deluser.cc (CMD): modified to use save_state.
2906
2907	* daemon/delalias.cc (CMD): modified to use save_state.
2908
2909	* daemon/addalias.cc (CMD): modified to use save_state and
2910	lookup_and_validate.
2911
2912	* daemon/adduser.cc (CMD): Modified to use save_state.
2913
2914	* daemon/state.h (class saved_state): Created this class from
2915	saved_uidgid -- it also does a chdir to the user's home
2916	directory.  By doing so, it allows the use of relative paths as if
2917	operating as the given user.
2918
2919	* daemon/lookup.cc (lookup_and_validate): Modified to optionally
2920	create a new vpwentry if the named virtual shouldn't and doesn't
2921	exist yet.
2922
2923	* daemon/adduser.cc (CMD): Modified to use lookup_and_validate and
2924	pwentry::user_dir_rel.
2925
2926	* lib/pwentry.cc (user_dir_rel, user_dir_abs): Created these two
2927	routines that return the relative (to home) and absolute directory
2928	name of a new virtual user's directory according to the configured
2929	user_dir parameter.
2930
2931	* commands/checkvpw.cc: Added function declarations missing on
2932	Solaris.
2933
2934	* commands/vdeliver.cc: Added function declarations missing on
2935	Solaris.
2936
2937	* lib/cgi-base.cc: Added function declarations missing on Solaris.
2938
2939	* commands/vpasswd.cc: Added function declarations missing on
2940	Solaris.
2941
2942	* commands/vadduser.cc: Added function declarations missing on
2943	Solaris.
2944
2945	* lib/pwcrypt.cc: Added function declarations missing on Solaris.
2946
2947	* daemon/dispatch.cc (dispatch_cmd): Add the domain name to the
2948	error message for an invalid domain name, as the request won't
2949	have been printed by the time this happens.
2950
29511998-04-21  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2952
2953	* commands/vadduser.cc (add_alias): Fixed bug: this routine
2954	previously looked up the user name instead of the alias when
2955	checking for the existance of the alias.
2956
2957	* lib/validate.cc (validate_field): Fixed bug: find_first returns
2958	-1 if nothing is found, not zero.
2959
2960	* commands/vadduser.cc (add_alias): No longer necessary to add the
2961	'&' prefix.
2962
2963	* commands/vaddalias.cc (main): No longer neccessary to add the
2964	'&' prefix.
2965
2966	* lib/vuser_add.cc (vuser_addalias): Automatically prepend a '&'
2967	to the destination.
2968
2969	* daemon/addalias.cc (CMD(addalias)): Call validate_redirect
2970	before adding the alias.
2971
29721998-04-17  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2973
2974	* commands/vaddalias.cc (main): Removed the destination validation
2975	code from this program and made it call validate_redirect.
2976
2977	* lib/validate.cc (validate_redirect): Created this routine to
2978	validate a redirect destination.
2979
29801998-04-16  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2981
2982	* lib/validate.cc (validate_username): Revised this to disallow
2983	'/' in user names.
2984
2985	* vmailmgr.conf.sample: Added notes regarding which component(s)
2986	uses each of the listed settings.
2987
2988	* lib/config.h: Removed the macro definitions that just served as
2989	aliases for parts of the configuration class.
2990
29911998-04-14  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
2992
2993	* daemon/lookup.cc: Removed the 'userlookup' routine.
2994
2995	* lib/maildir.cc (make_maildir): Moved this routine here from
2996	vuser_add.
2997	(delete_maildir): Moved this routine here from vuser_deluser,
2998	renamed from deltree.
2999
30001998-04-13  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3001
3002	* lib/vuser_add.cc (vuser_add): Use validate routines instead of
3003	hard-coded checks.
3004	(vuser_adduser): Renamed the simple vuser_add to vuser_adduser to
3005	avoid confusion between the two vuser_add routines.
3006
3007	* lib/validate.cc (validate_username): Wrote this routine to
3008	ensure that a username is valid; returns true if so.
3009
3010	* daemon/delalias.cc (CMD(delalias)): Switched from userlookup to
3011	lookup_and_validate.
3012
3013	* daemon/addalias.cc (CMD(addalias)): Switched from userlookup to
3014	lookup_{baseuser,virtuser}.  Removed check for invalid alias name
3015	(already done by vuser_addalias).
3016
3017	* daemon/deluser.cc (CMD(deluser)): Switched from userlookup to
3018	lookup_and_validate.
3019
3020	* daemon/adduser.cc (CMD(adduser)): Switched from userlookup to
3021	lookup_{baseuser,virtuser}.  Removed check for invalid user name
3022	(already done by vuser_add).  Removed duplicated code from
3023	vuser_adduser.
3024
3025	* daemon/check.cc (CMD(check)): Switched from userlookup to
3026	lookup_{baseuser,virtuser}.
3027
3028	* daemon/chpass.cc (CMD(chpass)): Switched from userlookup to
3029	lookup_and_validate.
3030
3031	* daemon/lookup.cc (lookup_and_validate): Wrote this routine,
3032	which looks up base and virtual users and validates them,
3033	replacing several lines of common code in many of the interfaces.
3034
3035	* commands/checkvpw.cc (main): Use the separators configuration
3036	item instead of just '@'.
3037
3038	* lib/config.cc (read_config): Added a new configuration option,
3039	"separators", which lists valid separators between the user name
3040	and virtual domain name when logging in via checkvpw.  Defaults to
3041	"@:"
3042
3043	* lib/mystring.cc (find_first): Added this routine, finds the
3044	first character that matches any one in a set.
3045
3046	* daemon/lookup.cc (userlookup): Split this function into its two
3047	parts, lookup_baseuser and lookup_virtuser.
3048
30491998-04-11  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3050
3051	* commands/vaddalias.cc (main): Modified this code to handle (and
3052	check) multiple recipients.
3053
3054	* commands/vdeliver.cc (enqueue): Split this routine into three
3055	parts, and added the functionality to deal with multiple
3056	recipients in a destination address (separated by commas).
3057
30581998-04-08  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3059
3060	* commands/vdeliver.cc (enqueue): Changed the calls to setenv to
3061	equivalent calls to putenv, as some system's don't have setenv.
3062
3063	* commands/checkvpw.cc (set_environ): Changed the calls to setenv
3064	to equivalent calls to putenv, as some system's don't have setenv.
3065
30661998-04-05  Bruce Guenter  <bguenter@hal.qcc.sk.ca>
3067
3068	* Released version 0.73
3069
3070	* commands/vdeliver.cc (main): Fixed bug with handling of ??LINE
3071	environment variables (local variables had erroneously overridden
3072	previously global variables).
3073
3074	* vmailmgr-cgi.texi: Filled in the details for the form fields of
3075	vpasswd.
3076
3077	* cgi/*.cc: Remove the "CGI_INPUT" lines for "vdomain" and
3078	"password", as they are defined by the top-level CGI constructor.
3079
3080	* lib/cgi-base.cc (CGI): Add "vdomain" and "password" to the list
3081	of fields that are automatically retrieved for all the CGIs, as
3082	all CGIs will operate on a virtual domain, and all require a
3083	password.
3084
30851998-04-02  Bruce Guenter  <bguenter@hal.qcc.sk.ca>
3086
3087	* vmailmgr-cgi.texi: Started writing documentation on how to
3088	configure the CGI programs.
3089
30901998-04-01  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3091
3092	* HOWTO.texi: Started writing instructions on how to do certain
3093	tasks with vmailmgr.
3094
30951998-03-31  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3096
3097	* lib/config.cc (read_config): Rewrote this routine to only go
3098	through the file once (instead of once per variable), and to print
3099	out errors on invalid lines.
3100
31011998-03-29  Bruce Guenter  <bguenter@hal.qcc.sk.ca>
3102
3103	* various: Use pwentry::pwfile and pwentry::user_dir in place of
3104	computing their values repeatedly.
3105
3106	* lib/pwentry.cc (pwentry::pwfile): Wrote this routine, returns
3107	the password file name for the given base user.
3108	(pwentry::user_dir): Returns the user directory for the given base
3109	user.
3110
3111	* lib/config.cc (post_process): Wrote this routine to "tidy up"
3112	some of the configuration strings, such as directories that should
3113	always have a trailing slash ('/').
3114
3115	* lib/config.h: Change all the defined configuration macros
3116	(except for DO_SHADOW) to their configuration variables.
3117
3118	* various: Treat the configuration defines as variables instead of
3119	as constant strings.
3120
3121	* lib/config.cc (configuration): Initialize all the strings to
3122	default values.
3123
31241998-03-28  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3125
3126	* lib/config.cc: Started this module, which can read a
3127	configuration file for default values at runtime.  The default
3128	configuration initialization will read both a global configuration
3129	file and a local one.
3130
31311998-03-26  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3132
3133	* Released version 0.72
3134
3135	* commands/vdeliver.cc (main): Fixed the bug that caused empty
3136	environment variables (valid) to be treated as non-existant
3137	environment variables.  This caused bounces to vdeliver to double
3138	bounce.
3139
3140	* Released version 0.71
3141
31421998-03-22  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3143
3144	* cgi/*.cc: Use "msg", not "message()" from the response as the
3145	error response message.
3146
3147	* lib/cgi-args.cc (get_parts): Strings weren't being terminated
3148	properly before being set.  Fixed.
3149
31501998-03-20  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3151
3152	* daemon/dispatch.cc: Added entries for deluser, delalias, and
3153	addalias.
3154
3155	* daemon/delalias.cc (CMD(delalias)): Wrote this routine to delete
3156	an alias.
3157
3158	* daemon/addalias.cc (CMD(addalias)): Wrote this routine to add an
3159	alias.
3160
3161	* cgi: Merged in all the code and libraries for CGI programs into
3162	the standard build.  At this point, there is a basic framework
3163	that all CGI programs will use, which includes a mechanism that
3164	automatically pulls the inputs from a POST form, and a base class
3165	that is executed on startup.  The CGI module defines the routine
3166	CGI_MAIN, which is executed by the program startup code.  The CGI
3167	module should call either error() or success() at the end of its
3168	execution, which will handle printing out an appropriate message.
3169	All of the v* programs (vpasswd, vadduser, vdeluser, vaddalias,
3170	and vdelalias) have a CGI equivalent.
3171
3172	* daemon/deluser.cc (CMD(deluser)): Wrote this routine to delete a
3173	user.
3174
31751998-03-19  Bruce Guenter  <bguenter@mikhail.qcc.sk.ca>
3176
3177	* lib/server.cc: include un.h
3178
3179	* daemon/main.cc: include un.h
3180
3181	* lib/un.h: Wrote this header to define SUN_LEN and to include
3182	necessary things for doing sockets.
3183
3184	* daemon/main.cc (make_socket): Split the code to create a socket
3185	into this routine; fixed the permissions bug that caused the
3186	socket to be created without other-write permission when launched
3187	with a non-zero umask.
3188
3189	* Released version 0.70
3190
3191