Tue Oct 17 09:46:46 2000  Nick Burrett  <nick@dsvr.net>

	* group.c (vsd_groupadd): Set return code to 14 if there
	are no more gids.
	* passwd.c (vsd_useradd): Likewise but for uids.
	(vsd_usermod): Likewise.

Thu Sep 14 11:14:55 2000  Nick Burrett  <nick@dsvr.net>

	Compile files for FreeBSD.
	* getopt.c: New file.
	* getopt1.c: New file.
	* getopt.h: New file.
	
	* Makefile.in (COMPAT_OBJS): Move compat directory object
	files to here from $(OBJS). Add getopt.o and getopt1.o.
	(libvsd.a): Add $(COMPAT_OBJS).
	(compat/getopt.o): Add dependencies.
	(compat/getopt1.o): Add dependencies.
	* map.c: Include sys/types.h.
	(vsd_getppid [TARGET_FREEBSD]): Parent pid seems to have
	moved to another structure.
	
Mon Sep  4 16:12:15 2000  Nick Burrett  <nick@dsvr.net>

	* user.c (vsd_valid_vsname): Allow userscores and hyphens.

Thu Aug  3 15:30:17 2000  Nick Burrett  <nick@dsvr.net>

	* user.c (vsd_check_ip_address): New function.
	* libvsd.h (vs_check_ip_address): Declare.

Thu Aug  3 14:51:13 2000  Nick Burrett  <nick@dsvr.net>

	* log.c (vsd_log_error): Add VSD_LOG_PROTOCOL.
	* libvsd.h (VSD_LOG_PROTOCOL): Define macro.

Thu Aug  3 10:36:44 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (vsd_map_add_ipalias): New function.
	(vsd_map_delete_ipalias): New function.
	* libvsd.h (vsd_map_add_ipalias): Add declaration.
	(vsd_map_delete_ipalias): Add declaration.

Tue Aug  1 15:10:11 2000  Nick Burrett  <nick@dsvr.net>

	* group.c (vsd_groupmod): Increment pointer `p' to stop two
	infinite loops.

Mon Jul 31 15:13:00 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (read_virtualserver): Zero-initialise structure.  This fixes
	a certain amount of instability in inetd.
	(read_partition): Likewise.
	(vsd_map_free): Remove change in last entry - we were freeing the
	correct number of partitions/servers but the crash was caused by
	not zero-initialising the structure to start with.

Fri Jul 28 16:22:38 2000  Nick Burrett  <nick@dsvr.net>

	Fix memory leaks.
	* file.c (vsd_load_file): Free temporary buffers.
	(vsd_save_file): Free temporary buffer. 
	* map.c (read_partition): Free argv.
	(read_global): Free argv.
	(read_virtualserver): Free argv.
	(vsd_map_read): Free vsconf.
	(vsd_map_free): We were freeing too many partitions and too many
	servers.
	(main): A quick memory leak tester.

Wed Jul 26 14:28:22 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (vsd_getmapent): Fix SEGV caused by incorrectly dereferencing
	ipalias.
	(vsd_map_change_server_ip): Likewise.

Tue Jul 25 12:25:24 2000  Nick Burrett  <nick@dsvr.net>

	* VSD.pm (vsd_map_read): Don't match IP with AliasIP.

Wed Jul 19 09:37:14 2000  Nick Burrett  <nick@dsvr.net>

	* user.c (vsd_valid_username): Allow underscores in user names.

Wed Jul 12 09:46:21 2000  Nick Burrett  <nick@dsvr.net>

	* quota.c (vsd_quota_get): Return 0 if quota file doesn't
	exist.

Mon Jul 10 15:27:38 2000  Nick Burrett  <nick@dsvr.net>

	* user.c (simplify_pathname): New function.
	(vsd_check_and_make_path): New function.
	* libvsd.h (vsd_check_and_make_path): Declare.

Tue Jul  4 15:15:35 2000  Nick Burrett  <nick@dsvr.net>

	* VSD.pm (vsd_map_list): New function.

Fri Jun 30 12:19:38 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (read_virtualserver): Replace inet_aton with vsd_ip_aton.
	(vsd_map_save): Don't dereference field for VS IP.
	(vsd_map_add_server): Replace inet_aton with vsd_ip_aton.  Don't
	reference field for VS IP.

Fri Jun 30 11:13:50 2000  Nick Burrett  <nick@dsvr.net>

	* Makefile.in (install): Create directory $(datadir).

Fri Jun 30 10:45:02 2000  Nick Burrett  <nick@dsvr.net>

	* argv.c (vsd_argv_parse): Change argument size_t* to int*.
	* libvsd.h (vsd_argv_parse): Fix prototype.

Fri Jun 30 10:23:09 2000  Nick Burrett  <nick@dsvr.net>

	* config.guess: Delete file.
	* config.sub: Delete file.
	* install-sh: Delete file.

Wed Jun 28 17:23:47 2000  Nick Burrett  <nick@dsvr.net>

	* Version 1.4.2 released.

Wed Jun 21 10:36:03 2000  Nick Burrett  <nick@dsvr.net>

	* Version 1.4.1 released.

Fri Jun  9 12:18:30 2000  Nick Burrett  <nick@dsvr.net>

	* passwd.c (vsd_usermod): Don't lose the password.

Thu Jun  8 13:17:45 2000  Nick Burrett  <nick@dsvr.net>

	* process.c (vsd_enum_procs): Minor formatting changes.
	(vsd_enum_procs_vs): Likewise.
	(vsd_getppid): New function.
	* libvsd.h (vsd_getppid): Declare function.

Tue Jun  6 17:16:51 2000  Nick Burrett  <nick@dsvr.net>

	* VSD.pm (vsd_map_read): Add directives UIDRange, UIDAllocChunk,
	BWLimit, BWBurst.
	* libvsd.h (struct vsd_vs): Add bwburst and bwlimit fields.
	(struct vsd_global): Add bwburst and bwlimit fields.
	* map.c (get_rate): New function.
	(read_global): Support directives BWLimit and BWBurst.
	(read_virtualserver): Likewise.
	(vsd_map_save): Likewise.
	(vsd_map_add_server): Initialise bwburst and bwlimit fields.

Wed May 31 16:43:30 2000  Nick Burrett  <nick@dsvr.net>

	* libvsd.h (struct vsd_disk): Remove device field.
	* map.c (read_partition): Don't recognise `Device'.
	(vsd_map_save): Remove reference to device field.
	(vsd_map_free): Likewise.

Wed May 31 10:18:36 2000  Nick Burrett  <nick@dsvr.net>

	Support alternative build root for RPM packaging.
	* Makefile.in (install): Add $(ROOT)/ to all paths.
	(uninstall): Likewise.

Fri May 26 13:33:26 2000  Nick Burrett  <nick@dsvr.net>

	* All files: Change copyright ownership from Designer Servers Ltd
	to Idaya Ltd.

Thu May 25 16:42:13 2000  Nick Burrett  <nick@dsvr.net>

	* quota.c: New file.
	* Makefile.in (OBJS): Add quota.o.
	(quota.o): Add dependencies.
	* libvsd.h (vsd_quota_set): Declare.
	(vsd_quota_get): Declare.

Wed May 17 09:40:33 2000  Nick Burrett  <nick@dsvr.net>

	* passwd.c (vsd_useradd): Take additional_groups as an extra
	argument.  Add code to implement it.
	* libvsd.h (vsd_useradd): Adjust prototype.

Tue May 16 15:27:56 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (read_partition): Allow for comments and blank lines.
	(read_global): Likewise.
	(read_virtualserver): Likewise.

Mon May  8 17:11:35 2000  Nick Burrett  <nick@dsvr.net>

	Implement a new file format for vsd.conf.
	* Makefile.in (OBJS): Add log.o.
	(log.o): Add dependencies.
	(TFLAGS): Add -DVSD_CONF.
	(install): Install VSD.pm.
	* log.c: New file.
	* VSD.pm: New file.
	* libvsd.h (struct vsd_disk): Add maxvs.  Add comments.
	(struct vsd_vs): Make ip a void*.  Add ns1, ns2, ipalias_total,
	ipalias fields.  Add comments.
	(struct vsd_global): New structure.
	(struct vsd_vs_map): Add lock_fd. Delete max_servers, ipaliases
	and ipalias.  Add comments.
	(vsd_map_lock): New declaration.
	(vsd_map_unlock): New declaration.
	(vsd_map_add_server): Add parameters ns1 and ns2.
	(vsd_map_server_root): Change return type to char*.
	(vsd_ip_ntoa): New declaration.
	(vsd_ip_aton): New declaration.
	(VSD_LOG_INFO): Define.
	(VSD_LOG_DEBUG): Define.
	(VSD_LOG_ERROR): Define.
	(vsd_log_error): New declaration.
	* map.c (MIN_UID): Delete macro.
	(MAX_UID): Delete macro.
	(CHUNK): Delete macro.
	(struct keyword): Delete.
	(T_DEVICE, T_IP, T_IPALIAS, T_MAXVS, T_MOUNT): Delete macros.
	(T_PARTITIONS, T_PARTITION, T_QUOTA, T_SERVER): Delete macros.
	(T_STARTUID< T_STATUS, T_USERS): Delete macros.
	(keyword_table): Delete.
	(lookup_function): Delete function.
	(xalloc): New function.
	(read_partition): New function.
	(read_global): New function.
	(read_virtualserver): New function.
	(vsd_map_read): Re-written to support new file format.
	(vsd_ip_ntoa): New function.
	(vsd_ip_aton): New function.
	(vsd_map_save): Re-written to support new file format.
	(vsd_map_free): Fixup according to new vsd_vs_map structures.
	(vsd_map_lock): New function.
	(vsd_map_unlock): New function.
	(allocate_partition): Change algorithm to fill up one partition
	at a time, taking into account that maximum number of virtual
	servers is now on a per-partition basis.
	(vsd_map_add_server): Add parameters ns1 and ns2.  Change
	according to new struct vsd_vs_map.
	(vsd_map_delete_server): Change for new struct vsd_vs format.
	(vsd_map_rename_server): Likewise.
	(vsd_map_change_server_ip): Likewise.
	(vsd_getmapent): Likewise.
	(vsd_map_server_root): Change for new struct vsd_vs_map format.
	(vsd_map_set_status): No need to operate on each IP alias.
	(vsd_map_uid_range): Take MAX_UID, MIN_UID and CHUNK from
	global configuration in vsd.conf.

Wed May  3 09:28:54 2000  Nick Burrett  <nick@dsvr.net>

	* Makefile.in (datadir, includedir, infodir): Add.
	(libdir, libexecdir, localstatedir): Add.
	(oldincludedir, sbindir, sharedstatedir): Add.
	(sysconfdir): Add.
	(INSTALL): Renamed from INSTALLCMD.
	(TFLAGS): Add.
	(.c.o): Add $(TFLAGS).
	(install): New target.
	(uninstall): New target.
	(*.o): Add config.h as a dependency.
	* configure.in (AC_PROG_INSTALL): Add.
	Set `tflags' depending on whether we are targetting FreeBSD
	or Linux.
	* process.c: Don't automatically define TARGET_LINUX.

Mon Apr 17 13:52:47 2000  Nick Burrett  <nick@dsvr.net>

	* process.c (vsd_enum_procs): FreeBSD build fixes.
	Return NULL if kvm_open fails.  Fix accesses to kinfo_proc
	structure.
	(vsd_enum_procs_vs): Likewise.
	(main): Account for vsd_enum_procs returning NULL.

Thu Mar 16 14:32:07 2000  Nick Burrett  <nick@dsvr.net>

	* file.c (vsd_load_file): Check for NULL pointer on incoming
	arguments.
	(vsd_save_file): Likewise.
	(vsd_file_tail): Likewise.
	(vsd_file_insert_line): Likewise.
	(vsd_file_delete_line): Likewise.
	(vsd_file_find_line): Likewise.
	(vsd_file_skip_spaces): Likewise.
	(vsd_free_file): Cosmetic change.
	(vsd_file_walk): New function.
	(vsd_file_str_replace): New function.
	(vsd_file_str_search): New function.
	(vsd_file_str_search_replace): New function.
	(main, [TEST]): New test function.
	* map.c (vsd_map_rename_server): New function.
	(vsd_map_change_server_ip): New function.
	* passwd.c (vsd_userdel): Check user name is syntactically correct.
	Ensure user account being manipulated is a virtual server account.
	(vsd_usermod): Likewise.
	(vsd_useradd): Check user name is syntactically correct.
	(vsd_getpwnam): New function.
	(vsd_getpwuid): New function.
	(vsd_getpwent): New function.
	* user.c (vsd_valid_username): New function.
	(vsd_valid_vsname): New function.
	* libvsd.h (vsd_file_walk): Declare.
	(vsd_file_str_replace, vsd_file_str_search): Declare.
	(vsd_file_str_search_replace): Declare.
	(vsd_valid_username, vsd_valid_vsname): Declare.
	(vsd_map_rename_server): Declare.
	(vsd_map_change_server_ip): Declare.
	(vsd_getpwnam, vsd_getpwuid, vsd_getpwent): Declare.
	
Thu Mar  2 11:21:22 2000  Nick Burrett  <nick@dsvr.net>

	* process.c (vsd_enum_procs): Ensure we match virtual server
	name exactly.

Mon Feb  7 12:57:42 2000  Nick Burrett  <nick@dsvr.net>

	* string.c (string_member): Add fast case.  Remove `foo::5:foo'
	assumption.
	(string_member_delete): Simplify by assuming the passed list is
	pure.
	(string_member_add): Add `search_from' argument.
	* group.c (vsd_group_add_user): Strictly follow string_member_add
	argument specification and only pass a comma separated list string.
	(vsd_group_del_user): Likewise but only perform the action if the
	list is not empty.
	(vsd_group_rename_user): Likewise.
	* priv.c (vsd_priv_add_member): Likewise.
	(vsd_priv_delete_member): Likewise.
	(vsd_priv_list_privs): Limit copy to the size of temporary buffer
	`temp'.
	* libvsd.h (vsd_get_uidgid): Declare.
	(vsd_usermod): Add `additional_groups' argument.
	(string_member_add): Add `search_from' argument.
	* passwd.c (vsd_usermod): Add and implement `additional_groups'
	argument.  If login_name is set, then change user name after
	user has been made a member.

Fri Jan 28 15:54:41 2000  Nick Burrett  <nick@dsvr.net>

	* map.c (vsd_map_read): Set the status correctly for ip aliases.

Fri Jan 28 13:33:56 2000  Nick Burrett  <nick@dsvr.net>

	* chpasswd.c (vsd_chpass): Check user account is in the virtual
	server range.

Tue Jan 18 12:21:57 2000  Nick Burrett  <nick@dsvr.net>

	* user.c (vsd_get_uidgid): Use a default of `/' if server_root is
	NULL.

Mon Jan 17 16:53:36 2000  Nick Burrett  <nick@dsvr.net>

	* file.c (vsd_file_find_entry): Be more pedantic when matching
	the user name.

	* passwd.c (vsd_usermod): Cosmetic change.

Fri Jan 14 12:37:43 2000  Nick Burrett  <nick@dsvr.net>

	* string.c (string_member): Cope with a list containing just the
	one token.
	(string_member_delete): Likewise.  Return 1 if the token is not
	on list.
	* group.c (vsd_group_rename_user): New function.
	* priv.c (vsd_priv_delete_member): Update for new interpretation
	of string_member_delete.
	* passwd.c (vsd_usermod): If login_name is given then rename the
	user in the group.

Fri Jan 14 10:36:23 2000  Nick Burrett  <nick@dsvr.net>

	* priv.c (vsd_priv_rename_user): Add parameter server_root.
	(vsd_priv_delete_user): Add parameter server_root.
	* libvsd.h (vsd_priv_rename_user): Update prototype.
	(vsd_priv_delete_user): Update prototype.

Thu Jan 13 11:14:04 2000  Nick Burrett  <nick@dsvr.net>

	* getdef.c: Delete file.
	* Makefile.in (OBJS): Remove getdef.o.
	(getdef.o): Delete dependencies.
	* libvsd.h (vsd_getdef_bool): Delete prototype.
	(vsd_getdef_long, getdef_num, getdef_str, putdef_str): Likewise.
	(vsd_get_uid_range, vsd_get_gid_range): Likewise.
	* user.c (vsd_get_uidgid): New function.
	(vsd_get_uid_range): Delete function.
	(vsd_get_gid_range): Delete function.
	(vsd_valid_uid, vsd_valid_gid): Use vsd_get_uidgid.
	* passwd.c (vsd_useradd): Use vsd_get_uidgid.
	(vsd_usermod): Likewise.
	* group.c (vsd_groupadd): Likewise.
	(vsd_groupmod): Likewise.

Wed Jan 12 17:05:07 2000  Nick Burrett  <nick@dsvr.net>

	* chpasswd.c (vsd_chpass): Fix typo in last change.

Tue Jan 11 17:07:10 2000  Nick Burrett  <nick@dsvr.net>

	* chpasswd.c (vsd_chpass): Don't encrypt old password if admin is
	true.  Check old_password pointer is valid.

Thu Dec 16 16:43:32 1999  Nick Burrett  <nick@dsvr.net>

	* passwd.c (vsd_usermod): Disambiguate usage of `line' for
	passwd and group functions.

Thu Dec 16 16:00:47 1999  Nick Burrett  <nick@dsvr.net>

	* passwd.c (vsd_passwd_decode): Check string length using strlen
	for the shell field.
	(vsd_usermod): Add login_name argument. Make uid argument
	pass-by-value. Re-work function to only change user fields
	if they have been passed in function parameters.
	* libvsd.h (vsd_usermod): Update prototype.
	
Wed Dec 15 13:16:03 1999  Nick Burrett  <nick@dsvr.net>

	* All files: Add GPL copyright notice.

Tue Dec 14 15:23:37 1999  Nick Burrett  <nick@dsvr.net>

	* argv.c (vsd_argv_parse): Return real argument count.

Fri Dec 10 14:21:51 1999  Nick Burrett  <nick@dsvr.net>

	* libvsd.h (vsd_priv_list_privs): Declare.

Wed Nov 17 16:19:44 1999  Nick Burrett  <nick@dsvr.net>

	* passwd.c (vsd_useradd): Add `gecos' argument.
	* libvsd.h (vsd_usermod): Declare.

Wed Nov 17 11:58:28 1999  Nick Burrett  <nick@dsvr.net>

	* chpasswd.c: New file.

Wed Nov 17 11:57:23 1999  Nick Burrett  <nick@dsvr.net>

	* group.c (vsd_groupadd): Return with status 10 if /etc/group
	cannot be loaded.
	(vsd_groupdel): Likewise.
	(vsd_groupmod): Likewise.
	* passwd.c (vsd_userdel): Return with status 10 if /etc/passwd
	cannot be loaded.
	(vsd_useradd): Likewise.
	(vsd_usermod): Likewise.

Tue Nov 16 10:32:06 1999  Nick Burrett  <nick@dsvr.net>

	* string.c: New file.
	(string_member): Split out from ...
	* priv.c (find_member): ... here.

	* string.c (string_member_delete): Split out from ...
	* priv.c (vsd_priv_delete_member): ... here.

	* string.c (string_member_add): Split out from ...
	* priv.c (vsd_priv_add_member): ... here.

	* groupent.c: Renamed from group.c.
	* group.c: New file.
	* passwd.c: New file.
	* file.c (vsd_file_find_entry): New function.
	* user.c (vsd_get_gid_range): New function.
	* libvsd.h (vsd_file_find_entry, vsd_get_gid_range): Add decls.
	* Makefile.in (OBJS): Add passwd.o, group.o and string.o.
	
Thu Oct 28 10:47:35 1999  Nick Burrett  <nick@dsvr.net>

	* map.c (vsd_map_server_root): Return NULL if `server_name' doesn't
	exist.

Fri Oct 22 14:26:55 1999  Nick Burrett  <nick@dsvr.net>

	* dstring.c: New file.
	* io.c: New file.
	* libvsd.h (struct dstring): New struct.
	(dstring_new, dstring_free): Declare.
	(dstring_append, dstring_fmt_append): Declare.
	(io_getline): Declare.
	* Makefile.in (OBJS): Add io.o and dstring.o.

Thu Oct 14 11:07:15 1999  Nick Burrett  <nick@dsvr.net>

	* argv.c (vsd_argv_parse): Handle arguments with quotes better - was
	giving an off-by-one error.

Mon Sep 27 16:15:03 1999  Nick Burrett  <nick@dsvr.net>

	* process.c: New file.
	* Makefile.in (OBJS): Add process.o.
	* configure.in (AC_CHECK_HEADERS): Add fcntl.h.
	(AC_CHECK_FUNCS): Add `access' and `open'.
	* libvsd.h (vsd_enum_procs, vsd_enum_procs_vs): Declare.

Fri Aug 27 08:06:01 1999  Nick Burrett  <nick@dsvr.net>

	* Makefile.in (.c.o): Pass -o on compiler command line.

Wed Aug 25 10:24:37 1999  Nick Burrett  <nick@dsvr.net>

	Replace automake generated Makefiles with an autoconf version
	* Makefile.am: Delete.
	* Makefile.in: New file.
	* config.guess, config.sub, configure.in, install-sh: New files.

	Add C library support routines for operating systems that don't
	supply all the expected functions.
	* compat/pwdgrp.c: New file.
	* compat/stpcpy.c: New file.
	* libvsd.h: Include stdio.h and pwd.h.
	(fgetpwent, fgetgrent, stpcpy): Declare if not defined by the C
	library.

	* argv.c: Include config.h.
	(vsd_argv_add): Return NULL if malloc fails.
	(vsd_argv_parse): Make function more versatile - add parameter `sep'.
	Seperate string on `sep' rather than a hard coded space.
	Return NULL if malloc fails.
	* libvsd.h (vsd_argv_parse): Add parameter `sep'.
	* getdef.c: Include config.h.
	* group.c: Include config.h.
	* map.c: Inlcude config.h.
	(vsd_map_read): Return NULL if malloc fails.  Use errno ENOENT
	rather than EBADMSG.  Fix `vsd_argv_parse' call.
	(vsd_map_server_root): Return NULL if malloc/realloc fails.

Tue Aug  3 15:34:55 1999  Nick Burrett  <nick@dsvr.net>

	* priv.c (find_member): Set `errno' to ENOENT if `username' isn't
	on privilege list.
	(vsd_priv_delete_member): Return immediately if
	`username' is not a member of `privilege'.

Thu Jul 15 10:05:09 1999  Nick Burrett  <nick@dsvr.net>

	* libvsd.h (struct vsd_vs_map): Add `max_servers'.
	* map.c (T_MAXVS): Define.
	(keyword_table): Add `maxvs'.
	(vsd_map_read): Add case `T_MAXVS'.
	(vsd_map_save): Write information for `maxvs'. Provide a default
	case for the server status.
	(vsd_map_add_server): Don't add a server if it exceeds the limit
	set by `max_servers'.

Fri Jul  9 13:12:07 1999  Nick Burrett  <nick@dsvr.net>

	* map.c (vsd_map_read, case T_IP): Copy IP address to the `ip'
	field.

Thu Jul  1 10:50:41 1999  Nick Burrett  <nick@dsvr.net>

	* priv.c (vsd_priv_rename_user): Don't delete privileges if
	there are none for the user.

Mon Jun 28 13:23:30 1999  Nick Burrett  <nick@dsvr.net>

	* libvsd.h (S_ACTIVE): Define.
	(S_DISABLED): Define.
	* map.c (S_ACTIVE, S_DISABLED): Move macros to libvsd.h.

Wed Jun 23 14:05:14 1999  Nick Burrett  <nick@dsvr.net>

	* argv.c (vsd_argv_parse): New functions.
	* file.c (vsd_load_file, vsd_save_file): Change `server' argument
	for the virtual server root.
	* group.c (vsd_opengrp): Likewise.
	* priv.c (vsd_priv_load, vsd_priv_save): Likewise.
	(vsd_priv_get_group_members): Likewise.
	(vsd_priv_access): Fix calls to `vsd_priv_load' and `vsd_priv_save'.
	
	* libvsd.h (struct vsd_vs_map): Delete structure.
	(vsd_argv_parse): Add declaration.
	(vsd_file_tail): Add declaration.
	(struct vsd_disk): Declare structure.
	(struct vsd_vs): Declare structure.
	(struct vsd_ipalias): Declare structure.
	(struct vsd_vs_map): Declare structure.
	(vsd_map_server_root): Declare.
	(vsd_alloc_uid): Declare.
	(vsd_map_set_status): Declare.
	(vsd_map_uid_range): Declare.

	* map.c: Re-written.

	* server.c (virtual_server_root): Delete function.
	