--- a/ChangeLog Sun Jan 20 00:12:17 2008 +0100
+++ b/ChangeLog Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,97 @@
+2004-03-16 Bruce.Guenter.dyndns.org <bruce@lorien.untroubled.org>
+
+ * daemon/listdomain.cc: The code is internally NUL-terminated, so
+ don't add another NUL on output.
+
+2004-03-15 Bruce.Guenter.dyndns.org <bruce@lorien.untroubled.org>
+
+ * cgi/vadduser.cc, cgi/vaddalias.cc: Fixed several one-off bugs.
+
+ * commands/vupgrade.cc (open_table): Fixed up the test to see if
+ the new vpwtable reader is valid.
+
+ * commands/dumpvuser.cc: Added new source.
+
+ * commands/vadduser.cc (add_alias), commands/vsetup.cc
+ (setup_alias): Make sure even aliases have a userdir set.
+
+2002-05-03 Bruce Guenter <bruce@lorien.untroubled.org>
+
+ * commands/vadduser.cc: Fixed incorrect usage note for vaddalias.
+
+ * lib/config/Makefile.am (noinst_LIBRARIES): Fixed the use of
+ libstdc++ in showvconfig.
+
+2001-03-07 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * commands/vcheckquota.cc: Fixed abbreviated error message.
+
+ * doc/FAQ.sgml: Added note regarding mixing system and virtual
+ accounts.
+
+ * Moved from old "cli" library to renamed "cli++" library.
+
+2000-11-20 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * lib/vpwentry/to.cc (to_record): Fixed typo -- flags is now 5
+ bytes, not 3.
+
+2000-10-30 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * commands/vdeliver.cc (cli_main): Make 99 return codes from
+ executed programs cause vdeliver to exit (with code 99) without
+ delivering the message.
+
+ * lib/misc/exec.cc (execute): Don't silently ignore the 99 error
+ code.
+
+2000-10-27 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * commands/vchforwards.cc (cli_main): Fixed the same bug here as
+ for daemon/lookup.cc -- need to lookup users with nodefault set.
+
+2000-10-25 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * python/commands.py (adduser): Added the new has_mailbox
+ parameter, defaulting to false.
+
+ * python/daemon.py (encode_str): Explicitly cast non-string
+ objects to string before encoding.
+
+ * daemon/adduser.cc (CMD(adduser3)): Renamed the file adduser2.cc
+ to adduser.cc; Renamed the adduser2 command to adduser3 to make
+ the additional argument explicit.
+
+2000-10-13 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * Most code was restructured to accomodate the below two changes.
+
+ * lib/vpwtable/vpwtable.h (class vpwtable_reader): Modified this
+ interface to return a vpwentry*.
+
+ * lib/vpwentry/vpwentry.h (struct vpwentry ): Modified this data
+ structure to rename "mailbox" to "directory", and add a
+ "has_mailbox" flag. Also made the default constructor and
+ set_defaults protected.
+
+2000-10-10 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * daemon/stat.cc: Added a rewritten version of this support from
+ Eugene Miretskiy to retrieve statistics about a maildir.
+
+2000-10-07 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * commands/vpasswd2db.cc: Converted to use new vpwtable_writer
+ interface.
+
+ * lib/vpwtable/vpwtable.h: Added new vpwtable_writer interface.
+
+2000-10-05 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * python/daemon.py (Daemon.read_response_noraise): Fixed a bug in
+ reading zero-length responses (like from listdomain) on certain
+ OSes.
+
2000-09-30 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
* Released version 0.96.9
--- a/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -5,7 +5,7 @@
endif
dist-hook:
- cp -dP `find lib/ac -name CVS -prune -o \( -not -name '*~' -a -type f -o -type l \) -print` $(distdir)
+ cp -dP --parents `find lib/ac -name CVS -prune -o \( -not -name '*~' -a -type f -o -type l \) -print` $(distdir)
sed -e s/@VERSION\@/@VERSION@/ <spec >$(distdir)/vmailmgr-@VERSION@.spec
docs:
--- a/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -88,12 +90,13 @@
CONFIG_CLEAN_FILES =
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS TODO acconfig.h acinclude.m4 aclocal.m4 \
-config.h.in configure configure.in install-sh missing mkinstalldirs
+config.guess config.h.in config.sub configure configure.in install-sh \
+missing mkinstalldirs
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
DIST_SUBDIRS = python php lib authenticate commands daemon cgi doc \
scripts php lib authenticate commands daemon cgi doc scripts
@@ -179,7 +182,7 @@
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
- test "$$subdir" = "." && dot_seen=yes; \
+ test "$$subdir" != "." || dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
@@ -316,7 +319,7 @@
all-am: Makefile config.h
all-redirect: all-recursive-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs: installdirs-recursive
installdirs-am:
@@ -366,7 +369,7 @@
dist-hook:
- cp -dP `find lib/ac -name CVS -prune -o \( -not -name '*~' -a -type f -o -type l \) -print` $(distdir)
+ cp -dP --parents `find lib/ac -name CVS -prune -o \( -not -name '*~' -a -type f -o -type l \) -print` $(distdir)
sed -e s/@VERSION\@/@VERSION@/ <spec >$(distdir)/vmailmgr-@VERSION@.spec
docs:
--- a/NEWS Sun Jan 20 00:12:17 2008 +0100
+++ b/NEWS Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,36 @@
+-------------------------------------------------------------------------------
+Changes in version 0.97
+
+New Features:
+- Aliases can now have autoresponders.
+- New "stat" command in the daemon to lookup the mailbox size.
+- Added a "dumpvuser" command, to output all of an account's data.
+- Renamed vpasswd2db to vupgrade and allvpasswd2db to vupgrade-all.
+- Authentication recognizes plain text (null-crypt) passwords.
+- Added options to turn off execution of vdeliver-predeliver and
+ vdeliver-postdeliver.
+- Added option to vadduser to specify the pre-encrypted password.
+
+Internal Changes:
+- All accounts are created with an account directory now.
+- Created a vpwtable writer interface, and removed the CDB-specific
+ commands.
+- Added adduser3 daemon function, which works the same as the existing
+ adduser2 function but with an additional has-mailbox parameter.
+- New CDB library that uses mmap instead of file reads for efficiency.
+- Removed the vcheckquota and vpopbull tools that are now part of the
+ vmailmgr-tools package.
+
+Bug Fixes:
+- Fixed a bug in Python library that caused the listdomain command to fail
+ on some OS's.
+- Fixed a bug in the PHP library that caused long listdomains to fail.
+- Exit code 99 from vdeliver-predeliver now causes vdeliver to exit
+ (with code 99) without delivering the message.
+- Fixed a bug that caused creating directories with a trailing slash to
+ fail.
+- Fixed the use of libstdc++ in showvconfig.
+- Personal information can now be changed by the virtual user in the daemon.
-------------------------------------------------------------------------------
Changes in version 0.96.9
--- a/README Sun Jan 20 00:12:17 2008 +0100
+++ b/README Sun Jan 20 00:22:09 2008 +0100
@@ -1,14 +1,14 @@
vmailmgr
-version 0.96.9
-2000-09-30
-Bruce Guenter <bruceg@em.ca>
+version 0.97
+2005-09-03
+Bruce Guenter <bruce@untroubled.org>
Vmailmgr provides a virtualizing password-checking interface to
qmail-pop3d and courier IMAP as well as both a delivery agent to
automatically deliver mail within a virtual domain and a set of tools
to manage such a domain from either the command line or from the web.
-This program is Copyright(C) 2000 Bruce Guenter, and may be copied
-according to the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 or a later
-version. A copy of this license is included with this package. This
-package comes with no warranty of any kind.
+This program is Copyright(C) 1999,2000,2005 Bruce Guenter, and may be
+copied according to the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 or a
+later version. A copy of this license is included with this package.
+This package comes with no warranty of any kind.
--- a/TODO Sun Jan 20 00:12:17 2008 +0100
+++ b/TODO Sun Jan 20 00:22:09 2008 +0100
@@ -1,80 +1,86 @@
Here are the things that I have left to complete (roughly in order of
-personal preference). The lines marked "RELEASE TARGET" are the point
-of development that I hope to reach before I make another release. Some
-of the other items after the last "RELEASE TARGET" may make it into a
-release if I feel like it. I want short and easy to define goals so I
-can keep the development periods shorter.
+personal preference). I have seperated it into a series of release
+targets in order to have short quantitative goals for making new
+releases.
+-------------------------------------------------------------------------------
+FOR VERSION 0.97:
+
+- Revert vdomain::lookup back to the single-argument case, and yank the
+ dead code.
+
+- Add tests for:
+ - proper handling of creating paths with a trailing '/'
+ - authvmailmgr
+ - execution of presetuid and postsetuid hooks in authvmailmgr
+ - daemon "stat" command
+ - daemon adduser3 command
+ - vupgrade command
+ - exit 99 from vdeliver-predeliver causes delivery to be skipped
+
+- Add note to FAQ or HOWTO regarding the two web interfaces
+
+- Add more complete tests to verify correct operation of "vaddusers"
+ command.
+-------------------------------------------------------------------------------
+FOR VERSION 0.97.1:
+
+- Add a "vrenuser" tool.
+
+- Make vcheckquota and daemon stat handle folders.
+
+- Always "touch" $VUSER/cur on successful authentication, to provide for
+ a "last login time".
+
+- Expand the record format to include a "last modified" field, and to
+ change the flag values from binary 0/1 to ASCII.
- Add note to FAQ regarding PHP error code 255 meaning the daemon is not
running properly (once it's been confirmed).
-- Add tests for:
- - authvmailmgr
- - execution of presetuid and postsetuid hooks in authvmailmgr
+- Fix checkvpw to set MAILDIR before executing postsetuid somehow
-- Add note to FAQ or HOWTO regarding the two interfaces
+- Make quota check program check all directories.
-- Fix checkvpw to set MAILDIR before executing postsetuid somehow
+- Add Courier IMAP support to the bulletin facility
- Convert existing TeXinfo documentation to SGML
-- Add a mailbox size daemon command
-
-- Expand the record format to include a "last modified" field, and to
- change the flag values from binary 0/1 to ASCII.
-
-- Add the necessary code for NDBM, MySQL, and PostgreSQL password tables.
-
-- Add more complete tests to verify correct operation of "vaddusers"
- command.
-
-- Add Courier IMAP support to the bulletin facility
+- Make vrehash take the bits and slices values as command-line
+ parameters.
+-------------------------------------------------------------------------------
+FOR VERSION 0.98:
-- Add support to the vpwtable template that allows writing a batch of
- users in a more efficient manner
- - start writing (locks the table for other writes, enter nosync mode)
- - append record (check for prior existance of record, add it)
- - stop writing (sync data and unlock the table)
-
-- Use the above to support a more efficient version of:
- - vpasswd2db
- - vrehash
-
-- Figure out how to make vdeliver write to both the output file and the
- queue simultaneously, to avoid needing to do rewinds.
-
-RELEASE TARGET 0.97
+- Make the TCP daemon the default usage, and drop the unixserver
+ requirement.
- Make the daemon commands stand-alone modules, using the revised daemon
communication protocol. The daemon then just forks, reads in the
command name, validates it, and hands off to an authentication module.
- The authentication module checks for a custom authentication type
- based on the command name, does authentication, does setuid,chdir,
+ based on the command name, does authentication, does setuid, chdir,
and executes the actual command.
-
-RELEASE TARGET 1.00
+-------------------------------------------------------------------------------
+FOR VERSION 1.00:
-- Set up the necessary structures to completely seperate the virtual
- domain information and the real user information, such that each user
- can have a list of virtual domains assigned to it. This structure
- will specify:
- - a domain prefix
- - a directory
- In this way, the virtualdomains will contain:
- domain.org:username-prefix
- And the domain listing with list
- prefix:subdirectory
- Each domain will have a completely independant user directory and
- password table.
-
-RELEASE TARGET 1.XX
+- Make vdeliver write to both the output file and the queue
+ simultaneously, to avoid needing to do rewinds:
+ - make pipe
+ - open tmp maildir file
+ - fork (child exec's qmail-queue)
+ - read data from stdin
+ - write data to file and pipe
+ - if write to pipe fails, delete maildir tmp file and fail
+ - if write to file fails, close pipe and fail
+ - write envelope to qmail-queue
+ - catch exit from qmail-queue
+ - close & sync maildir tmp file
+-------------------------------------------------------------------------------
+AFTER VERSION 1.00:
- Bug fixes and clean-ups, and documentation improvements
-RELEASE TARGET 2.00
-
-- Investigate making all virtual users have a directory
+- Add the necessary code for *DBM, MySQL, and PostgreSQL password tables.
- add a "vadddomain" command that:
- adds a new user to /etc/passwd
@@ -122,8 +128,8 @@
? add support for PAM for non-virtual users (this may be difficult,
requiring a change in the authentication model)
-- documentation
- - write a "getting started" guide
+- Develop support for HMAC passcodes, in order to support CRAM-MD5
+ authentication, as per RFCs 2195 and 2104.
- miscelaneous
- code clean-ups, including internal documentation
--- a/aclocal.m4 Sun Jan 20 00:12:17 2008 +0100
+++ b/aclocal.m4 Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4a
+dnl aclocal.m4 generated automatically by aclocal 1.4-p6
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@@ -41,6 +41,825 @@
])
+# lib-prefix.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+# lib-link.m4 serial 6 (gettext-0.14.3)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ define([Name],[translit([$1],[./-], [___])])
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIB[]NAME"
+ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ undefine([Name])
+ undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ libext="$acl_cv_libext"
+ shlibext="$acl_cv_shlibext"
+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ hardcode_direct="$acl_cv_hardcode_direct"
+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE(rpath,
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib$1-prefix],
+[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
+ --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/lib"
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ if test $use_additional = yes; then
+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+ found_dir="$additional_libdir"
+ found_so="$additional_libdir/lib$name.$shlibext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ else
+ if test -f "$additional_libdir/lib$name.$libext"; then
+ found_dir="$additional_libdir"
+ found_a="$additional_libdir/lib$name.$libext"
+ if test -f "$additional_libdir/lib$name.la"; then
+ found_la="$additional_libdir/lib$name.la"
+ fi
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+ found_dir="$dir"
+ found_so="$dir/lib$name.$shlibext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ else
+ if test -f "$dir/lib$name.$libext"; then
+ found_dir="$dir"
+ found_a="$dir/lib$name.$libext"
+ if test -f "$dir/lib$name.la"; then
+ found_la="$dir/lib$name.la"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */lib | */lib/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/lib"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/lib"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.
@@ -50,10 +869,9 @@
dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AC_PROG_INSTALL])
-dnl We require 2.13 because we rely on SHELL being computed by configure.
-AC_PREREQ([2.13])
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
@@ -69,18 +887,47 @@
AC_REQUIRE([AC_ARG_PROGRAM])
dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
AC_REQUIRE([AC_PROG_MAKE_SET])])
+# Copyright 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.4-p6])])
+
#
# Check to make sure that the build environment is sane.
#
-AC_DEFUN(AM_SANITY_CHECK,
+AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
@@ -121,7 +968,7 @@
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
+AC_DEFUN([AM_MISSING_PROG],
[AC_MSG_CHECKING(for working $2)
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
@@ -137,7 +984,7 @@
# Like AC_CONFIG_HEADER, but automatically create stamp file.
-AC_DEFUN(AM_CONFIG_HEADER,
+AC_DEFUN([AM_CONFIG_HEADER],
[AC_PREREQ([2.12])
AC_CONFIG_HEADER([$1])
dnl When config.status generates a header, we must update the stamp-h file.
@@ -160,7 +1007,7 @@
# Define a conditional.
-AC_DEFUN(AM_CONDITIONAL,
+AC_DEFUN([AM_CONDITIONAL],
[AC_SUBST($1_TRUE)
AC_SUBST($1_FALSE)
if $2; then
--- a/authenticate/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -20,7 +20,6 @@
%.1: %.pod ../configure.in; $(POD2MAN) --section=1 $< >$@
%.html: %.pod; $(POD2HTML) $< >$@
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = $(CIINCLUDES) -I../lib
checkvpw_SOURCES = checkvpw.cc authvlib.cc authvlib.h
--- a/authenticate/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -93,7 +95,6 @@
EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS)
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = $(CIINCLUDES) -I../lib
checkvpw_SOURCES = checkvpw.cc authvlib.cc authvlib.h
@@ -126,6 +127,7 @@
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
@@ -139,7 +141,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(authvmailmgr_SOURCES) $(checkvpw_SOURCES) $(vauthenticate_SOURCES)
OBJECTS = $(authvmailmgr_OBJECTS) $(checkvpw_OBJECTS) $(vauthenticate_OBJECTS)
@@ -169,8 +171,8 @@
$(mkinstalldirs) $(DESTDIR)$(authlibdir)
@list='$(authlib_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(authlibdir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(authlibdir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(authlibdir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(authlibdir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -194,8 +196,8 @@
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -372,7 +374,7 @@
all-am: Makefile $(PROGRAMS) $(MANS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(authlibdir) $(DESTDIR)$(bindir) \
$(DESTDIR)$(mandir)/man1
--- a/authenticate/authvlib.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/authvlib.cc Sun Jan 20 00:22:09 2008 +0100
@@ -82,15 +82,15 @@
}
else {
set_user(basepw);
- vpwentry* vpw = domain->lookup(virtname, true);
- if(!vpw || !vpw->mailbox)
+ vpwentry* vpw = domain->lookup(virtname);
+ if(!vpw || !vpw->has_mailbox)
fail_login("Invalid or unknown virtual user");
if(!vpw->authenticate(password))
fail_login("Invalid or incorrect password");
if(vpw->expiry < (unsigned)time(0))
fail_login("Account has expired");
vpw->export_env();
- return new user_data(basepw, vpw->mailbox, vpw->name);
+ return new user_data(basepw, vpw->directory, vpw->name);
}
}
--- a/authenticate/authvmailmgr.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/authvmailmgr.cc Sun Jan 20 00:22:09 2008 +0100
@@ -15,6 +15,8 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <config.h>
+#include <stdlib.h>
+#include <string.h>
#include "misc/exec.h"
#include "authvlib.h"
// Courier-IMAP includes
--- a/authenticate/checkvpw.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/checkvpw.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH CHECKVPW 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,75 +109,74 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "CHECKVPW 1"
+.TH CHECKVPW 1 "2003-12-01" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
-checkvpw \- check passwords for virtual and non-virtual users
+checkvpw \- check passwords for virtual and non\-virtual users
.SH "SYNOPSIS"
-\fBcheckvpw\fR \fBsubprogram\fR [\fBarguments...\fR]
+.IX Header "SYNOPSIS"
+\&\fBcheckvpw\fR \fBsubprogram\fR [\fBarguments...\fR]
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program is a drop-in replacement for the standard checkpassword,
written by D. J. Bernstein (djb@pobox.com).
In the absence of virtual hosting (determined by the use of
-\fI/var/qmail/control/virtualdomainss\fR and IP aliases),
+\&\fI/var/qmail/control/virtualdomainss\fR and \s-1IP\s0 aliases),
it behaves identically to checkpassword.
When virtual hosting is used, it permits logins from a unique set of
users for each of the aliases.
.PP
-\fIcheckvpw\fR must be run from either the \fItcp-env\fR program
+\&\fIcheckvpw\fR must be run from either the \fItcp-env\fR program
(part of the \fIqmail\fR
package) or from a suitable substitute, such as \fItcpserver\fR
(part of the \fIucspi-tcp\fR package).
These packages are used to determine to
which address a remote host is connecting.
-\fIcheckvpw\fR must also be passed the checkpassword-compatible
+\&\fIcheckvpw\fR must also be passed the checkpassword-compatible
authentication data on file descriptor three.
This can be accomplished by running it from a tool such as
-\fIqmail-popup\fR.
+\&\fIqmail-popup\fR.
.PP
-\fIcheckvpw\fR accepts a command line in the following format:
+\&\fIcheckvpw\fR accepts a command line in the following format:
.PP
.Vb 1
\& checkvpw [subprogram] [arguments...]
.Ve
+.PP
If the authentication information is valid, the subprogram is run,
otherwise \fIcheckvpw\fR returns an error to the program that invokes it.
.PP
-If the user name contains the character \f(CW@\fR, the host name
+If the user name contains the character \f(CW\*(C`@\*(C'\fR, the host name
reported by \fItcp-env\fR is replaced by the string following the
-\f(CW@\fR, and the user name is replaced by the string preceding the
-\f(CW@\fR.
+\&\f(CW\*(C`@\*(C'\fR, and the user name is replaced by the string preceding the
+\&\f(CW\*(C`@\*(C'\fR.
If the local host name reported by \fItcp-env\fR matches one of those
in \fI/var/qmail/control/virtualdomains\fR, \fIcheckvpw\fR prepends the
-\fIprepend\fR string associated with the host name to the given user
+\&\fIprepend\fR string associated with the host name to the given user
name.
Wildcards in \fIvirtualdomains\fR are permitted and are handled in the
-same way \fIqmail\fR handles them (see the \fIqmail-send\fR manpage).
-For example, if the line \f(CW.bar.com:bar\fR appears in the virtual hosts
-file, it matches \f(CWone.two.bar.com\fR but not \f(CWbar.com\fR.
+same way \fIqmail\fR handles them (see qmail-send).
+For example, if the line \f(CW\*(C`.bar.com:bar\*(C'\fR appears in the virtual hosts
+file, it matches \f(CW\*(C`one.two.bar.com\*(C'\fR but not \f(CW\*(C`bar.com\*(C'\fR.
.PP
If the user name resulting from the above step appears in the system
password file (typically \fI/etc/passwd\fR), the user is treated as a
@@ -238,54 +184,39 @@
If this authentication succeeds, the mail directory is set to the
subdirectory named on the command line.
If the user name does not appear in the system password file and is of
-the form \f(CWname-ext\fR where \f(CWname\fR does appear in the password
+the form \f(CW\*(C`name\-ext\*(C'\fR where \f(CW\*(C`name\*(C'\fR does appear in the password
file, the user is treated as a \*(L"virtual\*(R" user and authenticated with the
information from a file named \fIpasswd\fR in the user's home directory.
If this authentication succeeds, the mail directory is set to the
subdirectory \fIusers/ext/\fR in the user's home directory, where
-\f(CWext\fR is from the above step.
+\&\f(CW\*(C`ext\*(C'\fR is from the above step.
.PP
-\fIcheckvpw\fR also does some rewriting on the arguments of the
+\&\fIcheckvpw\fR also does some rewriting on the arguments of the
subprogram.
-Any argument matching the string \*(L"\f(CWmaildir\fR\*(R" (ignoring case) is
+Any argument matching the string "\f(CW\*(C`maildir\*(C'\fR" (ignoring case) is
replaced with the full path of the mail directory, as determined by the
steps above.
.PP
This program may be invoked in combination with \fIqmail-popup\fR and
-\fIqmail-pop3d\fR from inetd by placing the following line in the
-\fI/etc/inetd.conf\fR configuration file (all one line):
+\&\fIqmail\-pop3d\fR from inetd by placing the following line in the
+\&\fI/etc/inetd.conf\fR configuration file (all one line):
.PP
.Vb 1
\& pop-3 stream tcp nowait root /var/qmail/bin/tcp-env tcp-env -R /var/qmail/bin/qmail-popup <hostname> /usr/bin/checkvpw /var/qmail/bin/qmail-pop3d Maildir/
.Ve
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
0 if the user is successfully authenticated, nonzero if any error
occurred. Exit code 1 indicates that a bad password was given, 2
indicates that the program was used incorrectly, and 111 indicates
a temporary failure.
.SH "ENVIRONMENT"
-\fIcheckvpw\fR requires that \f(CWTCPLOCALHOST\fR be set to the host name of
+.IX Header "ENVIRONMENT"
+\&\fIcheckvpw\fR requires that \f(CW\*(C`TCPLOCALHOST\*(C'\fR be set to the host name of
the local address of the connection.
.SH "SEE ALSO"
-\fIvdeliver\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIvdeliver\fR\|(1)
.SH "AUTHOR"
+.IX Header "AUTHOR"
Bruce Guenter <\fIbruceg@em.ca\fR>.
-
-.rn }` ''
-.IX Title "CHECKVPW 1"
-.IX Name "checkvpw - check passwords for virtual and non-virtual users"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "ENVIRONMENT"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHOR"
-
--- a/authenticate/checkvpw.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/checkvpw.cc Sun Jan 20 00:22:09 2008 +0100
@@ -16,6 +16,7 @@
#include <config.h>
#include <errno.h>
+#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "config/configrc.h"
--- a/authenticate/checkvpw.html Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/checkvpw.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,125 +1,123 @@
-<HTML>
-<HEAD>
-<TITLE>checkvpw - check passwords for virtual and non-virtual users</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>checkvpw - check passwords for virtual and non-virtual users</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#ENVIRONMENT">ENVIRONMENT</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHOR">AUTHOR</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#environment">ENVIRONMENT</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-checkvpw - check passwords for virtual and non-virtual users
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>checkvpw</STRONG> <STRONG>subprogram</STRONG> [<STRONG>arguments...</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is a drop-in replacement for the standard checkpassword,
-written by D. J. Bernstein (<A
-HREF="mailto:djb@pobox.com">djb@pobox.com</A>) In the absence of virtual
-hosting (determined by the use of
-<EM>/var/qmail/control/virtualdomainss</EM> and IP aliases), it behaves identically to checkpassword. When virtual
-hosting is used, it permits logins from a unique set of users for each of
-the aliases.
-
-<P>
-<EM>checkvpw</EM> must be run from either the <EM>tcp-env</EM> program (part of the <EM>qmail</EM>
-package) or from a suitable substitute, such as <EM>tcpserver</EM>
-(part of the <EM>ucspi-tcp</EM> package). These packages are used to determine to which address a remote
-host is connecting.
-<EM>checkvpw</EM> must also be passed the checkpassword-compatible authentication data on
-file descriptor three. This can be accomplished by running it from a tool
-such as
-<EM>qmail-popup</EM>.
-
-<P>
-<EM>checkvpw</EM> accepts a command line in the following format:
-
-<P>
-<PRE> checkvpw [subprogram] [arguments...]
-</PRE>
-<P>
-If the authentication information is valid, the subprogram is run,
-otherwise <EM>checkvpw</EM> returns an error to the program that invokes it.
-
-<P>
-If the user name contains the character <CODE>@</CODE>, the host name reported by <EM>tcp-env</EM> is replaced by the string following the
-<CODE>@</CODE>, and the user name is replaced by the string preceding the
-<CODE>@</CODE>. If the local host name reported by <EM>tcp-env</EM> matches one of those in <EM>/var/qmail/control/virtualdomains</EM>, <EM>checkvpw</EM> prepends the
-<EM>prepend</EM> string associated with the host name to the given user name. Wildcards in <EM>virtualdomains</EM> are permitted and are handled in the same way <EM>qmail</EM> handles them (see <EM>qmail-send</EM>). For example, if the line <CODE>.bar.com:bar</CODE> appears in the virtual hosts file, it matches <CODE>one.two.bar.com</CODE> but not <CODE>bar.com</CODE>.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>checkvpw - check passwords for virtual and non-virtual users</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>checkvpw</strong> <strong>subprogram</strong> [<strong>arguments...</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is a drop-in replacement for the standard checkpassword,
+written by D. J. Bernstein (<a href="mailto:djb@pobox.com">djb@pobox.com</a>)
+In the absence of virtual hosting (determined by the use of
+<em>/var/qmail/control/virtualdomainss</em> and IP aliases),
+it behaves identically to checkpassword.
+When virtual hosting is used, it permits logins from a unique set of
+users for each of the aliases.</p>
+<p><em>checkvpw</em> must be run from either the <em>tcp-env</em> program
+(part of the <em>qmail</em>
+package) or from a suitable substitute, such as <em>tcpserver</em>
+(part of the <em>ucspi-tcp</em> package).
+These packages are used to determine to
+which address a remote host is connecting.
+<em>checkvpw</em> must also be passed the checkpassword-compatible
+authentication data on file descriptor three.
+This can be accomplished by running it from a tool such as
+<em>qmail-popup</em>.</p>
+<p><em>checkvpw</em> accepts a command line in the following format:</p>
+<pre>
+ checkvpw [subprogram] [arguments...]</pre>
+<p>If the authentication information is valid, the subprogram is run,
+otherwise <em>checkvpw</em> returns an error to the program that invokes it.</p>
+<p>If the user name contains the character <code>@</code>, the host name
+reported by <em>tcp-env</em> is replaced by the string following the
+<code>@</code>, and the user name is replaced by the string preceding the
+<code>@</code>.
+If the local host name reported by <em>tcp-env</em> matches one of those
+in <em>/var/qmail/control/virtualdomains</em>, <em>checkvpw</em> prepends the
+<em>prepend</em> string associated with the host name to the given user
+name.
+Wildcards in <em>virtualdomains</em> are permitted and are handled in the
+same way <em>qmail</em> handles them (see <em>qmail-send</em>).
+For example, if the line <code>.bar.com:bar</code> appears in the virtual hosts
+file, it matches <code>one.two.bar.com</code> but not <code>bar.com</code>.</p>
+<p>If the user name resulting from the above step appears in the system
+password file (typically <em>/etc/passwd</em>), the user is treated as a
+local user and authenticated with the information from that file.
+If this authentication succeeds, the mail directory is set to the
+subdirectory named on the command line.
+If the user name does not appear in the system password file and is of
+the form <code>name-ext</code> where <code>name</code> does appear in the password
+file, the user is treated as a ``virtual'' user and authenticated with the
+information from a file named <em>passwd</em> in the user's home directory.
+If this authentication succeeds, the mail directory is set to the
+subdirectory <em>users/ext/</em> in the user's home directory, where
+<code>ext</code> is from the above step.</p>
+<p><em>checkvpw</em> also does some rewriting on the arguments of the
+subprogram.
+Any argument matching the string ``<code>maildir</code>'' (ignoring case) is
+replaced with the full path of the mail directory, as determined by the
+steps above.</p>
+<p>This program may be invoked in combination with <em>qmail-popup</em> and
+<em>qmail-pop3d</em> from inetd by placing the following line in the
+<em>/etc/inetd.conf</em> configuration file (all one line):</p>
+<pre>
+ pop-3 stream tcp nowait root /var/qmail/bin/tcp-env tcp-env -R /var/qmail/bin/qmail-popup <hostname> /usr/bin/checkvpw /var/qmail/bin/qmail-pop3d Maildir/</pre>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>0 if the user is successfully authenticated, nonzero if any error
+occurred. Exit code 1 indicates that a bad password was given, 2
+indicates that the program was used incorrectly, and 111 indicates
+a temporary failure.</p>
+<p>
+</p>
+<hr />
+<h1><a name="environment">ENVIRONMENT</a></h1>
+<p><em>checkvpw</em> requires that <code>TCPLOCALHOST</code> be set to the host name of
+the local address of the connection.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vdeliver(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Bruce Guenter <<em><a href="mailto:bruceg@em.ca">bruceg@em.ca</a></em>>.</p>
-<P>
-If the user name resulting from the above step appears in the system
-password file (typically <EM>/etc/passwd</EM>), the user is treated as a local user and authenticated with the
-information from that file. If this authentication succeeds, the mail
-directory is set to the subdirectory named on the command line. If the user
-name does not appear in the system password file and is of the form <CODE>name-ext</CODE> where <CODE>name</CODE> does appear in the password file, the user is treated as a ``virtual'' user
-and authenticated with the information from a file named <EM>passwd</EM> in the user's home directory. If this authentication succeeds, the mail
-directory is set to the subdirectory <EM>users/ext/</EM> in the user's home directory, where
-<CODE>ext</CODE> is from the above step.
-
-<P>
-<EM>checkvpw</EM> also does some rewriting on the arguments of the subprogram. Any argument
-matching the string ``<CODE>maildir</CODE>'' (ignoring case) is replaced with the full path of the mail directory, as
-determined by the steps above.
-
-<P>
-This program may be invoked in combination with <EM>qmail-popup</EM> and
-<EM>qmail-pop3d</EM> from inetd by placing the following line in the
-<EM>/etc/inetd.conf</EM> configuration file (all one line):
+</body>
-<P>
-<PRE> pop-3 stream tcp nowait root /var/qmail/bin/tcp-env tcp-env -R /var/qmail/bin/qmail-popup <hostname> /usr/bin/checkvpw /var/qmail/bin/qmail-pop3d Maildir/
-</PRE>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-0 if the user is successfully authenticated, nonzero if any error occurred.
-Exit code 1 indicates that a bad password was given, 2 indicates that the
-program was used incorrectly, and 111 indicates a temporary failure.
-
-<P>
-<HR>
-<H1><A NAME="ENVIRONMENT">ENVIRONMENT</A></H1>
-<P>
-<EM>checkvpw</EM> requires that <CODE>TCPLOCALHOST</CODE> be set to the host name of the local address of the connection.
-
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vdeliver(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="AUTHOR">AUTHOR</A></H1>
-<P>
-Bruce Guenter <<EM>bruceg@em.ca</EM>>.
-
-</BODY>
-
-</HTML>
+</html>
--- a/authenticate/vauthenticate.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/vauthenticate.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VAUTHENTICATE 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,105 +109,80 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VAUTHENTICATE 1"
+.TH VAUTHENTICATE 1 "2003-12-01" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vauthenticate \- Authenticate a virtual user
.SH "SYNOPSIS"
-\fBvauthenticate\fR
+.IX Header "SYNOPSIS"
+\&\fBvauthenticate\fR
.SH "DESCRIPTION"
-\fIvauthenticate\fR reads a domain name, user name, and pass phrase from
+.IX Header "DESCRIPTION"
+\&\fIvauthenticate\fR reads a domain name, user name, and pass phrase from
standard input, and authenticates the virtual user. If authentication
is successful, it prints out information about the virtual user on
stdout
.PP
The domain name, user name, and pass phrase are passed to
-\fIvauthenticate\fR on standard input each seperated by a NUL byte.
+\&\fIvauthenticate\fR on standard input each seperated by a \s-1NUL\s0 byte.
.PP
The output consists of a series of lines containing an identifier, an
equal sign, and the data for that identifier, terminated by a newline.
The identifiers are:
-.Ip "\s-1UID\s0" 4
+.IP "\s-1UID\s0" 4
+.IX Item "UID"
The base user's numerical user \s-1ID\s0.
-.Ip "\s-1GID\s0" 4
+.IP "\s-1GID\s0" 4
+.IX Item "GID"
The base user's numerical group \s-1ID\s0.
-.Ip "\s-1USER\s0" 4
+.IP "\s-1USER\s0" 4
+.IX Item "USER"
The base user's name.
-.Ip "\s-1HOME\s0" 4
+.IP "\s-1HOME\s0" 4
+.IX Item "HOME"
The base user's home directory.
-.Ip "\s-1MAILDIR\s0" 4
-The virtual user's mailbox directory, relative to \f(CWHOME\fR.
-.Ip "\s-1VUSER\s0" 4
+.IP "\s-1MAILDIR\s0" 4
+.IX Item "MAILDIR"
+The virtual user's mailbox directory, relative to \f(CW\*(C`HOME\*(C'\fR.
+.IP "\s-1VUSER\s0" 4
+.IX Item "VUSER"
The virtual user's name.
.SH "OPTIONS"
+.IX Header "OPTIONS"
None
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
Returns 0 if authentication succeeds, and non-zero otherwise.
.SH "SEE ALSO"
-\fIvmailmgr\fR\|(7)
+.IX Header "SEE ALSO"
+\&\fIvmailmgr\fR\|(7)
.SH "CAVEATS"
+.IX Header "CAVEATS"
Although the output from \fIvauthenticate\fR appears to be suitable for
using as shell input, care must be taken to escape characters that
would cause the shell to misbehave, such as semicolons.
.SH "RESTRICTIONS"
+.IX Header "RESTRICTIONS"
This program will not authenticate non-virtual users.
.SH "AUTHOR"
+.IX Header "AUTHOR"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VAUTHENTICATE 1"
-.IX Name "vauthenticate - Authenticate a virtual user"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Item "\s-1UID\s0"
-
-.IX Item "\s-1GID\s0"
-
-.IX Item "\s-1USER\s0"
-
-.IX Item "\s-1HOME\s0"
-
-.IX Item "\s-1MAILDIR\s0"
-
-.IX Item "\s-1VUSER\s0"
-
-.IX Header "OPTIONS"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "SEE ALSO"
-
-.IX Header "CAVEATS"
-
-.IX Header "RESTRICTIONS"
-
-.IX Header "AUTHOR"
-
--- a/authenticate/vauthenticate.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/vauthenticate.cc Sun Jan 20 00:22:09 2008 +0100
@@ -16,6 +16,7 @@
#include <config.h>
#include <errno.h>
+#include <stdlib.h>
#include <unistd.h>
#include "authvlib.h"
#include "fdbuf/fdbuf.h"
--- a/authenticate/vauthenticate.html Sun Jan 20 00:12:17 2008 +0100
+++ b/authenticate/vauthenticate.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,122 +1,123 @@
-<HTML>
-<HEAD>
-<TITLE>vauthenticate - Authenticate a virtual user</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vauthenticate - Authenticate a virtual user</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#CAVEATS">CAVEATS</A>
- <LI><A HREF="#RESTRICTIONS">RESTRICTIONS</A>
- <LI><A HREF="#AUTHOR">AUTHOR</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#caveats">CAVEATS</a></li>
+ <li><a href="#restrictions">RESTRICTIONS</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vauthenticate - Authenticate a virtual user
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vauthenticate</STRONG>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-<EM>vauthenticate</EM> reads a domain name, user name, and pass phrase from standard input, and
-authenticates the virtual user. If authentication is successful, it prints
-out information about the virtual user on stdout
-
-<P>
-The domain name, user name, and pass phrase are passed to
-<EM>vauthenticate</EM> on standard input each seperated by a NUL byte.
-
-<P>
-The output consists of a series of lines containing an identifier, an equal
-sign, and the data for that identifier, terminated by a newline. The
-identifiers are:
-
-<DL>
-<DT><STRONG><A NAME="item_UID">UID</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vauthenticate - Authenticate a virtual user</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vauthenticate</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p><em>vauthenticate</em> reads a domain name, user name, and pass phrase from
+standard input, and authenticates the virtual user. If authentication
+is successful, it prints out information about the virtual user on
+stdout</p>
+<p>The domain name, user name, and pass phrase are passed to
+<em>vauthenticate</em> on standard input each seperated by a NUL byte.</p>
+<p>The output consists of a series of lines containing an identifier, an
+equal sign, and the data for that identifier, terminated by a newline.
+The identifiers are:</p>
+<dl>
+<dt><strong><a name="item_uid">UID</a></strong><br />
+</dt>
+<dd>
The base user's numerical user ID.
-
-<DT><STRONG><A NAME="item_GID">GID</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item_gid">GID</a></strong><br />
+</dt>
+<dd>
The base user's numerical group ID.
-
-<DT><STRONG><A NAME="item_USER">USER</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item_user">USER</a></strong><br />
+</dt>
+<dd>
The base user's name.
-
-<DT><STRONG><A NAME="item_HOME">HOME</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item_home">HOME</a></strong><br />
+</dt>
+<dd>
The base user's home directory.
+</dd>
+<p></p>
+<dt><strong><a name="item_maildir">MAILDIR</a></strong><br />
+</dt>
+<dd>
+The virtual user's mailbox directory, relative to <a href="#item_home"><code>HOME</code></a>.
+</dd>
+<p></p>
+<dt><strong><a name="item_vuser">VUSER</a></strong><br />
+</dt>
+<dd>
+The virtual user's name.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<p>None</p>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>Returns 0 if authentication succeeds, and non-zero otherwise.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vmailmgr(7)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="caveats">CAVEATS</a></h1>
+<p>Although the output from <em>vauthenticate</em> appears to be suitable for
+using as shell input, care must be taken to escape characters that
+would cause the shell to misbehave, such as semicolons.</p>
+<p>
+</p>
+<hr />
+<h1><a name="restrictions">RESTRICTIONS</a></h1>
+<p>This program will not authenticate non-virtual users.</p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<DT><STRONG><A NAME="item_MAILDIR">MAILDIR</A></STRONG><DD>
-<P>
-The virtual user's mailbox directory, relative to <A HREF="#item_HOME">HOME</A>.
-
-<DT><STRONG><A NAME="item_VUSER">VUSER</A></STRONG><DD>
-<P>
-The virtual user's name.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<P>
-None
-
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-Returns 0 if authentication succeeds, and non-zero otherwise.
+</body>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vmailmgr(7)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="CAVEATS">CAVEATS</A></H1>
-<P>
-Although the output from <EM>vauthenticate</EM> appears to be suitable for using as shell input, care must be taken to
-escape characters that would cause the shell to misbehave, such as
-semicolons.
-
-<P>
-<HR>
-<H1><A NAME="RESTRICTIONS">RESTRICTIONS</A></H1>
-<P>
-This program will not authenticate non-virtual users.
-
-<P>
-<HR>
-<H1><A NAME="AUTHOR">AUTHOR</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-</BODY>
-
-</HTML>
+</html>
--- a/cgi/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/cgi/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -3,7 +3,6 @@
cgi_PROGRAMS = vpasswd vadduser vdeluser vaddalias vchattr vchforwards \
listvdomain
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = -I../lib
vpasswd_SOURCES = vpasswd.cc
--- a/cgi/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/cgi/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -86,7 +88,6 @@
cgi_PROGRAMS = vpasswd vadduser vdeluser vaddalias vchattr vchforwards listvdomain
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = -I../lib
vpasswd_SOURCES = vpasswd.cc
@@ -143,12 +144,13 @@
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(vpasswd_SOURCES) $(vadduser_SOURCES) $(vdeluser_SOURCES) $(vaddalias_SOURCES) $(vchattr_SOURCES) $(vchforwards_SOURCES) $(listvdomain_SOURCES)
OBJECTS = $(vpasswd_OBJECTS) $(vadduser_OBJECTS) $(vdeluser_OBJECTS) $(vaddalias_OBJECTS) $(vchattr_OBJECTS) $(vchforwards_OBJECTS) $(listvdomain_OBJECTS)
@@ -178,8 +180,8 @@
$(mkinstalldirs) $(DESTDIR)$(cgidir)
@list='$(cgi_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(cgidir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(cgidir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(cgidir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(cgidir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -302,14 +304,6 @@
../lib/cgi/cgi-args.h ../lib/misc/server.h \
../lib/misc/response.h ../lib/config/configrc.h \
../lib/misc/strlist.h
-vchalias.o: vchalias.cc ../config.h ../lib/cgi/cgi-base.h \
- ../lib/mystring/mystring.h ../lib/mystring/rep.h \
- ../lib/mystring/iter.h ../lib/mystring/join.h \
- ../lib/cgi/cgi-args.h ../lib/misc/server.h \
- ../lib/misc/response.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/vdomain/vdomain.h \
- ../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
- ../lib/vpwentry/vpwentry.h ../lib/misc/itoa.h
vchattr.o: vchattr.cc ../config.h ../lib/cgi/cgi-base.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
@@ -363,7 +357,7 @@
all-am: Makefile $(PROGRAMS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(cgidir)
--- a/cgi/listvdomain.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/cgi/listvdomain.cc Sun Jan 20 00:22:09 2008 +0100
@@ -59,23 +59,24 @@
void show_user(const user* user)
{
- vpwentry vpw;
- vpw.from_record(user->name, user->code);
+ vpwentry* vpw = vpwentry::new_from_record(user->name, user->code);
mystring link;
mystring elink;
if(!!userlink) {
- link = "<a href=\"" + do_subst(userlink, vpw.name) + "\">";
+ link = "<a href=\"" + do_subst(userlink, vpw->name) + "\">";
elink = "</a>";
}
fout << "<tr>"
- << cell_pre << link << vpw.name << elink << cell_post
- << cell_pre << vpw.mailbox << cell_post;
- for(mystring_iter iter = vpw.forwards; iter; ++iter)
+ << cell_pre << link << vpw->name << elink << cell_post
+ << cell_pre
+ << (vpw->has_mailbox ? vpw->directory.c_str() : "") << cell_post;
+ for(mystring_iter iter = vpw->forwards; iter; ++iter)
fout << cell_pre << *iter << cell_post;
fout << "</tr>\n";
+ delete vpw;
}
mystring load_users(int fd, unsigned& count, user**& array)
--- a/cgi/vaddalias.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/cgi/vaddalias.cc Sun Jan 20 00:22:09 2008 +0100
@@ -33,14 +33,15 @@
mystring errmsg;
unsigned dests = destination.count(',') + 1;
- server_call call("adduser2", dests + 5);
+ server_call call("adduser3", dests + 6);
call.operand(0, vdomain);
call.operand(1, username);
call.operand(2, password);
call.operand(3, newpass1);
call.operand(4, "");
+ call.operand(5, "");
- unsigned i = 5;
+ unsigned i = 6;
for(mystring_iter iter(destination, ','); iter; ++iter, ++i)
call.operand(i, *iter);
--- a/cgi/vadduser.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/cgi/vadduser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -30,21 +30,20 @@
unsigned dests = !destination ? 0 : destination.count(',') + 1;
- if(!userdir)
- userdir = username;
if(newpass1 != newpass2)
error("The passwords you entered do not match");
else {
- server_call call("adduser2", dests + 5);
+ server_call call("adduser3", dests + 6);
call.operand(0, vdomain);
call.operand(1, username);
call.operand(2, password);
call.operand(3, newpass1);
call.operand(4, userdir);
+ call.operand(5, "yes");
unsigned i = 0;
for(mystring_iter iter(destination, ','); i < dests && iter; ++iter, ++i)
- call.operand(i+5, *iter);
+ call.operand(i+6, *iter);
response resp = call.call();
if(!resp)
--- a/commands/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -1,23 +1,20 @@
-bin_PROGRAMS = @CDBPROGS@ \
- listvdomain vadduser vaddusers vchattr vchforwards vcheckquota \
- vdeliver vdeluser vpasswd vpasswd2db vpasswds vpopbull vsetup
-bin_SCRIPTS = @CDBSCRIPTS@ vaddalias vconf2dir
+bin_PROGRAMS = dumpvuser listvdomain vadduser vaddusers vchattr vchforwards \
+ vdeliver vdeluser vpasswd vpasswds vrehash vsetup vupgrade
+bin_SCRIPTS = vaddalias vconf2dir
noinst_HEADERS = vcommand.h
-noinst_PODS = vpasswd2cdb.pod vrehash.pod \
- listvdomain.pod vadduser.pod vadduser.pod vchattr.pod \
- vchforwards.pod vcheckquota.pod vdeliver.pod vdeluser.pod \
- vpasswd.pod vpasswd2db.pod vpasswds.pod vpopbull.pod vsetup.pod
+noinst_PODS = \
+ dumpvuser.pod listvdomain.pod vadduser.pod vadduser.pod vchattr.pod \
+ vchforwards.pod vdeliver.pod vdeluser.pod \
+ vpasswd.pod vpasswds.pod vrehash.pod vsetup.pod vupgrade.pod
noinst_HTMLS = $(noinst_PODS:.pod=.html)
man_MANS = $(noinst_PODS:.pod=.1)
CLEANFILES = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) \
pod2html-dircache pod2html-itemcache
-EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) $(bin_SCRIPTS) \
- vpasswd2cdb.cc vrehash.cc
+EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) $(bin_SCRIPTS)
-EXTRA_PROGRAMS = vpasswd2cdb vrehash
-EXTRA_SCRIPTS = allvpasswd2cdb
+EXTRA_SCRIPTS = vupgrade-all
all: docs
@@ -26,14 +23,16 @@
dist-hook:
touch $(distdir)/*.html $(distdir)/*.[123456789]
-%.pod: %.cc ../configure.in ../lib/cli/cli2pod.pl
- perl ../lib/cli/cli2pod.pl $< >$@
+%.pod: %.cc ../configure.in ../lib/cli++/cli++topod.pl
+ perl ../lib/cli++/cli++topod.pl $< >$@
%.1: %.pod ../configure.in; $(POD2MAN) --section=1 $< >$@
%.html: %.pod; $(POD2HTML) $< >$@
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = -I../lib -DBINDIR=\"@bindir@\"
+dumpvuser_SOURCES = dumpvuser.cc vcommand.cc
+dumpvuser_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
+
listvdomain_SOURCES = listvdomain.cc vcommand.cc
listvdomain_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
@@ -46,9 +45,6 @@
vchattr_SOURCES = vchattr.cc vcommand.cc
vchattr_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-vcheckquota_SOURCES = vcheckquota.cc
-vcheckquota_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
vchforwards_SOURCES = vchforwards.cc vcommand.cc
vchforwards_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
@@ -64,21 +60,11 @@
vpasswds_SOURCES = vpasswds.cc vcommand.cc
vpasswds_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-vpasswd2db_SOURCES = vpasswd2db.cc vcommand.cc
-vpasswd2db_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
-vpopbull_SOURCES = vpopbull.cc vcommand.cc
-vpopbull_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
+vupgrade_SOURCES = vupgrade.cc vcommand.cc
+vupgrade_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
vsetup_SOURCES = vsetup.cc vcommand.cc
vsetup_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-if VPWTABLE_CDB
-
-vpasswd2cdb_SOURCES = vpasswd2cdb.cc vcommand.cc
-vpasswd2cdb_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
vrehash_SOURCES = vrehash.cc vcommand.cc
vrehash_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
-endif
--- a/commands/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -81,26 +83,26 @@
phpdir = @phpdir@
pythonlibdir = @pythonlibdir@
-bin_PROGRAMS = @CDBPROGS@ listvdomain vadduser vaddusers vchattr vchforwards vcheckquota vdeliver vdeluser vpasswd vpasswd2db vpasswds vpopbull vsetup
+bin_PROGRAMS = dumpvuser listvdomain vadduser vaddusers vchattr vchforwards vdeliver vdeluser vpasswd vpasswds vrehash vsetup vupgrade
-bin_SCRIPTS = @CDBSCRIPTS@ vaddalias vconf2dir
+bin_SCRIPTS = vaddalias vconf2dir
noinst_HEADERS = vcommand.h
-noinst_PODS = vpasswd2cdb.pod vrehash.pod listvdomain.pod vadduser.pod vadduser.pod vchattr.pod vchforwards.pod vcheckquota.pod vdeliver.pod vdeluser.pod vpasswd.pod vpasswd2db.pod vpasswds.pod vpopbull.pod vsetup.pod
+noinst_PODS = dumpvuser.pod listvdomain.pod vadduser.pod vadduser.pod vchattr.pod vchforwards.pod vdeliver.pod vdeluser.pod vpasswd.pod vpasswds.pod vrehash.pod vsetup.pod vupgrade.pod
noinst_HTMLS = $(noinst_PODS:.pod=.html)
man_MANS = $(noinst_PODS:.pod=.1)
CLEANFILES = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) pod2html-dircache pod2html-itemcache
-EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) $(bin_SCRIPTS) vpasswd2cdb.cc vrehash.cc
+EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS) $(bin_SCRIPTS)
+EXTRA_SCRIPTS = vupgrade-all
-EXTRA_PROGRAMS = vpasswd2cdb vrehash
-EXTRA_SCRIPTS = allvpasswd2cdb
+INCLUDES = -I../lib -DBINDIR=\"@bindir@\"
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
-INCLUDES = -I../lib -DBINDIR=\"@bindir@\"
+dumpvuser_SOURCES = dumpvuser.cc vcommand.cc
+dumpvuser_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
listvdomain_SOURCES = listvdomain.cc vcommand.cc
listvdomain_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
@@ -114,9 +116,6 @@
vchattr_SOURCES = vchattr.cc vcommand.cc
vchattr_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-vcheckquota_SOURCES = vcheckquota.cc
-vcheckquota_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
vchforwards_SOURCES = vchforwards.cc vcommand.cc
vchforwards_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
@@ -132,20 +131,14 @@
vpasswds_SOURCES = vpasswds.cc vcommand.cc
vpasswds_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-vpasswd2db_SOURCES = vpasswd2db.cc vcommand.cc
-vpasswd2db_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
-vpopbull_SOURCES = vpopbull.cc vcommand.cc
-vpopbull_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
+vupgrade_SOURCES = vupgrade.cc vcommand.cc
+vupgrade_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
vsetup_SOURCES = vsetup.cc vcommand.cc
vsetup_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-@VPWTABLE_CDB_TRUE@vpasswd2cdb_SOURCES = vpasswd2cdb.cc vcommand.cc
-@VPWTABLE_CDB_TRUE@vpasswd2cdb_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
-
-@VPWTABLE_CDB_TRUE@vrehash_SOURCES = vrehash.cc vcommand.cc
-@VPWTABLE_CDB_TRUE@vrehash_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
+vrehash_SOURCES = vrehash.cc vcommand.cc
+vrehash_LDADD = ../lib/libcli.a ../lib/libvmailmgr.a
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -156,14 +149,9 @@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-@VPWTABLE_CDB_TRUE@vpasswd2cdb_OBJECTS = vpasswd2cdb.o vcommand.o
-@VPWTABLE_CDB_TRUE@vpasswd2cdb_DEPENDENCIES = ../lib/libcli.a \
-@VPWTABLE_CDB_TRUE@../lib/libvmailmgr.a
-vpasswd2cdb_LDFLAGS =
-@VPWTABLE_CDB_TRUE@vrehash_OBJECTS = vrehash.o vcommand.o
-@VPWTABLE_CDB_TRUE@vrehash_DEPENDENCIES = ../lib/libcli.a \
-@VPWTABLE_CDB_TRUE@../lib/libvmailmgr.a
-vrehash_LDFLAGS =
+dumpvuser_OBJECTS = dumpvuser.o vcommand.o
+dumpvuser_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
+dumpvuser_LDFLAGS =
listvdomain_OBJECTS = listvdomain.o vcommand.o
listvdomain_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
listvdomain_LDFLAGS =
@@ -179,9 +167,6 @@
vchforwards_OBJECTS = vchforwards.o vcommand.o
vchforwards_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
vchforwards_LDFLAGS =
-vcheckquota_OBJECTS = vcheckquota.o
-vcheckquota_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
-vcheckquota_LDFLAGS =
vdeliver_OBJECTS = vdeliver.o vcommand.o
vdeliver_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
vdeliver_LDFLAGS =
@@ -191,23 +176,24 @@
vpasswd_OBJECTS = vpasswd.o vcommand.o
vpasswd_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
vpasswd_LDFLAGS =
-vpasswd2db_OBJECTS = vpasswd2db.o vcommand.o
-vpasswd2db_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
-vpasswd2db_LDFLAGS =
vpasswds_OBJECTS = vpasswds.o vcommand.o
vpasswds_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
vpasswds_LDFLAGS =
-vpopbull_OBJECTS = vpopbull.o vcommand.o
-vpopbull_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
-vpopbull_LDFLAGS =
+vrehash_OBJECTS = vrehash.o vcommand.o
+vrehash_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
+vrehash_LDFLAGS =
vsetup_OBJECTS = vsetup.o vcommand.o
vsetup_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
vsetup_LDFLAGS =
+vupgrade_OBJECTS = vupgrade.o vcommand.o
+vupgrade_DEPENDENCIES = ../lib/libcli.a ../lib/libvmailmgr.a
+vupgrade_LDFLAGS =
SCRIPTS = $(bin_SCRIPTS)
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
man1dir = $(mandir)/man1
MANS = $(man_MANS)
@@ -219,10 +205,10 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
-SOURCES = $(vpasswd2cdb_SOURCES) $(vrehash_SOURCES) $(listvdomain_SOURCES) $(vadduser_SOURCES) $(vaddusers_SOURCES) $(vchattr_SOURCES) $(vchforwards_SOURCES) $(vcheckquota_SOURCES) $(vdeliver_SOURCES) $(vdeluser_SOURCES) $(vpasswd_SOURCES) $(vpasswd2db_SOURCES) $(vpasswds_SOURCES) $(vpopbull_SOURCES) $(vsetup_SOURCES)
-OBJECTS = $(vpasswd2cdb_OBJECTS) $(vrehash_OBJECTS) $(listvdomain_OBJECTS) $(vadduser_OBJECTS) $(vaddusers_OBJECTS) $(vchattr_OBJECTS) $(vchforwards_OBJECTS) $(vcheckquota_OBJECTS) $(vdeliver_OBJECTS) $(vdeluser_OBJECTS) $(vpasswd_OBJECTS) $(vpasswd2db_OBJECTS) $(vpasswds_OBJECTS) $(vpopbull_OBJECTS) $(vsetup_OBJECTS)
+SOURCES = $(dumpvuser_SOURCES) $(listvdomain_SOURCES) $(vadduser_SOURCES) $(vaddusers_SOURCES) $(vchattr_SOURCES) $(vchforwards_SOURCES) $(vdeliver_SOURCES) $(vdeluser_SOURCES) $(vpasswd_SOURCES) $(vpasswds_SOURCES) $(vrehash_SOURCES) $(vsetup_SOURCES) $(vupgrade_SOURCES)
+OBJECTS = $(dumpvuser_OBJECTS) $(listvdomain_OBJECTS) $(vadduser_OBJECTS) $(vaddusers_OBJECTS) $(vchattr_OBJECTS) $(vchforwards_OBJECTS) $(vdeliver_OBJECTS) $(vdeluser_OBJECTS) $(vpasswd_OBJECTS) $(vpasswds_OBJECTS) $(vrehash_OBJECTS) $(vsetup_OBJECTS) $(vupgrade_OBJECTS)
all: all-redirect
.SUFFIXES:
@@ -249,8 +235,8 @@
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -279,13 +265,9 @@
maintainer-clean-compile:
-vpasswd2cdb: $(vpasswd2cdb_OBJECTS) $(vpasswd2cdb_DEPENDENCIES)
- @rm -f vpasswd2cdb
- $(CXXLINK) $(vpasswd2cdb_LDFLAGS) $(vpasswd2cdb_OBJECTS) $(vpasswd2cdb_LDADD) $(LIBS)
-
-vrehash: $(vrehash_OBJECTS) $(vrehash_DEPENDENCIES)
- @rm -f vrehash
- $(CXXLINK) $(vrehash_LDFLAGS) $(vrehash_OBJECTS) $(vrehash_LDADD) $(LIBS)
+dumpvuser: $(dumpvuser_OBJECTS) $(dumpvuser_DEPENDENCIES)
+ @rm -f dumpvuser
+ $(CXXLINK) $(dumpvuser_LDFLAGS) $(dumpvuser_OBJECTS) $(dumpvuser_LDADD) $(LIBS)
listvdomain: $(listvdomain_OBJECTS) $(listvdomain_DEPENDENCIES)
@rm -f listvdomain
@@ -307,10 +289,6 @@
@rm -f vchforwards
$(CXXLINK) $(vchforwards_LDFLAGS) $(vchforwards_OBJECTS) $(vchforwards_LDADD) $(LIBS)
-vcheckquota: $(vcheckquota_OBJECTS) $(vcheckquota_DEPENDENCIES)
- @rm -f vcheckquota
- $(CXXLINK) $(vcheckquota_LDFLAGS) $(vcheckquota_OBJECTS) $(vcheckquota_LDADD) $(LIBS)
-
vdeliver: $(vdeliver_OBJECTS) $(vdeliver_DEPENDENCIES)
@rm -f vdeliver
$(CXXLINK) $(vdeliver_LDFLAGS) $(vdeliver_OBJECTS) $(vdeliver_LDADD) $(LIBS)
@@ -323,22 +301,22 @@
@rm -f vpasswd
$(CXXLINK) $(vpasswd_LDFLAGS) $(vpasswd_OBJECTS) $(vpasswd_LDADD) $(LIBS)
-vpasswd2db: $(vpasswd2db_OBJECTS) $(vpasswd2db_DEPENDENCIES)
- @rm -f vpasswd2db
- $(CXXLINK) $(vpasswd2db_LDFLAGS) $(vpasswd2db_OBJECTS) $(vpasswd2db_LDADD) $(LIBS)
-
vpasswds: $(vpasswds_OBJECTS) $(vpasswds_DEPENDENCIES)
@rm -f vpasswds
$(CXXLINK) $(vpasswds_LDFLAGS) $(vpasswds_OBJECTS) $(vpasswds_LDADD) $(LIBS)
-vpopbull: $(vpopbull_OBJECTS) $(vpopbull_DEPENDENCIES)
- @rm -f vpopbull
- $(CXXLINK) $(vpopbull_LDFLAGS) $(vpopbull_OBJECTS) $(vpopbull_LDADD) $(LIBS)
+vrehash: $(vrehash_OBJECTS) $(vrehash_DEPENDENCIES)
+ @rm -f vrehash
+ $(CXXLINK) $(vrehash_LDFLAGS) $(vrehash_OBJECTS) $(vrehash_LDADD) $(LIBS)
vsetup: $(vsetup_OBJECTS) $(vsetup_DEPENDENCIES)
@rm -f vsetup
$(CXXLINK) $(vsetup_LDFLAGS) $(vsetup_OBJECTS) $(vsetup_LDADD) $(LIBS)
+vupgrade: $(vupgrade_OBJECTS) $(vupgrade_DEPENDENCIES)
+ @rm -f vupgrade
+ $(CXXLINK) $(vupgrade_LDFLAGS) $(vupgrade_OBJECTS) $(vupgrade_LDADD) $(LIBS)
+
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@@ -444,11 +422,19 @@
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
+dumpvuser.o: dumpvuser.cc ../config.h ../lib/config/configrc.h \
+ ../lib/mystring/mystring.h ../lib/mystring/rep.h \
+ ../lib/mystring/iter.h ../lib/mystring/join.h \
+ ../lib/misc/strlist.h ../lib/vpwentry/vpwentry.h \
+ ../lib/cli++/cli++.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
+ ../lib/fdbuf/fdobuf.h vcommand.h ../lib/vdomain/vdomain.h \
+ ../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
+ ../lib/misc/response.h
listvdomain.o: listvdomain.cc ../config.h ../lib/config/configrc.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/strlist.h ../lib/vpwentry/vpwentry.h \
- ../lib/cli/cli.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
+ ../lib/cli++/cli++.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
../lib/fdbuf/fdobuf.h vcommand.h ../lib/vdomain/vdomain.h \
../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
../lib/misc/response.h
@@ -460,13 +446,13 @@
../lib/misc/strlist.h ../lib/misc/pwcrypt.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
- ../lib/misc/response.h ../lib/cli/cli.h
+ ../lib/misc/response.h ../lib/cli++/cli++.h
vaddusers.o: vaddusers.cc ../config.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/pwcrypt.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h vcommand.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
../lib/misc/response.h
@@ -475,14 +461,14 @@
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/passwdfn.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h vcommand.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
../lib/misc/response.h
vcheckquota.o: vcheckquota.cc ../config.h ../lib/config/configrc.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h ../lib/fdbuf/fdbuf.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
@@ -493,10 +479,10 @@
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
- ../lib/config/configrc.h ../lib/misc/strlist.h ../lib/cli/cli.h \
- vcommand.h ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
- ../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
- ../lib/misc/response.h
+ ../lib/config/configrc.h ../lib/misc/strlist.h \
+ ../lib/cli++/cli++.h vcommand.h ../lib/vdomain/vdomain.h \
+ ../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
+ ../lib/vpwentry/vpwentry.h ../lib/misc/response.h
vcommand.o: vcommand.cc ../config.h vcommand.h ../lib/vdomain/vdomain.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
@@ -507,7 +493,7 @@
../lib/fdbuf/fdobuf.h
vdeliver.o: vdeliver.cc ../config.h ../lib/ac/time.h ../lib/ac/wait.h \
../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
- ../lib/fdbuf/fdobuf.h ../lib/cli/cli.h vcommand.h \
+ ../lib/fdbuf/fdobuf.h ../lib/cli++/cli++.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
../lib/mystring/join.h ../lib/config/configrc.h \
@@ -519,48 +505,32 @@
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/config/configrc.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
- ../lib/mystring/join.h ../lib/misc/strlist.h ../lib/cli/cli.h \
- vcommand.h ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
- ../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
- ../lib/misc/response.h
+ ../lib/mystring/join.h ../lib/misc/strlist.h \
+ ../lib/cli++/cli++.h vcommand.h ../lib/vdomain/vdomain.h \
+ ../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
+ ../lib/vpwentry/vpwentry.h ../lib/misc/response.h
vpasswd.o: vpasswd.cc ../config.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/passwdfn.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h vcommand.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
../lib/misc/response.h
-vpasswd2cdb.o: vpasswd2cdb.cc ../config.h ../lib/cdb++/cdb++.h \
- ../lib/mystring/mystring.h ../lib/mystring/rep.h \
- ../lib/mystring/iter.h ../lib/mystring/join.h \
- ../lib/cdb++/datum.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
- ../lib/fdbuf/fdobuf.h ../lib/cli/cli.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/vpwentry/vpwentry.h vcommand.h \
- ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
- ../lib/vpwtable/vpwtable.h ../lib/misc/response.h
-vpasswd2db.o: vpasswd2db.cc ../config.h ../lib/cli/cli.h \
- ../lib/config/configrc.h ../lib/mystring/mystring.h \
- ../lib/mystring/rep.h ../lib/mystring/iter.h \
- ../lib/mystring/join.h ../lib/misc/strlist.h \
- ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
- ../lib/fdbuf/fdobuf.h ../lib/vpwentry/vpwentry.h vcommand.h \
- ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
- ../lib/vpwtable/vpwtable.h ../lib/misc/response.h
vpasswds.o: vpasswds.cc ../config.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/response.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h vcommand.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h
vpopbull.o: vpopbull.cc ../config.h ../lib/ac/dirent.h ../lib/ac/time.h \
../lib/misc/itoa.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
../lib/mystring/join.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/cli/cli.h ../lib/fdbuf/fdbuf.h \
+ ../lib/misc/strlist.h ../lib/cli++/cli++.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h vcommand.h \
../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
@@ -570,20 +540,29 @@
../lib/fdbuf/fdobuf.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
../lib/mystring/join.h ../lib/misc/maildir.h \
- ../lib/config/configrc.h ../lib/misc/strlist.h \
- ../lib/vpwentry/vpwentry.h vcommand.h ../lib/vdomain/vdomain.h \
- ../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
- ../lib/misc/response.h ../lib/misc/stat_fns.h ../lib/cli/cli.h \
- ../lib/cdb++/cdb++.h ../lib/cdb++/datum.h
+ ../lib/config/configrc.h ../lib/misc/strlist.h vcommand.h \
+ ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
+ ../lib/vpwtable/vpwtable.h ../lib/vpwentry/vpwentry.h \
+ ../lib/misc/response.h ../lib/misc/stat_fns.h \
+ ../lib/cli++/cli++.h
vsetup.o: vsetup.cc ../config.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h \
../lib/config/configrc.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
../lib/mystring/join.h ../lib/misc/strlist.h \
- ../lib/misc/stat_fns.h ../lib/cli/cli.h ../lib/misc/exec.h \
+ ../lib/misc/stat_fns.h ../lib/cli++/cli++.h ../lib/misc/exec.h \
../lib/vpwentry/vpwentry.h vcommand.h ../lib/vdomain/vdomain.h \
../lib/misc/pwentry.h ../lib/vpwtable/vpwtable.h \
../lib/misc/response.h
+vupgrade.o: vupgrade.cc ../config.h ../lib/cli++/cli++.h \
+ ../lib/config/configrc.h ../lib/mystring/mystring.h \
+ ../lib/mystring/rep.h ../lib/mystring/iter.h \
+ ../lib/mystring/join.h ../lib/misc/strlist.h \
+ ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
+ ../lib/fdbuf/fdobuf.h ../lib/vpwentry/vpwentry.h vcommand.h \
+ ../lib/vdomain/vdomain.h ../lib/misc/pwentry.h \
+ ../lib/vpwtable/vpwtable.h ../lib/misc/response.h \
+ ../lib/misc/maildir.h
info-am:
info: info-am
@@ -607,7 +586,7 @@
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(HEADERS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir) \
$(DESTDIR)$(mandir)/man1
@@ -666,8 +645,8 @@
dist-hook:
touch $(distdir)/*.html $(distdir)/*.[123456789]
-%.pod: %.cc ../configure.in ../lib/cli/cli2pod.pl
- perl ../lib/cli/cli2pod.pl $< >$@
+%.pod: %.cc ../configure.in ../lib/cli++/cli++topod.pl
+ perl ../lib/cli++/cli++topod.pl $< >$@
%.1: %.pod ../configure.in; $(POD2MAN) --section=1 $< >$@
%.html: %.pod; $(POD2HTML) $< >$@
--- a/commands/allvpasswd2cdb Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-#!/bin/sh
-while IFS=: read name pass uid gid gecos home shell; do
- echo -n "$name($uid): "
- if ! cd "$home" 2>/dev/null; then
- echo Skipping, has invalid home directory.
- continue
- fi
- if [ -f passwd -a -d users ] && \
- fgrep vdeliver .qmail-default >/dev/null 2>&1; then
- if [ -f passwd.cdb ]; then
- echo Skipping, has already been converted.
- else
- su - $name sh -c 'exec vpasswd2cdb'
- echo Converted.
- fi
- else
- echo Skipping, is missing a passwd file.
- fi
-done </etc/passwd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/dumpvuser.1 Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,151 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "DUMPVUSER 1"
+.TH DUMPVUSER 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
+.SH "NAME"
+dumpvuser \- Dump all of a vmailmgr account's data
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBdumpvuser\fR
+[\fB\-\-quiet\fR]
+\&\fIaccount\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This program dumps all the contents of a vmailmgr account
+in a format similar to a mail header.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
+Suppress all status messages.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Bruce Guenter <bruceg@em.ca>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/dumpvuser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,89 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include <limits.h>
+#include "config/configrc.h"
+#include "vpwentry/vpwentry.h"
+#include "cli++/cli++.h"
+#include "fdbuf/fdbuf.h"
+#include "vcommand.h"
+
+const char* cli_program = "dumpvuser";
+const char* cli_help_prefix = "Dump all of a vmailmgr account's data\n";
+const char* cli_help_suffix = "";
+const char* cli_args_usage = "account";
+const int cli_args_min = 1;
+const int cli_args_max = 1;
+static int o_quiet = false;
+
+// This program dumps all the contents of a vmailmgr account
+// in a format similar to a mail header.
+
+cli_option cli_options[] = {
+ { 0, "quiet", cli_option::flag, true, &o_quiet,
+ "Suppress all status messages", 0 },
+ {0}
+};
+
+void show_num(const char* label, unsigned value)
+{
+ fout << label << ": ";
+ if (value == UINT_MAX)
+ fout << "N/A";
+ else
+ fout << value;
+ fout << '\n';
+}
+
+void show_flag(const char* label, bool value)
+{
+ fout << label << ": " << (value ? "true" : "false") << '\n';
+}
+
+void show_user(const vpwentry* vpw)
+{
+ fout <<
+ "Name: " << vpw->name << "\n"
+ "Encrypted-Password: " << vpw->pass << "\n"
+ "Directory: " << vpw->directory << "\n";
+ for(mystring_iter iter(vpw->forwards, '\0'); iter; ++iter)
+ fout << "Forward: " << *iter << '\n';
+ show_num("Hard-Quota", vpw->hardquota);
+ show_num("Soft-Quota", vpw->softquota);
+ show_num("Message-Size-Limit", vpw->msgsize);
+ show_num("Message-Count-Limit", vpw->msgcount);
+ show_num("Creation-Time", vpw->ctime);
+ show_num("Expiry-Time", vpw->expiry);
+ show_flag("Has-Mailbox", vpw->has_mailbox);
+ show_flag("Mailbox-Enabled", vpw->is_mailbox_enabled);
+}
+
+int cli_main(int, char* argv[])
+{
+ if(!go_home())
+ return 1;
+
+ vpwentry* vpw = domain.lookup(argv[0]);
+ if (vpw == 0) {
+ if (!o_quiet)
+ ferr << "dumpvuser: No such user" << endl;
+ return 1;
+ }
+
+ show_user(vpw);
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/dumpvuser.html Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>dumpvuser - Dump all of a vmailmgr account's data</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+<!--
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
+-->
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>dumpvuser - Dump all of a vmailmgr account's data</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>dumpvuser</strong>
+[<strong>--quiet</strong>]
+<em>account</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program dumps all the contents of a vmailmgr account
+in a format similar to a mail header.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
+
+</body>
+
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/dumpvuser.pod Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,30 @@
+=head1 NAME
+
+dumpvuser - Dump all of a vmailmgr account's data
+
+=head1 SYNOPSIS
+
+B<dumpvuser>
+[B<--quiet>]
+I<account>
+
+=head1 DESCRIPTION
+
+This program dumps all the contents of a vmailmgr account
+in a format similar to a mail header.
+
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--quiet>
+
+Suppress all status messages.
+
+=back
+
+=head1 AUTHORS
+
+Bruce Guenter <bruceg@em.ca>
+
--- a/commands/listvdomain.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/listvdomain.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH LISTVDOMAIN 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,74 +109,56 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LISTVDOMAIN 1"
+.TH LISTVDOMAIN 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
listvdomain \- Lists the members of a virtual domain
.SH "SYNOPSIS"
-\fBlistvdomain\fR
+.IX Header "SYNOPSIS"
+\&\fBlistvdomain\fR
[\fB\-a\fR]
-[\fB--aliases\fR]
-[\fB--quiet\fR]
+[\fB\-\-aliases\fR]
+[\fB\-\-quiet\fR]
[\fB\-u\fR]
-[\fB--users\fR]
-\fI[user [user ...]]\fR
+[\fB\-\-users\fR]
+\&\fI[user [user ...]]\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program lists all the users in a domain.
The listing consists of one user per line,
and each line has three columns:
-the virtual user name, the mailbox directory (or \f(CW-\fR if none is set),
+the virtual user name, \f(CW\*(C`Yes\*(C'\fR or \f(CW\*(C`No\*(C'\fR depending if the user has a mailbox,
and an optional list of forwarding addresses, all seperated by a space.
.SH "OPTIONS"
-.Ip "\fB\-a\fR, \fB--aliases\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-a\fR, \fB\-\-aliases\fR" 8
+.IX Item "-a, --aliases"
Show only accounts without a mailbox.
-.Ip "\fB--quiet\fR" 8
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
-.Ip "\fB\-u\fR, \fB--users\fR" 8
+.IP "\fB\-u\fR, \fB\-\-users\fR" 8
+.IX Item "-u, --users"
Show only accounts with a mailbox.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "LISTVDOMAIN 1"
-.IX Name "listvdomain - Lists the members of a virtual domain"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-a\fR, \fB--aliases\fR"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Item "\fB\-u\fR, \fB--users\fR"
-
-.IX Header "AUTHORS"
-
--- a/commands/listvdomain.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/listvdomain.cc Sun Jan 20 00:22:09 2008 +0100
@@ -17,7 +17,7 @@
#include <config.h>
#include "config/configrc.h"
#include "vpwentry/vpwentry.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "fdbuf/fdbuf.h"
#include "vcommand.h"
@@ -34,7 +34,7 @@
// This program lists all the users in a domain.
// The listing consists of one user per line,
// and each line has three columns:
-// the virtual user name, the mailbox directory (or C<-> if none is set),
+// the virtual user name, C<Yes> or C<No> depending if the user has a mailbox,
// and an optional list of forwarding addresses, all seperated by a space.
cli_option cli_options[] = {
@@ -49,18 +49,13 @@
void show_user(const vpwentry& vpw)
{
- if(o_noaliases && !vpw.mailbox)
+ if(o_noaliases && !vpw.has_mailbox)
return;
- if(o_nousers && !!vpw.mailbox)
+ if(o_nousers && vpw.has_mailbox)
return;
- fout << vpw.name;
- if(!vpw.mailbox)
- fout << " -";
- else {
- fout << ' ' << vpw.mailbox;
- if(!vpw.is_mailbox_enabled)
- fout << "(disabled)";
- }
+ fout << vpw.name << (vpw.has_mailbox ? " Yes" : " No");
+ if(!vpw.is_mailbox_enabled)
+ fout << "(disabled)";
for(mystring_iter iter(vpw.forwards, '\0'); iter; ++iter)
fout << ' ' << *iter;
fout << '\n';
@@ -84,9 +79,8 @@
fout << "User Mailbox Aliases\n";
if(argc) {
- vpwentry* vpw;
for(int i = 0; i < argc; i++) {
- vpw = table->getbyname(argv[i]);
+ vpwentry* vpw = table->getbyname(argv[i]);
if(!vpw) {
if(!o_quiet)
ferr << "listvdomain: unknown user '" << argv[i] << "'" << endl;
@@ -105,9 +99,11 @@
ferr << "listvdomain: Can't open password table" << endl;
return 1;
}
- vpwentry vpw;
- while(r->get(vpw))
- show_user(vpw);
+ vpwentry* vpw;
+ while((vpw = r->get()) != 0) {
+ show_user(*vpw);
+ delete vpw;
+ }
delete r;
}
return errors;
--- a/commands/listvdomain.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/listvdomain.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,72 +1,80 @@
-<HTML>
-<HEAD>
-<TITLE>listvdomain - Lists the members of a virtual domain</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>listvdomain - Lists the members of a virtual domain</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-listvdomain - Lists the members of a virtual domain
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>listvdomain</STRONG>
-[<STRONG>-a</STRONG>] [<STRONG>--aliases</STRONG>] [<STRONG>--quiet</STRONG>] [<STRONG>-u</STRONG>] [<STRONG>--users</STRONG>]
-<EM>[user [user ...]]</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program lists all the users in a domain. The listing consists of one
-user per line, and each line has three columns: the virtual user name, the
-mailbox directory (or <CODE>-</CODE> if none is set), and an optional list of forwarding addresses, all
-seperated by a space.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>listvdomain - Lists the members of a virtual domain</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>listvdomain</strong>
+[<strong>-a</strong>]
+[<strong>--aliases</strong>]
+[<strong>--quiet</strong>]
+[<strong>-u</strong>]
+[<strong>--users</strong>]
+<em>[user [user ...]]</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program lists all the users in a domain.
+The listing consists of one user per line,
+and each line has three columns:
+the virtual user name, <code>Yes</code> or <code>No</code> depending if the user has a mailbox,
+and an optional list of forwarding addresses, all seperated by a space.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2da_2c__2d_2daliases"><strong>-a</strong>, <strong>--aliases</strong></a></strong><br />
+</dt>
+<dd>
+Show only accounts without a mailbox.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p>
+<dt><strong><a name="item__2du_2c__2d_2dusers"><strong>-u</strong>, <strong>--users</strong></a></strong><br />
+</dt>
+<dd>
+Show only accounts with a mailbox.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__a_">-a, --aliases</A></STRONG><DD>
-<P>
-Show only accounts without a mailbox.
-
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
+</body>
-<DT><STRONG><A NAME="item__u_">-u, --users</A></STRONG><DD>
-<P>
-Show only accounts with a mailbox.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/listvdomain.pod Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/listvdomain.pod Sun Jan 20 00:22:09 2008 +0100
@@ -17,7 +17,7 @@
This program lists all the users in a domain.
The listing consists of one user per line,
and each line has three columns:
-the virtual user name, the mailbox directory (or C<-> if none is set),
+the virtual user name, C<Yes> or C<No> depending if the user has a mailbox,
and an optional list of forwarding addresses, all seperated by a space.
--- a/commands/vadduser.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vadduser.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VADDUSER 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,59 +109,58 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VADDUSER 1"
+.TH VADDUSER 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vadduser \- Add a user to a virtual domain
.SH "SYNOPSIS"
-\fBvadduser\fR
-[\fB\-c INT\fR]
-[\fB--msgcount=INT\fR]
+.IX Header "SYNOPSIS"
+\&\fBvadduser\fR
+[\fB\-c \s-1INT\s0\fR]
+[\fB\-\-msgcount=INT\fR]
[\fB\-D\fR]
-[\fB--no-mailbox\fR]
-[\fB\-d STR\fR]
-[\fB--directory=STR\fR]
-[\fB\-e INT\fR]
-[\fB--expiry=INT\fR]
-[\fB\-f STR\fR]
-[\fB--forward=STR\fR]
+[\fB\-\-no\-mailbox\fR]
+[\fB\-d \s-1STR\s0\fR]
+[\fB\-\-directory=STR\fR]
+[\fB\-e \s-1INT\s0\fR]
+[\fB\-\-expiry=INT\fR]
+[\fB\-f \s-1STR\s0\fR]
+[\fB\-\-forward=STR\fR]
+[\fB\-\-password=STR\fR]
[\fB\-P\fR]
-[\fB--no-password\fR]
-[\fB\-p STR\fR]
-[\fB--personal=STR\fR]
-[\fB\-Q INT\fR]
-[\fB--hardquota=INT\fR]
-[\fB\-q INT\fR]
-[\fB--softquota=INT\fR]
-[\fB--quiet\fR]
-[\fB\-z INT\fR]
-[\fB--msgsize=INT\fR]
-\fIUSERNAME [ALIAS1 ...]\en"
-\*(L"or vaddalias [\-f ADDRESS] USERNAME [ALIAS1 ...]\fR
+[\fB\-\-no\-password\fR]
+[\fB\-p \s-1STR\s0\fR]
+[\fB\-\-personal=STR\fR]
+[\fB\-Q \s-1INT\s0\fR]
+[\fB\-\-hardquota=INT\fR]
+[\fB\-q \s-1INT\s0\fR]
+[\fB\-\-softquota=INT\fR]
+[\fB\-\-quiet\fR]
+[\fB\-z \s-1INT\s0\fR]
+[\fB\-\-msgsize=INT\fR]
+\&\fI\s-1USERNAME\s0 [\s-1ALIAS1\s0 ...]\en\*(L"
+\&\*(R"or vaddalias \s-1USERNAME\s0 [\s-1ALIAS1\s0 ...]\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program is used to set up a user within a virtual host.
If this program is reading from a tty,
it will then ask for a password (twice, to make sure you typed it in
@@ -225,83 +171,59 @@
directory and create a mail directory for the new user.
It will also add an entry for each of the named aliases.
.SH "OPTIONS"
-.Ip "\fB\-c \s-1INT\s0\fR, \fB--msgcount=\s-1INT\s0\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-c \s-1INT\s0\fR, \fB\-\-msgcount=INT\fR" 8
+.IX Item "-c INT, --msgcount=INT"
Set the user's message count limit.
-.Ip "\fB\-D\fR, \fB--no-mailbox\fR" 8
+.IP "\fB\-D\fR, \fB\-\-no\-mailbox\fR" 8
+.IX Item "-D, --no-mailbox"
Do not create a mailbox for this user. Defaults to true for vaddalias.
-.Ip "\fB\-d \s-1STR\s0\fR, \fB--directory=\s-1STR\s0\fR" 8
+.IP "\fB\-d \s-1STR\s0\fR, \fB\-\-directory=STR\fR" 8
+.IX Item "-d STR, --directory=STR"
Set the path to the user's mailbox. Note that this directory is unconditionally prefixed with \*(L"./\*(R".
-.Ip "\fB\-e \s-1INT\s0\fR, \fB--expiry=\s-1INT\s0\fR" 8
+.IP "\fB\-e \s-1INT\s0\fR, \fB\-\-expiry=INT\fR" 8
+.IX Item "-e INT, --expiry=INT"
Set the account's expiry time (in seconds).
-.Ip "\fB\-f \s-1STR\s0\fR, \fB--forward=\s-1STR\s0\fR" 8
+.IP "\fB\-f \s-1STR\s0\fR, \fB\-\-forward=STR\fR" 8
+.IX Item "-f STR, --forward=STR"
Add a forwarding address to this user (this may be used multiple times).
-.Ip "\fB\-P\fR, \fB--no-password\fR" 8
+.IP "\fB\-\-password=STR\fR" 8
+.IX Item "--password=STR"
+Encrypted password. Defaults to asking for a password.
+.IP "\fB\-P\fR, \fB\-\-no\-password\fR" 8
+.IX Item "-P, --no-password"
Do not ask for a password, and instead set the pass phrase field to an unusable value.
-.Ip "\fB\-p \s-1STR\s0\fR, \fB--personal=\s-1STR\s0\fR" 8
+.IP "\fB\-p \s-1STR\s0\fR, \fB\-\-personal=STR\fR" 8
+.IX Item "-p STR, --personal=STR"
Set the user's personal information.
-.Ip "\fB\-Q \s-1INT\s0\fR, \fB--hardquota=\s-1INT\s0\fR" 8
+.IP "\fB\-Q \s-1INT\s0\fR, \fB\-\-hardquota=INT\fR" 8
+.IX Item "-Q INT, --hardquota=INT"
Set the user's hard quota (in bytes).
-.Ip "\fB\-q \s-1INT\s0\fR, \fB--softquota=\s-1INT\s0\fR" 8
+.IP "\fB\-q \s-1INT\s0\fR, \fB\-\-softquota=INT\fR" 8
+.IX Item "-q INT, --softquota=INT"
Set the user's soft quota (in bytes).
-.Ip "\fB--quiet\fR" 8
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
-.Ip "\fB\-z \s-1INT\s0\fR, \fB--msgsize=\s-1INT\s0\fR" 8
+.IP "\fB\-z \s-1INT\s0\fR, \fB\-\-msgsize=INT\fR" 8
+.IX Item "-z INT, --msgsize=INT"
Set the user's message size limit (in bytes).
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
0 if all steps were successful, non-zero otherwise.
If any of the steps fail, a diagnostic message is printed.
.SH "SEE ALSO"
-\fIvsetup\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIvsetup\fR\|(1)
.SH "NOTES"
+.IX Header "NOTES"
You must have either created the users subdirectory by hand or run the
-\fIvsetup\fR program before using this program.
+\&\fIvsetup\fR program before using this program.
.PP
-This program expects the environment variable \f(CWHOME\fR to be set, and
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VADDUSER 1"
-.IX Name "vadduser - Add a user to a virtual domain"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-c \s-1INT\s0\fR, \fB--msgcount=\s-1INT\s0\fR"
-
-.IX Item "\fB\-D\fR, \fB--no-mailbox\fR"
-
-.IX Item "\fB\-d \s-1STR\s0\fR, \fB--directory=\s-1STR\s0\fR"
-
-.IX Item "\fB\-e \s-1INT\s0\fR, \fB--expiry=\s-1INT\s0\fR"
-
-.IX Item "\fB\-f \s-1STR\s0\fR, \fB--forward=\s-1STR\s0\fR"
-
-.IX Item "\fB\-P\fR, \fB--no-password\fR"
-
-.IX Item "\fB\-p \s-1STR\s0\fR, \fB--personal=\s-1STR\s0\fR"
-
-.IX Item "\fB\-Q \s-1INT\s0\fR, \fB--hardquota=\s-1INT\s0\fR"
-
-.IX Item "\fB\-q \s-1INT\s0\fR, \fB--softquota=\s-1INT\s0\fR"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Item "\fB\-z \s-1INT\s0\fR, \fB--msgsize=\s-1INT\s0\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vadduser.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vadduser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -23,13 +23,13 @@
#include "config/configrc.h"
#include "misc/pwcrypt.h"
#include "vcommand.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
const char* cli_program = "vadduser";
const char* cli_help_prefix = "Add a user to a virtual domain\n";
const char* cli_help_suffix = "";
const char* cli_args_usage = "USERNAME [ALIAS1 ...]\n"
-"or vaddalias [-f ADDRESS] USERNAME [ALIAS1 ...]";
+"or vaddalias USERNAME [ALIAS1 ...]";
const int cli_args_min = 1;
const int cli_args_max = -1;
@@ -42,8 +42,9 @@
static int o_msgcount = 0;
static int o_expiry = 0;
static int o_password = true;
-static int o_domailbox = true;
+static int o_hasmailbox = true;
static int o_quiet = false;
+static const char* o_pwcrypt = 0;
// This program is used to set up a user within a virtual host.
// If this program is reading from a tty,
@@ -58,7 +59,7 @@
cli_option cli_options[] = {
{ 'c', "msgcount", cli_option::integer, 0, &o_msgcount,
"Set the user's message count limit", 0 },
- { 'D', "no-mailbox", cli_option::flag, false, &o_domailbox,
+ { 'D', "no-mailbox", cli_option::flag, false, &o_hasmailbox,
"Do not create a mailbox for this user", "true for vaddalias" },
{ 'd', "directory", cli_option::string, 0, &o_userdir,
"Set the path to the user's mailbox", 0 },
@@ -69,6 +70,8 @@
{ 'f', "forward", cli_option::stringlist, 0, &o_forwards,
"Add a forwarding address to this user", 0 },
// Add a forwarding address to this user (this may be used multiple times).
+ { 0, "password", cli_option::string, 0, &o_pwcrypt,
+ "Encrypted password", "asking for a password" },
{ 'P', "no-password", cli_option::flag, false, &o_password,
"Do not ask for a password", 0 },
// Do not ask for a password,
@@ -120,13 +123,11 @@
vpwentry* make_user(const mystring& name, const mystring& passcode)
{
mystring dir;
- if(o_domailbox) {
- if(o_userdir)
- dir = o_userdir;
- else
- dir = domain.userdir(name);
- dir = "./" + dir;
- }
+ if(o_userdir)
+ dir = o_userdir;
+ else
+ dir = domain.userdir(name);
+ dir = "./" + dir;
for(cli_stringlist* node = o_forwards; node; node = node->next) {
response r = domain.validate_forward(node->string);
@@ -139,9 +140,7 @@
}
vpwentry* vpw = new vpwentry(name.lower(), passcode, dir,
- list2str(o_forwards));
- vpw->set_defaults(true, true);
-
+ list2str(o_forwards), o_hasmailbox);
vpw->personal = o_personal;
vpw->hardquota = o_hardquota;
vpw->softquota = o_softquota;
@@ -156,15 +155,19 @@
void add_user(const mystring& user)
{
if(!domain.exists(user)) {
- mystring passcode = "*";
- if(o_password) {
+ mystring passcode;
+ if(o_pwcrypt)
+ passcode = o_pwcrypt;
+ else if(o_password) {
mystring passwd = getpasswd(argv0base);
if(passwd.length() == 0)
exit(1);
passcode = pwcrypt(passwd);
}
+ else
+ passcode = "*";
vpwentry* vpw = make_user(user, passcode);
- response resp = domain.set(vpw, true, vpw->mailbox);
+ response resp = domain.set(vpw, true);
delete vpw;
if(!resp) {
if(!o_quiet)
@@ -185,8 +188,7 @@
alias = alias.lower();
user = user.lower();
if(!domain.exists(alias)) {
- vpwentry vpw(alias, "*", 0, user);
- vpw.set_defaults(true, true);
+ vpwentry vpw(alias, "*", domain.userdir(alias), user, false);
response resp = domain.set(&vpw, true);
if(!resp)
if(!o_quiet)
@@ -208,7 +210,7 @@
void set_defaults()
{
if(!strcmp(argv0base, "vaddalias"))
- o_domailbox = false;
+ o_hasmailbox = false;
if(!o_hardquota)
o_hardquota = config->default_hardquota();
if(!o_softquota)
--- a/commands/vadduser.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vadduser.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,137 +1,180 @@
-<HTML>
-<HEAD>
-<TITLE>vadduser - Add a user to a virtual domain</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vadduser - Add a user to a virtual domain</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vadduser - Add a user to a virtual domain
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vadduser</STRONG>
-[<STRONG>-c INT</STRONG>] [<STRONG>--msgcount=INT</STRONG>] [<STRONG>-D</STRONG>] [<STRONG>--no-mailbox</STRONG>] [<STRONG>-d STR</STRONG>] [<STRONG>--directory=STR</STRONG>] [<STRONG>-e INT</STRONG>] [<STRONG>--expiry=INT</STRONG>] [<STRONG>-f STR</STRONG>] [<STRONG>--forward=STR</STRONG>] [<STRONG>-P</STRONG>] [<STRONG>--no-password</STRONG>] [<STRONG>-p STR</STRONG>] [<STRONG>--personal=STR</STRONG>] [<STRONG>-Q INT</STRONG>] [<STRONG>--hardquota=INT</STRONG>] [<STRONG>-q INT</STRONG>] [<STRONG>--softquota=INT</STRONG>] [<STRONG>--quiet</STRONG>] [<STRONG>-z INT</STRONG>] [<STRONG>--msgsize=INT</STRONG>]
-<EM>USERNAME [ALIAS1 ...]\n"
-"or vaddalias [-f ADDRESS] USERNAME [ALIAS1 ...]</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is used to set up a user within a virtual host. If this
-program is reading from a tty, it will then ask for a password (twice, to
-make sure you typed it in correctly), otherwise it will read the password
-from the input with no prompting. It will then add the user to the virtual
-password table in the current directory and create a mail directory for the
-new user. It will also add an entry for each of the named aliases.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__c">-c INT, --msgcount=INT</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vadduser - Add a user to a virtual domain</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vadduser</strong>
+[<strong>-c INT</strong>]
+[<strong>--msgcount=INT</strong>]
+[<strong>-D</strong>]
+[<strong>--no-mailbox</strong>]
+[<strong>-d STR</strong>]
+[<strong>--directory=STR</strong>]
+[<strong>-e INT</strong>]
+[<strong>--expiry=INT</strong>]
+[<strong>-f STR</strong>]
+[<strong>--forward=STR</strong>]
+[<strong>--password=STR</strong>]
+[<strong>-P</strong>]
+[<strong>--no-password</strong>]
+[<strong>-p STR</strong>]
+[<strong>--personal=STR</strong>]
+[<strong>-Q INT</strong>]
+[<strong>--hardquota=INT</strong>]
+[<strong>-q INT</strong>]
+[<strong>--softquota=INT</strong>]
+[<strong>--quiet</strong>]
+[<strong>-z INT</strong>]
+[<strong>--msgsize=INT</strong>]
+<em>USERNAME [ALIAS1 ...]\n``
+''or vaddalias USERNAME [ALIAS1 ...]</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is used to set up a user within a virtual host.
+If this program is reading from a tty,
+it will then ask for a password (twice, to make sure you typed it in
+correctly), otherwise it will read the password from the input with no
+prompting.
+It will then
+add the user to the virtual password table in the current
+directory and create a mail directory for the new user.
+It will also add an entry for each of the named aliases.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2dc_int_2c__2d_2dmsgcount_3dint"><strong>-c INT</strong>, <strong>--msgcount=INT</strong></a></strong><br />
+</dt>
+<dd>
Set the user's message count limit.
-
-<DT><STRONG><A NAME="item__D_">-D, --no-mailbox</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item__2dd_2c__2d_2dno_2dmailbox"><strong>-D</strong>, <strong>--no-mailbox</strong></a></strong><br />
+</dt>
+<dd>
Do not create a mailbox for this user. Defaults to true for vaddalias.
-
-<DT><STRONG><A NAME="item__d">-d STR, --directory=STR</A></STRONG><DD>
-<P>
-Set the path to the user's mailbox. Note that this directory is
-unconditionally prefixed with ``./''.
-
-<DT><STRONG><A NAME="item__e">-e INT, --expiry=INT</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item__2dd_str_2c__2d_2ddirectory_3dstr"><strong>-d STR</strong>, <strong>--directory=STR</strong></a></strong><br />
+</dt>
+<dd>
+Set the path to the user's mailbox. Note that this directory is unconditionally prefixed with ``./''.
+</dd>
+<p></p>
+<dt><strong><a name="item__2de_int_2c__2d_2dexpiry_3dint"><strong>-e INT</strong>, <strong>--expiry=INT</strong></a></strong><br />
+</dt>
+<dd>
Set the account's expiry time (in seconds).
-
-<DT><STRONG><A NAME="item__f">-f STR, --forward=STR</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item__2df_str_2c__2d_2dforward_3dstr"><strong>-f STR</strong>, <strong>--forward=STR</strong></a></strong><br />
+</dt>
+<dd>
Add a forwarding address to this user (this may be used multiple times).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dpassword_3dstr"><strong>--password=STR</strong></a></strong><br />
+</dt>
+<dd>
+Encrypted password. Defaults to asking for a password.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dp_2c__2d_2dno_2dpassword"><strong>-P</strong>, <strong>--no-password</strong></a></strong><br />
+</dt>
+<dd>
+Do not ask for a password, and instead set the pass phrase field to an unusable value.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dp_str_2c__2d_2dpersonal_3dstr"><strong>-p STR</strong>, <strong>--personal=STR</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's personal information.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dq_int_2c__2d_2dhardquota_3dint"><strong>-Q INT</strong>, <strong>--hardquota=INT</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's hard quota (in bytes).
+</dd>
+<p></p>
+<dt><strong><a name="item__2dq_int_2c__2d_2dsoftquota_3dint"><strong>-q INT</strong>, <strong>--softquota=INT</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's soft quota (in bytes).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dz_int_2c__2d_2dmsgsize_3dint"><strong>-z INT</strong>, <strong>--msgsize=INT</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's message size limit (in bytes).
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>0 if all steps were successful, non-zero otherwise.
+If any of the steps fail, a diagnostic message is printed.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vsetup(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>You must have either created the users subdirectory by hand or run the
+<em>vsetup</em> program before using this program.</p>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<DT><STRONG><A NAME="item__P_">-P, --no-password</A></STRONG><DD>
-<P>
-Do not ask for a password, and instead set the pass phrase field to an
-unusable value.
-
-<DT><STRONG><A NAME="item__p">-p STR, --personal=STR</A></STRONG><DD>
-<P>
-Set the user's personal information.
-
-<DT><STRONG><A NAME="item__Q">-Q INT, --hardquota=INT</A></STRONG><DD>
-<P>
-Set the user's hard quota (in bytes).
-
-<DT><STRONG><A NAME="item__q">-q INT, --softquota=INT</A></STRONG><DD>
-<P>
-Set the user's soft quota (in bytes).
-
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-<DT><STRONG><A NAME="item__z">-z INT, --msgsize=INT</A></STRONG><DD>
-<P>
-Set the user's message size limit (in bytes).
+</body>
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-0 if all steps were successful, non-zero otherwise. If any of the steps
-fail, a diagnostic message is printed.
-
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vsetup(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-You must have either created the users subdirectory by hand or run the
-<EM>vsetup</EM> program before using this program.
-
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vadduser.pod Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vadduser.pod Sun Jan 20 00:22:09 2008 +0100
@@ -15,6 +15,7 @@
[B<--expiry=INT>]
[B<-f STR>]
[B<--forward=STR>]
+[B<--password=STR>]
[B<-P>]
[B<--no-password>]
[B<-p STR>]
@@ -27,7 +28,7 @@
[B<-z INT>]
[B<--msgsize=INT>]
I<USERNAME [ALIAS1 ...]\n"
-"or vaddalias [-f ADDRESS] USERNAME [ALIAS1 ...]>
+"or vaddalias USERNAME [ALIAS1 ...]>
=head1 DESCRIPTION
@@ -66,6 +67,10 @@
Add a forwarding address to this user (this may be used multiple times).
+=item B<--password=STR>
+
+Encrypted password. Defaults to asking for a password.
+
=item B<-P>, B<--no-password>
Do not ask for a password, and instead set the pass phrase field to an unusable value.
--- a/commands/vaddusers.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vaddusers.cc Sun Jan 20 00:22:09 2008 +0100
@@ -21,7 +21,7 @@
#include "mystring/mystring.h"
#include "misc/pwcrypt.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vaddusers";
@@ -100,9 +100,8 @@
}
{
mystring maildir = domain.userdir(user);
- vpwentry vpw(user, pwcrypt(pass), maildir, 0);
- vpw.set_defaults(true, true);
- response resp = domain.set(&vpw, true, maildir);
+ vpwentry vpw(user, pwcrypt(pass), maildir, 0, true);
+ response resp = domain.set(&vpw, true);
if(!resp) {
errors++;
if(!o_quiet)
@@ -126,8 +125,7 @@
<< "' already exists, skipping." << endl;
continue;
}
- vpwentry vpw(alias, "*", 0, user);
- vpw.set_defaults(true, true);
+ vpwentry vpw(alias, "*", 0, user, false);
response resp = domain.set(&vpw, true);
if(!resp) {
fout << endl;
--- a/commands/vchattr.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchattr.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VCHATTR 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,120 +109,94 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VCHATTR 1"
+.TH VCHATTR 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vchattr \- Changes the attributes on one or more virtual users
.SH "SYNOPSIS"
-\fBvchattr\fR
+.IX Header "SYNOPSIS"
+\&\fBvchattr\fR
[\fB\-c\fR]
-[\fB--msgcount\fR]
+[\fB\-\-msgcount\fR]
[\fB\-e\fR]
-[\fB--expiry\fR]
+[\fB\-\-expiry\fR]
[\fB\-E\fR]
-[\fB--enabled\fR]
+[\fB\-\-enabled\fR]
[\fB\-p\fR]
-[\fB--personal\fR]
+[\fB\-\-personal\fR]
[\fB\-q\fR]
-[\fB--softquota\fR]
+[\fB\-\-softquota\fR]
[\fB\-Q\fR]
-[\fB--hardquota\fR]
-[\fB--quiet\fR]
+[\fB\-\-hardquota\fR]
+[\fB\-\-quiet\fR]
[\fB\-z\fR]
-[\fB--msgsize\fR]
-\fIVALUE USERNAME ...\fR
+[\fB\-\-msgsize\fR]
+\&\fI\s-1VALUE\s0 \s-1USERNAME\s0 ...\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program changes the value of one attribute on a set of virtual
users. It cannot be used to change the user's password or forwarding
-addresses -- use \fBvpasswd\fR and \fBvchforwards\fR to accomplish those
+addresses \*(-- use \fBvpasswd\fR and \fBvchforwards\fR to accomplish those
tasks.
.SH "OPTIONS"
-.Ip "\fB\-c\fR, \fB--msgcount\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-c\fR, \fB\-\-msgcount\fR" 8
+.IX Item "-c, --msgcount"
Set the user's message count limit.
-.Ip "\fB\-e\fR, \fB--expiry\fR" 8
+.IP "\fB\-e\fR, \fB\-\-expiry\fR" 8
+.IX Item "-e, --expiry"
Set the account's expiry time (in seconds).
-.Ip "\fB\-E\fR, \fB--enabled\fR" 8
+.IP "\fB\-E\fR, \fB\-\-enabled\fR" 8
+.IX Item "-E, --enabled"
Enable (\f(CW1\fR) or disable (\f(CW0\fR) delivery to the virtual user's mailbox directory. This does not delete the mailbox or any of the messages contained in or, nor prevent the user from logging in.
-.Ip "\fB\-p\fR, \fB--personal\fR" 8
+.IP "\fB\-p\fR, \fB\-\-personal\fR" 8
+.IX Item "-p, --personal"
Set the user's personal information.
-.Ip "\fB\-q\fR, \fB--softquota\fR" 8
+.IP "\fB\-q\fR, \fB\-\-softquota\fR" 8
+.IX Item "-q, --softquota"
Set the user's soft quota (in bytes).
-.Ip "\fB\-Q\fR, \fB--hardquota\fR" 8
+.IP "\fB\-Q\fR, \fB\-\-hardquota\fR" 8
+.IX Item "-Q, --hardquota"
Set the user's hard quota (in bytes).
-.Ip "\fB--quiet\fR" 8
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
-.Ip "\fB\-z\fR, \fB--msgsize\fR" 8
+.IP "\fB\-z\fR, \fB\-\-msgsize\fR" 8
+.IX Item "-z, --msgsize"
Set the user's message size limit (in bytes).
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
0 if the given attribute was successfully changed for all users,
non-zero otherwise.
If any of the steps fail, a diagnostic message is printed.
.SH "SEE ALSO"
-\fIvadduser\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIvadduser\fR\|(1)
.SH "NOTES"
-This program expects the environment variable \f(CWHOME\fR to be set, and
+.IX Header "NOTES"
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VCHATTR 1"
-.IX Name "vchattr - Changes the attributes on one or more virtual users"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-c\fR, \fB--msgcount\fR"
-
-.IX Item "\fB\-e\fR, \fB--expiry\fR"
-
-.IX Item "\fB\-E\fR, \fB--enabled\fR"
-
-.IX Item "\fB\-p\fR, \fB--personal\fR"
-
-.IX Item "\fB\-q\fR, \fB--softquota\fR"
-
-.IX Item "\fB\-Q\fR, \fB--hardquota\fR"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Item "\fB\-z\fR, \fB--msgsize\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vchattr.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchattr.cc Sun Jan 20 00:22:09 2008 +0100
@@ -20,7 +20,7 @@
#include "mystring/mystring.h"
#include "misc/passwdfn.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vchattr";
--- a/commands/vchattr.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchattr.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,117 +1,142 @@
-<HTML>
-<HEAD>
-<TITLE>vchattr - Changes the attributes on one or more virtual users</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vchattr - Changes the attributes on one or more virtual users</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vchattr - Changes the attributes on one or more virtual users
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vchattr</STRONG>
-[<STRONG>-c</STRONG>] [<STRONG>--msgcount</STRONG>] [<STRONG>-e</STRONG>] [<STRONG>--expiry</STRONG>] [<STRONG>-E</STRONG>] [<STRONG>--enabled</STRONG>] [<STRONG>-p</STRONG>] [<STRONG>--personal</STRONG>] [<STRONG>-q</STRONG>] [<STRONG>--softquota</STRONG>] [<STRONG>-Q</STRONG>] [<STRONG>--hardquota</STRONG>] [<STRONG>--quiet</STRONG>] [<STRONG>-z</STRONG>] [<STRONG>--msgsize</STRONG>]
-<EM>VALUE USERNAME ...</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program changes the value of one attribute on a set of virtual users.
-It cannot be used to change the user's password or forwarding addresses --
-use <STRONG>vpasswd</STRONG> and <STRONG>vchforwards</STRONG> to accomplish those tasks.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__c_">-c, --msgcount</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vchattr - Changes the attributes on one or more virtual users</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vchattr</strong>
+[<strong>-c</strong>]
+[<strong>--msgcount</strong>]
+[<strong>-e</strong>]
+[<strong>--expiry</strong>]
+[<strong>-E</strong>]
+[<strong>--enabled</strong>]
+[<strong>-p</strong>]
+[<strong>--personal</strong>]
+[<strong>-q</strong>]
+[<strong>--softquota</strong>]
+[<strong>-Q</strong>]
+[<strong>--hardquota</strong>]
+[<strong>--quiet</strong>]
+[<strong>-z</strong>]
+[<strong>--msgsize</strong>]
+<em>VALUE USERNAME ...</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program changes the value of one attribute on a set of virtual
+users. It cannot be used to change the user's password or forwarding
+addresses -- use <strong>vpasswd</strong> and <strong>vchforwards</strong> to accomplish those
+tasks.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2dc_2c__2d_2dmsgcount"><strong>-c</strong>, <strong>--msgcount</strong></a></strong><br />
+</dt>
+<dd>
Set the user's message count limit.
-
-<DT><STRONG><A NAME="item__e_">-e, --expiry</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item__2de_2c__2d_2dexpiry"><strong>-e</strong>, <strong>--expiry</strong></a></strong><br />
+</dt>
+<dd>
Set the account's expiry time (in seconds).
-
-<DT><STRONG><A NAME="item__E_">-E, --enabled</A></STRONG><DD>
-<P>
-Enable (<CODE>1</CODE>) or disable (<CODE>0</CODE>) delivery to the virtual user's mailbox directory. This does not delete
-the mailbox or any of the messages contained in or, nor prevent the user
-from logging in.
-
-<DT><STRONG><A NAME="item__p_">-p, --personal</A></STRONG><DD>
-<P>
+</dd>
+<p></p>
+<dt><strong><a name="item__2de_2c__2d_2denabled"><strong>-E</strong>, <strong>--enabled</strong></a></strong><br />
+</dt>
+<dd>
+Enable (<code>1</code>) or disable (<code>0</code>) delivery to the virtual user's mailbox directory. This does not delete the mailbox or any of the messages contained in or, nor prevent the user from logging in.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dp_2c__2d_2dpersonal"><strong>-p</strong>, <strong>--personal</strong></a></strong><br />
+</dt>
+<dd>
Set the user's personal information.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dq_2c__2d_2dsoftquota"><strong>-q</strong>, <strong>--softquota</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's soft quota (in bytes).
+</dd>
+<p></p>
+<dt><strong><a name="item__2dq_2c__2d_2dhardquota"><strong>-Q</strong>, <strong>--hardquota</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's hard quota (in bytes).
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dz_2c__2d_2dmsgsize"><strong>-z</strong>, <strong>--msgsize</strong></a></strong><br />
+</dt>
+<dd>
+Set the user's message size limit (in bytes).
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>0 if the given attribute was successfully changed for all users,
+non-zero otherwise.
+If any of the steps fail, a diagnostic message is printed.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vadduser(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<DT><STRONG><A NAME="item__q_">-q, --softquota</A></STRONG><DD>
-<P>
-Set the user's soft quota (in bytes).
-
-<DT><STRONG><A NAME="item__Q_">-Q, --hardquota</A></STRONG><DD>
-<P>
-Set the user's hard quota (in bytes).
-
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-<DT><STRONG><A NAME="item__z_">-z, --msgsize</A></STRONG><DD>
-<P>
-Set the user's message size limit (in bytes).
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-0 if the given attribute was successfully changed for all users, non-zero
-otherwise. If any of the steps fail, a diagnostic message is printed.
+</body>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vadduser(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vcheckquota.1 Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,258 +0,0 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve
-.ft R
-
-.fi
-..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
-'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
-.\}
-.TH VCHECKQUOTA 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
-.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
-.\}
-.rm #[ #] #H #V #F C
-.SH "NAME"
-vcheckquota \- vmailmgr quota enforcement program
-.SH "SYNOPSIS"
-\fBvcheckquota\fR
-[\fB\-a UINT\fR]
-[\fB--soft-maxsize=UINT\fR]
-[\fB\-m STR\fR]
-[\fB--soft-message=STR\fR]
-.SH "DESCRIPTION"
-\fIvcheckquota\fR ensures that the hard and soft quotas are enforced,
-that message counts and sizes are appropriately limited.
-The limits are set by the vadduser or vchattr command.
-.PP
-The following rules are applied:
-.Ip "1" 8
-If the message is larger than the message size limit, it is rejected.
-.Ip "2" 8
-If the user has too many messages in their mailbox,
-further messages are rejected.
-.Ip "3" 8
-If the user is over their hard quota, all further messages are rejected
-and no warning messages are linked in.
-.Ip "4" 8
-If the user is over their soft quota, and the message is small
-(as defined by \fIsoft-maxsize\fR), the message is accepted, otherwise
-it is rejected. If \fIsoft-message\fR is defined, a warning message
-is linked into the mailbox in either case.
-.PP
-Warning: the soft-message is linked into the users maildir once for each
-message that is received while the account is over its soft quota. This may
-result in multiple warning messages.
-.SH "OPTIONS"
-.Ip "\fB\-a \s-1UINT\s0\fR, \fB--soft-maxsize=\s-1UINT\s0\fR" 8
-The maximum message size after soft quota is reached. Defaults to 4096.
-.Ip "\fB\-m \s-1STR\s0\fR, \fB--soft-message=\s-1STR\s0\fR" 8
-The path to the soft quota warning message. Defaults to no message.
-.SH "SEE ALSO"
-\fIvadduser\fR\|(1), \fIvchattr\fR\|(1)
-.SH "AUTHORS"
-Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VCHECKQUOTA 1"
-.IX Name "vcheckquota - vmailmgr quota enforcement program"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Item "1"
-
-.IX Item "2"
-
-.IX Item "3"
-
-.IX Item "4"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-a \s-1UINT\s0\fR, \fB--soft-maxsize=\s-1UINT\s0\fR"
-
-.IX Item "\fB\-m \s-1STR\s0\fR, \fB--soft-message=\s-1STR\s0\fR"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHORS"
-
--- a/commands/vcheckquota.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <time.h>
-#include "config/configrc.h"
-#include "cli/cli.h"
-#include "fdbuf/fdbuf.h"
-#include "vcommand.h"
-#include "ac/dirent.h"
-#include "misc/itoa.h"
-#include "misc/stat_fns.h"
-#include "misc/md5.h"
-#include "misc/strtou.h"
-#include "misc/utoa.h"
-
-const char* cli_program = "vcheckquota";
-const char* cli_help_prefix = "vmailmgr quota enforcement program\n";
-const char* cli_help_suffix = "
-Warning: the soft-message is linked into the users maildir once for each
-message that is received while the account is over its soft quota. This may
-result in multiple warning messages.\n";
-const char* cli_args_usage = "";
-const int cli_args_min = 0;
-const int cli_args_max = 0;
-static unsigned soft_maxsize = 4096;
-static const char* soft_message = 0;
-
-// F<vcheckquota> ensures that the hard and soft quotas are enforced,
-// that message counts and sizes are appropriately limited.
-// The limits are set by the vadduser or vchattr command.
-//
-// The following rules are applied:
-//
-// =over 8
-//
-// =item 1
-//
-// If the message is larger than the message size limit, it is rejected.
-//
-// =item 2
-//
-// If the user has too many messages in their mailbox,
-// further messages are rejected.
-//
-// =item 3
-//
-// If the user is over their hard quota, all further messages are rejected
-// and no warning messages are linked in.
-//
-// =item 4
-//
-// If the user is over their soft quota, and the message is small
-// (as defined by I<soft-maxsize>), the message is accepted, otherwise
-// it is rejected. If I<soft-message> is defined, a warning message
-// is linked into the mailbox in either case.
-//
-// =back
-
-cli_option cli_options[] = {
- { 'a', "soft-maxsize", cli_option::uinteger, 0, &soft_maxsize,
- "The maximum message size after soft quota is reached", "4096" },
- { 'm', "soft-message", cli_option::string, 0, &soft_message,
- "The path to the soft quota warning message", "no message" },
- {0}
-};
-
-// SEE ALSO
-//
-// vadduser(1), vchattr(1)
-
-void exit_msg(const char* msg, int code)
-{
- fout << "vcheckquota: " << msg << endl;
- exit(code);
-}
-void die_fail(const char* msg) { exit_msg(msg, 100); }
-void die_temp(const char* msg) { exit_msg(msg, 111); }
-
-bool stat_dir(const mystring& dirname, unsigned& count, unsigned long& size) {
- struct stat buf;
- DIR* dir = opendir(dirname.c_str());
- if(!dir)
- die_temp("Could not maildir\n");
-
- while(dirent* entry = readdir(dir)) {
- const char* name = entry->d_name;
- if(name[0] == '.' &&
- (NAMLEN(entry) == 1 ||
- (name[1] == '.' && NAMLEN(entry) == 2)))
- continue;
-
- mystring fullname = dirname + "/" + name;
-
- if(stat(fullname.c_str(), &buf) == -1) {
- fout << "Cannot stat " << fullname.c_str() << "\n";
- return false;
- }
-
- if(S_ISREG(buf.st_mode)) {
- ++count;
- size += buf.st_blocks * 512;
- }
- }
- closedir(dir);
- return true;
-}
-
-void link_softquota_message(const mystring& mailbox)
-{
- mystring newdir = mailbox + "/new/";
- pid_t pid = getpid();
- for(;;) {
- mystring path = newdir + itoa(time(0)) + ".";
- path = path + itoa(pid) + ".softquota-warning";
- if(symlink(soft_message, path.c_str()) == 0)
- return;
- if(errno != EEXIST)
- die_temp("Could not create symlink to soft quota warning message");
- sleep(1);
- }
-}
-
-void check_quota(mystring mailbox,
- unsigned hardquota, unsigned softquota,
- unsigned maxsize, unsigned maxcount)
-{
- /*
- * There are 4 cases to consider when comparing disk useage (du)
- * agains hard and soft quotas:
- *
- * Case 1: soft = 0, hard = 0: user has no quota set
- * Case 2: soft = 0, hard > 0: use hard quota
- * Case 3: soft > 0, hard = 0: treat soft quota as hard
- * Case 4: soft > 0, hard > 0: if du becomes larger
- * then soft quota, allow message in if
- * a) it is small (<2048 bytes),
- * b) it would not put du over hard quota.
- */
-
-
- //compute message size
- struct stat st;
- if(fstat(0, &st) == -1)
- die_temp("Failed to stat message");
-
- unsigned long msgsize = st.st_blocks * 512;
-
- if(maxsize != UINT_MAX && msgsize > maxsize)
- //message is too large
- die_fail("Sorry, this message is larger than the current maximum message size limit.\n");
-
- /* Case 1: no quotas set */
- if(softquota == UINT_MAX && hardquota == UINT_MAX && maxcount == UINT_MAX)
- return;
-
- mystring dirname = mailbox;
- mystring newdir = dirname + "/new";
- mystring curdir = dirname + "/cur";
- unsigned cur_count=0;
- unsigned long cur_size=0;
- unsigned new_count=0;
- unsigned long new_size=0;
-
- //treat stat_dir failures as temp errors
- if(!stat_dir(newdir, new_count, new_size))
- die_temp("Failed to stat new dir");
- if(!stat_dir(curdir, cur_count, cur_size))
- die_temp("Failed to stat cur dir");
-
- unsigned long du = cur_size + new_size + msgsize;
- unsigned msgcount = cur_count + new_count + 1;
-
- //too many messages in the mbox
- if(maxcount != UINT_MAX && msgcount > maxcount)
- die_fail("Sorry, the person you sent this message has too many messages stored in the mailbox\n");
-
- // No total size quotas are set
- if(hardquota == UINT_MAX)
- if(softquota == UINT_MAX)
- return;
- // Take care of Cases 2 and 3, and make everything look like Case 4
- else
- hardquota = softquota;
-
- // Check hard quota before soft quota, as it has priority
- if(du > hardquota)
- die_fail("Message would exceed virtual user's disk quota.\n");
-
- // Soft quota allows small (4K default) messages
- // In other words, it only blocks large messages
- if(du > softquota) {
- if(soft_message)
- link_softquota_message(mailbox);
- if(msgsize > soft_maxsize)
- die_fail("Sorry, your message cannot be delivered.\n"
- "User's disk quota exceeded.\n"
- "A small message will be delivered should you wish "
- "to inform this person.\n");
- }
-}
-
-int cli_main(int, char**)
-{
-#define ENV_VAR_REQ(VAR,ENV) const char* tmp__##VAR = getenv(#ENV); if(!tmp__##VAR) die_fail(#ENV " is not set");
-#define ENV_VAR_STR(VAR,ENV) ENV_VAR_REQ(VAR,ENV) mystring VAR = tmp__##VAR;
-#define ENV_VAR_UINT(VAR,ENV) ENV_VAR_REQ(VAR,ENV) unsigned VAR = strtou(tmp__##VAR, &tmp__##VAR); if(*tmp__##VAR) die_fail(#ENV " is not a valid number");
-
- ENV_VAR_STR(maildir, MAILDIR);
- // Always succeed for aliases.
- if(!maildir)
- return 0;
-
- ENV_VAR_UINT(maxsize, VUSER_MSGSIZE);
- ENV_VAR_UINT(maxcount, VUSER_MSGCOUNT);
- ENV_VAR_UINT(hardquota, VUSER_HARDQUOTA);
- ENV_VAR_UINT(softquota, VUSER_SOFTQUOTA);
-
- check_quota(maildir, hardquota, softquota, maxsize, maxcount);
- return 0;
-}
--- a/commands/vcheckquota.html Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>vcheckquota - vmailmgr quota enforcement program</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
-
-<BODY>
-
-<!-- INDEX BEGIN -->
-<!--
-
-<UL>
-
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
--->
-<!-- INDEX END -->
-
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vcheckquota - vmailmgr quota enforcement program
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vcheckquota</STRONG>
-[<STRONG>-a UINT</STRONG>] [<STRONG>--soft-maxsize=UINT</STRONG>] [<STRONG>-m STR</STRONG>] [<STRONG>--soft-message=STR</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-<EM>vcheckquota</EM> ensures that the hard and soft quotas are enforced, that message counts and
-sizes are appropriately limited. The limits are set by the vadduser or
-vchattr command.
-
-<P>
-The following rules are applied:
-
-<OL>
-<LI>
-<P>
-If the message is larger than the message size limit, it is rejected.
-
-<LI>
-<P>
-If the user has too many messages in their mailbox, further messages are
-rejected.
-
-<LI>
-<P>
-If the user is over their hard quota, all further messages are rejected and
-no warning messages are linked in.
-
-<LI>
-<P>
-If the user is over their soft quota, and the message is small (as defined
-by <EM>soft-maxsize</EM>), the message is accepted, otherwise it is rejected. If <EM>soft-message</EM> is defined, a warning message is linked into the mailbox in either case.
-
-</OL>
-<P>
-Warning: the soft-message is linked into the users maildir once for each
-message that is received while the account is over its soft quota. This may
-result in multiple warning messages.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__a">-a UINT, --soft-maxsize=UINT</A></STRONG><DD>
-<P>
-The maximum message size after soft quota is reached. Defaults to 4096.
-
-<DT><STRONG><A NAME="item__m">-m STR, --soft-message=STR</A></STRONG><DD>
-<P>
-The path to the soft quota warning message. Defaults to no message.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vadduser(1),</CODE> <CODE>vchattr(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
--- a/commands/vcheckquota.pod Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-=head1 NAME
-
-vcheckquota - vmailmgr quota enforcement program
-
-=head1 SYNOPSIS
-
-B<vcheckquota>
-[B<-a UINT>]
-[B<--soft-maxsize=UINT>]
-[B<-m STR>]
-[B<--soft-message=STR>]
-
-
-=head1 DESCRIPTION
-
-F<vcheckquota> ensures that the hard and soft quotas are enforced,
-that message counts and sizes are appropriately limited.
-The limits are set by the vadduser or vchattr command.
-
-The following rules are applied:
-
-=over 8
-
-=item 1
-
-If the message is larger than the message size limit, it is rejected.
-
-=item 2
-
-If the user has too many messages in their mailbox,
-further messages are rejected.
-
-=item 3
-
-If the user is over their hard quota, all further messages are rejected
-and no warning messages are linked in.
-
-=item 4
-
-If the user is over their soft quota, and the message is small
-(as defined by I<soft-maxsize>), the message is accepted, otherwise
-it is rejected. If I<soft-message> is defined, a warning message
-is linked into the mailbox in either case.
-
-=back
-
-
-
-Warning: the soft-message is linked into the users maildir once for each
-message that is received while the account is over its soft quota. This may
-result in multiple warning messages.
-
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<-a UINT>, B<--soft-maxsize=UINT>
-
-The maximum message size after soft quota is reached. Defaults to 4096.
-
-=item B<-m STR>, B<--soft-message=STR>
-
-The path to the soft quota warning message. Defaults to no message.
-
-=back
-
-=head1 SEE ALSO
-
-
-vadduser(1), vchattr(1)
-
-
-
-=head1 AUTHORS
-
-Bruce Guenter <bruceg@em.ca>
-
--- a/commands/vchforwards.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchforwards.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VCHFORWARDS 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,65 +109,48 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VCHFORWARDS 1"
+.TH VCHFORWARDS 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vchforwards \- Change virtual user forwarding addresses.
.SH "SYNOPSIS"
-\fBvchforwards\fR
-[\fB--quiet\fR]
-\fIUSERNAME [DESTINATION1 ...]\fR
+.IX Header "SYNOPSIS"
+\&\fBvchforwards\fR
+[\fB\-\-quiet\fR]
+\&\fI\s-1USERNAME\s0 [\s-1DESTINATION1\s0 ...]\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program replaces the virtual user's list of forwarding addresses
with the given list.
.PP
If no forwarding addresses are given, forwarding is disabled.
.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
.SH "SEE ALSO"
-\fIvmailmgr\fR\|(7)
+.IX Header "SEE ALSO"
+\&\fIvmailmgr\fR\|(7)
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VCHFORWARDS 1"
-.IX Name "vchforwards - Change virtual user forwarding addresses."
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHORS"
-
--- a/commands/vchforwards.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchforwards.cc Sun Jan 20 00:22:09 2008 +0100
@@ -18,15 +18,14 @@
#include "fdbuf/fdbuf.h"
#include "mystring/mystring.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vchforwards";
const char* cli_help_prefix =
"Change virtual user forwarding addresses.\n";
const char* cli_help_suffix =
-"If no forwarding addresses are given, forwarding is disabled.
-";
+"If no forwarding addresses are given, forwarding is disabled.\n";
const char* cli_args_usage = "USERNAME [DESTINATION1 ...]";
const int cli_args_min = 1;
const int cli_args_max = -1;
@@ -54,7 +53,7 @@
mystring username = argv[0];
username = username.lower();
- vpwentry* vpw = domain.lookup(username, false);
+ vpwentry* vpw = domain.lookup(username);
if(!vpw) {
if(!o_quiet)
ferr << "vchforwards: User '" << username << "' does not exist." << endl;
--- a/commands/vchforwards.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchforwards.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,72 +1,68 @@
-<HTML>
-<HEAD>
-<TITLE>vchforwards - Change virtual user forwarding addresses.</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vchforwards - Change virtual user forwarding addresses.</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vchforwards - Change virtual user forwarding addresses.
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vchforwards</STRONG>
-[<STRONG>--quiet</STRONG>]
-<EM>USERNAME [DESTINATION1 ...]</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program replaces the virtual user's list of forwarding addresses with
-the given list.
-
-<P>
-If no forwarding addresses are given, forwarding is disabled.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vchforwards - Change virtual user forwarding addresses.</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vchforwards</strong>
+[<strong>--quiet</strong>]
+<em>USERNAME [DESTINATION1 ...]</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program replaces the virtual user's list of forwarding addresses
+with the given list.</p>
+<p>If no forwarding addresses are given, forwarding is disabled.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vmailmgr(7)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
+</body>
-</DL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vmailmgr(7)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vchforwards.pod Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vchforwards.pod Sun Jan 20 00:22:09 2008 +0100
@@ -17,7 +17,6 @@
If no forwarding addresses are given, forwarding is disabled.
-
=head1 OPTIONS
=over 8
--- a/commands/vdeliver.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeliver.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VDELIVER 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,109 +109,92 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VDELIVER 1"
+.TH VDELIVER 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vdeliver \- VMailMgr delivery agent
.SH "SYNOPSIS"
-\fBvdeliver\fR
+.IX Header "SYNOPSIS"
+\&\fBvdeliver\fR
[\fB\-D\fR]
[\fB\-F\fR]
[\fB\-R\fR]
[\fB\-d\fR]
[\fB\-f\fR]
-[\fB--quiet\fR]
+[\fB\-\-no\-predeliver\fR]
+[\fB\-\-no\-postdeliver\fR]
+[\fB\-\-quiet\fR]
[\fB\-r\fR]
.SH "DESCRIPTION"
-vdeliver is the unified e-mail message delivery agent for virtual
+.IX Header "DESCRIPTION"
+vdeliver is the unified e\-mail message delivery agent for virtual
domains managed by vmailmgr.
-It is run from the \fI.qmail-default\fR file, and automatically handles
+It is run from the \fI.qmail\-default\fR file, and automatically handles
delivery to any user within a virtual domain.
.SH "OPTIONS"
-.Ip "\fB\-D\fR" 8
-Add the \f(CWReturn-Path:\fR line to the top of the message. (default)
-.Ip "\fB\-F\fR" 8
-Add a \*(L"\f(CWFrom \fR\*(R" mailbox line.
-.Ip "\fB\-R\fR" 8
-Add a \*(L"\f(CWReturn-Path:\fR\*(R" line (default).
-.Ip "\fB\-d\fR" 8
-Do not add the \f(CWDelivered-To:\fR line to the top of the message.
-.Ip "\fB\-f\fR" 8
-Do not add the \f(CWFrom\fR mailbox line to the top of the message. Note that this line is never added when the message is being re-injected into the mail stream. (default)
-.Ip "\fB--quiet\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-D\fR" 8
+.IX Item "-D"
+Add the \f(CW\*(C`Return\-Path:\*(C'\fR line to the top of the message. (default)
+.IP "\fB\-F\fR" 8
+.IX Item "-F"
+Add a "\f(CW\*(C`From \*(C'\fR" mailbox line.
+.IP "\fB\-R\fR" 8
+.IX Item "-R"
+Add a "\f(CW\*(C`Return\-Path:\*(C'\fR" line (default).
+.IP "\fB\-d\fR" 8
+.IX Item "-d"
+Do not add the \f(CW\*(C`Delivered\-To:\*(C'\fR line to the top of the message.
+.IP "\fB\-f\fR" 8
+.IX Item "-f"
+Do not add the \f(CW\*(C`From\*(C'\fR mailbox line to the top of the message. Note that this line is never added when the message is being re-injected into the mail stream. (default)
+.IP "\fB\-\-no\-predeliver\fR" 8
+.IX Item "--no-predeliver"
+Do not run vdeliver-predeliver scripts.
+.IP "\fB\-\-no\-postdeliver\fR" 8
+.IX Item "--no-postdeliver"
+Do not run vdeliver-postdeliver scripts.
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
-.Ip "\fB\-r\fR" 8
-Do not add the \f(CWReturn-Path:\fR line to the top of the message.
+.IP "\fB\-r\fR" 8
+.IX Item "-r"
+Do not add the \f(CW\*(C`Return\-Path:\*(C'\fR line to the top of the message.
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
Returns 0 if delivery was successful,
100 if a fatal error occurred,
or 111 if a temporary error occurred.
.SH "ENVIRONMENT"
-\fIvdeliver\fR expects to be run by \fIqmail-local\fR as it requires several
+.IX Header "ENVIRONMENT"
+\&\fIvdeliver\fR expects to be run by \fIqmail-local\fR as it requires several
of the environment variables that it sets.
See the \fIqmail-command\fR(8) manual page for full details on these
variables.
-In particular, it requires \f(CWDTLINE\fR, \f(CWEXT\fR, \f(CWHOST\fR, \f(CWRPLINE\fR,
-\f(CWSENDER\fR, \f(CWUFLINE\fR, and \f(CWUSER\fR.
+In particular, it requires \f(CW\*(C`DTLINE\*(C'\fR, \f(CW\*(C`EXT\*(C'\fR, \f(CW\*(C`HOST\*(C'\fR, \f(CW\*(C`RPLINE\*(C'\fR,
+\&\f(CW\*(C`SENDER\*(C'\fR, \f(CW\*(C`UFLINE\*(C'\fR, and \f(CW\*(C`USER\*(C'\fR.
.SH "SEE ALSO"
-\fIcheckvpw\fR\|(1), \fIqmail-command\fR(8)
+.IX Header "SEE ALSO"
+\&\fIcheckvpw\fR\|(1), \fIqmail-command\fR(8)
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VDELIVER 1"
-.IX Name "vdeliver - VMailMgr delivery agent"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-D\fR"
-
-.IX Item "\fB\-F\fR"
-
-.IX Item "\fB\-R\fR"
-
-.IX Item "\fB\-d\fR"
-
-.IX Item "\fB\-f\fR"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Item "\fB\-r\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "ENVIRONMENT"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHORS"
-
--- a/commands/vdeliver.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeliver.cc Sun Jan 20 00:22:09 2008 +0100
@@ -1,4 +1,4 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+// Copyright (C) 1999,2000,2005 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -23,7 +23,7 @@
#include "ac/wait.h"
#include <signal.h>
#include "fdbuf/fdbuf.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
#include "misc/itoa.h"
#include "misc/stat_fns.h"
@@ -39,6 +39,8 @@
static int addrpline = true;
static int adddtline = true;
static int o_quiet = false;
+static int run_predeliver = true;
+static int run_postdeliver = true;
// vdeliver is the unified e-mail message delivery agent for virtual
// domains managed by vmailmgr.
@@ -61,6 +63,10 @@
// Do not add the C<From> mailbox line to the top of the message.
// Note that this line is never added when the message is being
// re-injected into the mail stream. (default)
+ { 0, "no-predeliver", cli_option::flag, false, &run_predeliver,
+ "Do not run vdeliver-predeliver scripts", 0 },
+ { 0, "no-postdeliver", cli_option::flag, false, &run_postdeliver,
+ "Do not run vdeliver-postdeliver scripts", 0 },
{ 0, "quiet", cli_option::flag, true, &o_quiet,
"Suppress all status messages", 0 },
{ 'r', 0, cli_option::flag, false, &addrpline,
@@ -315,35 +321,49 @@
if(!adddtline)
dtline = 0;
- vpwentry* vpw = domain.lookup(ext, false);
+ vpwentry* vpw = domain.lookup(ext);
+ if(!vpw)
+ vpw = domain.lookup(config->default_username());
if(!vpw)
die_fail(mystring("Invalid or unknown virtual user '" + ext + "'").c_str());
if(vpw->expiry < (unsigned)time(0))
die_fail(mystring("Virtual user '" + ext + "' has expired").c_str());
vpw->export_env();
- bool enabled = vpw->is_mailbox_enabled && !!vpw->mailbox;
+ bool do_delivery = vpw->has_mailbox && vpw->is_mailbox_enabled &&
+ !!vpw->directory;
- int r = execute("vdeliver-predeliver");
- if(r)
- exit_msg("Execution of vdeliver-predeliver failed", r);
+ if (run_predeliver) {
+ int r = execute("vdeliver-predeliver");
+ if(r)
+ if(r == 99)
+ return 99;
+ else
+ exit_msg("Execution of vdeliver-predeliver failed", r);
+ }
- if(enabled) {
- maildir = vpw->mailbox;
+ if(do_delivery) {
+ maildir = vpw->directory;
deliver_partial();
}
if(!!vpw->forwards)
enqueue(vpw->forwards, host, sender);
- if(enabled)
+ if(do_delivery)
deliver_final();
if(!fin.rewind()) {
if(!o_quiet)
fout << "Could not re-rewind standard input" << endl;
}
- else if(execute("vdeliver-postdeliver"))
- if(!o_quiet)
- fout << "Execution of vdeliver-postdeliver failed" << endl;
-
+ else {
+ if (run_postdeliver) {
+ int r = execute("vdeliver-postdeliver");
+ if(r && r != 99)
+ if(!o_quiet)
+ fout << "Execution of vdeliver-postdeliver failed" << endl;
+ return r;
+ }
+ }
+
return 0;
}
--- a/commands/vdeliver.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeliver.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,109 +1,143 @@
-<HTML>
-<HEAD>
-<TITLE>vdeliver - VMailMgr delivery agent</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vdeliver - VMailMgr delivery agent</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#ENVIRONMENT">ENVIRONMENT</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#environment">ENVIRONMENT</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vdeliver - VMailMgr delivery agent
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vdeliver</STRONG>
-[<STRONG>-D</STRONG>] [<STRONG>-F</STRONG>] [<STRONG>-R</STRONG>] [<STRONG>-d</STRONG>] [<STRONG>-f</STRONG>] [<STRONG>--quiet</STRONG>] [<STRONG>-r</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-vdeliver is the unified e-mail message delivery agent for virtual domains
-managed by vmailmgr. It is run from the <EM>.qmail-default</EM> file, and automatically handles delivery to any user within a virtual
-domain.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__D">-D</A></STRONG><DD>
-<P>
-Add the <CODE>Return-Path:</CODE> line to the top of the message. (default)
-
-<DT><STRONG><A NAME="item__F">-F</A></STRONG><DD>
-<P>
-Add a ``<CODE>From </CODE>'' mailbox line.
-
-<DT><STRONG><A NAME="item__R">-R</A></STRONG><DD>
-<P>
-Add a ``<CODE>Return-Path:</CODE>'' line (default).
-
-<DT><STRONG><A NAME="item__d">-d</A></STRONG><DD>
-<P>
-Do not add the <CODE>Delivered-To:</CODE> line to the top of the message.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vdeliver - VMailMgr delivery agent</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vdeliver</strong>
+[<strong>-D</strong>]
+[<strong>-F</strong>]
+[<strong>-R</strong>]
+[<strong>-d</strong>]
+[<strong>-f</strong>]
+[<strong>--no-predeliver</strong>]
+[<strong>--no-postdeliver</strong>]
+[<strong>--quiet</strong>]
+[<strong>-r</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>vdeliver is the unified e-mail message delivery agent for virtual
+domains managed by vmailmgr.
+It is run from the <em>.qmail-default</em> file, and automatically handles
+delivery to any user within a virtual domain.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2dd"><strong>-D</strong></a></strong><br />
+</dt>
+<dd>
+Add the <code>Return-Path:</code> line to the top of the message. (default)
+</dd>
+<p></p>
+<dt><strong><a name="item__2df"><strong>-F</strong></a></strong><br />
+</dt>
+<dd>
+Add a ``<code>From </code>'' mailbox line.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dr"><strong>-R</strong></a></strong><br />
+</dt>
+<dd>
+Add a ``<code>Return-Path:</code>'' line (default).
+</dd>
+<p></p>
+<dt><strong><a name="item__2dd"><strong>-d</strong></a></strong><br />
+</dt>
+<dd>
+Do not add the <code>Delivered-To:</code> line to the top of the message.
+</dd>
+<p></p>
+<dt><strong><a name="item__2df"><strong>-f</strong></a></strong><br />
+</dt>
+<dd>
+Do not add the <code>From</code> mailbox line to the top of the message. Note that this line is never added when the message is being re-injected into the mail stream. (default)
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dno_2dpredeliver"><strong>--no-predeliver</strong></a></strong><br />
+</dt>
+<dd>
+Do not run vdeliver-predeliver scripts.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dno_2dpostdeliver"><strong>--no-postdeliver</strong></a></strong><br />
+</dt>
+<dd>
+Do not run vdeliver-postdeliver scripts.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dr"><strong>-r</strong></a></strong><br />
+</dt>
+<dd>
+Do not add the <code>Return-Path:</code> line to the top of the message.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>Returns 0 if delivery was successful,
+100 if a fatal error occurred,
+or 111 if a temporary error occurred.</p>
+<p>
+</p>
+<hr />
+<h1><a name="environment">ENVIRONMENT</a></h1>
+<p><em>vdeliver</em> expects to be run by <em>qmail-local</em> as it requires several
+of the environment variables that it sets.
+See the <em>qmail-command</em>(8) manual page for full details on these
+variables.
+In particular, it requires <code>DTLINE</code>, <code>EXT</code>, <code>HOST</code>, <code>RPLINE</code>,
+<code>SENDER</code>, <code>UFLINE</code>, and <code>USER</code>.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>checkvpw(1), <em>qmail-command</em>(8)</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<DT><STRONG><A NAME="item__f">-f</A></STRONG><DD>
-<P>
-Do not add the <CODE>From</CODE> mailbox line to the top of the message. Note that this line is never added
-when the message is being re-injected into the mail stream. (default)
-
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-<DT><STRONG><A NAME="item__r">-r</A></STRONG><DD>
-<P>
-Do not add the <CODE>Return-Path:</CODE> line to the top of the message.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-Returns 0 if delivery was successful, 100 if a fatal error occurred, or 111
-if a temporary error occurred.
+</body>
-<P>
-<HR>
-<H1><A NAME="ENVIRONMENT">ENVIRONMENT</A></H1>
-<P>
-<EM>vdeliver</EM> expects to be run by <EM>qmail-local</EM> as it requires several of the environment variables that it sets. See the <EM>qmail-command</EM>(8) manual page for full details on these variables. In particular, it
-requires <CODE>DTLINE</CODE>, <CODE>EXT</CODE>, <CODE>HOST</CODE>, <CODE>RPLINE</CODE>,
-<CODE>SENDER</CODE>, <CODE>UFLINE</CODE>, and <CODE>USER</CODE>.
-
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>checkvpw(1),</CODE> <EM>qmail-command</EM>(8)
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vdeliver.pod Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeliver.pod Sun Jan 20 00:22:09 2008 +0100
@@ -10,6 +10,8 @@
[B<-R>]
[B<-d>]
[B<-f>]
+[B<--no-predeliver>]
+[B<--no-postdeliver>]
[B<--quiet>]
[B<-r>]
@@ -46,6 +48,14 @@
Do not add the C<From> mailbox line to the top of the message. Note that this line is never added when the message is being re-injected into the mail stream. (default)
+=item B<--no-predeliver>
+
+Do not run vdeliver-predeliver scripts.
+
+=item B<--no-postdeliver>
+
+Do not run vdeliver-postdeliver scripts.
+
=item B<--quiet>
Suppress all status messages.
--- a/commands/vdeluser.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeluser.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VDELUSER 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,40 +109,38 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VDELUSER 1"
+.TH VDELUSER 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vdeluser \- Delete users from a virtual domain
.SH "SYNOPSIS"
-\fBvdeluser\fR
+.IX Header "SYNOPSIS"
+\&\fBvdeluser\fR
[\fB\-D\fR]
-[\fB--no-mailbox\fR]
-[\fB--quiet\fR]
-\fIUSER1 [USER2 ...]\fR
+[\fB\-\-no\-mailbox\fR]
+[\fB\-\-quiet\fR]
+\&\fI\s-1USER1\s0 [\s-1USER2\s0 ...]\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program will take the steps necessary to
remove a user from a virtual domain.
.PP
@@ -212,38 +157,22 @@
If any of the above steps fail, a warning is issued and processing
continues.
.SH "OPTIONS"
-.Ip "\fB\-D\fR, \fB--no-mailbox\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-D\fR, \fB\-\-no\-mailbox\fR" 8
+.IX Item "-D, --no-mailbox"
Do not delete users that have a mailbox.
-.Ip "\fB--quiet\fR" 8
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
.SH "NOTES"
+.IX Header "NOTES"
You must have either created the users subdirectory by hand or run the
-\fIvsetup\fR program before using this program.
+\&\fIvsetup\fR program before using this program.
.PP
-This program expects the environment variable \f(CWHOME\fR to be set, and
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VDELUSER 1"
-.IX Name "vdeluser - Delete users from a virtual domain"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-D\fR, \fB--no-mailbox\fR"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vdeluser.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeluser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -17,7 +17,7 @@
#include <config.h>
#include "fdbuf/fdbuf.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vdeluser";
--- a/commands/vdeluser.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vdeluser.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,97 +1,88 @@
-<HTML>
-<HEAD>
-<TITLE>vdeluser - Delete users from a virtual domain</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vdeluser - Delete users from a virtual domain</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vdeluser - Delete users from a virtual domain
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vdeluser</STRONG>
-[<STRONG>-D</STRONG>] [<STRONG>--no-mailbox</STRONG>] [<STRONG>--quiet</STRONG>]
-<EM>USER1 [USER2 ...]</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program will take the steps necessary to remove a user from a virtual
-domain.
-
-<P>
-For each user listed on the command line, it does the following:
-
-<P>
-1. It removes the named user's entry from the local password file.
-
-<P>
-2. It removes any qmail delivery files that point to the named user's mail
-directory.
-
-<P>
-3. It removes the user's mail directory and all of its contents
-(recursively).
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vdeluser - Delete users from a virtual domain</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vdeluser</strong>
+[<strong>-D</strong>]
+[<strong>--no-mailbox</strong>]
+[<strong>--quiet</strong>]
+<em>USER1 [USER2 ...]</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program will take the steps necessary to
+remove a user from a virtual domain.</p>
+<p>For each user listed on the command line, it does the following:</p>
+<p>1. It removes the named user's entry from the local password file.</p>
+<p>2. It removes any qmail delivery files that point to the named user's
+mail directory.</p>
+<p>3. It removes the user's mail directory and all of its contents
+(recursively).</p>
+<p>If any of the above steps fail, a warning is issued and processing
+continues.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2dd_2c__2d_2dno_2dmailbox"><strong>-D</strong>, <strong>--no-mailbox</strong></a></strong><br />
+</dt>
+<dd>
+Do not delete users that have a mailbox.
+</dd>
+<p></p>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>You must have either created the users subdirectory by hand or run the
+<em>vsetup</em> program before using this program.</p>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-If any of the above steps fail, a warning is issued and processing
-continues.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__D_">-D, --no-mailbox</A></STRONG><DD>
-<P>
-Do not delete users that have a mailbox.
-
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
+</body>
-</DL>
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-You must have either created the users subdirectory by hand or run the
-<EM>vsetup</EM> program before using this program.
-
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vpasswd.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswd.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VPASSWD 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,77 +109,58 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VPASSWD 1"
+.TH VPASSWD 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vpasswd \- Changes the password for an individual virtual user
.SH "SYNOPSIS"
-\fBvpasswd\fR
-[\fB--quiet\fR]
-\fIUSERNAME\fR
+.IX Header "SYNOPSIS"
+\&\fBvpasswd\fR
+[\fB\-\-quiet\fR]
+\&\fI\s-1USERNAME\s0\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program is used to change a user's password within a virtual
domain.
.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
0 if the password was changed successfully, nonzero otherwise.
.SH "SEE ALSO"
-\fIcheckvpw\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIcheckvpw\fR\|(1)
.SH "NOTES"
+.IX Header "NOTES"
You must have either created the users subdirectory by hand or run the
-\fIvsetup\fR program before using this program.
+\&\fIvsetup\fR program before using this program.
.PP
-This program expects the environment variable \f(CWHOME\fR to be set, and
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VPASSWD 1"
-.IX Name "vpasswd - Changes the password for an individual virtual user"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vpasswd.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswd.cc Sun Jan 20 00:22:09 2008 +0100
@@ -20,7 +20,7 @@
#include "mystring/mystring.h"
#include "misc/passwdfn.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vpasswd";
--- a/commands/vpasswd.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswd.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,88 +1,84 @@
-<HTML>
-<HEAD>
-<TITLE>vpasswd - Changes the password for an individual virtual user</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vpasswd - Changes the password for an individual virtual user</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vpasswd - Changes the password for an individual virtual user
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vpasswd</STRONG>
-[<STRONG>--quiet</STRONG>]
-<EM>USERNAME</EM>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is used to change a user's password within a virtual domain.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vpasswd - Changes the password for an individual virtual user</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vpasswd</strong>
+[<strong>--quiet</strong>]
+<em>USERNAME</em></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is used to change a user's password within a virtual
+domain.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>0 if the password was changed successfully, nonzero otherwise.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>checkvpw(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>You must have either created the users subdirectory by hand or run the
+<em>vsetup</em> program before using this program.</p>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-0 if the password was changed successfully, nonzero otherwise.
-
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>checkvpw(1)</CODE>
+</body>
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-You must have either created the users subdirectory by hand or run the
-<EM>vsetup</EM> program before using this program.
-
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vpasswd2cdb.1 Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve
-.ft R
-
-.fi
-..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
-'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
-.\}
-.TH VPASSWD2CDB 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
-.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
-.\}
-.rm #[ #] #H #V #F C
-.SH "NAME"
-vpasswd2cdb \- Converts text password tables to CDB format
-.SH "SYNOPSIS"
-\fBvpasswd2cdb\fR
-[\fB--quiet\fR]
-.SH "DESCRIPTION"
-Reads in a standard virtual password table in the current directory,
-and writes it out to a CDB table. The file names for the text and CDB
-tables are determined from the configuration file.
-.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
-Suppress all status messages.
-.SH "AUTHORS"
-Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VPASSWD2CDB 1"
-.IX Name "vpasswd2cdb - Converts text password tables to CDB format"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "AUTHORS"
-
--- a/commands/vpasswd2cdb.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include <string.h>
-#include "cdb++/cdb++.h"
-#include "cli/cli.h"
-#include "config/configrc.h"
-#include "fdbuf/fdbuf.h"
-#include "mystring/mystring.h"
-#include "vpwentry/vpwentry.h"
-#include "vcommand.h"
-
-const char* cli_program = "vpasswd2cdb";
-const char* cli_help_prefix = "Converts text password tables to CDB format\n";
-const char* cli_help_suffix =
-"Reads in a standard virtual password table in the current directory,
-and writes it out to a CDB table. The file names for the text and CDB
-tables are determined from the configuration file.";
-const char* cli_args_usage = "";
-const int cli_args_min = 0;
-const int cli_args_max = 0;
-
-static int o_quiet = false;
-
-cli_option cli_options[] = {
- { 0, "quiet", cli_option::flag, true, &o_quiet,
- "Suppress all status messages", 0 },
- {0}
-};
-
-static bool getpw(fdibuf& in, vpwentry& out)
-{
- mystring buf;
- if(!in.getline(buf))
- return false;
-
- int first = buf.find_first(':');
- if(first < 0) return false;
-
- return out.from_record(buf.left(first), buf.c_str() + first);
-}
-
-int cli_main(int, char* [])
-{
- if(!go_home())
- return 1;
-
- fdibuf in(password_file.c_str());
- if(!in) {
- if(!o_quiet)
- ferr << "Can't open password table named '"
- << password_file << "'." << endl;
- return 1;
- }
- mystring cdbname = password_file + ".cdb";
- mystring cdbtmp = cdbname + ".tmp";
- cdb_writer cdb(cdbtmp, 0600);
- if(!cdb) {
- if(!o_quiet)
- ferr << "Can't open CDB temporary file named '" << cdbtmp << "'."
- << endl;
- return 1;
- }
- vpwentry vpw;
- while(getpw(in, vpw)) {
- if(!cdb.put(vpw.name, vpw.to_record())) {
- if(!o_quiet)
- ferr << "Failed to add record to CDB table." << endl;
- return 1;
- }
- }
- if(!cdb.end(cdbname)) {
- if(!o_quiet)
- ferr << "Failed to finish CDB table into '"
- << password_file << ".cdb'." << endl;
- return 1;
- }
- return 0;
-}
--- a/commands/vpasswd2cdb.html Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>vpasswd2cdb - Converts text password tables to CDB format</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
-
-<BODY>
-
-<!-- INDEX BEGIN -->
-<!--
-
-<UL>
-
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
--->
-<!-- INDEX END -->
-
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vpasswd2cdb - Converts text password tables to CDB format
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vpasswd2cdb</STRONG>
-[<STRONG>--quiet</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-Reads in a standard virtual password table in the current directory, and
-writes it out to a CDB table. The file names for the text and CDB tables
-are determined from the configuration file.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
--- a/commands/vpasswd2cdb.pod Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-=head1 NAME
-
-vpasswd2cdb - Converts text password tables to CDB format
-
-=head1 SYNOPSIS
-
-B<vpasswd2cdb>
-[B<--quiet>]
-
-
-=head1 DESCRIPTION
-
-
-
-Reads in a standard virtual password table in the current directory,
-and writes it out to a CDB table. The file names for the text and CDB
-tables are determined from the configuration file.
-
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<--quiet>
-
-Suppress all status messages.
-
-=back
-
-=head1 AUTHORS
-
-Bruce Guenter <bruceg@em.ca>
-
--- a/commands/vpasswd2db.1 Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve
-.ft R
-
-.fi
-..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
-'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
-.\}
-.TH VPASSWD2DB 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
-.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
-.\}
-.rm #[ #] #H #V #F C
-.SH "NAME"
-vpasswd2db \- Converts text password tables to current vpwtable DB format
-.SH "SYNOPSIS"
-\fBvpasswd2db\fR
-[\fB--quiet\fR]
-.SH "DESCRIPTION"
-Reads in a standard virtual password table in the current directory,
-and writes it out to a table. The file names for the input and output
-tables are determined from the configuration file.
-.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
-Suppress all status messages.
-.SH "AUTHORS"
-Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VPASSWD2DB 1"
-.IX Name "vpasswd2db - Converts text password tables to current vpwtable DB format"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "AUTHORS"
-
--- a/commands/vpasswd2db.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include <string.h>
-#include "cli/cli.h"
-#include "config/configrc.h"
-#include "fdbuf/fdbuf.h"
-#include "mystring/mystring.h"
-#include "vpwentry/vpwentry.h"
-#include "vcommand.h"
-
-const char* cli_program = "vpasswd2db";
-const char* cli_help_prefix = "Converts text password tables to current vpwtable DB format\n";
-const char* cli_help_suffix =
-"Reads in a standard virtual password table in the current directory,
-and writes it out to a table. The file names for the input and output
-tables are determined from the configuration file.";
-const char* cli_args_usage = "";
-const int cli_args_min = 0;
-const int cli_args_max = 0;
-
-static int o_quiet = false;
-
-cli_option cli_options[] = {
- { 0, "quiet", cli_option::flag, true, &o_quiet,
- "Suppress all status messages", 0 },
- {0}
-};
-
-static bool getpw(fdibuf& in, vpwentry& out)
-{
- mystring buf;
- if(!in.getline(buf))
- return false;
-
- int first = buf.find_first(':');
- if(first < 0) return false;
-
- return out.from_record(buf.left(first), buf.c_str() + first);
-}
-
-int cli_main(int, char* [])
-{
- if(!go_home())
- return 1;
-
- fdibuf in(password_file.c_str());
- if(!in) {
- if(!o_quiet)
- ferr << "Can't open password table named '"
- << password_file << "'." << endl;
- return 1;
- }
-
- vpwtable* out = domain.table();
-
- vpwentry vpw;
- while(getpw(in, vpw)) {
- if(!out->put(&vpw, true)) {
- if(!o_quiet)
- ferr << "Failed to add record to vpwtable." << endl;
- return 1;
- }
- }
- return 0;
-}
--- a/commands/vpasswd2db.html Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>vpasswd2db - Converts text password tables to current vpwtable DB format</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
-
-<BODY>
-
-<!-- INDEX BEGIN -->
-<!--
-
-<UL>
-
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
--->
-<!-- INDEX END -->
-
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vpasswd2db - Converts text password tables to current vpwtable DB format
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vpasswd2db</STRONG>
-[<STRONG>--quiet</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-Reads in a standard virtual password table in the current directory, and
-writes it out to a table. The file names for the input and output tables
-are determined from the configuration file.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
--- a/commands/vpasswd2db.pod Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-=head1 NAME
-
-vpasswd2db - Converts text password tables to current vpwtable DB format
-
-=head1 SYNOPSIS
-
-B<vpasswd2db>
-[B<--quiet>]
-
-
-=head1 DESCRIPTION
-
-
-
-Reads in a standard virtual password table in the current directory,
-and writes it out to a table. The file names for the input and output
-tables are determined from the configuration file.
-
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<--quiet>
-
-Suppress all status messages.
-
-=back
-
-=head1 AUTHORS
-
-Bruce Guenter <bruceg@em.ca>
-
--- a/commands/vpasswds.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswds.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VPASSWDS 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,37 +109,35 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VPASSWDS 1"
+.TH VPASSWDS 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vpasswds \- Changes the passwords for a list of virtual users
.SH "SYNOPSIS"
-\fBvpasswds\fR
-[\fB--quiet\fR]
+.IX Header "SYNOPSIS"
+\&\fBvpasswds\fR
+[\fB\-\-quiet\fR]
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program is used to change the password of a list of virtual
users. The list is read from standard input.
Each line in the list contains the user's name and new pass phrase,
@@ -202,38 +147,22 @@
the next line.
Any input folling the password is ignored.
.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
.SH "SEE ALSO"
-\fIvpasswd\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIvpasswd\fR\|(1)
.SH "NOTES"
+.IX Header "NOTES"
You must have either created the users subdirectory by hand or run the
-\fIvsetup\fR program before using this program.
+\&\fIvsetup\fR program before using this program.
.PP
-This program expects the environment variable \f(CWHOME\fR to be set, and
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VPASSWDS 1"
-.IX Name "vpasswds - Changes the passwords for a list of virtual users"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vpasswds.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswds.cc Sun Jan 20 00:22:09 2008 +0100
@@ -21,7 +21,7 @@
#include "mystring/mystring.h"
#include "misc/response.h"
#include "config/configrc.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "vcommand.h"
const char* cli_program = "vpasswds";
--- a/commands/vpasswds.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vpasswds.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,83 +1,83 @@
-<HTML>
-<HEAD>
-<TITLE>vpasswds - Changes the passwords for a list of virtual users</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vpasswds - Changes the passwords for a list of virtual users</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vpasswds - Changes the passwords for a list of virtual users
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vpasswds</STRONG>
-[<STRONG>--quiet</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is used to change the password of a list of virtual users. The
-list is read from standard input. Each line in the list contains the user's
-name and new pass phrase, seperated by whitespace. It will attempt to
-change the password for each listed user. If any step fails, a warning is
-issued and processing continues with the next line. Any input folling the
-password is ignored.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vpasswds - Changes the passwords for a list of virtual users</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vpasswds</strong>
+[<strong>--quiet</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is used to change the password of a list of virtual
+users. The list is read from standard input.
+Each line in the list contains the user's name and new pass phrase,
+seperated by whitespace.
+It will attempt to change the password for each listed user.
+If any step fails, a warning is issued and processing continues with
+the next line.
+Any input folling the password is ignored.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
Suppress all status messages.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vpasswd(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-You must have either created the users subdirectory by hand or run the
-<EM>vsetup</EM> program before using this program.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p><code>vpasswd(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>You must have either created the users subdirectory by hand or run the
+<em>vsetup</em> program before using this program.</p>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
+</body>
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vpopbull.1 Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,262 +0,0 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve
-.ft R
-
-.fi
-..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
-'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
-.\}
-.TH VPOPBULL 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
-.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
-.\}
-.rm #[ #] #H #V #F C
-.SH "NAME"
-vpopbull \- Delivers pop bulletins to virtual users
-.SH "SYNOPSIS"
-\fBvpopbull\fR
-[\fB--quiet\fR]
-.SH "DESCRIPTION"
-Scans bulletin directories for any which are newer than the
-\&\fI.timestamp\fR file in the specified maildir.
-For each bulletin that it finds, it adds a symlink to that bulletin to
-the specified maildir.
-Since no reformatting is done, these bulletins must be fully formatted
-email messages, including full headers.
-.PP
-This program is designed to be run from \f(CWcheckvpw-postsetuid\fR.
-.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
-Suppress all status messages.
-.SH "RETURN VALUE"
-Exits false if an error occurred during startup, true otherwise.
-.SH "ENVIRONMENT"
-This program expects the environment variable \f(CWHOME\fR to be set, and
-executes a change directory to the contents of it before starting.
-.PP
-This program expects \f(CWMAILDIR\fR to be set, and delivers any bulletins
-that it finds into this maildir.
-.PP
-If \f(CWVUSER\fR is set, a local bulletin directory is searched as above.
-.SH "FILES"
-The following control files are used:
-.Ip "\fIglobal-bulletin-dir\fR" 8
-This specifies the bulletin directory for all domains.
-.Ip "\fIbulletin-dir\fR" 8
-This specifies the bulletin (sub)directory for virtual domains.
-.SH "SEE ALSO"
-\fIvmailmgr\fR\|(7),
-\fIcheckvpw\fR\|(8),
-configuration.html
-.SH "NOTES"
-If either the global or local bulletin directories do not exist, they
-are silently ignored without failing.
-.SH "AUTHORS"
-Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VPOPBULL 1"
-.IX Name "vpopbull - Delivers pop bulletins to virtual users"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "ENVIRONMENT"
-
-.IX Header "FILES"
-
-.IX Item "\fIglobal-bulletin-dir\fR"
-
-.IX Item "\fIbulletin-dir\fR"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vpopbull.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include "ac/dirent.h"
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include "ac/time.h"
-#include <unistd.h>
-#include "misc/itoa.h"
-#include "mystring/mystring.h"
-#include "config/configrc.h"
-//#include "misc/debug.h"
-#include "cli/cli.h"
-#include "fdbuf/fdbuf.h"
-#include "vcommand.h"
-
-const char* cli_program = "vpopbull";
-const char* cli_help_prefix = "Delivers pop bulletins to virtual users\n";
-const char* cli_help_suffix = "";
-const char* cli_args_usage = "";
-const int cli_args_min = 0;
-const int cli_args_max = 0;
-
-static int o_quiet = false;
-
-// Scans bulletin directories for any which are newer than the
-// F<.timestamp> file in the specified maildir.
-// For each bulletin that it finds, it adds a symlink to that bulletin to
-// the specified maildir.
-// Since no reformatting is done, these bulletins must be fully formatted
-// email messages, including full headers.
-//
-// This program is designed to be run from C<checkvpw-postsetuid>.
-
-cli_option cli_options[] = {
- { 0, "quiet", cli_option::flag, true, &o_quiet,
- "Suppress all status messages", 0 },
- {0}
-};
-
-// RETURN VALUE
-//
-// Exits false if an error occurred during startup, true otherwise.
-
-// ENVIRONMENT
-//
-// This program expects the environment variable C<HOME> to be set, and
-// executes a change directory to the contents of it before starting.
-//
-// This program expects C<MAILDIR> to be set, and delivers any bulletins
-// that it finds into this maildir.
-//
-// If C<VUSER> is set, a local bulletin directory is searched as above.
-
-// FILES
-//
-// The following control files are used:
-//
-// =over 8
-//
-// =item F<global-bulletin-dir>
-//
-// This specifies the bulletin directory for all domains.
-//
-// =item F<bulletin-dir>
-//
-// This specifies the bulletin (sub)directory for virtual domains.
-//
-// =back
-
-// SEE ALSO
-//
-// vmailmgr(7),
-// checkvpw(8),
-// configuration.html
-
-// NOTES
-//
-// If either the global or local bulletin directories do not exist, they
-// are silently ignored without failing.
-
-#ifndef HAVE_GETHOSTNAME
-int gethostname(char *name, size_t len);
-#endif
-
-#define FATAL_FAILURES 0
-
-#if FATAL_FAILURES
-
-static void log(const mystring& msg)
-{
- if(!o_quiet)
- ferr << "vpopbull: " msg << endl;
-}
-
-#define FAIL(X) do{ log(X); return false; }while(0)
-
-#else
-
-#define FAIL(X) do{ return false; }while(0)
-
-#endif
-
-static bool make_link(const mystring& linkname, mystring dest)
-{
- char host[128];
- gethostname(host, sizeof host);
- pid_t pid = getpid();
- mystring destname;
- dest += "/";
- for(;;) {
- time_t t = time(0);
- destname = dest + itoa(t) + ".";
- destname = destname + itoa(pid) + "." + host;
- struct stat buf;
- if(stat(destname.c_str(), &buf) == -1 && errno == ENOENT)
- break;
- sleep(2);
- }
- if(symlink(linkname.c_str(), destname.c_str()) == -1)
- FAIL("Could not make symbolic link.");
- return true;
-}
-
-static bool link_file(const mystring& bulldir,
- const mystring& filename,
- const mystring& destdir)
-{
- mystring src;
- if(bulldir[0] == '/')
- // simple symbolic link
- src = bulldir + "/" + filename;
- else {
- int i = -1;
- while((i = destdir.find_first('/', i+1)) > 0)
- src += "../";
- src = src + bulldir + filename;
- }
- return make_link(src, destdir);
-}
-
-static time_t maildir_time;
-
-static time_t stat_mtime(const mystring& path)
-{
- struct stat statbuf;
- if(stat(path.c_str(), &statbuf) == -1)
- return 0;
- else
- return statbuf.st_mtime;
-}
-
-static bool scan_file(const mystring& bulldir,
- const mystring& filename,
- const mystring& destdir)
-{
- mystring fullname = bulldir + "/" + filename;
- time_t mtime = stat_mtime(fullname);
- if(!mtime)
- FAIL("Can't stat bulletin '" + fullname + "'.");
- if(maildir_time < mtime)
- return link_file(bulldir, filename, destdir);
- return true;
-}
-
-static bool scan_bulletins(const mystring& destdir, const mystring& bulldir)
-{
- DIR* dir = opendir(bulldir.c_str());
- // Do not fail if the directory does not exist.
- if(!dir)
- FAIL("Can't open bulletin directory '" + bulldir + "'.");
- dirent* entry;
- while((entry = readdir(dir)) != 0) {
- if(entry->d_name[0] == '.')
- continue;
- if(!scan_file(bulldir, entry->d_name, destdir))
- return false;
- }
- closedir(dir);
- return true;
-}
-
-static void stat_maildir(const mystring& maildir)
-{
- mystring timestamp = maildir + "/.timestamp";
- maildir_time = stat_mtime(timestamp);
- int fd = open(timestamp.c_str(), O_WRONLY | O_TRUNC | O_CREAT, 0600);
- close(fd);
-}
-
-static bool scan_bulletins(const mystring& maildir, bool non_virtual)
-{
- stat_maildir(maildir);
- mystring dir = maildir + "/new";
-#if FATAL_FAILURES
- return scan_bulletins(dir, config->global_bulletin_dir()) &&
- (non_virtual || scan_bulletins(dir, config->bulletin_dir()));
-#else
- scan_bulletins(dir, config->global_bulletin_dir());
- if(!non_virtual)
- scan_bulletins(dir, config->bulletin_dir());
- return true;
-#endif
-}
-
-int cli_main(int, char*[])
-{
- if(!go_home())
- return 1;
- mystring maildir = getenv("MAILDIR");
- if(!maildir) {
- if(!o_quiet)
- ferr << "vpopbull: MAILDIR is not set." << endl;
- return 1;
- }
- mystring vuser = getenv("VUSER");
- return scan_bulletins(maildir, !vuser) ? 0 : 1;
-}
--- a/commands/vpopbull.html Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>vpopbull - Delivers pop bulletins to virtual users</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
-
-<BODY>
-
-<!-- INDEX BEGIN -->
-<!--
-
-<UL>
-
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#ENVIRONMENT">ENVIRONMENT</A>
- <LI><A HREF="#FILES">FILES</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
--->
-<!-- INDEX END -->
-
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vpopbull - Delivers pop bulletins to virtual users
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vpopbull</STRONG>
-[<STRONG>--quiet</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-Scans bulletin directories for any which are newer than the
-<EM>.timestamp</EM> file in the specified maildir. For each bulletin that it finds, it adds a
-symlink to that bulletin to the specified maildir. Since no reformatting is
-done, these bulletins must be fully formatted email messages, including
-full headers.
-
-<P>
-This program is designed to be run from <CODE>checkvpw-postsetuid</CODE>.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
-Suppress all status messages.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-Exits false if an error occurred during startup, true otherwise.
-
-<P>
-<HR>
-<H1><A NAME="ENVIRONMENT">ENVIRONMENT</A></H1>
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting.
-
-<P>
-This program expects <CODE>MAILDIR</CODE> to be set, and delivers any bulletins that it finds into this maildir.
-
-<P>
-If <CODE>VUSER</CODE> is set, a local bulletin directory is searched as above.
-
-<P>
-<HR>
-<H1><A NAME="FILES">FILES</A></H1>
-<P>
-The following control files are used:
-
-<DL>
-<DT><STRONG><A NAME="item_global">global-bulletin-dir</A></STRONG><DD>
-<P>
-This specifies the bulletin directory for all domains.
-
-<DT><STRONG><A NAME="item_bulletin">bulletin-dir</A></STRONG><DD>
-<P>
-This specifies the bulletin (sub)directory for virtual domains.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vmailmgr(7),</CODE> <CODE>checkvpw(8),</CODE> configuration.html
-
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-If either the global or local bulletin directories do not exist, they are
-silently ignored without failing.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
--- a/commands/vpopbull.pod Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-=head1 NAME
-
-vpopbull - Delivers pop bulletins to virtual users
-
-=head1 SYNOPSIS
-
-B<vpopbull>
-[B<--quiet>]
-
-
-=head1 DESCRIPTION
-
-Scans bulletin directories for any which are newer than the
-F<.timestamp> file in the specified maildir.
-For each bulletin that it finds, it adds a symlink to that bulletin to
-the specified maildir.
-Since no reformatting is done, these bulletins must be fully formatted
-email messages, including full headers.
-
-This program is designed to be run from C<checkvpw-postsetuid>.
-
-
-=head1 OPTIONS
-
-=over 8
-
-=item B<--quiet>
-
-Suppress all status messages.
-
-=back
-
-=head1 RETURN VALUE
-
-
-Exits false if an error occurred during startup, true otherwise.
-
-
-
-=head1 ENVIRONMENT
-
-
-This program expects the environment variable C<HOME> to be set, and
-executes a change directory to the contents of it before starting.
-
-This program expects C<MAILDIR> to be set, and delivers any bulletins
-that it finds into this maildir.
-
-If C<VUSER> is set, a local bulletin directory is searched as above.
-
-
-
-=head1 FILES
-
-
-The following control files are used:
-
-=over 8
-
-=item F<global-bulletin-dir>
-
-This specifies the bulletin directory for all domains.
-
-=item F<bulletin-dir>
-
-This specifies the bulletin (sub)directory for virtual domains.
-
-=back
-
-
-
-=head1 SEE ALSO
-
-
-vmailmgr(7),
-checkvpw(8),
-configuration.html
-
-
-
-=head1 NOTES
-
-
-If either the global or local bulletin directories do not exist, they
-are silently ignored without failing.
-
-
-
-=head1 AUTHORS
-
-Bruce Guenter <bruceg@em.ca>
-
--- a/commands/vrehash.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vrehash.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VREHASH 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,81 +109,62 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VREHASH 1"
+.TH VREHASH 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vrehash \- Reorganize users directory\en"
-\*(L"Renames user directories in a virtual domain to match the current\en"
-\*(L"partitioning scheme
+"Renames user directories in a virtual domain to match the current\en"
+"partitioning scheme
.SH "SYNOPSIS"
-\fBvrehash\fR
+.IX Header "SYNOPSIS"
+\&\fBvrehash\fR
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program is designed to be run after the sysadmin has changed the
-\f(CWuser-dir-bits\fR or \f(CWuser-dir-slices\fR configuration variables.
-It creates a new users directory called \f(CWnew.users\fR, where \f(CWusers\fR
+\&\f(CW\*(C`user\-dir\-bits\*(C'\fR or \f(CW\*(C`user\-dir\-slices\*(C'\fR configuration variables.
+It creates a new users directory called \f(CW\*(C`new.users\*(C'\fR, where \f(CW\*(C`users\*(C'\fR
is the configured name of the user directory.
It then traverses the password table, creates a new user directory name
for each user, and moves the user's mail directory to the new
directory name, creating any necessary directories as it goes.
-Any alias entries in the password table are copied as-is.
+Any alias entries in the password table are copied as\-is.
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
Returns 1 if any part of the process fails; 0 otherwise.
.SH "NOTES"
+.IX Header "NOTES"
When the process is completed, a the old users directory will have
-been moved to \f(CWbackup.users\fR.
+been moved to \f(CW\*(C`backup.users\*(C'\fR.
If no errors occurred, you should be able to safely delete this
directory and all its subdirectories.
Check this directory first, though, to ensure that no important files
remain.
.SH "WARNINGS"
+.IX Header "WARNINGS"
This program is not particularly careful to clean up after itself if
an error occurs.
If an error occurs, you will have to check the status of the current
directory, the virtual password file, and all the virtual users
-subdirectories in both \f(CWusers\fR and \f(CWnew.users\fR.
+subdirectories in both \f(CW\*(C`users\*(C'\fR and \f(CW\*(C`new.users\*(C'\fR.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VREHASH 1"
-.IX Name "vrehash - Reorganize users directory\n"
-"Renames user directories in a virtual domain to match the current\n"
-"partitioning scheme"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "NOTES"
-
-.IX Header "WARNINGS"
-
-.IX Header "AUTHORS"
-
--- a/commands/vrehash.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vrehash.cc Sun Jan 20 00:22:09 2008 +0100
@@ -1,4 +1,3 @@
-
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
@@ -25,11 +24,9 @@
#include "mystring/mystring.h"
#include "misc/maildir.h"
#include "config/configrc.h"
-#include "vpwentry/vpwentry.h"
#include "vcommand.h"
#include "misc/stat_fns.h"
-#include "cli/cli.h"
-#include "cdb++/cdb++.h"
+#include "cli++/cli++.h"
const char* cli_program = "vrehash";
const char* cli_help_prefix = "Reorganize users directory\n"
@@ -74,10 +71,8 @@
// directory, the virtual password file, and all the virtual users
// subdirectories in both C<users> and C<new.users>.
-static cdb_reader* in = 0;
-static cdb_writer* out = 0;
-static mystring cdbfilename;
-static mystring tmpfilename;
+static vpwtable_reader* in = 0;
+static vpwtable_writer* out = 0;
static mystring newuserdir;
static mystring backupdir;
@@ -90,15 +85,18 @@
return "Directory is already locked";
if(chmod(".", buf.st_mode | S_ISVTX))
return "Can't lock directory";
- cdbfilename = password_file + ".cdb";
- tmpfilename = cdbfilename + ".tmp";
- in = new cdb_reader(cdbfilename);
+
+ vpwtable* table = domain.table();
+
+ in = table->start_read();
if(!*in)
return "Could not open virtual password table";
- out = new cdb_writer(tmpfilename, 0600);
+
+ out = table->start_write();
if(!*out)
- return "Could not open temporary table exclusively";
- return "";
+ return "Could not open virtual password table writer";
+
+ return 0;
}
mystring unlock_dir()
@@ -111,7 +109,7 @@
if(chmod(".", buf.st_mode & ~S_ISVTX))
return "Can't unlock directory";
if(out) {
- if(out->end(cdbfilename)) {
+ if(out->end()) {
delete out;
return "Error completing the virtual password table";
}
@@ -121,15 +119,6 @@
return "";
}
-bool getvpwent(vpwentry& vpw)
-{
- autodelete<datum> d = in->nextrec();
- if(!d)
- return false;
- vpw.from_record(d->key, d->data);
- return true;
-}
-
mystring user_dir;
mystring translate_one(vpwentry& vpw)
@@ -141,28 +130,29 @@
mystring tmpdir = newdir.left(newdir.find_last('/'));
if(mkdirp(tmpdir.c_str(), 0755))
return "Error creating a user subdirectory: " + tmpdir;
- if(rename(vpw.mailbox.c_str(), newdir.c_str()))
- return "Error moving a user subdirectory." + vpw.mailbox;
- vpw.mailbox = vpwdir;
+ if(rename(vpw.directory.c_str(), newdir.c_str()))
+ return "Error moving a user subdirectory." + vpw.directory;
+ vpw.directory = vpwdir;
return "";
}
mystring translate()
{
- vpwentry vpw;
+ vpwentry* vpw;
unsigned errors = 0;
- while(getvpwent(vpw)) {
- if(!!vpw.mailbox) {
- mystring response = translate_one(vpw);
+ while((vpw = in->get()) != 0) {
+ if(vpw->has_mailbox) {
+ mystring response = translate_one(*vpw);
if(!!response) {
ferr << "vrehash: " << response;
++errors;
}
}
- if(!out->put(vpw.name, vpw.to_record())) {
+ if(!out->put(*vpw)) {
return "vrehash: failed to add entry to table";
++errors;
}
+ delete vpw;
}
return "";
}
--- a/commands/vrehash.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vrehash.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,85 +1,84 @@
-<HTML>
-<HEAD>
-<TITLE>vrehash - Reorganize users directory\n"
-"Renames user directories in a virtual domain to match the current\n"
-"partitioning scheme</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vrehash - Reorganize users directory\n"
+"Renames user directories in a virtual domain to match the current\n"
+"partitioning scheme</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#WARNINGS">WARNINGS</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#warnings">WARNINGS</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vrehash - Reorganize users directory\n`` ''Renames user directories in a
-virtual domain to match the current\n`` ''partitioning scheme
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vrehash</STRONG>
-
-
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is designed to be run after the sysadmin has changed the
-<CODE>user-dir-bits</CODE> or <CODE>user-dir-slices</CODE> configuration variables. It creates a new users directory called <CODE>new.users</CODE>, where <CODE>users</CODE>
-is the configured name of the user directory. It then traverses the
-password table, creates a new user directory name for each user, and moves
-the user's mail directory to the new directory name, creating any necessary
-directories as it goes. Any alias entries in the password table are copied
-as-is.
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vrehash - Reorganize users directory\n``
+''Renames user directories in a virtual domain to match the current\n``
+''partitioning scheme</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vrehash</strong></p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is designed to be run after the sysadmin has changed the
+<code>user-dir-bits</code> or <code>user-dir-slices</code> configuration variables.
+It creates a new users directory called <code>new.users</code>, where <code>users</code>
+is the configured name of the user directory.
+It then traverses the password table, creates a new user directory name
+for each user, and moves the user's mail directory to the new
+directory name, creating any necessary directories as it goes.
+Any alias entries in the password table are copied as-is.</p>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>Returns 1 if any part of the process fails; 0 otherwise.</p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>When the process is completed, a the old users directory will have
+been moved to <code>backup.users</code>.
+If no errors occurred, you should be able to safely delete this
+directory and all its subdirectories.
+Check this directory first, though, to ensure that no important files
+remain.</p>
+<p>
+</p>
+<hr />
+<h1><a name="warnings">WARNINGS</a></h1>
+<p>This program is not particularly careful to clean up after itself if
+an error occurs.
+If an error occurs, you will have to check the status of the current
+directory, the virtual password file, and all the virtual users
+subdirectories in both <code>users</code> and <code>new.users</code>.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-Returns 1 if any part of the process fails; 0 otherwise.
-
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-When the process is completed, a the old users directory will have been
-moved to <CODE>backup.users</CODE>. If no errors occurred, you should be able to safely delete this directory
-and all its subdirectories. Check this directory first, though, to ensure
-that no important files remain.
+</body>
-<P>
-<HR>
-<H1><A NAME="WARNINGS">WARNINGS</A></H1>
-<P>
-This program is not particularly careful to clean up after itself if an
-error occurs. If an error occurs, you will have to check the status of the
-current directory, the virtual password file, and all the virtual users
-subdirectories in both <CODE>users</CODE> and <CODE>new.users</CODE>.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/commands/vsetup.1 Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vsetup.1 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH VSETUP 1 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,79 +109,60 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VSETUP 1"
+.TH VSETUP 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vsetup \- Sets up a virtual domain for its first use
.SH "SYNOPSIS"
-\fBvsetup\fR
-[\fB--quiet\fR]
+.IX Header "SYNOPSIS"
+\&\fBvsetup\fR
+[\fB\-\-quiet\fR]
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This program sets up the basic set of necessary files needed to use an
account as a virtual domain with vmailmgr.
The users directory is created if it does not exist.
-A \fI.qmail-default\fR file is created with the proper contents.
-If a \fI.qmail-default\fR previously existed, it is renamed to
-\&\fI.qmail-default~\fR.
-Three system aliases (\f(CWroot\fR, \f(CWmailer-daemon\fR, and \f(CWpostmaster\fR)
+A \fI.qmail\-default\fR file is created with the proper contents.
+If a \fI.qmail\-default\fR previously existed, it is renamed to
+\&\fI.qmail\-default~\fR.
+Three system aliases (\f(CW\*(C`root\*(C'\fR, \f(CW\*(C`mailer\-daemon\*(C'\fR, and \f(CW\*(C`postmaster\*(C'\fR)
are created to point to the configured postmaster.
.SH "OPTIONS"
-.Ip "\fB--quiet\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
Suppress all status messages.
.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
0 if all files and directories are successfully created, 1 otherwise.
.SH "SEE ALSO"
-\fIvdeliver\fR\|(1), \fIvmailmgrd\fR\|(8)
+.IX Header "SEE ALSO"
+\&\fIvdeliver\fR\|(1), \fIvmailmgrd\fR\|(8)
.SH "NOTES"
-This program expects the environment variable \f(CWHOME\fR to be set, and
+.IX Header "NOTES"
+This program expects the environment variable \f(CW\*(C`HOME\*(C'\fR to be set, and
executes a change directory to the contents of it before starting. It
is also required that you change user to the domain owner before using
these utilities.
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "VSETUP 1"
-.IX Name "vsetup - Sets up a virtual domain for its first use"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB--quiet\fR"
-
-.IX Header "RETURN VALUE"
-
-.IX Header "SEE ALSO"
-
-.IX Header "NOTES"
-
-.IX Header "AUTHORS"
-
--- a/commands/vsetup.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vsetup.cc Sun Jan 20 00:22:09 2008 +0100
@@ -20,7 +20,7 @@
#include "fdbuf/fdbuf.h"
#include "config/configrc.h"
#include "misc/stat_fns.h"
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "misc/exec.h"
#include "vcommand.h"
@@ -121,8 +121,7 @@
<< "' already exists, skipping.\n";
return true;
}
- vpwentry vpw(alias, "*", 0, dest);
- vpw.set_defaults(true, true);
+ vpwentry vpw(alias, "*", domain.userdir(alias), dest, true);
response resp = domain.set(&vpw, true);
if(!resp) {
if(!o_quiet)
--- a/commands/vsetup.html Sun Jan 20 00:12:17 2008 +0100
+++ b/commands/vsetup.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,84 +1,87 @@
-<HTML>
-<HEAD>
-<TITLE>vsetup - Sets up a virtual domain for its first use</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vsetup - Sets up a virtual domain for its first use</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#RETURN_VALUE">RETURN VALUE</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#NOTES">NOTES</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#return_value">RETURN VALUE</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#notes">NOTES</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vsetup - Sets up a virtual domain for its first use
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vsetup</STRONG>
-[<STRONG>--quiet</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program sets up the basic set of necessary files needed to use an
-account as a virtual domain with vmailmgr. The users directory is created
-if it does not exist. A <EM>.qmail-default</EM> file is created with the proper contents. If a <EM>.qmail-default</EM> previously existed, it is renamed to
-<EM>.qmail-default~</EM>. Three system aliases (<CODE>root</CODE>, <CODE>mailer-daemon</CODE>, and <CODE>postmaster</CODE>) are created to point to the configured postmaster.
-
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__quiet">--quiet</A></STRONG><DD>
-<P>
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vsetup - Sets up a virtual domain for its first use</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vsetup</strong>
+[<strong>--quiet</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program sets up the basic set of necessary files needed to use an
+account as a virtual domain with vmailmgr.
+The users directory is created if it does not exist.
+A <em>.qmail-default</em> file is created with the proper contents.
+If a <em>.qmail-default</em> previously existed, it is renamed to
+<em>.qmail-default~</em>.
+Three system aliases (<code>root</code>, <code>mailer-daemon</code>, and <code>postmaster</code>)
+are created to point to the configured postmaster.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="return_value">RETURN VALUE</a></h1>
+<p>0 if all files and directories are successfully created, 1 otherwise.</p>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>vdeliver(1), <code>vmailmgrd(8)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="notes">NOTES</a></h1>
+<p>This program expects the environment variable <code>HOME</code> to be set, and
+executes a change directory to the contents of it before starting. It
+is also required that you change user to the domain owner before using
+these utilities.</p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-</DL>
-<P>
-<HR>
-<H1><A NAME="RETURN_VALUE">RETURN VALUE</A></H1>
-<P>
-0 if all files and directories are successfully created, 1 otherwise.
-
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vdeliver(1),</CODE> <CODE>vmailmgrd(8)</CODE>
+</body>
-<P>
-<HR>
-<H1><A NAME="NOTES">NOTES</A></H1>
-<P>
-This program expects the environment variable <CODE>HOME</CODE> to be set, and executes a change directory to the contents of it before
-starting. It is also required that you change user to the domain owner
-before using these utilities.
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/vupgrade.1 Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,153 @@
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
+.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VUPGRADE 1"
+.TH VUPGRADE 1 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
+.SH "NAME"
+vupgrade \- Upgrades the vmailmgr data files for a virtual domain
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBvupgrade\fR
+[\fB\-\-quiet\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+Reads in a standard virtual password table in the current directory,\en\*(L"
+\&\*(R"and writes it out to the current table format. The file names for the\en\*(L"
+\&\*(R"input and output tables are determined from the configuration file.\en\*(L"
+\&\*(R"In addition, a user directory is created for each account that does\en\*(L"
+\&\*(R"not have one.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-\-quiet\fR" 8
+.IX Item "--quiet"
+Suppress all status messages.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Bruce Guenter <bruceg@em.ca>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/vupgrade.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,123 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include <string.h>
+#include "cli++/cli++.h"
+#include "config/configrc.h"
+#include "fdbuf/fdbuf.h"
+#include "mystring/mystring.h"
+#include "vpwentry/vpwentry.h"
+#include "vcommand.h"
+#include "misc/maildir.h"
+
+const char* cli_program = "vupgrade";
+const char* cli_help_prefix = "Upgrades the vmailmgr data files for a virtual domain\n";
+const char* cli_help_suffix =
+"Reads in a standard virtual password table in the current directory,\n"
+"and writes it out to the current table format. The file names for the\n"
+"input and output tables are determined from the configuration file.\n"
+"In addition, a user directory is created for each account that does\n"
+"not have one.";
+const char* cli_args_usage = "";
+const int cli_args_min = 0;
+const int cli_args_max = 0;
+
+static int o_quiet = false;
+
+cli_option cli_options[] = {
+ { 0, "quiet", cli_option::flag, true, &o_quiet,
+ "Suppress all status messages", 0 },
+ {0,}
+};
+
+static fdibuf* passwd_in = 0;
+static vpwentry* getpw_passwd()
+{
+ mystring buf;
+ if(!passwd_in->getline(buf))
+ return 0;
+
+ int first = buf.find_first(':');
+ if(first < 0)
+ return 0;
+
+ return vpwentry::new_from_record(buf.left(first), buf.c_str() + first);
+}
+
+static vpwtable_reader* vpwtable_in = 0;
+static vpwentry* getpw_vpwtable()
+{
+ return vpwtable_in->get();
+}
+
+static vpwentry* (*getpw)();
+
+int open_table()
+{
+ vpwtable_in = domain.table()->start_read();
+ if(vpwtable_in && !!*vpwtable_in)
+ getpw = getpw_vpwtable;
+ else {
+ passwd_in = new fdibuf(password_file.c_str());
+ if(!*passwd_in)
+ return false;
+ getpw = getpw_passwd;
+ }
+ return true;
+}
+
+int cli_main(int, char* [])
+{
+ if(!go_home())
+ return 1;
+
+ if(!open_table()) {
+ if(!o_quiet)
+ ferr << "Can't open password table." << endl;
+ return 1;
+ }
+
+ vpwtable_writer* out = domain.table()->start_write();
+
+ vpwentry* vpw;
+ while((vpw = getpw()) != 0) {
+ // Create any missing directories
+ if(!vpw->directory) {
+ mystring dir = domain.userdir(vpw->name);
+ if(mkdirp(dir, 0700) == -1) {
+ out->abort();
+ if(!o_quiet)
+ ferr << "Failed to created user directory '" << dir << "'" << endl;
+ return 1;
+ }
+ vpw->directory = dir;
+ }
+ if(!out->put(*vpw)) {
+ out->abort();
+ if(!o_quiet)
+ ferr << "Failed to add record to vpwtable." << endl;
+ return 1;
+ }
+ delete vpw;
+ }
+ if(!out->end()) {
+ if(!o_quiet)
+ ferr << "Failed to finish writing vpwtable." << endl;
+ return 1;
+ }
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/vupgrade.html Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,63 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vupgrade - Upgrades the vmailmgr data files for a virtual domain</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
+
+<body style="background-color: white">
+
+<p><a name="__index__"></a></p>
+<!-- INDEX BEGIN -->
+<!--
+
+<ul>
+
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
+-->
+<!-- INDEX END -->
+
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vupgrade - Upgrades the vmailmgr data files for a virtual domain</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vupgrade</strong>
+[<strong>--quiet</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>Reads in a standard virtual password table in the current directory,\n``
+''and writes it out to the current table format. The file names for the\n``
+''input and output tables are determined from the configuration file.\n``
+''In addition, a user directory is created for each account that does\n``
+''not have one.</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2d_2dquiet"><strong>--quiet</strong></a></strong><br />
+</dt>
+<dd>
+Suppress all status messages.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
+
+</body>
+
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/vupgrade.pod Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,35 @@
+=head1 NAME
+
+vupgrade - Upgrades the vmailmgr data files for a virtual domain
+
+=head1 SYNOPSIS
+
+B<vupgrade>
+[B<--quiet>]
+
+
+=head1 DESCRIPTION
+
+
+
+Reads in a standard virtual password table in the current directory,\n"
+"and writes it out to the current table format. The file names for the\n"
+"input and output tables are determined from the configuration file.\n"
+"In addition, a user directory is created for each account that does\n"
+"not have one.
+
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--quiet>
+
+Suppress all status messages.
+
+=back
+
+=head1 AUTHORS
+
+Bruce Guenter <bruceg@em.ca>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/config.guess Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,1517 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-05-27'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+if [ "${UNAME_SYSTEM}" = "Linux" ] ; then
+ eval $set_cc_for_build
+ cat << EOF > $dummy.c
+ #include <features.h>
+ #ifdef __UCLIBC__
+ # ifdef __UCLIBC_CONFIG_VERSION__
+ LIBC=uclibc __UCLIBC_CONFIG_VERSION__
+ # else
+ LIBC=uclibc
+ # endif
+ #else
+ LIBC=gnu
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'`
+fi
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ amd64:OpenBSD:*:*)
+ echo x86_64-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ cats:OpenBSD:*:*)
+ echo arm-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ luna88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ sgi:OpenBSD:*:*)
+ echo mips64-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ x86:Interix*:[34]*)
+ echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ exit ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout"
+ exit ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld"
+ exit ;;
+ esac
+ if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ *86) UNAME_PROCESSOR=i686 ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- a/config.h.in Sun Jan 20 00:12:17 2008 +0100
+++ b/config.h.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,34 +1,11 @@
-/* config.h.in. Generated automatically from configure.in by autoheader. */
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
-
-/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define as __inline if that's what the C compiler calls it. */
-#undef inline
+/* config.h.in. Generated from configure.in by autoheader. */
+/* Package name */
+#undef PACKAGE
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef pid_t
-
-/* Define as the return type of signal handlers (int or void). */
-#undef RETSIGTYPE
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
+/* Version number */
+#undef VERSION
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
+#undef BINDIR
/* Use only crypt(3) for password encryption */
#undef USE_CRYPT
@@ -39,75 +16,149 @@
#undef VPWTABLE_CDB
#undef VPWTABLE_GDBM
-/* Define if you have the crypt function. */
+/* Define to 1 if you have the `crypt' function. */
#undef HAVE_CRYPT
-/* Define if you have the gethostname function. */
-#undef HAVE_GETHOSTNAME
-
-/* Define if you have the gettimeofday function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define if you have the mkdir function. */
-#undef HAVE_MKDIR
-
-/* Define if you have the putenv function. */
-#undef HAVE_PUTENV
-
-/* Define if you have the random function. */
-#undef HAVE_RANDOM
-
-/* Define if you have the rmdir function. */
-#undef HAVE_RMDIR
-
-/* Define if you have the socket function. */
-#undef HAVE_SOCKET
-
-/* Define if you have the srandom function. */
-#undef HAVE_SRANDOM
-
-/* Define if you have the <crypt.h> header file. */
+/* Define to 1 if you have the <crypt.h> header file. */
#undef HAVE_CRYPT_H
-/* Define if you have the <dirent.h> header file. */
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
#undef HAVE_DIRENT_H
-/* Define if you have the <fcntl.h> header file. */
+/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
-/* Define if you have the <ndir.h> header file. */
+/* Define to 1 if you have the `gethostname' function. */
+#undef HAVE_GETHOSTNAME
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `crypt' library (-lcrypt). */
+#undef HAVE_LIBCRYPT
+
+/* Define to 1 if you have the `inet' library (-linet). */
+#undef HAVE_LIBINET
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to 1 if you have the `xnet' library (-lxnet). */
+#undef HAVE_LIBXNET
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mkdir' function. */
+#undef HAVE_MKDIR
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
#undef HAVE_NDIR_H
-/* Define if you have the <shadow.h> header file. */
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the `random' function. */
+#undef HAVE_RANDOM
+
+/* Define to 1 if you have the `rmdir' function. */
+#undef HAVE_RMDIR
+
+/* Define to 1 if you have the <shadow.h> header file. */
#undef HAVE_SHADOW_H
-/* Define if you have the <sys/dir.h> header file. */
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the `srandom' function. */
+#undef HAVE_SRANDOM
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
#undef HAVE_SYS_DIR_H
-/* Define if you have the <sys/ndir.h> header file. */
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
#undef HAVE_SYS_NDIR_H
-/* Define if you have the <sys/time.h> header file. */
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the crypt library (-lcrypt). */
-#undef HAVE_LIBCRYPT
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
-/* Define if you have the inet library (-linet). */
-#undef HAVE_LIBINET
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
-/* Define if you have the socket library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if you have the xnet library (-lxnet). */
-#undef HAVE_LIBXNET
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
/* Name of package */
#undef PACKAGE
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
/* Version number of package */
#undef VERSION
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/config.sub Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,1598 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-06-02'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx | dvp \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64r5900 | mips64r5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | ms1 \
+ | msp430 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m32c)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | ms1-* \
+ | msp430-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ m32c-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16c)
+ basic_machine=cr16c-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mipsEE* | ee | ps2)
+ basic_machine=mips64r5900el-scei
+ case $os in
+ -linux*)
+ ;;
+ *)
+ os=-elf
+ ;;
+ esac
+ ;;
+ iop)
+ basic_machine=mipsel-scei
+ os=-irx
+ ;;
+ dvp)
+ basic_machine=dvp-scei
+ os=-elf
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos* \
+ | -irx* )
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- a/configure Sun Jan 20 00:12:17 2008 +0100
+++ b/configure Sun Jan 20 00:22:09 2008 +0100
@@ -1,34 +1,325 @@
#! /bin/sh
-
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# Generated by GNU Autoconf 2.59.
#
+# Copyright (C) 2003 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
- --enable-crypt Use only crypt(3) for authentication instead
- of the built-in MD5 password hashing."
-ac_help="$ac_help
- --with-krb5 Use Kerberos5 for authentication."
-ac_help="$ac_help
- --with-vpwtable=type Use "type" database for storage of virtual
- password tables. Defaults to "cdb"."
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="lib/mergelib.sh"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE KRB5_TRUE KRB5_FALSE VPWTABLE_CDB_TRUE VPWTABLE_CDB_FALSE VPWTABLE_GDBM_TRUE VPWTABLE_GDBM_FALSE FDBUF_NO_MYSTRING_TRUE FDBUF_NO_MYSTRING_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB STRIP RM MKDIR LN PYTHON pythonlibdir WANTPYTHON_TRUE WANTPYTHON_FALSE phpdir W3M LYNX HTML2TXT POD2MAN POD2HTML SUFFIXES CPP EGREP cgidir LIBOBJS LTLIBOBJS'
+ac_subst_files=''
# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
# The variables have the same names as the options, with
# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
exec_prefix=NONE
-host=NONE
no_create=
-nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
@@ -37,10 +328,15 @@
silent=
site=
srcdir=
-target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
@@ -54,17 +350,9 @@
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
ac_prev=
for ac_option
do
-
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
@@ -72,59 +360,59 @@
continue
fi
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case "$ac_option" in
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
+ bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
+ ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
+ build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
- datadir="$ac_optarg" ;;
+ datadir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
-enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -133,95 +421,47 @@
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
+ exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
-host | --host | --hos | --ho)
- ac_prev=host ;;
+ ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
+ host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
+ includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
+ infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
+ libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
+ libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
@@ -230,19 +470,19 @@
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
+ localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
+ mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
+ | --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -256,26 +496,26 @@
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
+ oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
+ prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
+ program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
+ program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
@@ -292,7 +532,7 @@
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
+ program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
@@ -302,7 +542,7 @@
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
+ sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -313,58 +553,57 @@
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
+ sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
+ site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
+ srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
+ sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
+ ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
+ target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "with_${ac_package}='$ac_optarg'" ;;
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
--x)
# Obsolete; use --with-x.
@@ -375,99 +614,110 @@
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
+ x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
-
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
;;
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
*)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
esac
done
if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
-
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
esac
done
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=lib/mergelib.sh
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
@@ -477,13 +727,482 @@
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
fi
fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
-
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-crypt Use only crypt(3) for authentication instead
+ of the built-in MD5 password hashing.
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-krb5 Use Kerberos5 for authentication.
+ --with-vpwtable=type Use "type" database for storage of virtual
+ password tables. Defaults to "cdb".
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
@@ -494,41 +1213,106 @@
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
-else
- echo "creating cache $cache_file"
- > $cache_file
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
fi
ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
-
-
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+am__api_version="1.4"
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
@@ -539,14 +1323,20 @@
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
fi
done
if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
-fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -555,65 +1345,80 @@
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:564: checking for a BSD compatible install" >&5
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
fi
fi
done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+ done
+ ;;
+esac
+done
+
fi
if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
+ INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
- INSTALL="$ac_install_sh"
+ INSTALL=$ac_install_sh
fi
fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:617: checking whether build environment is sane" >&5
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -635,8 +1440,11 @@
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
- { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
-alias in your environment" 1>&2; exit 1; }
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
fi
test "$2" = conftestfile
@@ -645,170 +1453,187 @@
# Ok.
:
else
- { echo "configure: error: newly created file is older than distributed files!
-Check your system clock" 1>&2; exit 1; }
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
fi
rm -f conftest*
-echo "$ac_t""yes" 1>&6
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
-else
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
-fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
-
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:674: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
-rm -f conftestmake
+rm -f conftest.make
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
SET_MAKE=
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
SET_MAKE="MAKE=${MAKE-make}"
fi
-
PACKAGE=vmailmgr
-VERSION=0.96.9
+VERSION=0.97
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
- { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
-fi
-cat >> confdefs.h <<EOF
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+cat >>confdefs.h <<_ACEOF
#define PACKAGE "$PACKAGE"
-EOF
-
-cat >> confdefs.h <<EOF
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
#define VERSION "$VERSION"
-EOF
+_ACEOF
missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:721: checking for working aclocal" >&5
+echo "$as_me:$LINENO: checking for working aclocal-${am__api_version}" >&5
+echo $ECHO_N "checking for working aclocal-${am__api_version}... $ECHO_C" >&6
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- ACLOCAL=aclocal
- echo "$ac_t""found" 1>&6
-else
- ACLOCAL="$missing_dir/missing aclocal"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:734: checking for working autoconf" >&5
+if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal-${am__api_version}
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ ACLOCAL="$missing_dir/missing aclocal-${am__api_version}"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoconf" >&5
+echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if (autoconf --version) < /dev/null > /dev/null 2>&1; then
AUTOCONF=autoconf
- echo "$ac_t""found" 1>&6
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
else
AUTOCONF="$missing_dir/missing autoconf"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:747: checking for working automake" >&5
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working automake-${am__api_version}" >&5
+echo $ECHO_N "checking for working automake-${am__api_version}... $ECHO_C" >&6
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
- AUTOMAKE=automake
- echo "$ac_t""found" 1>&6
-else
- AUTOMAKE="$missing_dir/missing automake"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:760: checking for working autoheader" >&5
+if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake-${am__api_version}
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+ AUTOMAKE="$missing_dir/missing automake-${am__api_version}"
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working autoheader" >&5
+echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if (autoheader --version) < /dev/null > /dev/null 2>&1; then
AUTOHEADER=autoheader
- echo "$ac_t""found" 1>&6
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
else
AUTOHEADER="$missing_dir/missing autoheader"
- echo "$ac_t""missing" 1>&6
-fi
-
-echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:773: checking for working makeinfo" >&5
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:$LINENO: checking for working makeinfo" >&5
+echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
MAKEINFO=makeinfo
- echo "$ac_t""found" 1>&6
+ echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
else
MAKEINFO="$missing_dir/missing makeinfo"
- echo "$ac_t""missing" 1>&6
-fi
-
-
-
-
-
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:790: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftestmake <<\EOF
+ echo "$as_me:$LINENO: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+
+
+ ac_config_headers="$ac_config_headers config.h"
+
+ ac_config_commands="$ac_config_commands default-1"
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
all:
- @echo 'ac_maketemp="${MAKE}"'
-EOF
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
-rm -f conftestmake
+rm -f conftest.make
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
SET_MAKE=
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
SET_MAKE="MAKE=${MAKE-make}"
fi
@@ -818,11 +1643,11 @@
if test "${enable_crypt+set}" = set; then
enableval="$enable_crypt"
USE_CRYPT=$enableval
-fi
-
-test "$USE_CRYPT" != no && cat >> confdefs.h <<\EOF
+fi;
+test "$USE_CRYPT" != no && cat >>confdefs.h <<\_ACEOF
#define USE_CRYPT 1
-EOF
+_ACEOF
+
# Check whether --with-krb5 or --without-krb5 was given.
@@ -832,12 +1657,11 @@
LIBS="$LIBS -L$withval/lib -lkrb5 -lcom_err -lcrypto"
CFLAGS="$CFLAGS -I${withval}/include"
CXXFLAGS="$CXXFLAGS -I${withval}/include"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define USE_KRB5 1
-EOF
-
-fi
-
+_ACEOF
+
+fi;
if test x$with_krb5 != x -a x$with_krb5 != xno; then
@@ -848,30 +1672,28 @@
KRB5_FALSE=
fi
+
# Check whether --with-vpwtable or --without-vpwtable was given.
if test "${with_vpwtable+set}" = set; then
withval="$with_vpwtable"
case "${withval}" in
- gdbm) cat >> confdefs.h <<\EOF
+ gdbm) cat >>confdefs.h <<\_ACEOF
#define VPWTABLE_GDBM 1
-EOF
+_ACEOF
dbtype=gdbm
LIBS="$LIBS -lgdbm";;
- *) { echo "configure: error: bad value ${withval} for --with-vpwtable" 1>&2; exit 1; };;
+ *) { { echo "$as_me:$LINENO: error: bad value ${withval} for --with-vpwtable" >&5
+echo "$as_me: error: bad value ${withval} for --with-vpwtable" >&2;}
+ { (exit 1); exit 1; }; };;
esac
else
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define VPWTABLE_CDB 1
-EOF
-
- CDBPROGS="vpasswd2cdb vrehash"
- CDBSCRIPTS="allvpasswd2cdb"
+_ACEOF
+
dbtype=cdb
-fi
-
-
-
+fi;
@@ -902,214 +1724,659 @@
FDBUF_NO_MYSTRING_FALSE=
fi
-# Extract the first word of "gcc", so it can be a program name with args.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:909: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:939: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
- if test $# -gt 0; then
+ if test $# != 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:990: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
done
- IFS="$ac_save_ifs"
-fi
-fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
- ;;
- esac
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1022: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 1033 "configure"
-#include "confdefs.h"
-
-main(){return(0);}
-EOF
-if { (eval echo configure:1038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
else
- ac_cv_prog_cc_cross=yes
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1064: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1069: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1078: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
-else
- ac_cv_prog_gcc=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
-else
- GCC=
-fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1097: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cc_g=yes
else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
+ CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
@@ -1123,136 +2390,500 @@
CFLAGS=
fi
fi
-
-for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1133: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CXX="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-CXX="$ac_cv_prog_CXX"
-if test -n "$CXX"; then
- echo "$ac_t""$CXX" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$CXX" && break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
-test -n "$CXX" || CXX="gcc"
-
-
-echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1165: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
-
-ac_ext=C
-# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cxx_cross
-
-cat > conftest.$ac_ext << EOF
-
-#line 1176 "configure"
-#include "confdefs.h"
-
-int main(){return(0);}
-EOF
-if { (eval echo configure:1181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cxx_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cxx_cross=no
- else
- ac_cv_prog_cxx_cross=yes
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cxx_works=no
-fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
-if test $ac_cv_prog_cxx_works = no; then
- { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1207: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
-cross_compiling=$ac_cv_prog_cxx_cross
-
-echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1212: checking whether we are using GNU C++" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.C <<EOF
-#ifdef __GNUC__
- yes;
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
#endif
-EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1221: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gxx=yes
-else
- ac_cv_prog_gxx=no
-fi
-fi
-
-echo "$ac_t""$ac_cv_prog_gxx" 1>&6
-
-if test $ac_cv_prog_gxx = yes; then
- GXX=yes
-else
- GXX=
-fi
-
-ac_test_CXXFLAGS="${CXXFLAGS+set}"
-ac_save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS=
-echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1240: checking whether ${CXX-g++} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- echo 'void f(){}' > conftest.cc
-if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cxx_g=yes
else
- ac_cv_prog_cxx_g=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS="$ac_save_CXXFLAGS"
+ CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
CXXFLAGS="-g -O2"
@@ -1266,11 +2897,122 @@
CXXFLAGS=
fi
fi
-
-echo $ac_n "checking whether ${CXX-g++} accepts -fno-rtti""... $ac_c" 1>&6
-echo "configure:1272: checking whether ${CXX-g++} accepts -fno-rtti" >&5
-if eval "test \"`echo '$''{'local_cv_flag_NO_RTTI'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:$LINENO: checking whether ${CXX-g++} accepts -fno-rtti" >&5
+echo $ECHO_N "checking whether ${CXX-g++} accepts -fno-rtti... $ECHO_C" >&6
+if test "${local_cv_flag_NO_RTTI+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
echo >conftest.cc
if ${CXX-g++} ${CXXFLAGS} -c -fno-rtti conftest.cc >/dev/null 2>&1; then
@@ -1282,14 +3024,14 @@
fi
rm -f conftest*
fi
-
-echo "$ac_t""$local_cv_flag_NO_RTTI" 1>&6
+echo "$as_me:$LINENO: result: $local_cv_flag_NO_RTTI" >&5
+echo "${ECHO_T}$local_cv_flag_NO_RTTI" >&6
test "$local_cv_flag_NO_RTTI" = yes && CXXFLAGS="$CXXFLAGS -fno-rtti"
-echo $ac_n "checking whether ${CXX-g++} accepts -fno-exceptions""... $ac_c" 1>&6
-echo "configure:1291: checking whether ${CXX-g++} accepts -fno-exceptions" >&5
-if eval "test \"`echo '$''{'local_cv_flag_NO_EXCEPTIONS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking whether ${CXX-g++} accepts -fno-exceptions" >&5
+echo $ECHO_N "checking whether ${CXX-g++} accepts -fno-exceptions... $ECHO_C" >&6
+if test "${local_cv_flag_NO_EXCEPTIONS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
echo >conftest.cc
if ${CXX-g++} ${CXXFLAGS} -c -fno-exceptions conftest.cc >/dev/null 2>&1; then
@@ -1301,13 +3043,13 @@
fi
rm -f conftest*
fi
-
-echo "$ac_t""$local_cv_flag_NO_EXCEPTIONS" 1>&6
+echo "$as_me:$LINENO: result: $local_cv_flag_NO_EXCEPTIONS" >&5
+echo "${ECHO_T}$local_cv_flag_NO_EXCEPTIONS" >&6
test "$local_cv_flag_NO_EXCEPTIONS" = yes && CXXFLAGS="$CXXFLAGS -fno-exceptions"
-CFLAGS="$CFLAGS -Wall -W"
-CXXFLAGS="$CXXFLAGS -Wall -W"
+CFLAGS="$CFLAGS -Wall"
+CXXFLAGS="$CXXFLAGS -Wall"
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
@@ -1316,273 +3058,358 @@
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1325: checking for a BSD compatible install" >&5
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
fi
fi
done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+ done
+ ;;
+esac
+done
+
fi
if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
+ INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
- INSTALL="$ac_install_sh"
+ INSTALL=$ac_install_sh
fi
fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1380: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
fi
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1410: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_STRIP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$STRIP" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $STRIP in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_STRIP="$STRIP" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_STRIP="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-STRIP="$ac_cv_path_STRIP"
+STRIP=$ac_cv_path_STRIP
+
if test -n "$STRIP"; then
- echo "$ac_t""$STRIP" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
# Extract the first word of "rm", so it can be a program name with args.
set dummy rm; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1445: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_RM'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$RM" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_RM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $RM in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_RM="$RM" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_RM="$RM" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_RM="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-RM="$ac_cv_path_RM"
+RM=$ac_cv_path_RM
+
if test -n "$RM"; then
- echo "$ac_t""$RM" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $RM" >&5
+echo "${ECHO_T}$RM" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
# Extract the first word of "mkdir", so it can be a program name with args.
set dummy mkdir; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1480: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$MKDIR" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_MKDIR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MKDIR in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_MKDIR="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-MKDIR="$ac_cv_path_MKDIR"
+MKDIR=$ac_cv_path_MKDIR
+
if test -n "$MKDIR"; then
- echo "$ac_t""$MKDIR" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $MKDIR" >&5
+echo "${ECHO_T}$MKDIR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
# Extract the first word of "ln", so it can be a program name with args.
set dummy ln; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1515: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_LN'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$LN" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LN+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $LN in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_LN="$LN" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_LN="$LN" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_LN="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-LN="$ac_cv_path_LN"
+LN=$ac_cv_path_LN
+
if test -n "$LN"; then
- echo "$ac_t""$LN" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $LN" >&5
+echo "${ECHO_T}$LN" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
# Extract the first word of "python", so it can be a program name with args.
set dummy python; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1551: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$PYTHON" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PYTHON+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $PYTHON in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_PYTHON="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-PYTHON="$ac_cv_path_PYTHON"
+PYTHON=$ac_cv_path_PYTHON
+
if test -n "$PYTHON"; then
- echo "$ac_t""$PYTHON" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking Python library path""... $ac_c" 1>&6
-echo "configure:1584: checking Python library path" >&5
-if eval "test \"`echo '$''{'local_cv_python_lib_dir'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:$LINENO: result: $PYTHON" >&5
+echo "${ECHO_T}$PYTHON" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+echo "$as_me:$LINENO: checking Python library path" >&5
+echo $ECHO_N "checking Python library path... $ECHO_C" >&6
+if test "${local_cv_python_lib_dir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -x "$PYTHON"; then
local_cv_python_lib_dir=`$PYTHON -c "import sys;print sys.path[1]"`
@@ -1590,8 +3417,8 @@
local_cv_python_lib_dir=NONE
fi
fi
-
-echo "$ac_t""$local_cv_python_lib_dir" 1>&6
+echo "$as_me:$LINENO: result: $local_cv_python_lib_dir" >&5
+echo "${ECHO_T}$local_cv_python_lib_dir" >&6
pythonlibdir="$local_cv_python_lib_dir/vmailmgr"
@@ -1609,72 +3436,80 @@
# Extract the first word of "w3m", so it can be a program name with args.
set dummy w3m; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1614: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_W3M'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$W3M" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_W3M+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $W3M in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_W3M="$W3M" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_W3M="$W3M" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_W3M="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_W3M="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-W3M="$ac_cv_path_W3M"
+W3M=$ac_cv_path_W3M
+
if test -n "$W3M"; then
- echo "$ac_t""$W3M" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $W3M" >&5
+echo "${ECHO_T}$W3M" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
# Extract the first word of "lynx", so it can be a program name with args.
set dummy lynx; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1649: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_LYNX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$LYNX" in
- /*)
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LYNX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $LYNX in
+ [\\/]* | ?:[\\/]*)
ac_cv_path_LYNX="$LYNX" # Let the user override the test with a path.
;;
- ?:/*)
- ac_cv_path_LYNX="$LYNX" # Let the user override the test with a dos path.
- ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_LYNX="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_LYNX="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
;;
esac
fi
-LYNX="$ac_cv_path_LYNX"
+LYNX=$ac_cv_path_LYNX
+
if test -n "$LYNX"; then
- echo "$ac_t""$LYNX" 1>&6
-else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: $LYNX" >&5
+echo "${ECHO_T}$LYNX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
if test "x$W3M" != x; then
@@ -1698,440 +3533,954 @@
-echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:1703: checking for crypt in -lcrypt" >&5
-ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
+
+
+echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5
+echo $ECHO_N "checking for crypt in -lcrypt... $ECHO_C" >&6
+if test "${ac_cv_lib_crypt_crypt+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-lcrypt $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1711 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char crypt();
-
-int main() {
-crypt()
-; return 0; }
-EOF
-if { (eval echo configure:1722: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
+ builtin and then its argument prototype would still apply. */
+char crypt ();
+int
+main ()
+{
+crypt ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_crypt_crypt=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_crypt_crypt=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5
+echo "${ECHO_T}$ac_cv_lib_crypt_crypt" >&6
+if test $ac_cv_lib_crypt_crypt = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCRYPT 1
+_ACEOF
LIBS="-lcrypt $LIBS"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking for socket in -linet""... $ac_c" 1>&6
-echo "configure:1750: checking for socket in -linet" >&5
-ac_lib_var=`echo inet'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
+fi
+
+
+echo "$as_me:$LINENO: checking for socket in -linet" >&5
+echo $ECHO_N "checking for socket in -linet... $ECHO_C" >&6
+if test "${ac_cv_lib_inet_socket+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-linet $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1758 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:1769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo inet | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
+ builtin and then its argument prototype would still apply. */
+char socket ();
+int
+main ()
+{
+socket ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_inet_socket=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_inet_socket=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_inet_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_inet_socket" >&6
+if test $ac_cv_lib_inet_socket = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBINET 1
+_ACEOF
LIBS="-linet $LIBS"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:1797: checking for socket in -lsocket" >&5
-ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
+fi
+
+
+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_socket+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-lsocket $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1805 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:1816: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
+ builtin and then its argument prototype would still apply. */
+char socket ();
+int
+main ()
+{
+socket ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_socket=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_socket=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
+if test $ac_cv_lib_socket_socket = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
LIBS="-lsocket $LIBS"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking for socket in -lxnet""... $ac_c" 1>&6
-echo "configure:1844: checking for socket in -lxnet" >&5
-ac_lib_var=`echo xnet'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
+fi
+
+
+echo "$as_me:$LINENO: checking for socket in -lxnet" >&5
+echo $ECHO_N "checking for socket in -lxnet... $ECHO_C" >&6
+if test "${ac_cv_lib_xnet_socket+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-lxnet $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1852 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:1863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo xnet | sed -e 's/[^a-zA-Z0-9_]/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
+ builtin and then its argument prototype would still apply. */
+char socket ();
+int
+main ()
+{
+socket ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_xnet_socket=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_xnet_socket=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_xnet_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_xnet_socket" >&6
+if test $ac_cv_lib_xnet_socket = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBXNET 1
+_ACEOF
LIBS="-lxnet $LIBS"
-else
- echo "$ac_t""no" 1>&6
-fi
+fi
+
+
+
+
+
ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1896: checking for $ac_hdr that defines DIR" >&5
-if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1901 "configure"
-#include "confdefs.h"
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
#include <$ac_hdr>
-int main() {
-DIR *dirp = 0;
-; return 0; }
-EOF
-if { (eval echo configure:1909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- ac_header_dirent=$ac_hdr; break
-else
- echo "$ac_t""no" 1>&6
-fi
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1934: checking for opendir in -ldir" >&5
-ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldir $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1942 "configure"
-#include "confdefs.h"
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in dir; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -ldir"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-else
-echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1975: checking for opendir in -lx" >&5
-ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lx $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1983 "configure"
-#include "confdefs.h"
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+else
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -lx"
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2017: checking how to run the C preprocessor" >&5
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in x; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
+fi
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 2032 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 2049 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 2066 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
-fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
-fi
- CPP="$ac_cv_prog_CPP"
-else
- ac_cv_prog_CPP="$CPP"
-fi
-echo "$ac_t""$CPP" 1>&6
-
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2097: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2102 "configure"
-#include "confdefs.h"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_header_stdc=yes
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 2127 "configure"
-#include "confdefs.h"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <string.h>
-EOF
+
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
+ $EGREP "memchr" >/dev/null 2>&1; then
:
else
- rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
@@ -2140,16 +4489,19 @@
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 2145 "configure"
-#include "confdefs.h"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <stdlib.h>
-EOF
+
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
+ $EGREP "free" >/dev/null 2>&1; then
:
else
- rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
@@ -2158,283 +4510,596 @@
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
-else
- cat > conftest.$ac_ext <<EOF
-#line 2166 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
-
-EOF
-if { (eval echo configure:2177: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+ if test "$cross_compiling" = yes; then
:
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
-fi
-rm -fr conftest*
-fi
-
-fi
-fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define STDC_HEADERS 1
-EOF
-
-fi
-
-echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:2201: checking for sys/wait.h that is POSIX.1 compatible" >&5
-if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2206 "configure"
-#include "confdefs.h"
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6
+if test "${ac_cv_header_sys_wait_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
#include <sys/wait.h>
#ifndef WEXITSTATUS
-#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
#endif
#ifndef WIFEXITED
-#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
#endif
-int main() {
-int s;
-wait (&s);
-s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
-; return 0; }
-EOF
-if { (eval echo configure:2222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+
+int
+main ()
+{
+ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_header_sys_wait_h=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_sys_wait_h=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_sys_wait_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6
if test $ac_cv_header_sys_wait_h = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define HAVE_SYS_WAIT_H 1
-EOF
-
-fi
-
-echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2243: checking whether time.h and sys/time.h may both be included" >&5
-if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2248 "configure"
-#include "confdefs.h"
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
-int main() {
-struct tm *tp;
-; return 0; }
-EOF
-if { (eval echo configure:2257: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_header_time=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_time=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_header_time" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_time=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
if test $ac_cv_header_time = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define TIME_WITH_SYS_TIME 1
-EOF
-
-fi
-
-for ac_hdr in fcntl.h sys/time.h unistd.h shadow.h crypt.h
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2281: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2286 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2291: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
done
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2319: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2324 "configure"
-#include "confdefs.h"
-
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
+
+
+
+
+
+for ac_header in fcntl.h sys/time.h unistd.h shadow.h crypt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists. ##
+## ------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
-EOF
-if { (eval echo configure:2373: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_c_const=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_const" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
-
-fi
-
-echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:2394: checking for uid_t in sys/types.h" >&5
-if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2399 "configure"
-#include "confdefs.h"
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5
+echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6
+if test "${ac_cv_type_uid_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
-EOF
+
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "uid_t" >/dev/null 2>&1; then
- rm -rf conftest*
+ $EGREP "uid_t" >/dev/null 2>&1; then
ac_cv_type_uid_t=yes
else
- rm -rf conftest*
ac_cv_type_uid_t=no
fi
rm -f conftest*
fi
-
-echo "$ac_t""$ac_cv_type_uid_t" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
+echo "${ECHO_T}$ac_cv_type_uid_t" >&6
if test $ac_cv_type_uid_t = no; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define uid_t int
-EOF
-
- cat >> confdefs.h <<\EOF
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
#define gid_t int
-EOF
-
-fi
-
-echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:2428: checking return type of signal handlers" >&5
-if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2433 "configure"
-#include "confdefs.h"
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
#include <signal.h>
#ifdef signal
-#undef signal
+# undef signal
#endif
#ifdef __cplusplus
extern "C" void (*signal (int, void (*)(int)))(int);
@@ -2442,242 +5107,465 @@
void (*signal ()) ();
#endif
-int main() {
+int
+main ()
+{
int i;
-; return 0; }
-EOF
-if { (eval echo configure:2450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_type_signal=void
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_type_signal=int
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_type_signal" 1>&6
-cat >> confdefs.h <<EOF
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_signal=int
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
#define RETSIGTYPE $ac_cv_type_signal
-EOF
-
-
-echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2469: checking for inline" >&5
-if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
- cat > conftest.$ac_ext <<EOF
-#line 2476 "configure"
-#include "confdefs.h"
-
-int main() {
-} $ac_kw foo() {
-; return 0; }
-EOF
-if { (eval echo configure:2483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_c_inline=$ac_kw; break
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
done
fi
-
-echo "$ac_t""$ac_cv_c_inline" 1>&6
-case "$ac_cv_c_inline" in
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
inline | yes) ;;
- no) cat >> confdefs.h <<\EOF
-#define inline
-EOF
- ;;
- *) cat >> confdefs.h <<EOF
-#define inline $ac_cv_c_inline
-EOF
- ;;
-esac
-
-echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:2509: checking for pid_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2514 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
+_ACEOF
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking for pid_t" >&5
+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
+if test "${ac_cv_type_pid_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((pid_t *) 0)
+ return 0;
+if (sizeof (pid_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_type_pid_t=yes
else
- rm -rf conftest*
- ac_cv_type_pid_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_pid_t" 1>&6
-if test $ac_cv_type_pid_t = no; then
- cat >> confdefs.h <<\EOF
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_pid_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+echo "${ECHO_T}$ac_cv_type_pid_t" >&6
+if test $ac_cv_type_pid_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
#define pid_t int
-EOF
-
-fi
-
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2542: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2547 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_type_size_t=yes
else
- rm -rf conftest*
- ac_cv_type_size_t=no
-fi
-rm -f conftest*
-
-fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<_ACEOF
#define size_t unsigned
-EOF
-
-fi
+_ACEOF
+
+fi
+
+
+
+
+
+
for ac_func in gethostname gettimeofday mkdir putenv rmdir socket
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2578: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2583 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in srandom random crypt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:2606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-for ac_func in srandom random crypt
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2633: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2638 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:2661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
fi
done
@@ -2685,438 +5573,1307 @@
cgidir='${prefix}/cgi-bin'
-trap '' 1 2 15
-cat > confcache <<\EOF
+ ac_config_files="$ac_config_files Makefile cgi/Makefile authenticate/Makefile commands/Makefile daemon/Makefile doc/Makefile lib/Makefile lib/cdb++/Makefile lib/cgi/Makefile lib/cli++/Makefile lib/config/Makefile lib/courier-authlib/Makefile lib/fdbuf/Makefile lib/misc/Makefile lib/mystring/Makefile lib/vdomain/Makefile lib/vpwentry/Makefile lib/vpwtable/Makefile scripts/Makefile php/Makefile python/Makefile"
+cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
-fi
-
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
DEFS=-DHAVE_CONFIG_H
-# Without the "./", some shells look in PATH for config.status.
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
- case "\$ac_option" in
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "cgi/Makefile" ) CONFIG_FILES="$CONFIG_FILES cgi/Makefile" ;;
+ "authenticate/Makefile" ) CONFIG_FILES="$CONFIG_FILES authenticate/Makefile" ;;
+ "commands/Makefile" ) CONFIG_FILES="$CONFIG_FILES commands/Makefile" ;;
+ "daemon/Makefile" ) CONFIG_FILES="$CONFIG_FILES daemon/Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "lib/cdb++/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/cdb++/Makefile" ;;
+ "lib/cgi/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/cgi/Makefile" ;;
+ "lib/cli++/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/cli++/Makefile" ;;
+ "lib/config/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/config/Makefile" ;;
+ "lib/courier-authlib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/courier-authlib/Makefile" ;;
+ "lib/fdbuf/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/fdbuf/Makefile" ;;
+ "lib/misc/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/misc/Makefile" ;;
+ "lib/mystring/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/mystring/Makefile" ;;
+ "lib/vdomain/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/vdomain/Makefile" ;;
+ "lib/vpwentry/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/vpwentry/Makefile" ;;
+ "lib/vpwtable/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/vpwtable/Makefile" ;;
+ "scripts/Makefile" ) CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+ "php/Makefile" ) CONFIG_FILES="$CONFIG_FILES php/Makefile" ;;
+ "python/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
esac
done
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "Makefile
- cgi/Makefile
- authenticate/Makefile
- commands/Makefile
- daemon/Makefile
- doc/Makefile
- lib/Makefile
- lib/cdb++/Makefile
- lib/cgi/Makefile
- lib/cli/Makefile
- lib/config/Makefile
- lib/courier-authlib/Makefile
- lib/fdbuf/Makefile
- lib/misc/Makefile
- lib/mystring/Makefile
- lib/vdomain/Makefile
- lib/vpwentry/Makefile
- lib/vpwtable/Makefile
- scripts/Makefile
- php/Makefile
- python/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@PACKAGE@%$PACKAGE%g
-s%@VERSION@%$VERSION%g
-s%@ACLOCAL@%$ACLOCAL%g
-s%@AUTOCONF@%$AUTOCONF%g
-s%@AUTOMAKE@%$AUTOMAKE%g
-s%@AUTOHEADER@%$AUTOHEADER%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@KRB5_TRUE@%$KRB5_TRUE%g
-s%@KRB5_FALSE@%$KRB5_FALSE%g
-s%@CDBPROGS@%$CDBPROGS%g
-s%@CDBSCRIPTS@%$CDBSCRIPTS%g
-s%@VPWTABLE_CDB_TRUE@%$VPWTABLE_CDB_TRUE%g
-s%@VPWTABLE_CDB_FALSE@%$VPWTABLE_CDB_FALSE%g
-s%@VPWTABLE_GDBM_TRUE@%$VPWTABLE_GDBM_TRUE%g
-s%@VPWTABLE_GDBM_FALSE@%$VPWTABLE_GDBM_FALSE%g
-s%@FDBUF_NO_MYSTRING_TRUE@%$FDBUF_NO_MYSTRING_TRUE%g
-s%@FDBUF_NO_MYSTRING_FALSE@%$FDBUF_NO_MYSTRING_FALSE%g
-s%@CC@%$CC%g
-s%@CXX@%$CXX%g
-s%@RANLIB@%$RANLIB%g
-s%@STRIP@%$STRIP%g
-s%@RM@%$RM%g
-s%@MKDIR@%$MKDIR%g
-s%@LN@%$LN%g
-s%@PYTHON@%$PYTHON%g
-s%@pythonlibdir@%$pythonlibdir%g
-s%@WANTPYTHON_TRUE@%$WANTPYTHON_TRUE%g
-s%@WANTPYTHON_FALSE@%$WANTPYTHON_FALSE%g
-s%@phpdir@%$phpdir%g
-s%@W3M@%$W3M%g
-s%@LYNX@%$LYNX%g
-s%@HTML2TXT@%$HTML2TXT%g
-s%@POD2MAN@%$POD2MAN%g
-s%@POD2HTML@%$POD2HTML%g
-s%@SUFFIXES@%$SUFFIXES%g
-s%@CPP@%$CPP%g
-s%@cgidir@%$cgidir%g
-
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@KRB5_TRUE@,$KRB5_TRUE,;t t
+s,@KRB5_FALSE@,$KRB5_FALSE,;t t
+s,@VPWTABLE_CDB_TRUE@,$VPWTABLE_CDB_TRUE,;t t
+s,@VPWTABLE_CDB_FALSE@,$VPWTABLE_CDB_FALSE,;t t
+s,@VPWTABLE_GDBM_TRUE@,$VPWTABLE_GDBM_TRUE,;t t
+s,@VPWTABLE_GDBM_FALSE@,$VPWTABLE_GDBM_FALSE,;t t
+s,@FDBUF_NO_MYSTRING_TRUE@,$FDBUF_NO_MYSTRING_TRUE,;t t
+s,@FDBUF_NO_MYSTRING_FALSE@,$FDBUF_NO_MYSTRING_FALSE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@STRIP@,$STRIP,;t t
+s,@RM@,$RM,;t t
+s,@MKDIR@,$MKDIR,;t t
+s,@LN@,$LN,;t t
+s,@PYTHON@,$PYTHON,;t t
+s,@pythonlibdir@,$pythonlibdir,;t t
+s,@WANTPYTHON_TRUE@,$WANTPYTHON_TRUE,;t t
+s,@WANTPYTHON_FALSE@,$WANTPYTHON_FALSE,;t t
+s,@phpdir@,$phpdir,;t t
+s,@W3M@,$W3M,;t t
+s,@LYNX@,$LYNX,;t t
+s,@HTML2TXT@,$HTML2TXT,;t t
+s,@POD2MAN@,$POD2MAN,;t t
+s,@POD2HTML@,$POD2HTML,;t t
+s,@SUFFIXES@,$SUFFIXES,;t t
+s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@cgidir@,$cgidir,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
CEOF
-EOF
-
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
- else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
- fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ configure_input="$ac_file. "
fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile
- cgi/Makefile
- authenticate/Makefile
- commands/Makefile
- daemon/Makefile
- doc/Makefile
- lib/Makefile
- lib/cdb++/Makefile
- lib/cgi/Makefile
- lib/cli/Makefile
- lib/config/Makefile
- lib/courier-authlib/Makefile
- lib/fdbuf/Makefile
- lib/misc/Makefile
- lib/mystring/Makefile
- lib/vdomain/Makefile
- lib/vpwentry/Makefile
- lib/vpwtable/Makefile
- scripts/Makefile
- php/Makefile
- python/Makefile"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
- esac
-
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
- else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
- *) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
-
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
-
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
-
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
# This sed command replaces #undef with comments. This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
-
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
rm -f conftest.tail
-while :
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- fi
- rm -f $ac_file
- mv conftest.h $ac_file
- fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
-
-
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-
-exit 0
-EOF
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
-
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
--- a/configure.in Sun Jan 20 00:12:17 2008 +0100
+++ b/configure.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,5 +1,5 @@
AC_INIT(lib/mergelib.sh)
-AM_INIT_AUTOMAKE(vmailmgr, 0.96.9)
+AM_INIT_AUTOMAKE(vmailmgr, 0.97)
AM_CONFIG_HEADER(config.h)
AC_PROG_MAKE_SET
@@ -28,12 +28,8 @@
LIBS="$LIBS -lgdbm";;
*) AC_MSG_ERROR(bad value ${withval} for --with-vpwtable);;
esac],[AC_DEFINE(VPWTABLE_CDB)
- CDBPROGS="vpasswd2cdb vrehash"
- CDBSCRIPTS="allvpasswd2cdb"
dbtype=cdb])
-AC_SUBST(CDBPROGS)
-AC_SUBST(CDBSCRIPTS)
AM_CONDITIONAL(VPWTABLE_CDB, test $dbtype = cdb)
AM_CONDITIONAL(VPWTABLE_GDBM, test $dbtype = gdbm)
@@ -45,8 +41,8 @@
CXX_NO_RTTI
CXX_NO_EXCEPTIONS
-CFLAGS="$CFLAGS -Wall -W"
-CXXFLAGS="$CXXFLAGS -Wall -W"
+CFLAGS="$CFLAGS -Wall"
+CXXFLAGS="$CXXFLAGS -Wall"
AC_PROG_INSTALL
AC_PROG_RANLIB
@@ -129,7 +125,7 @@
lib/Makefile
lib/cdb++/Makefile
lib/cgi/Makefile
- lib/cli/Makefile
+ lib/cli++/Makefile
lib/config/Makefile
lib/courier-authlib/Makefile
lib/fdbuf/Makefile
--- a/daemon/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -15,16 +15,15 @@
dist-hook:
touch $(distdir)/*.html $(distdir)/*.[123456789]
-vmailmgrd.pod: main.cc ../configure.in ../lib/cli/cli2pod.pl
- perl ../lib/cli/cli2pod.pl $< >$@
+vmailmgrd.pod: main.cc ../configure.in ../lib/cli++/cli++topod.pl
+ perl ../lib/cli++/cli++topod.pl $< >$@
%.8: %.pod ../configure.in; $(POD2MAN) --section=8 $< >$@
%.html: %.pod; $(POD2HTML) $< >$@
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = -I../lib
vmailmgrd_SOURCES = daemon.h \
- adduser2.cc \
+ adduser.cc \
autoresponse.cc \
chattr.cc \
check.cc \
@@ -35,5 +34,6 @@
log.h log.cc \
lookup.cc \
main.cc \
+ stat.cc \
state.h state.cc
-vmailmgrd_LDADD = ../lib/libvmailmgr.a ../lib/cli/libcli.a
+vmailmgrd_LDADD = ../lib/libvmailmgr.a ../lib/cli++/libcli++.a
--- a/daemon/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -91,12 +93,11 @@
EXTRA_DIST = $(man_MANS) $(noinst_HTMLS) $(noinst_PODS)
-CXXLINK = $(CC) $(CXXFLAGS) $(LDFLAGS) -o $@
INCLUDES = -I../lib
-vmailmgrd_SOURCES = daemon.h adduser2.cc autoresponse.cc chattr.cc check.cc command.h command.cc deluser.cc dispatch.cc listdomain.cc log.h log.cc lookup.cc main.cc state.h state.cc
+vmailmgrd_SOURCES = daemon.h adduser.cc autoresponse.cc chattr.cc check.cc command.h command.cc deluser.cc dispatch.cc listdomain.cc log.h log.cc lookup.cc main.cc stat.cc state.h state.cc
-vmailmgrd_LDADD = ../lib/libvmailmgr.a ../lib/cli/libcli.a
+vmailmgrd_LDADD = ../lib/libvmailmgr.a ../lib/cli++/libcli++.a
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -107,14 +108,14 @@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-vmailmgrd_OBJECTS = adduser2.o autoresponse.o chattr.o check.o \
-command.o deluser.o dispatch.o listdomain.o log.o lookup.o main.o \
-state.o
-vmailmgrd_DEPENDENCIES = ../lib/libvmailmgr.a ../lib/cli/libcli.a
+vmailmgrd_OBJECTS = adduser.o autoresponse.o chattr.o check.o command.o \
+deluser.o dispatch.o listdomain.o log.o lookup.o main.o stat.o state.o
+vmailmgrd_DEPENDENCIES = ../lib/libvmailmgr.a ../lib/cli++/libcli++.a
vmailmgrd_LDFLAGS =
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
@@ -128,7 +129,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(vmailmgrd_SOURCES)
OBJECTS = $(vmailmgrd_OBJECTS)
@@ -158,8 +159,8 @@
$(mkinstalldirs) $(DESTDIR)$(sbindir)
@list='$(sbin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -278,26 +279,7 @@
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
-addalias.o: addalias.cc ../config.h daemon.h ../lib/mystring/mystring.h \
- ../lib/fdbuf/fdbuf.h ../lib/misc/pwentry.h \
- ../lib/config/configrc.h ../lib/misc/strlist.h \
- ../lib/vpw/vpwentry.h ../lib/misc/pwcrypt.h ../lib/misc/itoa.h \
- state.h ../lib/misc/vdomain.h ../lib/vpw/vpwtable.h \
- ../lib/misc/response.h command.h log.h
-addaliasp.o: addaliasp.cc ../config.h daemon.h \
- ../lib/mystring/mystring.h ../lib/fdbuf/fdbuf.h \
- ../lib/misc/pwentry.h ../lib/config/configrc.h \
- ../lib/misc/strlist.h ../lib/vpw/vpwentry.h \
- ../lib/misc/pwcrypt.h ../lib/misc/itoa.h state.h \
- ../lib/misc/vdomain.h ../lib/vpw/vpwtable.h \
- ../lib/misc/response.h command.h log.h
adduser.o: adduser.cc ../config.h daemon.h ../lib/mystring/mystring.h \
- ../lib/fdbuf/fdbuf.h ../lib/misc/pwentry.h \
- ../lib/config/configrc.h ../lib/misc/strlist.h \
- ../lib/vpw/vpwentry.h ../lib/misc/pwcrypt.h ../lib/misc/itoa.h \
- state.h ../lib/misc/vdomain.h ../lib/vpw/vpwtable.h \
- ../lib/misc/response.h command.h log.h
-adduser2.o: adduser2.cc ../config.h daemon.h ../lib/mystring/mystring.h \
../lib/mystring/rep.h ../lib/mystring/iter.h \
../lib/mystring/join.h ../lib/misc/pwentry.h \
../lib/config/configrc.h ../lib/misc/strlist.h \
@@ -362,15 +344,6 @@
../lib/vpwtable/vpwtable.h ../lib/misc/response.h command.h \
log.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
../lib/fdbuf/fdobuf.h ../lib/misc/lookup.h
-fork.o: fork.cc ../config.h daemon.h ../lib/mystring/mystring.h \
- ../lib/mystring/rep.h ../lib/mystring/iter.h \
- ../lib/mystring/join.h ../lib/misc/pwentry.h \
- ../lib/config/configrc.h ../lib/misc/strlist.h \
- ../lib/vpwentry/vpwentry.h ../lib/misc/pwcrypt.h \
- ../lib/misc/itoa.h state.h ../lib/vdomain/vdomain.h \
- ../lib/vpwtable/vpwtable.h ../lib/misc/response.h command.h \
- log.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
- ../lib/fdbuf/fdobuf.h ../lib/ac/wait.h
listdomain.o: listdomain.cc ../config.h daemon.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
@@ -400,7 +373,7 @@
log.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
../lib/fdbuf/fdobuf.h ../lib/misc/lookup.h \
../lib/misc/pwentry_table.h
-main.o: main.cc ../config.h ../lib/cli/cli.h daemon.h \
+main.o: main.cc ../config.h ../lib/cli++/cli++.h daemon.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
../lib/misc/pwentry.h ../lib/config/configrc.h \
@@ -409,6 +382,16 @@
../lib/vdomain/vdomain.h ../lib/vpwtable/vpwtable.h \
../lib/misc/response.h command.h log.h ../lib/fdbuf/fdbuf.h \
../lib/fdbuf/fdibuf.h ../lib/fdbuf/fdobuf.h
+stat.o: stat.cc ../config.h daemon.h ../lib/mystring/mystring.h \
+ ../lib/mystring/rep.h ../lib/mystring/iter.h \
+ ../lib/mystring/join.h ../lib/misc/pwentry.h \
+ ../lib/config/configrc.h ../lib/misc/strlist.h \
+ ../lib/vpwentry/vpwentry.h ../lib/misc/pwcrypt.h \
+ ../lib/misc/itoa.h state.h ../lib/vdomain/vdomain.h \
+ ../lib/vpwtable/vpwtable.h ../lib/misc/response.h command.h \
+ log.h ../lib/fdbuf/fdbuf.h ../lib/fdbuf/fdibuf.h \
+ ../lib/fdbuf/fdobuf.h ../lib/misc/lookup.h ../lib/misc/utoa.h \
+ ../lib/misc/stat_fns.h ../lib/ac/dirent.h
state.o: state.cc state.h ../lib/misc/pwentry.h \
../lib/mystring/mystring.h ../lib/mystring/rep.h \
../lib/mystring/iter.h ../lib/mystring/join.h \
@@ -438,7 +421,7 @@
all-am: Makefile $(PROGRAMS) $(MANS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8
@@ -496,8 +479,8 @@
dist-hook:
touch $(distdir)/*.html $(distdir)/*.[123456789]
-vmailmgrd.pod: main.cc ../configure.in ../lib/cli/cli2pod.pl
- perl ../lib/cli/cli2pod.pl $< >$@
+vmailmgrd.pod: main.cc ../configure.in ../lib/cli++/cli++topod.pl
+ perl ../lib/cli++/cli++topod.pl $< >$@
%.8: %.pod ../configure.in; $(POD2MAN) --section=8 $< >$@
%.html: %.pod; $(POD2HTML) $< >$@
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/daemon/adduser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,80 @@
+// Copyright (C) 2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include "daemon.h"
+
+response build_forwards(const command& args, int offset,
+ vpwentry* vpw, vdomain& domain)
+{
+ bool first = true;
+ for(unsigned i = offset; i < args.count(); i++) {
+ if(!!args[i]) {
+ OK_RESPONSE(domain.validate_forward(args[i]));
+ if(!first)
+ vpw->forwards = vpw->forwards + mystring::NUL + args[i];
+ else {
+ vpw->forwards = args[i];
+ first = false;
+ }
+ }
+ }
+ RETURN(ok, "");
+}
+
+static response do_adduser(command& args, int minargc)
+{
+ mystring fulluser = args[0];
+ mystring adminpass = args[1];
+ mystring newpass = args[2];
+ mystring directory = args[3];
+ args[1] = LOG_ADMINPASS;
+ args[2] = LOG_NEWPASS;
+ logcommand(args);
+
+ pwentry* pw;
+ vpwentry* vpw;
+ OK_RESPONSE(lookup_and_validate(fulluser, pw, vpw, adminpass, false));
+ OK_RESPONSE(build_forwards(args, minargc, vpw, state->domain));
+ if(!!newpass)
+ vpw->pass = pwcrypt(newpass);
+ if(!directory)
+ directory = vpw->name;
+ vpw->directory = "./" + state->domain.userdir(directory);
+ vpw->has_mailbox = !!args[minargc-1];
+ return state->domain.set(vpw, true);
+}
+
+CMD(adduser2)
+ // Usage: adduser2 baseuser-virtuser adminpass newpass dirname [forwards ...]
+ // If <newpass> is empty, a null-password is used.
+ // If <dirname> is empty, no mailbox directory is created.
+ // <dirname> should normally be the same as virtuser.
+{
+ return do_adduser(args, 4);
+}
+
+CMD(adduser3)
+ // Usage: adduser3 baseuser-virtuser adminpass newpass dirname has_mailbox [forwards ...]
+ // If <newpass> is empty, a null-password is used.
+ // If <dirname> is empty, <virtuser> is used in its place
+ // If <has_mailbox> is empty, no mailbox is created,
+ // just the account directory
+{
+ return do_adduser(args, 5);
+}
--- a/daemon/adduser2.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-// Copyright (C) 2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include "daemon.h"
-
-response build_forwards(const command& args, int offset,
- vpwentry* vpw, vdomain& domain)
-{
- bool first = true;
- for(unsigned i = offset; i < args.count(); i++) {
- if(!!args[i]) {
- OK_RESPONSE(domain.validate_forward(args[i]));
- if(!first)
- vpw->forwards = vpw->forwards + mystring::NUL + args[i];
- else {
- vpw->forwards = args[i];
- first = false;
- }
- }
- }
- RETURN(ok, "");
-}
-
-CMD(adduser2)
- // Usage: adduser2 baseuser-virtuser adminpass newpass dirname [forwards ...]
- // If <newpass> is empty, a null-password is used.
- // If <dirname> is empty, no user directory is created.
- // <dirname> should normally be the same as virtuser.
-{
- mystring fulluser = args[0];
- mystring adminpass = args[1];
- mystring newpass = args[2];
- mystring dirname = args[3];
- args[1] = LOG_ADMINPASS;
- args[2] = LOG_NEWPASS;
- logcommand(args);
-
- pwentry* pw;
- vpwentry* vpw;
- OK_RESPONSE(lookup_and_validate(fulluser, pw, vpw, adminpass, false));
- OK_RESPONSE(build_forwards(args, 4, vpw, state->domain));
- if(!!newpass)
- vpw->pass = pwcrypt(newpass);
- if(!!dirname)
- vpw->mailbox = "./" + state->domain.userdir(dirname);
- return state->domain.set(vpw, true, vpw->mailbox);
-}
--- a/daemon/autoresponse.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/autoresponse.cc Sun Jan 20 00:22:09 2008 +0100
@@ -160,7 +160,7 @@
vpwentry* vpw;
OK_RESPONSE(lookup_and_validate(user, pw, vpw, pass, true, true));
- const mystring directory = vpw->mailbox + "/" + config->autoresponse_dir();
+ const mystring directory = vpw->directory + "/" + config->autoresponse_dir();
const mystring filename = directory + "/" + config->autoresponse_file();
const mystring disabled = filename + ".disabled";
--- a/daemon/chattr.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/chattr.cc Sun Jan 20 00:22:09 2008 +0100
@@ -39,6 +39,7 @@
break;
case vdomain::ATTR_DEST:
case vdomain::ATTR_MAILBOX_ENABLED:
+ case vdomain::ATTR_PERSONAL:
userpass = true;
break;
}
--- a/daemon/check.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/check.cc Sun Jan 20 00:22:09 2008 +0100
@@ -37,7 +37,7 @@
}
else {
state = new saved_state(basepw);
- vpwentry* virtpw = state->domain.lookup(virtname, false);
+ vpwentry* virtpw = state->domain.lookup(virtname);
if(!virtpw)
RETURN(err, "Invalid or unknown virtual user");
if(virtpw->authenticate(password))
--- a/daemon/dispatch.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/dispatch.cc Sun Jan 20 00:22:09 2008 +0100
@@ -20,12 +20,14 @@
// declare the commands
extern CMD(adduser2);
+extern CMD(adduser3);
extern CMD(autoresponse);
extern CMD(chattr);
extern CMD(check);
extern CMD(deluser);
extern CMD(listdomain);
extern CMD(lookup);
+extern CMD(stat);
#ifdef TEST_DAEMON
CMD(echo)
@@ -68,9 +70,11 @@
ENTRY(lookup, 3, 3, true),
ENTRY(check, 3, 3, true),
ENTRY(chattr, 5, -1, true),
- ENTRY(adduser2, 5, -1, true),
+ ENTRY(adduser2, 4, -1, true),
+ ENTRY(adduser3, 5, -1, true),
ENTRY(autoresponse, 4, 5, true),
ENTRY(deluser, 3, 3, true),
+ ENTRY(stat, 3, 3, true),
ENTRY(listdomain, 2, 2, false),
#ifdef TEST_DAEMON
ENTRY(echo, 0, -1, false), // For testing purposes only
--- a/daemon/listdomain.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/listdomain.cc Sun Jan 20 00:22:09 2008 +0100
@@ -53,15 +53,16 @@
if(!write_buf(fd, "", 0))
RETURN(err, "Failed while writing initial OK response");
- vpwentry entry;
- while(reader->get(entry)) {
- mystring code = entry.to_record();
- unsigned length = entry.name.length() + 1 + code.length() + 1;
+ vpwentry* entry;
+ while((entry = reader->get()) != 0) {
+ mystring code = entry->to_record();
+ unsigned length = entry->name.length() + 1 + code.length();
char buf[length];
- memcpy(buf, entry.name.c_str(), entry.name.length()+1);
- memcpy(buf+entry.name.length()+1, code.c_str(), code.length()+1);
+ memcpy(buf, entry->name.c_str(), entry->name.length()+1);
+ memcpy(buf+entry->name.length()+1, code.c_str(), code.length());
if(!write_buf(fd, buf, length))
RETURN(err, "Failed while writing list entry");
+ delete entry;
}
delete reader;
--- a/daemon/lookup.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/lookup.cc Sun Jan 20 00:22:09 2008 +0100
@@ -40,7 +40,7 @@
RETURN(err, "User name does not refer to a virtual user");
state = new saved_state(pw);
if(mustexist) {
- vpw = state->domain.lookup(virtname, true);
+ vpw = state->domain.lookup(virtname);
if(!vpw)
RETURN(err, "Invalid or unknown virtual user");
else if(!passok && !vpw->authenticate(password))
@@ -49,12 +49,11 @@
RETURN(ok, "");
}
else { // user must not already exist
- vpw = state->domain.lookup(virtname, true);
+ vpw = state->domain.lookup(virtname);
if(vpw)
RETURN(err, "Virtual user already exists");
else {
- vpw = new vpwentry(virtname, "*", 0, 0);
- vpw->set_defaults(true, true);
+ vpw = new vpwentry(virtname, "*", 0, 0, false);
RETURN(ok, "");
}
}
--- a/daemon/main.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/main.cc Sun Jan 20 00:22:09 2008 +0100
@@ -22,7 +22,7 @@
#include <sys/stat.h>
#include <signal.h>
#include <unistd.h>
-#include "cli/cli.h"
+#include "cli++/cli++.h"
#include "daemon.h"
const char* cli_program = "vmailmgrd";
@@ -34,17 +34,12 @@
int opt_log_all = true;
int opt_verbose = false;
-// This program is the local server that controls the operation of many
-// parts of this package.
-// It is currently used to handle password checking and virtual user
-// lookups, but will eventually contain the functionality to handle adding
-// and deleting users and aliases, and changing passwords.
+// This program is the local server that is used to handle managing
+// virtual domains from a web or remote interface.
//
// F<vmailmgrd> logs its activity to standard output, and as such
-// requires its output to be piped through a tool to
-// record those logs, such as F<accustamp> and F<cyclog> (from the
-// F<daemontools> package), or
-// F<splogger> (included with the F<qmail> package).
+// requires its output to be piped through a tool to record those
+// logs, such as F<multilog> (from the F<daemontools> package).
cli_option cli_options[] = {
{ 'd', 0, cli_option::flag, 0, &opt_log_all,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/daemon/stat.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,165 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include <stdlib.h>
+#include "daemon.h"
+#include "misc/pwentry.h"
+#include "misc/lookup.h"
+#include "misc/utoa.h"
+#include "misc/stat_fns.h"
+#include "ac/dirent.h"
+
+struct count_size
+{
+ unsigned long count;
+ unsigned long size;
+ count_size() : count(0), size(0) { }
+};
+
+struct stats
+{
+ count_size unseen_new;
+ count_size unseen;
+ count_size seen;
+
+ mystring rep() const;
+};
+
+mystring stats::rep() const
+{
+ return utoa(unseen_new.count) + mystring::NUL +
+ utoa(unseen_new.size) + mystring::NUL +
+ utoa(unseen.count) + mystring::NUL +
+ utoa(unseen.size) + mystring::NUL +
+ utoa(seen.count) + mystring::NUL +
+ utoa(seen.size) + mystring::NUL;
+}
+
+class statdir
+{
+ mystring path;
+ DIR* dir;
+ struct dirent* curr;
+ struct stat statbuf;
+public:
+ statdir(const mystring& dirname);
+ ~statdir() { close(); }
+ void close();
+ operator void*() const { return (void*)dir; }
+ bool operator!() const { return !dir; }
+ const struct stat* operator->() const { return &statbuf; }
+ const char* currname() const { return curr->d_name; }
+ void operator++() { advance(); }
+ void advance();
+};
+
+statdir::statdir(const mystring& dirname)
+ : path(dirname),
+ dir(opendir(dirname.c_str()))
+{
+ advance();
+}
+
+void statdir::close()
+{
+ if(dir)
+ closedir(dir);
+ dir = NULL;
+}
+
+void statdir::advance()
+{
+ if(dir) {
+ while((curr = readdir(dir)) != 0) {
+ if(curr->d_name[0] == '.')
+ continue;
+ break;
+ }
+ }
+ if(!curr)
+ close();
+ else {
+ mystring fullpath = path + "/" + curr->d_name;
+ if(stat(fullpath.c_str(), &statbuf) == -1)
+ close();
+ }
+}
+
+bool stat_new_dir(const mystring& basename, stats& stats)
+{
+ statdir dir(basename + "/new");
+ if(!dir)
+ return false;
+ while(dir) {
+ if(S_ISREG(dir->st_mode)) {
+ ++stats.unseen_new.count;
+ stats.unseen_new.size += dir->st_blocks * 512;
+ }
+ ++dir;
+ }
+ return true;
+}
+
+bool stat_cur_dir(const mystring& basename, stats& stats)
+{
+ statdir dir(basename + "/cur");
+ if(!dir)
+ return false;
+ while(dir) {
+ if(S_ISREG(dir->st_mode)) {
+ count_size* stat = &stats.unseen;
+ const char* colon = strchr(dir.currname(), ':');
+ if(colon) {
+ ++colon;
+ if(*colon++ == '2' && *colon++ == ',' && !strchr(colon, 'S'))
+ stat = &stats.seen;
+ }
+ ++stat->count;
+ stat->size += dir->st_blocks * 512;
+ }
+ ++dir;
+ }
+ return true;
+}
+
+bool stat_dir(const mystring& basename, stats& stats)
+{
+ return stat_new_dir(basename, stats) &&
+ stat_cur_dir(basename, stats);
+}
+
+CMD(stat)
+ // Usage: stat baseuser-virtuser pass
+{
+ mystring user = args[0];
+ mystring pass = args[1];
+
+ pwentry* pw;
+ vpwentry* vpw;
+
+ OK_RESPONSE(lookup_and_validate(user, pw, vpw, pass, true, false));
+
+ if(!vpw->has_mailbox)
+ RETURN(err, "User is alias");
+
+ mystring dirname = pw->home + "/" + vpw->directory;
+ stats stats;
+ if(!stat_dir(dirname, stats))
+ RETURN(err, "Failed to stat maildir");
+
+ RETURN(ok, mystring::NUL + stats.rep());
+}
--- a/daemon/vmailmgrd.8 Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/vmailmgrd.8 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH vmailmgrd 8 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,86 +109,61 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VMAILMGRD 8"
+.TH VMAILMGRD 8 "2005-09-03" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vmailmgrd \- vmailmgr support daemon
.SH "SYNOPSIS"
-\fBvmailmgrd\fR
+.IX Header "SYNOPSIS"
+\&\fBvmailmgrd\fR
[\fB\-d\fR]
[\fB\-D\fR]
[\fB\-v\fR]
[\fB\-V\fR]
.SH "DESCRIPTION"
-This program is the local server that controls the operation of many
-parts of this package.
-It is currently used to handle password checking and virtual user
-lookups, but will eventually contain the functionality to handle adding
-and deleting users and aliases, and changing passwords.
+.IX Header "DESCRIPTION"
+This program is the local server that is used to handle managing
+virtual domains from a web or remote interface.
.PP
-\fIvmailmgrd\fR logs its activity to standard output, and as such
-requires its output to be piped through a tool to
-record those logs, such as \fIaccustamp\fR and \fIcyclog\fR (from the
-\fIdaemontools\fR package), or
-\fIsplogger\fR (included with the \fIqmail\fR package).
+\&\fIvmailmgrd\fR logs its activity to standard output, and as such
+requires its output to be piped through a tool to record those
+logs, such as \fImultilog\fR (from the \fIdaemontools\fR package).
.SH "OPTIONS"
-.Ip "\fB\-d\fR" 8
+.IX Header "OPTIONS"
+.IP "\fB\-d\fR" 8
+.IX Item "-d"
Log only requests that fail.
-.Ip "\fB\-D\fR" 8
+.IP "\fB\-D\fR" 8
+.IX Item "-D"
Log all requests (default).
-.Ip "\fB\-v\fR" 8
+.IP "\fB\-v\fR" 8
+.IX Item "-v"
Log non-verbosely (default).
-.Ip "\fB\-V\fR" 8
-Log verbose messages regarding the system's status. Note that this flag implies \f(CW-D\fR.
+.IP "\fB\-V\fR" 8
+.IX Item "-V"
+Log verbose messages regarding the system's status. Note that this flag implies \f(CW\*(C`\-D\*(C'\fR.
.SH "SEE ALSO"
-\fIvdeliver\fR\|(1), \fIcheckvpw\fR\|(8)
+.IX Header "SEE ALSO"
+\&\fIvdeliver\fR\|(1), \fIcheckvpw\fR\|(8)
.SH "AUTHORS"
+.IX Header "AUTHORS"
Bruce Guenter <bruceg@em.ca>
-
-.rn }` ''
-.IX Title "vmailmgrd 8"
-.IX Name "vmailmgrd - vmailmgr support daemon"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "OPTIONS"
-
-.IX Item "\fB\-d\fR"
-
-.IX Item "\fB\-D\fR"
-
-.IX Item "\fB\-v\fR"
-
-.IX Item "\fB\-V\fR"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHORS"
-
--- a/daemon/vmailmgrd.html Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/vmailmgrd.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,87 +1,90 @@
-<HTML>
-<HEAD>
-<TITLE>vmailmgrd - vmailmgr support daemon</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vmailmgrd - vmailmgr support daemon</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#OPTIONS">OPTIONS</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHORS">AUTHORS</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#synopsis">SYNOPSIS</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#options">OPTIONS</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#authors">AUTHORS</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vmailmgrd - vmailmgr support daemon
-
-<P>
-<HR>
-<H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
-<P>
-<STRONG>vmailmgrd</STRONG>
-[<STRONG>-d</STRONG>] [<STRONG>-D</STRONG>] [<STRONG>-v</STRONG>] [<STRONG>-V</STRONG>]
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This program is the local server that controls the operation of many parts
-of this package. It is currently used to handle password checking and
-virtual user lookups, but will eventually contain the functionality to
-handle adding and deleting users and aliases, and changing passwords.
-
-<P>
-<EM>vmailmgrd</EM> logs its activity to standard output, and as such requires its output to be
-piped through a tool to record those logs, such as <EM>accustamp</EM> and <EM>cyclog</EM> (from the
-<EM>daemontools</EM> package), or
-<EM>splogger</EM> (included with the <EM>qmail</EM> package).
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vmailmgrd - vmailmgr support daemon</p>
+<p>
+</p>
+<hr />
+<h1><a name="synopsis">SYNOPSIS</a></h1>
+<p><strong>vmailmgrd</strong>
+[<strong>-d</strong>]
+[<strong>-D</strong>]
+[<strong>-v</strong>]
+[<strong>-V</strong>]</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This program is the local server that is used to handle managing
+virtual domains from a web or remote interface.</p>
+<p><em>vmailmgrd</em> logs its activity to standard output, and as such
+requires its output to be piped through a tool to record those
+logs, such as <em>multilog</em> (from the <em>daemontools</em> package).</p>
+<p>
+</p>
+<hr />
+<h1><a name="options">OPTIONS</a></h1>
+<dl>
+<dt><strong><a name="item__2dd"><strong>-d</strong></a></strong><br />
+</dt>
+<dd>
+Log only requests that fail.
+</dd>
+<p></p>
+<dt><strong><a name="item__2dd"><strong>-D</strong></a></strong><br />
+</dt>
+<dd>
+Log all requests (default).
+</dd>
+<p></p>
+<dt><strong><a name="item__2dv"><strong>-v</strong></a></strong><br />
+</dt>
+<dd>
+Log non-verbosely (default).
+</dd>
+<p></p>
+<dt><strong><a name="item__2dv"><strong>-V</strong></a></strong><br />
+</dt>
+<dd>
+Log verbose messages regarding the system's status. Note that this flag implies <a href="#item__2dd"><code>-D</code></a>.
+</dd>
+<p></p></dl>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>vdeliver(1), <code>checkvpw(8)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="authors">AUTHORS</a></h1>
+<p>Bruce Guenter <<a href="mailto:bruceg@em.ca">bruceg@em.ca</a>></p>
-<P>
-<HR>
-<H1><A NAME="OPTIONS">OPTIONS</A></H1>
-<DL>
-<DT><STRONG><A NAME="item__d">-d</A></STRONG><DD>
-<P>
-Log only requests that fail.
-
-<DT><STRONG><A NAME="item__D">-D</A></STRONG><DD>
-<P>
-Log all requests (default).
-
-<DT><STRONG><A NAME="item__v">-v</A></STRONG><DD>
-<P>
-Log non-verbosely (default).
+</body>
-<DT><STRONG><A NAME="item__V">-V</A></STRONG><DD>
-<P>
-Log verbose messages regarding the system's status. Note that this flag
-implies <CODE>-D</CODE>.
-
-</DL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>vdeliver(1),</CODE> <CODE>checkvpw(8)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="AUTHORS">AUTHORS</A></H1>
-<P>
-Bruce Guenter <<A HREF="mailto:bruceg@em.ca">bruceg@em.ca</A>>
-
-</BODY>
-
-</HTML>
+</html>
--- a/daemon/vmailmgrd.pod Sun Jan 20 00:12:17 2008 +0100
+++ b/daemon/vmailmgrd.pod Sun Jan 20 00:22:09 2008 +0100
@@ -13,17 +13,12 @@
=head1 DESCRIPTION
-This program is the local server that controls the operation of many
-parts of this package.
-It is currently used to handle password checking and virtual user
-lookups, but will eventually contain the functionality to handle adding
-and deleting users and aliases, and changing passwords.
+This program is the local server that is used to handle managing
+virtual domains from a web or remote interface.
F<vmailmgrd> logs its activity to standard output, and as such
-requires its output to be piped through a tool to
-record those logs, such as F<accustamp> and F<cyclog> (from the
-F<daemontools> package), or
-F<splogger> (included with the F<qmail> package).
+requires its output to be piped through a tool to record those
+logs, such as F<multilog> (from the F<daemontools> package).
=head1 OPTIONS
--- a/doc/ChangeLog.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/ChangeLog.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,136 @@
<html>
<head><title>ChangeLog</title></head>
<body>
+<p>2004-03-16 Bruce.Guenter.dyndns.org <bruce@lorien.untroubled.org>
+<ul>
+
+<li>daemon/listdomain.cc: The code is internally NUL-terminated, so
+don't add another NUL on output.
+
+</ul>
+</p>
+<p>2004-03-15 Bruce.Guenter.dyndns.org <bruce@lorien.untroubled.org>
+<ul>
+
+<li>cgi/vadduser.cc, cgi/vaddalias.cc: Fixed several one-off bugs.
+
+<li>commands/vupgrade.cc (open_table): Fixed up the test to see if
+the new vpwtable reader is valid.
+
+<li>commands/dumpvuser.cc: Added new source.
+
+<li>commands/vadduser.cc (add_alias), commands/vsetup.cc
+(setup_alias): Make sure even aliases have a userdir set.
+
+</ul>
+</p>
+<p>2002-05-03 Bruce Guenter <bruce@lorien.untroubled.org>
+<ul>
+
+<li>commands/vadduser.cc: Fixed incorrect usage note for vaddalias.
+
+<li>lib/config/Makefile.am (noinst_LIBRARIES): Fixed the use of
+libstdc++ in showvconfig.
+
+</ul>
+</p>
+<p>2001-03-07 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>commands/vcheckquota.cc: Fixed abbreviated error message.
+
+<li>doc/FAQ.sgml: Added note regarding mixing system and virtual
+accounts.
+
+<li>Moved from old "cli" library to renamed "cli++" library.
+
+</ul>
+</p>
+<p>2000-11-20 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>lib/vpwentry/to.cc (to_record): Fixed typo -- flags is now 5
+bytes, not 3.
+
+</ul>
+</p>
+<p>2000-10-30 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>commands/vdeliver.cc (cli_main): Make 99 return codes from
+executed programs cause vdeliver to exit (with code 99) without
+delivering the message.
+
+<li>lib/misc/exec.cc (execute): Don't silently ignore the 99 error
+code.
+
+</ul>
+</p>
+<p>2000-10-27 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>commands/vchforwards.cc (cli_main): Fixed the same bug here as
+for daemon/lookup.cc -- need to lookup users with nodefault set.
+
+</ul>
+</p>
+<p>2000-10-25 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>python/commands.py (adduser): Added the new has_mailbox
+parameter, defaulting to false.
+
+<li>python/daemon.py (encode_str): Explicitly cast non-string
+objects to string before encoding.
+
+<li>daemon/adduser.cc (CMD(adduser3)): Renamed the file adduser2.cc
+to adduser.cc; Renamed the adduser2 command to adduser3 to make
+the additional argument explicit.
+
+</ul>
+</p>
+<p>2000-10-13 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>Most code was restructured to accomodate the below two changes.
+
+<li>lib/vpwtable/vpwtable.h (class vpwtable_reader): Modified this
+interface to return a vpwentry*.
+
+<li>lib/vpwentry/vpwentry.h (struct vpwentry ): Modified this data
+structure to rename "mailbox" to "directory", and add a
+"has_mailbox" flag. Also made the default constructor and
+set_defaults protected.
+
+</ul>
+</p>
+<p>2000-10-10 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>daemon/stat.cc: Added a rewritten version of this support from
+Eugene Miretskiy to retrieve statistics about a maildir.
+
+</ul>
+</p>
+<p>2000-10-07 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>commands/vpasswd2db.cc: Converted to use new vpwtable_writer
+interface.
+
+<li>lib/vpwtable/vpwtable.h: Added new vpwtable_writer interface.
+
+</ul>
+</p>
+<p>2000-10-05 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+<ul>
+
+<li>python/daemon.py (Daemon.read_response_noraise): Fixed a bug in
+reading zero-length responses (like from listdomain) on certain
+OSes.
+
+</ul>
+</p>
<p>2000-09-30 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
<ul>
--- a/doc/FAQ.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/FAQ.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,297 +1,1260 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on December, 29 2004 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
- <TITLE> VMailMgr FAQ</TITLE>
+<TITLE>Vmailmgr FAQ: </TITLE>
+<META NAME="description" CONTENT="Vmailmgr FAQ: ">
+<META NAME="keywords" CONTENT="Vmailmgr FAQ: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
</HEAD>
-<BODY>
-<H1> VMailMgr FAQ</H1>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC2"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<P>
+
+Copyright (C) 1998 Bruce Guenter
+</P><P>
+
+VMailMgr Frequently Asked Questions.
+</P><P>
-<H2>Bruce Guenter
-<A HREF="mailto:bruceg@em.ca">mailto:bruceg@em.ca</A>,
- Dan Kuykendall
-<A HREF="mailto:dan@kuykendall.org">mailto:dan@kuykendall.org</A></H2> v1.0, 23 April 2000
-<P><HR>
-<EM> VMailMgr Frequently Asked Questions.</EM>
-<HR>
-<H2><A NAME="s1">1. Building and Installing</A></H2>
+<H1> 1. Building and Installing </H1>
+<!--docid::SEC1::-->
+<P>
-<H2>1.1 What compiler and libraries do I need to build vmailmgr?</H2>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC3"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 What compiler and libraries do I need to build vmailmgr? </H2>
+<!--docid::SEC2::-->
+<P>
-<P>You will need a working C and C++ compiler and linker. You will not
+You will need a working C and C++ compiler and linker. You will not
need any C++ libraries. The package is being developed under Linux
using egcs and glibc version 2, and may rely on some gcc/g++
extensions.
-<H2>1.2 Does vmailmgr work with shadow passwords?</H2>
+</P><P>
-<P>This package should work without changes both with and without
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC2"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC4"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 Does vmailmgr work with shadow passwords? </H2>
+<!--docid::SEC3::-->
+<P>
+
+This package should work without changes both with and without
shadow passwords as long as the shadow password libraries are
-present when this package is built. The `configure' script will
+present when this package is built. The <CODE>configure</CODE> script will
detect what method of shadow passwords are being used and the
programs will be built accordingly.
-<H2>1.3 Does vmailmgr support IMAP?</H2>
+</P><P>
-<P>Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC3"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC5"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Does vmailmgr support IMAP? </H2>
+<!--docid::SEC4::-->
+<P>
+
+Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
make them work, the steps are in the next section of this file.
-<H2><A NAME="s2">2. Setup and Configuration</A></H2>
-
-<H2>2.1 What other software is needed to run vmailmgr?</H2>
+</P><P>
-<P>VMailMgr is based around qmail's handling of virtual users, and as
-such requires qmail for its operation. If you wish to use the `init'
-file to start/stop vmailmgrd or are installing the RPM package,
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC4"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC6"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Setup and Configuration </H1>
+<!--docid::SEC5::-->
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC5"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC7"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 What other software is needed to run vmailmgr? </H2>
+<!--docid::SEC6::-->
+<P>
+
+VMailMgr is based around qmail's handling of virtual users, and as
+such requires qmail for its operation. If you wish to use the <CODE>init</CODE>
+file to start/stop <CODE>vmailmgrd</CODE> or are installing the RPM package,
supervise-scripts version 2.2 (or later, available at
-<A HREF="http://em.ca/~bruceg/supervise-scripts/">http://em.ca/~bruceg/supervise-scripts/</A>) and daemontools 0.60
-(or later, available at
-<A HREF="http://em.ca/~bruceg/rpms/daemontools/">http://em.ca/~bruceg/rpms/daemontools/</A>) packages are
-required. If you need to use the <CODE>vmailmgrd</CODE> daemon, you
-will also need the <CODE>unixserver</CODE> program, from the ucspi-unix
-package, available at
-<A HREF="http://em.ca/~bruceg/ucspi-unix/">http://em.ca/~bruceg/ucspi-unix/</A>.
-<P>If you want to use the autoresponse feature, I recommend the use of
+<A HREF="http://untroubled.org/supervise-scripts/">http://untroubled.org/supervise-scripts/</A>)
+and daemontools 0.60 (or later, available at
+<A HREF="http://untroubled.org/rpms/daemontools/">http://untroubled.org/rpms/daemontools/</A>)
+packages are required. If you need to use the <CODE>vmailmgrd</CODE> daemon, you
+will also need the <CODE>unixserver</CODE> program, from the ucspi-unix package,
+available at
+<A HREF="http://untroubled.org/ucspi-unix/">http://untroubled.org/ucspi-unix/</A>.
+</P><P>
+
+If you want to use the autoresponse feature, I recommend the use of
my own autoresponder program, <CODE>qmail-autoresponder</CODE> available
at
-<A HREF="http://em.ca/~bruceg/qmail-autoresponder/">http://em.ca/~bruceg/qmail-autoresponder/</A>.
-<H2>2.2 How do I record the output of vmailmgrd with syslog?</H2>
+<A HREF="http://untroubled.org/qmail-autoresponder/">http://untroubled.org/qmail-autoresponder/</A>.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC6"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC8"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 How do I record the output of vmailmgrd with syslog? </H2>
+<!--docid::SEC7::-->
+<P>
+
+Output from <CODE>vmailmgrd</CODE> can be recorded by either <CODE>splogger</CODE> (part of
+qmail) or with the logger that comes with several flavours of UNIX. To use
+<CODE>splogger</CODE>, pipe the output of <CODE>vmailmgrd</CODE> into the command
+<SAMP>`splogger vmailmgrd'</SAMP>. This will timestamp each entry and tag them with the
+word <SAMP>`vmailmgrd'</SAMP>. By default, <CODE>splogger</CODE> logs to facility 2 (mail). To
+use <CODE>logger</CODE>, pipe the output of <CODE>vmailmgrd</CODE> into the command
+<SAMP>`logger -t vmailmgrd -p mail.notice'</SAMP>.
+See the respective man pages of these two programs for more information.
+</P><P>
+
+Note: The use of <CODE>syslog</CODE> for logging messages is strongly discouraged
+due to problems with inefficent and buggy implementation of <CODE>syslog</CODE>.
+</P><P>
-<P>Output from vmailmgrd can be recorded by either splogger (part of
-qmail) or with the logger that comes with several flavours of
-UNIX. To use splogger, pipe the output of vmailmgrd into the command
-`splogger vmailmgrd'. This will timestamp each entry and tag them
-with the word `vmailmgrd'. By default, splogger logs to facility 2
-(mail). To use logger, pipe the output of vmailmgrd into the
-comamand `<CODE>logger -t vmailmgrd -p mail.notice</CODE>'. See the
-respective man pages of these two programs for more information.
-<P>Note: The use of syslog for logging messages is strongly discouraged
-due to problems with inefficent and buggy implementation of syslog.
-<H2>2.3 How do I record the output of vmailmgrd with multilog?</H2>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC7"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC9"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 How do I record the output of vmailmgrd with multilog? </H2>
+<!--docid::SEC8::-->
+<P>
-<P>Make a directory into which the output will go, for example
-`<CODE>/var/log/vmailmgrd</CODE>'. Pipe the output of vmailmgrd into the
-command `<CODE>multilog t /var/log/vmailmgrd</CODE>'. See the
-documentation for multilog for more information on how to adjust its
+Make a directory into which the output will go, for example
+<TT>`/var/log/vmailmgrd'</TT>. Pipe the output of <CODE>vmailmgrd</CODE> into the
+command <SAMP>`multilog t /var/log/vmailmgrd'</SAMP>. See the
+documentation for <CODE>multilog</CODE> for more information on how to adjust its
output.
-<H2>2.4 How do I setup VMmailMgr IMAP support?</H2>
+</P><P>
-<P>VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC8"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC10"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 How do I setup VMmailMgr IMAP support? </H2>
+<!--docid::SEC9::-->
+<P>
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto
detect VMailMgr. This means that some minor work is required for
making the two work together.
+</P><P>
+
<UL>
-<LI>You must copy `<CODE>/usr/local/bin/authvmailmgr</CODE>` to
-`<CODE>/usr/lib/courier-imap/libexec/authlib/authvmailmgr</CODE>`.</LI>
-<LI>Then modify the `<CODE>AUTHMODULES</CODE>` statement in
-`<CODE>/usr/lib/courier-imap/etc/imapd.config</CODE>` and add
-`<CODE>authvmailmgr</CODE>` as the first authentication module.</LI>
+<LI>
+You must copy <TT>`/usr/local/bin/authvmailmgr'</TT> to
+<TT>`/usr/lib/courier-imap/libexec/authlib/authvmailmgr'</TT>.
+<P>
+
+<LI>
+Then modify the <CODE>AUTHMODULES</CODE> statement in
+<TT>`/usr/lib/courier-imap/etc/imapd.config'</TT> and add
+<KBD>authvmailmgr</KBD> as the first authentication module.
+<P>
+
</UL>
-<H2>2.5 Upgrading from Previous Versions</H2>
+<P>
-<P>If you are upgrading from an older version, you may need to make
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC9"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC11"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 Upgrading from Previous Versions </H2>
+<!--docid::SEC10::-->
+<P>
+
+If you are upgrading from an older version, you may need to make
some changes to your system before or after doing the upgrade. The
following table outlines the necessary changes. Note that you need
to follow the instructions for all later versions of the software.
-<P>If you are upgrading from version:
-<DL>
-<DT><B>0.96.6 or earlier</B><DD><P>The `vmailmgrd' daemon needs to be run by unixserver, as opposed
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC10"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC12"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.1 Upgrading from version 0.96.6 or earlier </H3>
+<!--docid::SEC11::-->
+<P>
+
+The <CODE>vmailmgrd</CODE> daemon needs to be run by unixserver, as opposed
to being a stand-alone program previously.
-<DT><B>0.96.2 or earlier</B><DD><P>Make sure the `vmailmgrd' daemon and vmailmgr CGIs are disabled
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC11"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC13"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.2 Upgrading from version 0.96.2 or earlier </H3>
+<!--docid::SEC12::-->
+<P>
+
+Make sure the <CODE>vmailmgrd</CODE> daemon and vmailmgr CGIs are disabled
before upgrading, and upgrade them along with the main
package. Changes were made to the daemon interface that will
cause adding users and aliases to flake out. As well, the
listdomain interface was completely redone.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC12"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC14"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.3 Upgrading from version 0.94 or earlier, using the POP bulletin facility </H3>
+<!--docid::SEC13::-->
<P>
-<DT><B>0.94 or earlier, using the POP bulletin facility</B><DD><P>The POP bulletin facility has been moved into a stand-alone
-program that needs to be executed through `checkvpw-postsetuid'.
-<P>
-<DT><B>0.93 or earlier</B><DD><P>If you do not use the CGIs, you no longer need to run the
-`vmailmgrd' daemon.
+
+The POP bulletin facility has been moved into a stand-alone
+program that needs to be executed through <CODE>checkvpw-postsetuid</CODE>.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC13"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC15"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.4 Upgrading from version 0.93 or earlier </H3>
+<!--docid::SEC14::-->
<P>
-<DT><B>0.92.2 or earlier</B><DD><P>The configuration changed from reading a single file to reading a
-set of files in a directory. Read the configuration documentation
-and run the program `vconf2dir'.
+
+If you do not use the CGIs, you no longer need to run the
+<CODE>vmailmgrd</CODE> daemon.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC14"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC16"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.5 Upgrading from version 0.92.2 or earlier </H3>
+<!--docid::SEC15::-->
<P>
-<DT><B>0.90.2 or earlier</B><DD><P>The name of the user to which mail to an unknown user is
-delivered changed from `*' to `+'. If you were using this
+
+The configuration changed from reading a single file to reading a
+set of files in a directory. Read the configuration documentation
+and run the program <CODE>vconf2dir</CODE>.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC15"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC17"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.6 Upgrading from version 0.90.2 or earlier </H3>
+<!--docid::SEC16::-->
+<P>
+
+The name of the user to which mail to an unknown user is
+delivered changed from <SAMP>`*'</SAMP> to <SAMP>`+'</SAMP>. If you were using this
feature, either change all your domains to accomodate this
-change, or set the `default-username' config file to contain `*'.
+change, or set the <TT>`default-username'</TT> config file to contain <SAMP>`*'</SAMP>.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC16"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC18"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.5.7 Upgrading from version 0.88 or earlier </H3>
+<!--docid::SEC17::-->
<P>
-<DT><B>0.88 or earlier</B><DD><P>The file format of the virtual password tables has changed from
+
+The file format of the virtual password tables has changed from
plain text files to CDB tables. You will need to suspend local
-deliveries before upgrading, and run the program `vpasswd2cdb' as
+deliveries before upgrading, and run the program <CODE>vpasswd2cdb</CODE> as
each base user after upgrading, before re-enabling local
deliveries.
-</DL>
-<H2>2.6 How do I configure qmail+patches to use vmailmgr for POP?</H2>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC17"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC19"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.6 How do I configure qmail+patches to use vmailmgr for POP? </H2>
+<!--docid::SEC18::-->
+<P>
+
+Put the string <KBD>checkvpw</KBD> into the file
+<TT>`/etc/qmail/control/checkpassword'</TT> and restart <CODE>qmail-pop3d</CODE> by
+typing <SAMP>`/etc/rc.d/init.d/pop3d restart'</SAMP>.
+</P><P>
-<P>Put the string `<CODE>checkvpw</CODE>' into the file
-`<CODE>/etc/qmail/control/checkpassword</CODE>' and restart pop3d by
-typing `<CODE>/etc/rc.d/init.d/pop3d restart</CODE>'.
-<H2>2.7 How do I allow clients to relay SMTP through me?</H2>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC18"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC20"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.7 How do I allow clients to relay SMTP through me? </H2>
+<!--docid::SEC19::-->
+<P>
-<P>Download and install relay-ctrl from
-<A HREF="http://em.ca/~bruceg/relay-ctrl/">http://em.ca/~bruceg/relay-ctrl/</A>.
+Download and install relay-ctrl from
+<A HREF="http://untroubled.org/relay-ctrl/">http://untroubled.org/relay-ctrl/</A>.
It works with vmailmgr, for both POP3 and IMAP clients.
-<H2><A NAME="s3">3. Usage</A></H2>
+</P><P>
-<H2>3.1 I can only use one IP address. How do I log in as a virtual user?</H2>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC19"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC21"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 3. Usage </H1>
+<!--docid::SEC20::-->
+<P>
-<P>There are two ways to log in without using multiple IP addresses.
-<P>The first way is to log in as `userSEPvirtual.domain.org', where
-`user' is the mailbox name of the virtual user, SEP is one of `@' or
-`:' (by default, this is configurable in the
-`<CODE>/etc/vmailmgr/</CODE>' directory), and
-`<CODE>virtual.domain.org</CODE>' is the virtual domain's name, as
-listed in `<CODE>/var/qmail/control/virtualdomains</CODE>'.
-<P>The second way is to use the internal form of the mailbox name --
-that is, `<CODE>baseuser-user</CODE>', where `<CODE>user</CODE>' is the same
-as above, and `<CODE>baseuser</CODE>' is the username of the managing
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC20"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC22"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.1 I can only use one IP address. How do I log in as a virtual user? </H2>
+<!--docid::SEC21::-->
+<P>
+
+There are two ways to log in without using multiple IP addresses.
+</P><P>
+
+<UL>
+<LI>
+The first way is to log in as <SAMP>`user<VAR>SEP</VAR>virtual.domain.org'</SAMP>, where
+<SAMP>`user'</SAMP> is the mailbox name of the virtual user, <VAR>SEP</VAR> is one of
+<SAMP>`@'</SAMP> or <SAMP>`:'</SAMP> (by default, this is configurable in the
+<TT>`/etc/vmailmgr/'</TT> directory), and <SAMP>`virtual.domain.org'</SAMP> is the virtual
+domain's name, as listed in <TT>`/var/qmail/control/virtualdomains'</TT>.
+<P>
+
+<LI>
+The second way is to use the internal form of the mailbox name --
+that is, <SAMP>`baseuser-user'</SAMP>, where <SAMP>`user'</SAMP> is the same
+as above, and <SAMP>`baseuser'</SAMP> is the username of the managing
user.
-<P>Example: `<CODE>/var/qmail/control/virtualdomains</CODE>' contains
-<PRE>
- testdomain.org:testuser
-</PRE>
+<P>
+
+For example, <TT>`/var/qmail/control/virtualdomains'</TT> contains
+<SAMP>`testdomain.org:testuser'</SAMP>, user <SAMP>`testuser'</SAMP> exists,
+and has set up a virtual mailbox with the name <SAMP>`v'</SAMP>.
+The <VAR>separators</VAR> variable in <TT>`/etc/vmailmgr/'</TT>
+contains <SAMP>`@:'</SAMP>. This virtual user
+could log in as <SAMP>`v@testdomain.org'</SAMP>,
+<SAMP>`v:testdomain.org'</SAMP>, or <SAMP>`testuser-v'</SAMP>.
+</UL>
+<P>
-User `<CODE>testuser</CODE>' exists, and has set up a virtual mailbox
-with the name `<CODE>v</CODE>'. The `<CODE>separators</CODE>' variable in
-`<CODE>/etc/vmailmgr/</CODE>' contains `<CODE>@:</CODE>'. This virtual user
-could log in as `<CODE>v@testdomain.org</CODE>',
-`<CODE>v:testdomain.org</CODE>', or `<CODE>testuser-v</CODE>'.
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC21"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC23"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.2 How do I get all misdirected mail sent to me? </H2>
+<!--docid::SEC22::-->
<P>
-<P>
-<H2>3.2 How do I get all misdirected mail sent to me?</H2>
-<P>In the `<CODE>vmailmgr/</CODE>' configuration directory, there is an
-entry called `<CODE>default-username</CODE>'. If mail to a virtual
+In the <TT>`vmailmgr/'</TT> configuration directory, there is an
+entry called <TT>`default-username'</TT>. If mail to a virtual
domain does not match any users or aliases in that domain, it is
delivered to the name listed in this configuration item if it exists
-(which defaults to `<CODE>+</CODE>'). To make this deliver to you,
+(which defaults to <SAMP>`+'</SAMP>). To make this deliver to you,
simply type:
-<PRE>
- vaddalias + me
-</PRE>
-<H2><A NAME="s4">4. Troubleshooting</A></H2>
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>vaddalias + me
+</pre></td></tr></table></P><P>
+
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC22"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC24"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.3 How can I put system accounts in a virtual domain? </H2>
+<!--docid::SEC23::-->
+<P>
+
+System accounts are those listed in <TT>`/etc/password'</TT> (or
+<TT>`/var/qmail/users/cdb'</TT>).
+The system accounts are accessable, either though SMTP or POP3 or IMAP, as
+<SAMP>`name@<VAR>DOMAIN</VAR>'</SAMP>, where <VAR>DOMAIN</VAR> is listed in
+<TT>`/var/qmail/control/locals'</TT>.
+</P><P>
-<H2>4.1 Bind error message from vmailmgrd.</H2>
+Virtual accounts exist only as an artifact of vmailmgr management.
+They are accessable as <SAMP>`name@<VAR>DOMAIN</VAR>'</SAMP>, where <VAR>DOMAIN</VAR> is listed
+in <TT>`/var/qmail/control/virtualdomains'</TT>.
+</P><P>
+
+You <STRONG>cannot</STRONG> mix accounts within a domain between system and virtual
+domains. If the domain is in <TT>`control/locals'</TT>, all accounts for that
+domain must be system accounts. If it is in <TT>`control/virtualdomains'</TT>, all
+accounts for that domain must be virtual accounts. Also, <TT>`control/locals'</TT>
+overrides <TT>`control/virtualdomains'</TT>: if the domain is in <TT>`locals'</TT>,
+<TT>`virtualdomains'</TT> is ignored.
+</P><P>
+
+As an aside, if the domain is neither in <TT>`locals'</TT> nor in
+<TT>`virtualdomains'</TT>, qmail will reject incoming messages, and vmailmgr will
+treat it as local.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC23"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC25"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 4. Troubleshooting </H1>
+<!--docid::SEC24::-->
+<P>
-<P>If vmailmgrd reports `<CODE>vmailmgrd: bind: no such file or
-directory</CODE>' when you start it up, it means that can't create its
-socket file. By default, it will try to create the socket file
-`<CODE>/tmp/.vmailmgrd</CODE>'. You must ensure that `<CODE>/tmp</CODE>' is
-writable, or that the socket is created in some other place by
-setting `<CODE>socket-file</CODE>' in the configuration.
-<H2>4.2 Error sending to an alias: qmail-queue exited with an error!</H2>
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC24"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC26"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.1 Bind error message from <CODE>vmailmgrd</CODE>. </H2>
+<!--docid::SEC25::-->
+<P>
+
+If <CODE>vmailmgrd</CODE> reports
+<BLOCKQUOTE>
+vmailmgrd: bind: no such file or directory
+</BLOCKQUOTE>
+when you start it up, it means that can't create its socket file. By default,
+it will try to create the socket file <TT>`/tmp/.vmailmgrd'</TT>. You must ensure
+that <TT>`/tmp/'</TT> is writable, or that the socket is created in some other place
+by setting <VAR>socket-file</VAR> in the configuration.
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC25"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC27"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.2 Error sending to an alias: <CODE>qmail-queue</CODE> exited with an error! </H2>
+<!--docid::SEC26::-->
+<P>
-<P>If qmail reports "deferral: vdeliver: qmail-queue exited with an
-error!", check where your qmail is installed. On Debian systems,
-you will need to type "<CODE>ls -s /usr/sbin /var/qmail/bin</CODE>",
-since they've installed the qmail binaries into /usr/sbin.
-<H2>4.3 Running vmailmgrd fails.</H2>
+If qmail reports
+<BLOCKQUOTE>
+deferral: vdeliver: qmail-queue exited with an error!
+</BLOCKQUOTE>
+check where your qmail is installed. On Debian systems,
+you will need to type <SAMP>`ls -s /usr/sbin /var/qmail/bin'</SAMP>,
+since they've installed the qmail binaries into <TT>`/usr/sbin'</TT>.
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC26"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC28"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.3 Running <CODE>vmailmgrd</CODE> fails. </H2>
+<!--docid::SEC27::-->
+<P>
-<P>When run by itself, vmailmgrd will report "<CODE>Timed out waiting for
-remote</CODE>". vmailmgrd needs to be run from unixserver, part of
-the ucspi-unix package available at
-<A HREF="http://em.ca/~bruceg/ucspi-unix/">http://em.ca/~bruceg/ucspi-unix/</A>.
-<H2>4.4 POP3 or IMAP logins take 30 seconds or longer.</H2>
+When run by itself, <CODE>vmailmgrd</CODE> will report
+<BLOCKQUOTE>
+Timed out waiting for remote
+</BLOCKQUOTE>
+<CODE>vmailmgrd</CODE> needs to be run from <CODE>unixserver</CODE>, part of the ucspi-unix
+package available at
+<A HREF="http://untroubled.org/ucspi-unix/">http://untroubled.org/ucspi-unix/</A>.
+<P>
-<P>This is almost certainly a DNS lookup problem. Make sure that DNS
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC27"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC29"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.4 POP3 or IMAP logins take 30 seconds or longer. </H2>
+<!--docid::SEC28::-->
+<P>
+
+This is almost certainly a DNS lookup problem. Make sure that DNS
lookups aren't timing out, that lookups on all your IP addresses
aren't failing, and that you can lookup remote addresses as well.
-<P>If you are using 'tcpserver' for the head end to qmail-pop3d, then you
-may want to the following 2 switches to the command line: <CODE>-R</CODE>
-and <CODE>-H</CODE>. The former prevents tcpserver from attempting to
-obtain TCPREMOTEINFO from the remote host. This eliminates an "ident"
-lookup that may be being blocked or silently dropped by a firewall.
-The latter prevents tcpserver from doing a DNS lookup on the remote
-IP.
-<H2><A NAME="s5">5. Miscellaneous</A></H2>
+</P><P>
+
+If you are using <CODE>tcpserver</CODE> for the head end to <CODE>qmail-pop3d</CODE>, then
+you may want to add the following 2 switches to the command line: <SAMP>`-R'</SAMP> and
+<SAMP>`-H'</SAMP>. The former prevents <CODE>tcpserver</CODE> from attempting to obtain
+<VAR>TCPREMOTEINFO</VAR> from the remote host. This eliminates an <CODE>ident</CODE>
+lookup that may be being blocked or silently dropped by a firewall. The latter
+prevents <CODE>tcpserver</CODE> from doing a DNS lookup on the remote IP.
+</P><P>
-<H2>5.1 How do I get in contact with other users?</H2>
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC28"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC30"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 5. Miscellaneous </H1>
+<!--docid::SEC29::-->
+<P>
-<P>There is a mailing list run by the author. To subscribe, send an
-e-mail (content and subject line is ignored) to
-<A HREF="mailto:vmailmgr-subscribe@lists.em.ca">mailto:vmailmgr-subscribe@lists.em.ca</A>.
-<P>Remember that if you have a problem that you want us to diagnose, we
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC29"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC31"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.1 How do I get in contact with other users? </H2>
+<!--docid::SEC30::-->
+<P>
+
+There is a mailing list run by the author. To subscribe, send an
+e-mail (content and subject line is ignored) to
+<A HREF="mailto:vmailmgr-subscribe@lists.untroubled.org">vmailmgr-subscribe@lists.untroubled.org</A>.
+</P><P>
+
+Remember that if you have a problem that you want us to diagnose, we
need to know the following important details:
<OL>
-<LI>The output of `<CODE>qmail-showctl</CODE>` </LI>
-<LI>The contents of the vmailmgrd log for the attempt you are
-trying to diagnose</LI>
-<LI>The contents of the qmail and smtpd logs for a failed delivery
-attempt</LI>
-<LI>The contents of the pop3d logs for a failed login attempt</LI>
-<LI>The complete command line with which vmailmgrd and qmail-pop3d
-was invoked</LI>
+<LI>
+The output of <CODE>qmail-showctl</CODE>
+<LI>
+The contents of the <CODE>vmailmgrd</CODE> log for the attempt you are
+trying to diagnose
+<LI>
+The contents of the qmail and smtpd logs for a failed delivery
+attempt
+<LI>
+The contents of the pop3d logs for a failed login attempt
+<LI>
+The complete command line with which <CODE>vmailmgrd</CODE> and <CODE>qmail-pop3d</CODE>
+was invoked
</OL>
+<P>
Please do not contact the author directly with vmailmgr questions.
-<H2>5.2 Are development version of vmailmgr available anywhere?</H2>
+</P><P>
-<P>Yes, they are available through anonymous CVS.
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC30"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC32"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.2 Are development version of vmailmgr available anywhere? </H2>
+<!--docid::SEC31::-->
+<P>
+
+Yes, they are available through anonymous CVS.
To access the CVS server, set your <CODE>CVSROOT</CODE> to
-<CODE>:pserver:cvs@bruce-guenter.dyndns.org:/CVS</CODE>, log in with an
+<KBD>:pserver:cvs@bruce-guenter.dyndns.org:/CVS</KBD>, log in with an
empty password, and check out the <CODE>vmailmgr</CODE> module.
-<H2>5.3 How does incoming email get handled?</H2>
+</P><P>
-<P>Incoming email is first received by the qmail SMTP daemon and
-inserted into the qmail queue. Then `<CODE>qmail-send</CODE>' examines
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC31"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC33"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.3 How does incoming email get handled? </H2>
+<!--docid::SEC32::-->
+<P>
+
+Incoming email is first received by the qmail SMTP daemon and
+inserted into the qmail queue. Then <CODE>qmail-send</CODE> examines
the email envelope (which details the recipient address or
addresses) to determine how to dispatch the message. It looks up the
domain name of each recipient in
-`<CODE>/var/qmail/control/virtualdomains</CODE>', and prefixes the user
+<TT>`/var/qmail/control/virtualdomains'</TT>, and prefixes the user
name with the string that it finds. It then looks up the resulting
user name in the system password table (or in
-`<CODE>/var/qmail/users/cdb</CODE>' if it exists) to find the base user
-name and home directory (which I will call `<CODE>$HOME</CODE>'). It
-then looks for the file `<CODE>$HOME/.qmail-VIRTUAL</CODE>'. If that's
-not found, it looks for the file `<CODE>$HOME/.qmail-default</CODE>',
+<TT>`/var/qmail/users/cdb'</TT> if it exists) to find the base user
+name and home directory (which I will call <CODE>$HOME</CODE>). It
+then looks for the file <TT>`<CODE>$HOME</CODE>/.qmail-VIRTUAL'</TT>. If that's
+not found, it looks for the file <TT>`<CODE>$HOME</CODE>/.qmail-default'</TT>,
which will contain an instruction to pipe the message to
-`<CODE>vdeliver</CODE>'.
-<P>This is where vmailmgr first enters the picture. The virtual user
-name is sent to `vdeliver' through environment variables. It looks
-in the configuration files (in `<CODE>$HOME/.vmailmgr</CODE>' and then
-in `<CODE>/etc/vmailmgr</CODE>') to determine the location of the
+<CODE>vdeliver</CODE>.
+</P><P>
+
+This is where vmailmgr first enters the picture. The virtual user
+name is sent to <CODE>vdeliver</CODE> through environment variables. It looks
+in the configuration files (in <TT>`<CODE>$HOME</CODE>/.vmailmgr'</TT> and then
+in <TT>`/etc/vmailmgr'</TT>) to determine the location of the
password table, and looks up the virtual user name in the table to
determine delivery instructions. If the name is not found, the
message is bounced and delivery ends. Otherwise, it then looks for
-the `<CODE>vdeliver-predeliver</CODE>' script in the configuration
+the <CODE>vdeliver-predeliver</CODE> script in the configuration
directories (in reverse order) and executes any that are found. It
then delivers the message to all the listed destinations -- an
optional mailbox directory and zero or more forwarding
-addresses. Finally, it looks for the `<CODE>vdeliver-postdeliver</CODE>'
+addresses. Finally, it looks for the <CODE>vdeliver-postdeliver</CODE>
script and executes any that are found.
-<H2>5.4 How does outgoing email get handled?</H2>
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC32"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC34"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.4 How does outgoing email get handled? </H2>
+<!--docid::SEC33::-->
+<P>
-<P>Outgoing email is not handled by vmailmgr. For details on outgoing
+Outgoing email is not handled by vmailmgr. For details on outgoing
email handling, check the qmail documentation.
-<H2>5.5 What about security of CGI and PHP functions?</H2>
+</P><P>
-<P>The socket used by the daemon is a UNIX-domain socket (as opposed to
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC33"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC35"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.5 What about security of CGI and PHP functions? </H2>
+<!--docid::SEC34::-->
+<P>
+
+The socket used by the daemon is a UNIX-domain socket (as opposed to
Internet-domain), meaning you need local access on the computer to
open up a connection. The path for this socket is run-time
configurable.
-<P>The daemon forks a new connection for each connection, up to a
+</P><P>
+
+The daemon forks a new connection for each connection, up to a
configurable maximum (at which point it stops listening, IIRC, I
should verify this). The idea of threading has been completely
-discarded to avoid a bug in a command creeping in and makeing the
+discarded to avoid a bug in a command creeping in and making the
whole server break.
-<P>The protocol spoken over the socket is explicitly bounded to at most
+</P><P>
+
+The protocol spoken over the socket is explicitly bounded to at most
64kB of data, and all data is prefixed by a size. Static-sized
buffers are only used with static-sized reads, and therefore can't be
overflowed with stack-smashing tricks.
-<P>The daemon commands setuid to the appropriate user as soon as the base
+</P><P>
+
+The daemon commands setuid to the appropriate user as soon as the base
user has been verified, to avoid doing any more than necessary as
root, as well as to avoid the possibility of tricking the daemon into
reading a file another user wouldn't normally have access to.
-<P>To help avoid DoS on the local computer, a 1-second alarm is set as
+</P><P>
+
+To help avoid DoS on the local computer, a 1-second alarm is set as
soon as the connection is received, and is only cleared once all the
data has been read. If it takes longer than 1 second to read the data
from the socket, the server process exits.
-<H2>5.6 What are the differences between vmailmgr and vpopmail?</H2>
+</P><P>
-<P>The primary difference between vmailmgr and vpopmail is the use of
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC34"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.6 What are the differences between vmailmgr and vpopmail? </H2>
+<!--docid::SEC35::-->
+<P>
+
+The primary difference between vmailmgr and vpopmail is the use of
base users. With vmailmgr there is one base user for each virtual
domain. With vpopmail, there is one base user for the entire
virtual domain system.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="FAQ.html#SEC1">1. Building and Installing</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="FAQ.html#SEC2">1.1 What compiler and libraries do I need to build vmailmgr?</A>
+<BR>
+<A NAME="TOC3" HREF="FAQ.html#SEC3">1.2 Does vmailmgr work with shadow passwords?</A>
+<BR>
+<A NAME="TOC4" HREF="FAQ.html#SEC4">1.3 Does vmailmgr support IMAP?</A>
+<BR>
+</UL>
+<A NAME="TOC5" HREF="FAQ.html#SEC5">2. Setup and Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC6" HREF="FAQ.html#SEC6">2.1 What other software is needed to run vmailmgr?</A>
+<BR>
+<A NAME="TOC7" HREF="FAQ.html#SEC7">2.2 How do I record the output of vmailmgrd with syslog?</A>
+<BR>
+<A NAME="TOC8" HREF="FAQ.html#SEC8">2.3 How do I record the output of vmailmgrd with multilog?</A>
+<BR>
+<A NAME="TOC9" HREF="FAQ.html#SEC9">2.4 How do I setup VMmailMgr IMAP support?</A>
+<BR>
+<A NAME="TOC10" HREF="FAQ.html#SEC10">2.5 Upgrading from Previous Versions</A>
+<BR>
+<UL>
+<A NAME="TOC11" HREF="FAQ.html#SEC11">2.5.1 Upgrading from version 0.96.6 or earlier</A>
+<BR>
+<A NAME="TOC12" HREF="FAQ.html#SEC12">2.5.2 Upgrading from version 0.96.2 or earlier</A>
+<BR>
+<A NAME="TOC13" HREF="FAQ.html#SEC13">2.5.3 Upgrading from version 0.94 or earlier, using the POP bulletin facility</A>
+<BR>
+<A NAME="TOC14" HREF="FAQ.html#SEC14">2.5.4 Upgrading from version 0.93 or earlier</A>
+<BR>
+<A NAME="TOC15" HREF="FAQ.html#SEC15">2.5.5 Upgrading from version 0.92.2 or earlier</A>
+<BR>
+<A NAME="TOC16" HREF="FAQ.html#SEC16">2.5.6 Upgrading from version 0.90.2 or earlier</A>
+<BR>
+<A NAME="TOC17" HREF="FAQ.html#SEC17">2.5.7 Upgrading from version 0.88 or earlier</A>
+<BR>
+</UL>
+<A NAME="TOC18" HREF="FAQ.html#SEC18">2.6 How do I configure qmail+patches to use vmailmgr for POP?</A>
+<BR>
+<A NAME="TOC19" HREF="FAQ.html#SEC19">2.7 How do I allow clients to relay SMTP through me?</A>
+<BR>
+</UL>
+<A NAME="TOC20" HREF="FAQ.html#SEC20">3. Usage</A>
+<BR>
+<UL>
+<A NAME="TOC21" HREF="FAQ.html#SEC21">3.1 I can only use one IP address. How do I log in as a virtual user?</A>
+<BR>
+<A NAME="TOC22" HREF="FAQ.html#SEC22">3.2 How do I get all misdirected mail sent to me?</A>
+<BR>
+<A NAME="TOC23" HREF="FAQ.html#SEC23">3.3 How can I put system accounts in a virtual domain?</A>
+<BR>
+</UL>
+<A NAME="TOC24" HREF="FAQ.html#SEC24">4. Troubleshooting</A>
+<BR>
+<UL>
+<A NAME="TOC25" HREF="FAQ.html#SEC25">4.1 Bind error message from <CODE>vmailmgrd</CODE>.</A>
+<BR>
+<A NAME="TOC26" HREF="FAQ.html#SEC26">4.2 Error sending to an alias: <CODE>qmail-queue</CODE> exited with an error!</A>
+<BR>
+<A NAME="TOC27" HREF="FAQ.html#SEC27">4.3 Running <CODE>vmailmgrd</CODE> fails.</A>
+<BR>
+<A NAME="TOC28" HREF="FAQ.html#SEC28">4.4 POP3 or IMAP logins take 30 seconds or longer.</A>
+<BR>
+</UL>
+<A NAME="TOC29" HREF="FAQ.html#SEC29">5. Miscellaneous</A>
+<BR>
+<UL>
+<A NAME="TOC30" HREF="FAQ.html#SEC30">5.1 How do I get in contact with other users?</A>
+<BR>
+<A NAME="TOC31" HREF="FAQ.html#SEC31">5.2 Are development version of vmailmgr available anywhere?</A>
+<BR>
+<A NAME="TOC32" HREF="FAQ.html#SEC32">5.3 How does incoming email get handled?</A>
+<BR>
+<A NAME="TOC33" HREF="FAQ.html#SEC33">5.4 How does outgoing email get handled?</A>
+<BR>
+<A NAME="TOC34" HREF="FAQ.html#SEC34">5.5 What about security of CGI and PHP functions?</A>
+<BR>
+<A NAME="TOC35" HREF="FAQ.html#SEC35">5.6 What are the differences between vmailmgr and vpopmail?</A>
+<BR>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="FAQ.html#SEC1">1. Building and Installing</A>
+<BR>
+<A NAME="TOC5" HREF="FAQ.html#SEC5">2. Setup and Configuration</A>
+<BR>
+<A NAME="TOC20" HREF="FAQ.html#SEC20">3. Usage</A>
+<BR>
+<A NAME="TOC24" HREF="FAQ.html#SEC24">4. Troubleshooting</A>
+<BR>
+<A NAME="TOC29" HREF="FAQ.html#SEC29">5. Miscellaneous</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="FAQ.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ < ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ > ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ << ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ >> ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG>
+<== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
</BODY>
</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/FAQ.info Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,370 @@
+This is FAQ.info, produced by makeinfo version 4.7 from FAQ.texi.
+
+ Copyright (C) 1998 Bruce Guenter
+
+ VMailMgr Frequently Asked Questions.
+
+1 Building and Installing
+*************************
+
+1.1 What compiler and libraries do I need to build vmailmgr?
+============================================================
+
+You will need a working C and C++ compiler and linker. You will not
+need any C++ libraries. The package is being developed under Linux
+using egcs and glibc version 2, and may rely on some gcc/g++ extensions.
+
+1.2 Does vmailmgr work with shadow passwords?
+=============================================
+
+This package should work without changes both with and without shadow
+passwords as long as the shadow password libraries are present when
+this package is built. The `configure' script will detect what method
+of shadow passwords are being used and the programs will be built
+accordingly.
+
+1.3 Does vmailmgr support IMAP?
+===============================
+
+Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
+make them work, the steps are in the next section of this file.
+
+2 Setup and Configuration
+*************************
+
+2.1 What other software is needed to run vmailmgr?
+==================================================
+
+VMailMgr is based around qmail's handling of virtual users, and as such
+requires qmail for its operation. If you wish to use the `init' file to
+start/stop `vmailmgrd' or are installing the RPM package,
+supervise-scripts version 2.2 (or later, available at
+`http://untroubled.org/supervise-scripts/') and daemontools 0.60 (or
+later, available at `http://untroubled.org/rpms/daemontools/') packages
+are required. If you need to use the `vmailmgrd' daemon, you will also
+need the `unixserver' program, from the ucspi-unix package, available at
+`http://untroubled.org/ucspi-unix/'.
+
+ If you want to use the autoresponse feature, I recommend the use of
+my own autoresponder program, `qmail-autoresponder' available at
+`http://untroubled.org/qmail-autoresponder/'.
+
+2.2 How do I record the output of vmailmgrd with syslog?
+========================================================
+
+Output from `vmailmgrd' can be recorded by either `splogger' (part of
+qmail) or with the logger that comes with several flavours of UNIX. To
+use `splogger', pipe the output of `vmailmgrd' into the command
+`splogger vmailmgrd'. This will timestamp each entry and tag them with
+the word `vmailmgrd'. By default, `splogger' logs to facility 2 (mail).
+To use `logger', pipe the output of `vmailmgrd' into the command
+`logger -t vmailmgrd -p mail.notice'. See the respective man pages of
+these two programs for more information.
+
+ Note: The use of `syslog' for logging messages is strongly
+discouraged due to problems with inefficent and buggy implementation of
+`syslog'.
+
+2.3 How do I record the output of vmailmgrd with multilog?
+==========================================================
+
+Make a directory into which the output will go, for example
+`/var/log/vmailmgrd'. Pipe the output of `vmailmgrd' into the command
+`multilog t /var/log/vmailmgrd'. See the documentation for `multilog'
+for more information on how to adjust its output.
+
+2.4 How do I setup VMmailMgr IMAP support?
+==========================================
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto detect
+VMailMgr. This means that some minor work is required for making the
+two work together.
+
+ * You must copy `/usr/local/bin/authvmailmgr' to
+ `/usr/lib/courier-imap/libexec/authlib/authvmailmgr'.
+
+ * Then modify the `AUTHMODULES' statement in
+ `/usr/lib/courier-imap/etc/imapd.config' and add `authvmailmgr' as
+ the first authentication module.
+
+
+2.5 Upgrading from Previous Versions
+====================================
+
+If you are upgrading from an older version, you may need to make some
+changes to your system before or after doing the upgrade. The following
+table outlines the necessary changes. Note that you need to follow the
+instructions for all later versions of the software.
+
+2.5.1 Upgrading from version 0.96.6 or earlier
+----------------------------------------------
+
+The `vmailmgrd' daemon needs to be run by unixserver, as opposed to
+being a stand-alone program previously.
+
+2.5.2 Upgrading from version 0.96.2 or earlier
+----------------------------------------------
+
+Make sure the `vmailmgrd' daemon and vmailmgr CGIs are disabled before
+upgrading, and upgrade them along with the main package. Changes were
+made to the daemon interface that will cause adding users and aliases
+to flake out. As well, the listdomain interface was completely redone.
+
+2.5.3 Upgrading from version 0.94 or earlier, using the POP bulletin facility
+-----------------------------------------------------------------------------
+
+The POP bulletin facility has been moved into a stand-alone program
+that needs to be executed through `checkvpw-postsetuid'.
+
+2.5.4 Upgrading from version 0.93 or earlier
+--------------------------------------------
+
+If you do not use the CGIs, you no longer need to run the `vmailmgrd'
+daemon.
+
+2.5.5 Upgrading from version 0.92.2 or earlier
+----------------------------------------------
+
+The configuration changed from reading a single file to reading a set
+of files in a directory. Read the configuration documentation and run
+the program `vconf2dir'.
+
+2.5.6 Upgrading from version 0.90.2 or earlier
+----------------------------------------------
+
+The name of the user to which mail to an unknown user is delivered
+changed from `*' to `+'. If you were using this feature, either change
+all your domains to accomodate this change, or set the
+`default-username' config file to contain `*'.
+
+2.5.7 Upgrading from version 0.88 or earlier
+--------------------------------------------
+
+The file format of the virtual password tables has changed from plain
+text files to CDB tables. You will need to suspend local deliveries
+before upgrading, and run the program `vpasswd2cdb' as each base user
+after upgrading, before re-enabling local deliveries.
+
+2.6 How do I configure qmail+patches to use vmailmgr for POP?
+=============================================================
+
+Put the string `checkvpw' into the file
+`/etc/qmail/control/checkpassword' and restart `qmail-pop3d' by typing
+`/etc/rc.d/init.d/pop3d restart'.
+
+2.7 How do I allow clients to relay SMTP through me?
+====================================================
+
+Download and install relay-ctrl from
+`http://untroubled.org/relay-ctrl/'. It works with vmailmgr, for both
+POP3 and IMAP clients.
+
+3 Usage
+*******
+
+3.1 I can only use one IP address. How do I log in as a virtual user?
+=====================================================================
+
+There are two ways to log in without using multiple IP addresses.
+
+ * The first way is to log in as `userSEPvirtual.domain.org', where
+ `user' is the mailbox name of the virtual user, SEP is one of `@'
+ or `:' (by default, this is configurable in the `/etc/vmailmgr/'
+ directory), and `virtual.domain.org' is the virtual domain's name,
+ as listed in `/var/qmail/control/virtualdomains'.
+
+ * The second way is to use the internal form of the mailbox name -
+ that is, `baseuser-user', where `user' is the same as above, and
+ `baseuser' is the username of the managing user.
+
+ For example, `/var/qmail/control/virtualdomains' contains
+ `testdomain.org:testuser', user `testuser' exists, and has set up
+ a virtual mailbox with the name `v'. The SEPARATORS variable in
+ `/etc/vmailmgr/' contains `@:'. This virtual user could log in as
+ `v@testdomain.org', `v:testdomain.org', or `testuser-v'.
+
+3.2 How do I get all misdirected mail sent to me?
+=================================================
+
+In the `vmailmgr/' configuration directory, there is an entry called
+`default-username'. If mail to a virtual domain does not match any
+users or aliases in that domain, it is delivered to the name listed in
+this configuration item if it exists (which defaults to `+'). To make
+this deliver to you, simply type:
+
+ vaddalias + me
+
+3.3 How can I put system accounts in a virtual domain?
+======================================================
+
+System accounts are those listed in `/etc/password' (or
+`/var/qmail/users/cdb'). The system accounts are accessable, either
+though SMTP or POP3 or IMAP, as `name@DOMAIN', where DOMAIN is listed in
+`/var/qmail/control/locals'.
+
+ Virtual accounts exist only as an artifact of vmailmgr management.
+They are accessable as `name@DOMAIN', where DOMAIN is listed in
+`/var/qmail/control/virtualdomains'.
+
+ You *cannot* mix accounts within a domain between system and
+virtual domains. If the domain is in `control/locals', all accounts
+for that domain must be system accounts. If it is in
+`control/virtualdomains', all accounts for that domain must be virtual
+accounts. Also, `control/locals' overrides `control/virtualdomains':
+if the domain is in `locals', `virtualdomains' is ignored.
+
+ As an aside, if the domain is neither in `locals' nor in
+`virtualdomains', qmail will reject incoming messages, and vmailmgr will
+treat it as local.
+
+4 Troubleshooting
+*****************
+
+4.1 Bind error message from `vmailmgrd'.
+========================================
+
+If `vmailmgrd' reports
+
+ vmailmgrd: bind: no such file or directory
+ when you start it up, it means that can't create its socket file.
+By default, it will try to create the socket file `/tmp/.vmailmgrd'.
+You must ensure that `/tmp/' is writable, or that the socket is created
+in some other place by setting SOCKET-FILE in the configuration.
+
+4.2 Error sending to an alias: `qmail-queue' exited with an error!
+==================================================================
+
+If qmail reports
+
+ deferral: vdeliver: qmail-queue exited with an error!
+ check where your qmail is installed. On Debian systems, you will
+need to type `ls -s /usr/sbin /var/qmail/bin', since they've installed
+the qmail binaries into `/usr/sbin'.
+
+4.3 Running `vmailmgrd' fails.
+==============================
+
+When run by itself, `vmailmgrd' will report
+
+ Timed out waiting for remote
+ `vmailmgrd' needs to be run from `unixserver', part of the
+ucspi-unix package available at `http://untroubled.org/ucspi-unix/'.
+
+4.4 POP3 or IMAP logins take 30 seconds or longer.
+==================================================
+
+This is almost certainly a DNS lookup problem. Make sure that DNS
+lookups aren't timing out, that lookups on all your IP addresses aren't
+failing, and that you can lookup remote addresses as well.
+
+ If you are using `tcpserver' for the head end to `qmail-pop3d',
+then you may want to add the following 2 switches to the command line:
+`-R' and `-H'. The former prevents `tcpserver' from attempting to
+obtain TCPREMOTEINFO from the remote host. This eliminates an `ident'
+lookup that may be being blocked or silently dropped by a firewall. The
+latter prevents `tcpserver' from doing a DNS lookup on the remote IP.
+
+5 Miscellaneous
+***************
+
+5.1 How do I get in contact with other users?
+=============================================
+
+There is a mailing list run by the author. To subscribe, send an e-mail
+(content and subject line is ignored) to
+<vmailmgr-subscribe@lists.untroubled.org>.
+
+ Remember that if you have a problem that you want us to diagnose,
+we need to know the following important details:
+ 1. The output of `qmail-showctl'
+
+ 2. The contents of the `vmailmgrd' log for the attempt you are trying
+ to diagnose
+
+ 3. The contents of the qmail and smtpd logs for a failed delivery
+ attempt
+
+ 4. The contents of the pop3d logs for a failed login attempt
+
+ 5. The complete command line with which `vmailmgrd' and `qmail-pop3d'
+ was invoked
+
+ Please do not contact the author directly with vmailmgr questions.
+
+5.2 Are development version of vmailmgr available anywhere?
+===========================================================
+
+Yes, they are available through anonymous CVS. To access the CVS
+server, set your `CVSROOT' to
+`:pserver:cvs@bruce-guenter.dyndns.org:/CVS', log in with an empty
+password, and check out the `vmailmgr' module.
+
+5.3 How does incoming email get handled?
+========================================
+
+Incoming email is first received by the qmail SMTP daemon and inserted
+into the qmail queue. Then `qmail-send' examines the email envelope
+(which details the recipient address or addresses) to determine how to
+dispatch the message. It looks up the domain name of each recipient in
+`/var/qmail/control/virtualdomains', and prefixes the user name with
+the string that it finds. It then looks up the resulting user name in
+the system password table (or in `/var/qmail/users/cdb' if it exists)
+to find the base user name and home directory (which I will call
+`$HOME'). It then looks for the file ``$HOME'/.qmail-VIRTUAL'. If that's
+not found, it looks for the file ``$HOME'/.qmail-default', which will
+contain an instruction to pipe the message to `vdeliver'.
+
+ This is where vmailmgr first enters the picture. The virtual user
+name is sent to `vdeliver' through environment variables. It looks in
+the configuration files (in ``$HOME'/.vmailmgr' and then in
+`/etc/vmailmgr') to determine the location of the password table, and
+looks up the virtual user name in the table to determine delivery
+instructions. If the name is not found, the message is bounced and
+delivery ends. Otherwise, it then looks for the `vdeliver-predeliver'
+script in the configuration directories (in reverse order) and executes
+any that are found. It then delivers the message to all the listed
+destinations - an optional mailbox directory and zero or more forwarding
+addresses. Finally, it looks for the `vdeliver-postdeliver' script and
+executes any that are found.
+
+5.4 How does outgoing email get handled?
+========================================
+
+Outgoing email is not handled by vmailmgr. For details on outgoing
+email handling, check the qmail documentation.
+
+5.5 What about security of CGI and PHP functions?
+=================================================
+
+The socket used by the daemon is a UNIX-domain socket (as opposed to
+Internet-domain), meaning you need local access on the computer to open
+up a connection. The path for this socket is run-time configurable.
+
+ The daemon forks a new connection for each connection, up to a
+configurable maximum (at which point it stops listening, IIRC, I should
+verify this). The idea of threading has been completely discarded to
+avoid a bug in a command creeping in and making the whole server break.
+
+ The protocol spoken over the socket is explicitly bounded to at
+most 64kB of data, and all data is prefixed by a size. Static-sized
+buffers are only used with static-sized reads, and therefore can't be
+overflowed with stack-smashing tricks.
+
+ The daemon commands setuid to the appropriate user as soon as the
+base user has been verified, to avoid doing any more than necessary as
+root, as well as to avoid the possibility of tricking the daemon into
+reading a file another user wouldn't normally have access to.
+
+ To help avoid DoS on the local computer, a 1-second alarm is set as
+soon as the connection is received, and is only cleared once all the
+data has been read. If it takes longer than 1 second to read the data
+from the socket, the server process exits.
+
+5.6 What are the differences between vmailmgr and vpopmail?
+===========================================================
+
+The primary difference between vmailmgr and vpopmail is the use of base
+users. With vmailmgr there is one base user for each virtual domain.
+With vpopmail, there is one base user for the entire virtual domain
+system.
+
Binary file doc/FAQ.pdf has changed
--- a/doc/FAQ.sgml Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,373 +0,0 @@
-<!doctype linuxdoc system>
-
-<!-- LinuxDoc file was created by hand by <Dan Kuykendall> Wed April 23 -->
-<article>
-<title>
- VMailMgr FAQ
-</title>
-<author>
- Bruce Guenter <url url="mailto:bruceg@em.ca">,
- Dan Kuykendall <url url="mailto:dan@kuykendall.org">
-</author>
-<date>
- v1.0, 23 April 2000
-</date>
-<abstract>
- VMailMgr Frequently Asked Questions.
-</abstract>
-
-<toc>
-
-<sect>Building and Installing
-
-<sect1>What compiler and libraries do I need to build vmailmgr?
-<p>
- You will need a working C and C++ compiler and linker. You will not
- need any C++ libraries. The package is being developed under Linux
- using egcs and glibc version 2, and may rely on some gcc/g++
- extensions.
-</p>
-
-<sect1>Does vmailmgr work with shadow passwords?
-<p>
- This package should work without changes both with and without
- shadow passwords as long as the shadow password libraries are
- present when this package is built. The `configure' script will
- detect what method of shadow passwords are being used and the
- programs will be built accordingly.
-</p>
-
-<sect1>Does vmailmgr support IMAP?
-<p>
- Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
- make them work, the steps are in the next section of this file.
-</p>
-
-<sect>Setup and Configuration
-
-<sect1>What other software is needed to run vmailmgr?
-<p>
- VMailMgr is based around qmail's handling of virtual users, and as
- such requires qmail for its operation. If you wish to use the `init'
- file to start/stop vmailmgrd or are installing the RPM package,
- supervise-scripts version 2.2 (or later, available at <url
- url="http://em.ca/~bruceg/supervise-scripts/">) and daemontools 0.60
- (or later, available at <url
- url="http://em.ca/~bruceg/rpms/daemontools/">) packages are
- required. If you need to use the <tt>vmailmgrd</tt> daemon, you
- will also need the <tt>unixserver</tt> program, from the ucspi-unix
- package, available at <url url="http://em.ca/~bruceg/ucspi-unix/">.
-</p>
-
-<p>
- If you want to use the autoresponse feature, I recommend the use of
- my own autoresponder program, <tt>qmail-autoresponder</tt> available
- at <url url="http://em.ca/~bruceg/qmail-autoresponder/">.
-</p>
-
-<sect1>How do I record the output of vmailmgrd with syslog?
-<p>
- Output from vmailmgrd can be recorded by either splogger (part of
- qmail) or with the logger that comes with several flavours of
- UNIX. To use splogger, pipe the output of vmailmgrd into the command
- `splogger vmailmgrd'. This will timestamp each entry and tag them
- with the word `vmailmgrd'. By default, splogger logs to facility 2
- (mail). To use logger, pipe the output of vmailmgrd into the
- comamand `<tt>logger -t vmailmgrd -p mail.notice</tt>'. See the
- respective man pages of these two programs for more information.
-</p>
-<p>
- Note: The use of syslog for logging messages is strongly discouraged
- due to problems with inefficent and buggy implementation of syslog.
-</p>
-
-<sect1>How do I record the output of vmailmgrd with multilog?
-<p>
- Make a directory into which the output will go, for example
- `<tt>/var/log/vmailmgrd</tt>'. Pipe the output of vmailmgrd into the
- command `<tt>multilog t /var/log/vmailmgrd</tt>'. See the
- documentation for multilog for more information on how to adjust its
- output.
-</p>
-
-<sect1>How do I setup VMmailMgr IMAP support?
-<p>
- VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto
- detect VMailMgr. This means that some minor work is required for
- making the two work together.
-<itemize>
- <item>You must copy `<tt>/usr/local/bin/authvmailmgr</tt>` to
- `<tt>/usr/lib/courier-imap/libexec/authlib/authvmailmgr</tt>`.
- <item>Then modify the `<tt>AUTHMODULES</tt>` statement in
- `<tt>/usr/lib/courier-imap/etc/imapd.config</tt>` and add
- `<tt>authvmailmgr</tt>` as the first authentication module.
-</itemize>
-</p>
-
-<sect1>Upgrading from Previous Versions
-<p>
- If you are upgrading from an older version, you may need to make
- some changes to your system before or after doing the upgrade. The
- following table outlines the necessary changes. Note that you need
- to follow the instructions for all later versions of the software.
-<p>
- If you are upgrading from version:
-<descrip>
-<tag>0.96.6 or earlier</tag>
-<p>
- The `vmailmgrd' daemon needs to be run by unixserver, as opposed
- to being a stand-alone program previously.
-</p>
-<tag>0.96.2 or earlier</tag>
-<p>
- Make sure the `vmailmgrd' daemon and vmailmgr CGIs are disabled
- before upgrading, and upgrade them along with the main
- package. Changes were made to the daemon interface that will
- cause adding users and aliases to flake out. As well, the
- listdomain interface was completely redone.
-<p>
-<tag>0.94 or earlier, using the POP bulletin facility</tag>
-<p>
- The POP bulletin facility has been moved into a stand-alone
- program that needs to be executed through `checkvpw-postsetuid'.
-<p>
-<tag>0.93 or earlier</tag>
-<p>
- If you do not use the CGIs, you no longer need to run the
- `vmailmgrd' daemon.
-<p>
-<tag>0.92.2 or earlier</tag>
-<p>
- The configuration changed from reading a single file to reading a
- set of files in a directory. Read the configuration documentation
- and run the program `vconf2dir'.
-<p>
-<tag>0.90.2 or earlier</tag>
-<p>
- The name of the user to which mail to an unknown user is
- delivered changed from `*' to `+'. If you were using this
- feature, either change all your domains to accomodate this
- change, or set the `default-username' config file to contain `*'.
-<p>
-<tag>0.88 or earlier</tag>
-<p>
- The file format of the virtual password tables has changed from
- plain text files to CDB tables. You will need to suspend local
- deliveries before upgrading, and run the program `vpasswd2cdb' as
- each base user after upgrading, before re-enabling local
- deliveries.
-</descrip>
-</p>
-
-<sect1>How do I configure qmail+patches to use vmailmgr for POP?
-<p>
-Put the string `<tt>checkvpw</tt>' into the file
-`<tt>/etc/qmail/control/checkpassword</tt>' and restart pop3d by
-typing `<tt>/etc/rc.d/init.d/pop3d restart</tt>'.
-</p>
-
-<sect1>How do I allow clients to relay SMTP through me?
-<p>
- Download and install relay-ctrl from <url
- url="http://em.ca/~bruceg/relay-ctrl/">.
- It works with vmailmgr, for both POP3 and IMAP clients.
-</p>
-
-<sect>Usage
-
-<sect1>I can only use one IP address. How do I log in as a virtual user?
-<p>
- There are two ways to log in without using multiple IP addresses.
-<p>
- The first way is to log in as `userSEPvirtual.domain.org', where
- `user' is the mailbox name of the virtual user, SEP is one of `@' or
- `:' (by default, this is configurable in the
- `<tt>/etc/vmailmgr/</tt>' directory), and
- `<tt>virtual.domain.org</tt>' is the virtual domain's name, as
- listed in `<tt>/var/qmail/control/virtualdomains</tt>'.
-<p>
- The second way is to use the internal form of the mailbox name --
- that is, `<tt>baseuser-user</tt>', where `<tt>user</tt>' is the same
- as above, and `<tt>baseuser</tt>' is the username of the managing
- user.
-
- Example: `<tt>/var/qmail/control/virtualdomains</tt>' contains
-<verb>
- testdomain.org:testuser
-</verb>
- User `<tt>testuser</tt>' exists, and has set up a virtual mailbox
- with the name `<tt>v</tt>'. The `<tt>separators</tt>' variable in
- `<tt>/etc/vmailmgr/</tt>' contains `<tt>@:</tt>'. This virtual user
- could log in as `<tt>v@testdomain.org</tt>',
- `<tt>v:testdomain.org</tt>', or `<tt>testuser-v</tt>'.
-<p>
-
-<sect1>How do I get all misdirected mail sent to me?
-<p>
- In the `<tt>vmailmgr/</tt>' configuration directory, there is an
- entry called `<tt>default-username</tt>'. If mail to a virtual
- domain does not match any users or aliases in that domain, it is
- delivered to the name listed in this configuration item if it exists
- (which defaults to `<tt>+</tt>'). To make this deliver to you,
- simply type:
-<verb>
- vaddalias + me
-</verb>
-</p>
-
-<sect>Troubleshooting
-
-<sect1>Bind error message from vmailmgrd.
-<p>
- If vmailmgrd reports `<tt>vmailmgrd: bind: no such file or
- directory</tt>' when you start it up, it means that can't create its
- socket file. By default, it will try to create the socket file
- `<tt>/tmp/.vmailmgrd</tt>'. You must ensure that `<tt>/tmp</tt>' is
- writable, or that the socket is created in some other place by
- setting `<tt>socket-file</tt>' in the configuration.
-</p>
-
-<sect1>Error sending to an alias: qmail-queue exited with an error!
-<p>
- If qmail reports "deferral: vdeliver: qmail-queue exited with an
- error!", check where your qmail is installed. On Debian systems,
- you will need to type "<tt>ls -s /usr/sbin /var/qmail/bin</tt>",
- since they've installed the qmail binaries into /usr/sbin.
-</p>
-
-<sect1>Running vmailmgrd fails.
-<p>
- When run by itself, vmailmgrd will report "<tt>Timed out waiting for
- remote</tt>". vmailmgrd needs to be run from unixserver, part of
- the ucspi-unix package available at <url
- url="http://em.ca/~bruceg/ucspi-unix/">.
-</p>
-
-<sect1>POP3 or IMAP logins take 30 seconds or longer.
-<p>
- This is almost certainly a DNS lookup problem. Make sure that DNS
- lookups aren't timing out, that lookups on all your IP addresses
- aren't failing, and that you can lookup remote addresses as well.
-</p>
-
-<p>
- If you are using 'tcpserver' for the head end to qmail-pop3d, then you
- may want to the following 2 switches to the command line: <tt>-R</tt>
- and <tt>-H</tt>. The former prevents tcpserver from attempting to
- obtain TCPREMOTEINFO from the remote host. This eliminates an "ident"
- lookup that may be being blocked or silently dropped by a firewall.
- The latter prevents tcpserver from doing a DNS lookup on the remote
- IP.
-</p>
-
-<sect>Miscellaneous
-
-<sect1>How do I get in contact with other users?
-<p>
- There is a mailing list run by the author. To subscribe, send an
- e-mail (content and subject line is ignored) to <url
- url="mailto:vmailmgr-subscribe@lists.em.ca">.
-<p>
- Remember that if you have a problem that you want us to diagnose, we
- need to know the following important details:
-<enum>
- <item>The output of `<tt>qmail-showctl</tt>`
- <item>The contents of the vmailmgrd log for the attempt you are
- trying to diagnose
- <item>The contents of the qmail and smtpd logs for a failed delivery
- attempt
- <item>The contents of the pop3d logs for a failed login attempt
- <item>The complete command line with which vmailmgrd and qmail-pop3d
- was invoked
-</enum>
- Please do not contact the author directly with vmailmgr questions.
-</p>
-
-<sect1>Are development version of vmailmgr available anywhere?
-<p>
- Yes, they are available through anonymous CVS.
- To access the CVS server, set your <tt>CVSROOT</tt> to
- <tt>:pserver:cvs@bruce-guenter.dyndns.org:/CVS</tt>, log in with an
- empty password, and check out the <tt>vmailmgr</tt> module.
-</p>
-
-<sect1>How does incoming email get handled?
-<p>
- Incoming email is first received by the qmail SMTP daemon and
- inserted into the qmail queue. Then `<tt>qmail-send</tt>' examines
- the email envelope (which details the recipient address or
- addresses) to determine how to dispatch the message. It looks up the
- domain name of each recipient in
- `<tt>/var/qmail/control/virtualdomains</tt>', and prefixes the user
- name with the string that it finds. It then looks up the resulting
- user name in the system password table (or in
- `<tt>/var/qmail/users/cdb</tt>' if it exists) to find the base user
- name and home directory (which I will call `<tt>$HOME</tt>'). It
- then looks for the file `<tt>$HOME/.qmail-VIRTUAL</tt>'. If that's
- not found, it looks for the file `<tt>$HOME/.qmail-default</tt>',
- which will contain an instruction to pipe the message to
- `<tt>vdeliver</tt>'.
-<p>
- This is where vmailmgr first enters the picture. The virtual user
- name is sent to `vdeliver' through environment variables. It looks
- in the configuration files (in `<tt>$HOME/.vmailmgr</tt>' and then
- in `<tt>/etc/vmailmgr</tt>') to determine the location of the
- password table, and looks up the virtual user name in the table to
- determine delivery instructions. If the name is not found, the
- message is bounced and delivery ends. Otherwise, it then looks for
- the `<tt>vdeliver-predeliver</tt>' script in the configuration
- directories (in reverse order) and executes any that are found. It
- then delivers the message to all the listed destinations -- an
- optional mailbox directory and zero or more forwarding
- addresses. Finally, it looks for the `<tt>vdeliver-postdeliver</tt>'
- script and executes any that are found.
-</p>
-
-<sect1>How does outgoing email get handled?
-<p>
- Outgoing email is not handled by vmailmgr. For details on outgoing
- email handling, check the qmail documentation.
-</p>
-
-<sect1>What about security of CGI and PHP functions?
-<p>
-The socket used by the daemon is a UNIX-domain socket (as opposed to
-Internet-domain), meaning you need local access on the computer to
-open up a connection. The path for this socket is run-time
-configurable.
-</p>
-<p>
-The daemon forks a new connection for each connection, up to a
-configurable maximum (at which point it stops listening, IIRC, I
-should verify this). The idea of threading has been completely
-discarded to avoid a bug in a command creeping in and makeing the
-whole server break.
-</p>
-<p>
-The protocol spoken over the socket is explicitly bounded to at most
-64kB of data, and all data is prefixed by a size. Static-sized
-buffers are only used with static-sized reads, and therefore can't be
-overflowed with stack-smashing tricks.
-</p>
-<p>
-The daemon commands setuid to the appropriate user as soon as the base
-user has been verified, to avoid doing any more than necessary as
-root, as well as to avoid the possibility of tricking the daemon into
-reading a file another user wouldn't normally have access to.
-</p>
-<p>
-To help avoid DoS on the local computer, a 1-second alarm is set as
-soon as the connection is received, and is only cleared once all the
-data has been read. If it takes longer than 1 second to read the data
-from the socket, the server process exits.
-</p>
-
-<sect1>What are the differences between vmailmgr and vpopmail?
-<p>
- The primary difference between vmailmgr and vpopmail is the use of
- base users. With vmailmgr there is one base user for each virtual
- domain. With vpopmail, there is one base user for the entire
- virtual domain system.
-</p>
-
-</article>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/FAQ.texi Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,396 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename FAQ.info
+@settitle Vmailmgr FAQ
+@setchapternewpage off
+@paragraphindent 5
+@footnotestyle end
+@c %**end of header
+
+@ifinfo
+Copyright @copyright{} 1998 Bruce Guenter
+@end ifinfo
+
+@titlepage
+@title Vmailmgr FAQ
+@author Bruce Guenter
+@author Dan Kuykendall
+@subtitle @today{}
+@end titlepage
+
+@ifinfo
+VMailMgr Frequently Asked Questions.
+@end ifinfo
+
+@c ****************************************************************************
+@chapter Building and Installing
+
+@section What compiler and libraries do I need to build vmailmgr?
+
+You will need a working C and C++ compiler and linker. You will not
+need any C++ libraries. The package is being developed under Linux
+using egcs and glibc version 2, and may rely on some gcc/g++
+extensions.
+
+@section Does vmailmgr work with shadow passwords?
+
+This package should work without changes both with and without
+shadow passwords as long as the shadow password libraries are
+present when this package is built. The @code{configure} script will
+detect what method of shadow passwords are being used and the
+programs will be built accordingly.
+
+@section Does vmailmgr support IMAP?
+
+Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
+make them work, the steps are in the next section of this file.
+
+@c ****************************************************************************
+@chapter Setup and Configuration
+
+@section What other software is needed to run vmailmgr?
+
+VMailMgr is based around qmail's handling of virtual users, and as
+such requires qmail for its operation. If you wish to use the @code{init}
+file to start/stop @code{vmailmgrd} or are installing the RPM package,
+supervise-scripts version 2.2 (or later, available at
+@uref{http://untroubled.org/supervise-scripts/})
+and daemontools 0.60 (or later, available at
+@uref{http://untroubled.org/rpms/daemontools/})
+packages are required. If you need to use the @code{vmailmgrd} daemon, you
+will also need the @code{unixserver} program, from the ucspi-unix package,
+available at
+@uref{http://untroubled.org/ucspi-unix/}.
+
+If you want to use the autoresponse feature, I recommend the use of
+my own autoresponder program, @code{qmail-autoresponder} available
+at
+@uref{http://untroubled.org/qmail-autoresponder/}.
+
+@section How do I record the output of vmailmgrd with syslog?
+
+Output from @code{vmailmgrd} can be recorded by either @code{splogger} (part of
+qmail) or with the logger that comes with several flavours of UNIX. To use
+@code{splogger}, pipe the output of @code{vmailmgrd} into the command
+@samp{splogger vmailmgrd}. This will timestamp each entry and tag them with the
+word @samp{vmailmgrd}. By default, @code{splogger} logs to facility 2 (mail). To
+use @code{logger}, pipe the output of @code{vmailmgrd} into the command
+@samp{logger -t vmailmgrd -p mail.notice}.
+See the respective man pages of these two programs for more information.
+
+Note: The use of @code{syslog} for logging messages is strongly discouraged
+due to problems with inefficent and buggy implementation of @code{syslog}.
+
+@section How do I record the output of vmailmgrd with multilog?
+
+Make a directory into which the output will go, for example
+@file{/var/log/vmailmgrd}. Pipe the output of @code{vmailmgrd} into the
+command @samp{multilog t /var/log/vmailmgrd}. See the
+documentation for @code{multilog} for more information on how to adjust its
+output.
+
+@section How do I setup VMmailMgr IMAP support?
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto
+detect VMailMgr. This means that some minor work is required for
+making the two work together.
+
+@itemize @bullet
+@item
+You must copy @file{/usr/local/bin/authvmailmgr} to
+@file{/usr/lib/courier-imap/libexec/authlib/authvmailmgr}.
+
+@item
+Then modify the @code{AUTHMODULES} statement in
+@file{/usr/lib/courier-imap/etc/imapd.config} and add
+@kbd{authvmailmgr} as the first authentication module.
+
+@end itemize
+
+@section Upgrading from Previous Versions
+
+If you are upgrading from an older version, you may need to make
+some changes to your system before or after doing the upgrade. The
+following table outlines the necessary changes. Note that you need
+to follow the instructions for all later versions of the software.
+
+@subsection Upgrading from version 0.96.6 or earlier
+
+The @code{vmailmgrd} daemon needs to be run by unixserver, as opposed
+to being a stand-alone program previously.
+
+@subsection Upgrading from version 0.96.2 or earlier
+
+Make sure the @code{vmailmgrd} daemon and vmailmgr CGIs are disabled
+before upgrading, and upgrade them along with the main
+package. Changes were made to the daemon interface that will
+cause adding users and aliases to flake out. As well, the
+listdomain interface was completely redone.
+
+@subsection Upgrading from version 0.94 or earlier, using the POP bulletin facility
+
+The POP bulletin facility has been moved into a stand-alone
+program that needs to be executed through @code{checkvpw-postsetuid}.
+
+@subsection Upgrading from version 0.93 or earlier
+
+If you do not use the CGIs, you no longer need to run the
+@code{vmailmgrd} daemon.
+
+@subsection Upgrading from version 0.92.2 or earlier
+
+The configuration changed from reading a single file to reading a
+set of files in a directory. Read the configuration documentation
+and run the program @code{vconf2dir}.
+
+@subsection Upgrading from version 0.90.2 or earlier
+
+The name of the user to which mail to an unknown user is
+delivered changed from @samp{*} to @samp{+}. If you were using this
+feature, either change all your domains to accomodate this
+change, or set the @file{default-username} config file to contain @samp{*}.
+
+@subsection Upgrading from version 0.88 or earlier
+
+The file format of the virtual password tables has changed from
+plain text files to CDB tables. You will need to suspend local
+deliveries before upgrading, and run the program @code{vpasswd2cdb} as
+each base user after upgrading, before re-enabling local
+deliveries.
+
+@section How do I configure qmail+patches to use vmailmgr for POP?
+
+Put the string @kbd{checkvpw} into the file
+@file{/etc/qmail/control/checkpassword} and restart @code{qmail-pop3d} by
+typing @samp{/etc/rc.d/init.d/pop3d restart}.
+
+@section How do I allow clients to relay SMTP through me?
+
+Download and install relay-ctrl from
+@uref{http://untroubled.org/relay-ctrl/}.
+It works with vmailmgr, for both POP3 and IMAP clients.
+
+@c ****************************************************************************
+@chapter Usage
+
+@section I can only use one IP address. How do I log in as a virtual user?
+
+There are two ways to log in without using multiple IP addresses.
+
+@itemize @bullet
+@item
+The first way is to log in as @samp{user@var{SEP}virtual.domain.org}, where
+@samp{user} is the mailbox name of the virtual user, @var{SEP} is one of
+@samp{@@} or @samp{:} (by default, this is configurable in the
+@file{/etc/vmailmgr/} directory), and @samp{virtual.domain.org} is the virtual
+domain's name, as listed in @file{/var/qmail/control/virtualdomains}.
+
+@item
+The second way is to use the internal form of the mailbox name --
+that is, @samp{baseuser-user}, where @samp{user} is the same
+as above, and @samp{baseuser} is the username of the managing
+user.
+
+For example, @file{/var/qmail/control/virtualdomains} contains
+@samp{testdomain.org:testuser}, user @samp{testuser} exists,
+and has set up a virtual mailbox with the name @samp{v}.
+The @var{separators} variable in @file{/etc/vmailmgr/}
+contains @samp{@@:}. This virtual user
+could log in as @samp{v@@testdomain.org},
+@samp{v:testdomain.org}, or @samp{testuser-v}.
+@end itemize
+
+@section How do I get all misdirected mail sent to me?
+
+In the @file{vmailmgr/} configuration directory, there is an
+entry called @file{default-username}. If mail to a virtual
+domain does not match any users or aliases in that domain, it is
+delivered to the name listed in this configuration item if it exists
+(which defaults to @samp{+}). To make this deliver to you,
+simply type:
+
+@example
+vaddalias + me
+@end example
+
+@section How can I put system accounts in a virtual domain?
+
+System accounts are those listed in @file{/etc/password} (or
+@file{/var/qmail/users/cdb}).
+The system accounts are accessable, either though SMTP or POP3 or IMAP, as
+@samp{name@@@var{DOMAIN}}, where @var{DOMAIN} is listed in
+@file{/var/qmail/control/locals}.
+
+Virtual accounts exist only as an artifact of vmailmgr management.
+They are accessable as @samp{name@@@var{DOMAIN}}, where @var{DOMAIN} is listed
+in @file{/var/qmail/control/virtualdomains}.
+
+You @strong{cannot} mix accounts within a domain between system and virtual
+domains. If the domain is in @file{control/locals}, all accounts for that
+domain must be system accounts. If it is in @file{control/virtualdomains}, all
+accounts for that domain must be virtual accounts. Also, @file{control/locals}
+overrides @file{control/virtualdomains}: if the domain is in @file{locals},
+@file{virtualdomains} is ignored.
+
+As an aside, if the domain is neither in @file{locals} nor in
+@file{virtualdomains}, qmail will reject incoming messages, and vmailmgr will
+treat it as local.
+
+@c ****************************************************************************
+@chapter Troubleshooting
+
+@section Bind error message from @code{vmailmgrd}.
+
+If @code{vmailmgrd} reports
+@quotation
+vmailmgrd: bind: no such file or directory
+@end quotation
+when you start it up, it means that can't create its socket file. By default,
+it will try to create the socket file @file{/tmp/.vmailmgrd}. You must ensure
+that @file{/tmp/} is writable, or that the socket is created in some other place
+by setting @var{socket-file} in the configuration.
+
+@section Error sending to an alias: @code{qmail-queue} exited with an error!
+
+If qmail reports
+@quotation
+deferral: vdeliver: qmail-queue exited with an error!
+@end quotation
+check where your qmail is installed. On Debian systems,
+you will need to type @samp{ls -s /usr/sbin /var/qmail/bin},
+since they've installed the qmail binaries into @file{/usr/sbin}.
+
+@section Running @code{vmailmgrd} fails.
+
+When run by itself, @code{vmailmgrd} will report
+@quotation
+Timed out waiting for remote
+@end quotation
+@code{vmailmgrd} needs to be run from @code{unixserver}, part of the ucspi-unix
+package available at
+@uref{http://untroubled.org/ucspi-unix/}.
+
+@section POP3 or IMAP logins take 30 seconds or longer.
+
+This is almost certainly a DNS lookup problem. Make sure that DNS
+lookups aren't timing out, that lookups on all your IP addresses
+aren't failing, and that you can lookup remote addresses as well.
+
+If you are using @code{tcpserver} for the head end to @code{qmail-pop3d}, then
+you may want to add the following 2 switches to the command line: @samp{-R} and
+@samp{-H}. The former prevents @code{tcpserver} from attempting to obtain
+@var{TCPREMOTEINFO} from the remote host. This eliminates an @code{ident}
+lookup that may be being blocked or silently dropped by a firewall. The latter
+prevents @code{tcpserver} from doing a DNS lookup on the remote IP.
+
+@c ****************************************************************************
+@chapter Miscellaneous
+
+@section How do I get in contact with other users?
+
+There is a mailing list run by the author. To subscribe, send an
+e-mail (content and subject line is ignored) to
+@email{vmailmgr-subscribe@@lists.untroubled.org}.
+
+Remember that if you have a problem that you want us to diagnose, we
+need to know the following important details:
+@enumerate
+@item
+The output of @code{qmail-showctl}
+@item
+The contents of the @code{vmailmgrd} log for the attempt you are
+trying to diagnose
+@item
+The contents of the qmail and smtpd logs for a failed delivery
+attempt
+@item
+The contents of the pop3d logs for a failed login attempt
+@item
+The complete command line with which @code{vmailmgrd} and @code{qmail-pop3d}
+was invoked
+@end enumerate
+
+Please do not contact the author directly with vmailmgr questions.
+
+@section Are development version of vmailmgr available anywhere?
+
+Yes, they are available through anonymous CVS.
+To access the CVS server, set your @code{CVSROOT} to
+@kbd{:pserver:cvs@@bruce-guenter.dyndns.org:/CVS}, log in with an
+empty password, and check out the @code{vmailmgr} module.
+
+@section How does incoming email get handled?
+
+Incoming email is first received by the qmail SMTP daemon and
+inserted into the qmail queue. Then @code{qmail-send} examines
+the email envelope (which details the recipient address or
+addresses) to determine how to dispatch the message. It looks up the
+domain name of each recipient in
+@file{/var/qmail/control/virtualdomains}, and prefixes the user
+name with the string that it finds. It then looks up the resulting
+user name in the system password table (or in
+@file{/var/qmail/users/cdb} if it exists) to find the base user
+name and home directory (which I will call @code{$HOME}). It
+then looks for the file @file{@code{$HOME}/.qmail-VIRTUAL}. If that's
+not found, it looks for the file @file{@code{$HOME}/.qmail-default},
+which will contain an instruction to pipe the message to
+@code{vdeliver}.
+
+This is where vmailmgr first enters the picture. The virtual user
+name is sent to @code{vdeliver} through environment variables. It looks
+in the configuration files (in @file{@code{$HOME}/.vmailmgr} and then
+in @file{/etc/vmailmgr}) to determine the location of the
+password table, and looks up the virtual user name in the table to
+determine delivery instructions. If the name is not found, the
+message is bounced and delivery ends. Otherwise, it then looks for
+the @code{vdeliver-predeliver} script in the configuration
+directories (in reverse order) and executes any that are found. It
+then delivers the message to all the listed destinations -- an
+optional mailbox directory and zero or more forwarding
+addresses. Finally, it looks for the @code{vdeliver-postdeliver}
+script and executes any that are found.
+
+@section How does outgoing email get handled?
+
+Outgoing email is not handled by vmailmgr. For details on outgoing
+email handling, check the qmail documentation.
+
+@section What about security of CGI and PHP functions?
+
+The socket used by the daemon is a UNIX-domain socket (as opposed to
+Internet-domain), meaning you need local access on the computer to
+open up a connection. The path for this socket is run-time
+configurable.
+
+The daemon forks a new connection for each connection, up to a
+configurable maximum (at which point it stops listening, IIRC, I
+should verify this). The idea of threading has been completely
+discarded to avoid a bug in a command creeping in and making the
+whole server break.
+
+The protocol spoken over the socket is explicitly bounded to at most
+64kB of data, and all data is prefixed by a size. Static-sized
+buffers are only used with static-sized reads, and therefore can't be
+overflowed with stack-smashing tricks.
+
+The daemon commands setuid to the appropriate user as soon as the base
+user has been verified, to avoid doing any more than necessary as
+root, as well as to avoid the possibility of tricking the daemon into
+reading a file another user wouldn't normally have access to.
+
+To help avoid DoS on the local computer, a 1-second alarm is set as
+soon as the connection is received, and is only cleared once all the
+data has been read. If it takes longer than 1 second to read the data
+from the socket, the server process exits.
+
+@section What are the differences between vmailmgr and vpopmail?
+
+The primary difference between vmailmgr and vpopmail is the use of
+base users. With vmailmgr there is one base user for each virtual
+domain. With vpopmail, there is one base user for the entire
+virtual domain system.
+
+@contents
+
+@bye
+
--- a/doc/FAQ.txt Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/FAQ.txt Sun Jan 20 00:22:09 2008 +0100
@@ -1,396 +1,572 @@
- VMailMgr FAQ
- Bruce Guenter <mailto:bruceg@em.ca>, Dan Kuykendall
- <mailto:dan@kuykendall.org>
- v1.0, 23 April 2000
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ Copyright (C) 1998 Bruce Guenter
- VMailMgr Frequently Asked Questions.
- ______________________________________________________________________
+ VMailMgr Frequently Asked Questions.
+
+ 1. Building and Installing
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- Table of Contents
-
+1.1 What compiler and libraries do I need to build vmailmgr?
- 1. Building and Installing
+ You will need a working C and C++ compiler and linker. You will not
+ need any C++ libraries. The package is being developed under Linux
+ using egcs and glibc version 2, and may rely on some gcc/g++
+ extensions.
+ _________________________________________________________________
- 1.1 What compiler and libraries do I need to build vmailmgr?
- 1.2 Does vmailmgr work with shadow passwords?
- 1.3 Does vmailmgr support IMAP?
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.2 Does vmailmgr work with shadow passwords?
- 2. Setup and Configuration
+ This package should work without changes both with and without shadow
+ passwords as long as the shadow password libraries are present when
+ this package is built. The configure script will detect what method of
+ shadow passwords are being used and the programs will be built
+ accordingly.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.3 Does vmailmgr support IMAP?
- 2.1 What other software is needed to run vmailmgr?
- 2.2 How do I record the output of vmailmgrd with syslog?
- 2.3 How do I record the output of vmailmgrd with multilog?
- 2.4 How do I setup VMmailMgr IMAP support?
- 2.5 Upgrading from Previous Versions
- 2.6 How do I configure qmail+patches to use vmailmgr for POP?
- 2.7 How do I allow clients to relay SMTP through me?
+ Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
+ make them work, the steps are in the next section of this file.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 3. Usage
+ 2. Setup and Configuration
+ _________________________________________________________________
- 3.1 I can only use one IP address. How do I log in as a virtual user?
- 3.2 How do I get all misdirected mail sent to me?
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 4. Troubleshooting
+2.1 What other software is needed to run vmailmgr?
- 4.1 Bind error message from vmailmgrd.
- 4.2 Error sending to an alias: qmail-queue exited with an error!
- 4.3 Running vmailmgrd fails.
- 4.4 POP3 or IMAP logins take 30 seconds or longer.
+ VMailMgr is based around qmail's handling of virtual users, and as
+ such requires qmail for its operation. If you wish to use the init
+ file to start/stop vmailmgrd or are installing the RPM package,
+ supervise-scripts version 2.2 (or later, available at
+ http://untroubled.org/supervise-scripts/) and daemontools 0.60 (or
+ later, available at http://untroubled.org/rpms/daemontools/) packages
+ are required. If you need to use the vmailmgrd daemon, you will also
+ need the unixserver program, from the ucspi-unix package, available at
+ http://untroubled.org/ucspi-unix/.
- 5. Miscellaneous
+ If you want to use the autoresponse feature, I recommend the use of my
+ own autoresponder program, qmail-autoresponder available at
+ http://untroubled.org/qmail-autoresponder/.
+ _________________________________________________________________
- 5.1 How do I get in contact with other users?
- 5.2 Are development version of vmailmgr available anywhere?
- 5.3 How does incoming email get handled?
- 5.4 How does outgoing email get handled?
- 5.5 What about security of CGI and PHP functions?
- 5.6 What are the differences between vmailmgr and vpopmail?
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.2 How do I record the output of vmailmgrd with syslog?
-
- ______________________________________________________________________
+ Output from vmailmgrd can be recorded by either splogger (part of
+ qmail) or with the logger that comes with several flavours of UNIX. To
+ use splogger, pipe the output of vmailmgrd into the command `splogger
+ vmailmgrd'. This will timestamp each entry and tag them with the word
+ `vmailmgrd'. By default, splogger logs to facility 2 (mail). To use
+ logger, pipe the output of vmailmgrd into the command `logger -t
+ vmailmgrd -p mail.notice'. See the respective man pages of these two
+ programs for more information.
- 11.. BBuuiillddiinngg aanndd IInnssttaalllliinngg
-
- 11..11.. WWhhaatt ccoommppiilleerr aanndd lliibbrraarriieess ddoo II nneeeedd ttoo bbuuiilldd vvmmaaiillmmggrr??
+ Note: The use of syslog for logging messages is strongly discouraged
+ due to problems with inefficent and buggy implementation of syslog.
+ _________________________________________________________________
- You will need a working C and C++ compiler and linker. You will not
- need any C++ libraries. The package is being developed under Linux
- using egcs and glibc version 2, and may rely on some gcc/g++
- extensions.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.3 How do I record the output of vmailmgrd with multilog?
- 11..22.. DDooeess vvmmaaiillmmggrr wwoorrkk wwiitthh sshhaaddooww ppaasssswwoorrddss??
+ Make a directory into which the output will go, for example
+ `/var/log/vmailmgrd'. Pipe the output of vmailmgrd into the command
+ `multilog t /var/log/vmailmgrd'. See the documentation for multilog
+ for more information on how to adjust its output.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.4 How do I setup VMmailMgr IMAP support?
- This package should work without changes both with and without shadow
- passwords as long as the shadow password libraries are present when
- this package is built. The `configure' script will detect what method
- of shadow passwords are being used and the programs will be built
- accordingly.
+ VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto detect
+ VMailMgr. This means that some minor work is required for making the
+ two work together.
+
+ * You must copy `/usr/local/bin/authvmailmgr' to
+ `/usr/lib/courier-imap/libexec/authlib/authvmailmgr'.
+ * Then modify the AUTHMODULES statement in
+ `/usr/lib/courier-imap/etc/imapd.config' and add authvmailmgr as
+ the first authentication module.
+ _________________________________________________________________
- 11..33.. DDooeess vvmmaaiillmmggrr ssuuppppoorrtt IIMMAAPP??
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.5 Upgrading from Previous Versions
- Yes, vmailmgr supports Courier-IMAP. Some minor steps are needed to
- make them work, the steps are in the next section of this file.
-
- 22.. SSeettuupp aanndd CCoonnffiigguurraattiioonn
-
- 22..11.. WWhhaatt ootthheerr ssooffttwwaarree iiss nneeeeddeedd ttoo rruunn vvmmaaiillmmggrr??
+ If you are upgrading from an older version, you may need to make some
+ changes to your system before or after doing the upgrade. The
+ following table outlines the necessary changes. Note that you need to
+ follow the instructions for all later versions of the software.
+ _________________________________________________________________
- VMailMgr is based around qmail's handling of virtual users, and as
- such requires qmail for its operation. If you wish to use the `init'
- file to start/stop vmailmgrd or are installing the RPM package,
- supervise-scripts version 2.2 (or later, available at
- <http://em.ca/~bruceg/supervise-scripts/>) and daemontools 0.60 (or
- later, available at <http://em.ca/~bruceg/rpms/daemontools/>)
- packages are required. If you need to use the vmailmgrd daemon, you
- will also need the unixserver program, from the ucspi-unix package,
- available at <http://em.ca/~bruceg/ucspi-unix/>.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 2.5.1 Upgrading from version 0.96.6 or earlier
+
+ The vmailmgrd daemon needs to be run by unixserver, as opposed to
+ being a stand-alone program previously.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 2.5.2 Upgrading from version 0.96.2 or earlier
- If you want to use the autoresponse feature, I recommend the use of my
- own autoresponder program, qmail-autoresponder available at
- <http://em.ca/~bruceg/qmail-autoresponder/>.
+ Make sure the vmailmgrd daemon and vmailmgr CGIs are disabled before
+ upgrading, and upgrade them along with the main package. Changes were
+ made to the daemon interface that will cause adding users and aliases
+ to flake out. As well, the listdomain interface was completely redone.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 22..22.. HHooww ddoo II rreeccoorrdd tthhee oouuttppuutt ooff vvmmaaiillmmggrrdd wwiitthh ssyysslloogg??
+ 2.5.3 Upgrading from version 0.94 or earlier, using the POP bulletin facility
+
+ The POP bulletin facility has been moved into a stand-alone program
+ that needs to be executed through checkvpw-postsetuid.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- Output from vmailmgrd can be recorded by either splogger (part of
- qmail) or with the logger that comes with several flavours of UNIX. To
- use splogger, pipe the output of vmailmgrd into the command `splogger
- vmailmgrd'. This will timestamp each entry and tag them with the word
- `vmailmgrd'. By default, splogger logs to facility 2 (mail). To use
- logger, pipe the output of vmailmgrd into the comamand `logger -t
- vmailmgrd -p mail.notice'. See the respective man pages of these two
- programs for more information.
+ 2.5.4 Upgrading from version 0.93 or earlier
+
+ If you do not use the CGIs, you no longer need to run the vmailmgrd
+ daemon.
+ _________________________________________________________________
- Note: The use of syslog for logging messages is strongly discouraged
- due to problems with inefficent and buggy implementation of syslog.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 2.5.5 Upgrading from version 0.92.2 or earlier
- 22..33.. HHooww ddoo II rreeccoorrdd tthhee oouuttppuutt ooff vvmmaaiillmmggrrdd wwiitthh mmuullttiilloogg??
+ The configuration changed from reading a single file to reading a set
+ of files in a directory. Read the configuration documentation and run
+ the program vconf2dir.
+ _________________________________________________________________
- Make a directory into which the output will go, for example
- `/var/log/vmailmgrd'. Pipe the output of vmailmgrd into the command
- `multilog t /var/log/vmailmgrd'. See the documentation for multilog
- for more information on how to adjust its output.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 22..44.. HHooww ddoo II sseettuupp VVMMmmaaiillMMggrr IIMMAAPP ssuuppppoorrtt??
+ 2.5.6 Upgrading from version 0.90.2 or earlier
- VMailMgr supports Courier-IMAP, but Courier-IMAP does not auto detect
- VMailMgr. This means that some minor work is required for making the
- two work together.
+ The name of the user to which mail to an unknown user is delivered
+ changed from `*' to `+'. If you were using this feature, either change
+ all your domains to accomodate this change, or set the
+ `default-username' config file to contain `*'.
+ _________________________________________________________________
- +o You must copy `/usr/local/bin/authvmailmgr` to `/usr/lib/courier-
- imap/libexec/authlib/authvmailmgr`.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 2.5.7 Upgrading from version 0.88 or earlier
- +o Then modify the `AUTHMODULES` statement in `/usr/lib/courier-
- imap/etc/imapd.config` and add `authvmailmgr` as the first
- authentication module.
+ The file format of the virtual password tables has changed from plain
+ text files to CDB tables. You will need to suspend local deliveries
+ before upgrading, and run the program vpasswd2cdb as each base user
+ after upgrading, before re-enabling local deliveries.
+ _________________________________________________________________
- 22..55.. UUppggrraaddiinngg ffrroomm PPrreevviioouuss VVeerrssiioonnss
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.6 How do I configure qmail+patches to use vmailmgr for POP?
- If you are upgrading from an older version, you may need to make some
- changes to your system before or after doing the upgrade. The
- following table outlines the necessary changes. Note that you need to
- follow the instructions for all later versions of the software.
+ Put the string checkvpw into the file
+ `/etc/qmail/control/checkpassword' and restart qmail-pop3d by typing
+ `/etc/rc.d/init.d/pop3d restart'.
+ _________________________________________________________________
- If you are upgrading from version:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 00..9966..66 oorr eeaarrlliieerr
- The `vmailmgrd' daemon needs to be run by unixserver, as opposed
- to being a stand-alone program previously.
+2.7 How do I allow clients to relay SMTP through me?
- 00..9966..22 oorr eeaarrlliieerr
- Make sure the `vmailmgrd' daemon and vmailmgr CGIs are disabled
- before upgrading, and upgrade them along with the main package.
- Changes were made to the daemon interface that will cause adding
- users and aliases to flake out. As well, the listdomain
- interface was completely redone.
+ Download and install relay-ctrl from
+ http://untroubled.org/relay-ctrl/. It works with vmailmgr, for both
+ POP3 and IMAP clients.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 3. Usage
+ _________________________________________________________________
-
- 00..9944 oorr eeaarrlliieerr,, uussiinngg tthhee PPOOPP bbuulllleettiinn ffaacciilliittyy
- The POP bulletin facility has been moved into a stand-alone
- program that needs to be executed through `checkvpw-postsetuid'.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+3.1 I can only use one IP address. How do I log in as a virtual user?
- 00..9933 oorr eeaarrlliieerr
- If you do not use the CGIs, you no longer need to run the
- `vmailmgrd' daemon.
-
+ There are two ways to log in without using multiple IP addresses.
- 00..9922..22 oorr eeaarrlliieerr
- The configuration changed from reading a single file to reading
- a set of files in a directory. Read the configuration
- documentation and run the program `vconf2dir'.
-
+ * The first way is to log in as `userSEPvirtual.domain.org', where
+ `user' is the mailbox name of the virtual user, SEP is one of `@'
+ or `:' (by default, this is configurable in the `/etc/vmailmgr/'
+ directory), and `virtual.domain.org' is the virtual domain's name,
+ as listed in `/var/qmail/control/virtualdomains'.
+ * The second way is to use the internal form of the mailbox name --
+ that is, `baseuser-user', where `user' is the same as above, and
+ `baseuser' is the username of the managing user.
+ For example, `/var/qmail/control/virtualdomains' contains
+ `testdomain.org:testuser', user `testuser' exists, and has set up
+ a virtual mailbox with the name `v'. The separators variable in
+ `/etc/vmailmgr/' contains `@:'. This virtual user could log in as
+ `v@testdomain.org', `v:testdomain.org', or `testuser-v'.
+ _________________________________________________________________
- 00..9900..22 oorr eeaarrlliieerr
- The name of the user to which mail to an unknown user is
- delivered changed from `*' to `+'. If you were using this
- feature, either change all your domains to accomodate this
- change, or set the `default-username' config file to contain
- `*'.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.2 How do I get all misdirected mail sent to me?
+
+ In the `vmailmgr/' configuration directory, there is an entry called
+ `default-username'. If mail to a virtual domain does not match any
+ users or aliases in that domain, it is delivered to the name listed in
+ this configuration item if it exists (which defaults to `+'). To make
+ this deliver to you, simply type:
- 00..8888 oorr eeaarrlliieerr
- The file format of the virtual password tables has changed from
- plain text files to CDB tables. You will need to suspend local
- deliveries before upgrading, and run the program `vpasswd2cdb'
- as each base user after upgrading, before re-enabling local
- deliveries.
+vaddalias + me
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.3 How can I put system accounts in a virtual domain?
- 22..66.. HHooww ddoo II ccoonnffiigguurree qqmmaaiill++ppaattcchheess ttoo uussee vvmmaaiillmmggrr ffoorr PPOOPP??
+ System accounts are those listed in `/etc/password' (or
+ `/var/qmail/users/cdb'). The system accounts are accessable, either
+ though SMTP or POP3 or IMAP, as `name@DOMAIN', where DOMAIN is listed
+ in `/var/qmail/control/locals'.
+
+ Virtual accounts exist only as an artifact of vmailmgr management.
+ They are accessable as `name@DOMAIN', where DOMAIN is listed in
+ `/var/qmail/control/virtualdomains'.
- Put the string `checkvpw' into the file
- `/etc/qmail/control/checkpassword' and restart pop3d by typing
- `/etc/rc.d/init.d/pop3d restart'.
-
- 22..77.. HHooww ddoo II aallllooww cclliieennttss ttoo rreellaayy SSMMTTPP tthhrroouugghh mmee??
+ You cannot mix accounts within a domain between system and virtual
+ domains. If the domain is in `control/locals', all accounts for that
+ domain must be system accounts. If it is in `control/virtualdomains',
+ all accounts for that domain must be virtual accounts. Also,
+ `control/locals' overrides `control/virtualdomains': if the domain is
+ in `locals', `virtualdomains' is ignored.
- Download and install relay-ctrl from <http://em.ca/~bruceg/relay-
- ctrl/>. It works with vmailmgr, for both POP3 and IMAP clients.
-
- 33.. UUssaaggee
+ As an aside, if the domain is neither in `locals' nor in
+ `virtualdomains', qmail will reject incoming messages, and vmailmgr
+ will treat it as local.
+ _________________________________________________________________
- 33..11.. II ccaann oonnllyy uussee oonnee IIPP aaddddrreessss.. HHooww ddoo II lloogg iinn aass aa vviirrttuuaall
- uusseerr??
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- There are two ways to log in without using multiple IP addresses.
+ 4. Troubleshooting
+ _________________________________________________________________
- The first way is to log in as `userSEPvirtual.domain.org', where
- `user' is the mailbox name of the virtual user, SEP is one of `@' or
- `:' (by default, this is configurable in the `/etc/vmailmgr/'
- directory), and `virtual.domain.org' is the virtual domain's name, as
- listed in `/var/qmail/control/virtualdomains'.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+4.1 Bind error message from vmailmgrd.
+
+ If vmailmgrd reports
+
+ vmailmgrd: bind: no such file or directory
- The second way is to use the internal form of the mailbox name -- that
- is, `baseuser-user', where `user' is the same as above, and `baseuser'
- is the username of the managing user.
+ when you start it up, it means that can't create its socket file. By
+ default, it will try to create the socket file `/tmp/.vmailmgrd'. You
+ must ensure that `/tmp/' is writable, or that the socket is created in
+ some other place by setting socket-file in the configuration.
+ _________________________________________________________________
- Example: `/var/qmail/control/virtualdomains' contains
-
- testdomain.org:testuser
-
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- User `testuser' exists, and has set up a virtual mailbox with the name
- `v'. The `separators' variable in `/etc/vmailmgr/' contains `@:'. This
- virtual user could log in as `v@testdomain.org', `v:testdomain.org',
- or `testuser-v'.
+4.2 Error sending to an alias: qmail-queue exited with an error!
+ If qmail reports
+ deferral: vdeliver: qmail-queue exited with an error!
- 33..22.. HHooww ddoo II ggeett aallll mmiissddiirreecctteedd mmaaiill sseenntt ttoo mmee??
+ check where your qmail is installed. On Debian systems, you will need
+ to type `ls -s /usr/sbin /var/qmail/bin', since they've installed the
+ qmail binaries into `/usr/sbin'.
+ _________________________________________________________________
- In the `vmailmgr/' configuration directory, there is an entry called
- `default-username'. If mail to a virtual domain does not match any
- users or aliases in that domain, it is delivered to the name listed in
- this configuration item if it exists (which defaults to `+'). To make
- this deliver to you, simply type:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+4.3 Running vmailmgrd fails.
+
+ When run by itself, vmailmgrd will report
+
+ Timed out waiting for remote
- vaddalias + me
-
-
-
- 44.. TTrroouubblleesshhoooottiinngg
+ vmailmgrd needs to be run from unixserver, part of the ucspi-unix
+ package available at http://untroubled.org/ucspi-unix/.
+ _________________________________________________________________
- 44..11.. BBiinndd eerrrroorr mmeessssaaggee ffrroomm vvmmaaiillmmggrrdd..
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- If vmailmgrd reports `vmailmgrd: bind: no such file or directory' when
- you start it up, it means that can't create its socket file. By
- default, it will try to create the socket file `/tmp/.vmailmgrd'. You
- must ensure that `/tmp' is writable, or that the socket is created in
- some other place by setting `socket-file' in the configuration.
+4.4 POP3 or IMAP logins take 30 seconds or longer.
+
+ This is almost certainly a DNS lookup problem. Make sure that DNS
+ lookups aren't timing out, that lookups on all your IP addresses
+ aren't failing, and that you can lookup remote addresses as well.
- 44..22.. EErrrroorr sseennddiinngg ttoo aann aalliiaass:: qqmmaaiill--qquueeuuee eexxiitteedd wwiitthh aann eerrrroorr!!
+ If you are using tcpserver for the head end to qmail-pop3d, then you
+ may want to add the following 2 switches to the command line: `-R' and
+ `-H'. The former prevents tcpserver from attempting to obtain
+ TCPREMOTEINFO from the remote host. This eliminates an ident lookup
+ that may be being blocked or silently dropped by a firewall. The
+ latter prevents tcpserver from doing a DNS lookup on the remote IP.
+ _________________________________________________________________
- If qmail reports "deferral: vdeliver: qmail-queue exited with an
- error!", check where your qmail is installed. On Debian systems, you
- will need to type "ls -s /usr/sbin /var/qmail/bin", since they've
- installed the qmail binaries into /usr/sbin.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- 44..33.. RRuunnnniinngg vvmmaaiillmmggrrdd ffaaiillss..
+ 5. Miscellaneous
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- When run by itself, vmailmgrd will report "Timed out waiting for
- remote". vmailmgrd needs to be run from unixserver, part of the
- ucspi-unix package available at <http://em.ca/~bruceg/ucspi-unix/>.
+5.1 How do I get in contact with other users?
- 44..44.. PPOOPP33 oorr IIMMAAPP llooggiinnss ttaakkee 3300 sseeccoonnddss oorr lloonnggeerr..
+ There is a mailing list run by the author. To subscribe, send an
+ e-mail (content and subject line is ignored) to
+ vmailmgr-subscribe@lists.untroubled.org.
- This is almost certainly a DNS lookup problem. Make sure that DNS
- lookups aren't timing out, that lookups on all your IP addresses
- aren't failing, and that you can lookup remote addresses as well.
+ Remember that if you have a problem that you want us to diagnose, we
+ need to know the following important details:
+ 1. The output of qmail-showctl
+ 2. The contents of the vmailmgrd log for the attempt you are trying
+ to diagnose
+ 3. The contents of the qmail and smtpd logs for a failed delivery
+ attempt
+ 4. The contents of the pop3d logs for a failed login attempt
+ 5. The complete command line with which vmailmgrd and qmail-pop3d was
+ invoked
- If you are using 'tcpserver' for the head end to qmail-pop3d, then you
- may want to the following 2 switches to the command line: -R and -H.
- The former prevents tcpserver from attempting to obtain TCPREMOTEINFO
- from the remote host. This eliminates an "ident" lookup that may be
- being blocked or silently dropped by a firewall. The latter prevents
- tcpserver from doing a DNS lookup on the remote IP.
- 55.. MMiisscceellllaanneeoouuss
+ Please do not contact the author directly with vmailmgr questions.
+ _________________________________________________________________
- 55..11.. HHooww ddoo II ggeett iinn ccoonnttaacctt wwiitthh ootthheerr uusseerrss??
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+5.2 Are development version of vmailmgr available anywhere?
- There is a mailing list run by the author. To subscribe, send an e-
- mail (content and subject line is ignored) to <mailto:vmailmgr-
- subscribe@lists.em.ca>.
+ Yes, they are available through anonymous CVS. To access the CVS
+ server, set your CVSROOT to
+ :pserver:cvs@bruce-guenter.dyndns.org:/CVS, log in with an empty
+ password, and check out the vmailmgr module.
+ _________________________________________________________________
- Remember that if you have a problem that you want us to diagnose, we
- need to know the following important details:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+5.3 How does incoming email get handled?
- 1. The output of `qmail-showctl`
-
- 2. The contents of the vmailmgrd log for the attempt you are trying to
- diagnose
-
- 3. The contents of the qmail and smtpd logs for a failed delivery
- attempt
+ Incoming email is first received by the qmail SMTP daemon and inserted
+ into the qmail queue. Then qmail-send examines the email envelope
+ (which details the recipient address or addresses) to determine how to
+ dispatch the message. It looks up the domain name of each recipient in
+ `/var/qmail/control/virtualdomains', and prefixes the user name with
+ the string that it finds. It then looks up the resulting user name in
+ the system password table (or in `/var/qmail/users/cdb' if it exists)
+ to find the base user name and home directory (which I will call
+ $HOME). It then looks for the file `$HOME/.qmail-VIRTUAL'. If that's
+ not found, it looks for the file `$HOME/.qmail-default', which will
+ contain an instruction to pipe the message to vdeliver.
- 4. The contents of the pop3d logs for a failed login attempt
+ This is where vmailmgr first enters the picture. The virtual user name
+ is sent to vdeliver through environment variables. It looks in the
+ configuration files (in `$HOME/.vmailmgr' and then in `/etc/vmailmgr')
+ to determine the location of the password table, and looks up the
+ virtual user name in the table to determine delivery instructions. If
+ the name is not found, the message is bounced and delivery ends.
+ Otherwise, it then looks for the vdeliver-predeliver script in the
+ configuration directories (in reverse order) and executes any that are
+ found. It then delivers the message to all the listed destinations --
+ an optional mailbox directory and zero or more forwarding addresses.
+ Finally, it looks for the vdeliver-postdeliver script and executes any
+ that are found.
+ _________________________________________________________________
- 5. The complete command line with which vmailmgrd and qmail-pop3d was
- invoked
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- Please do not contact the author directly with vmailmgr questions.
+5.4 How does outgoing email get handled?
- 55..22.. AArree ddeevveellooppmmeenntt vveerrssiioonn ooff vvmmaaiillmmggrr aavvaaiillaabbllee aannyywwhheerree??
+ Outgoing email is not handled by vmailmgr. For details on outgoing
+ email handling, check the qmail documentation.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+5.5 What about security of CGI and PHP functions?
- Yes, they are available through anonymous CVS. To access the CVS
- server, set your CVSROOT to :pserver:cvs@bruce-
- guenter.dyndns.org:/CVS, log in with an empty password, and check out
- the vmailmgr module.
+ The socket used by the daemon is a UNIX-domain socket (as opposed to
+ Internet-domain), meaning you need local access on the computer to
+ open up a connection. The path for this socket is run-time
+ configurable.
- 55..33.. HHooww ddooeess iinnccoommiinngg eemmaaiill ggeett hhaannddlleedd??
+ The daemon forks a new connection for each connection, up to a
+ configurable maximum (at which point it stops listening, IIRC, I
+ should verify this). The idea of threading has been completely
+ discarded to avoid a bug in a command creeping in and making the whole
+ server break.
- Incoming email is first received by the qmail SMTP daemon and inserted
- into the qmail queue. Then `qmail-send' examines the email envelope
- (which details the recipient address or addresses) to determine how to
- dispatch the message. It looks up the domain name of each recipient in
- `/var/qmail/control/virtualdomains', and prefixes the user name with
- the string that it finds. It then looks up the resulting user name in
- the system password table (or in `/var/qmail/users/cdb' if it exists)
- to find the base user name and home directory (which I will call
- `$HOME'). It then looks for the file `$HOME/.qmail-VIRTUAL'. If that's
- not found, it looks for the file `$HOME/.qmail-default', which will
- contain an instruction to pipe the message to `vdeliver'.
+ The protocol spoken over the socket is explicitly bounded to at most
+ 64kB of data, and all data is prefixed by a size. Static-sized buffers
+ are only used with static-sized reads, and therefore can't be
+ overflowed with stack-smashing tricks.
+
+ The daemon commands setuid to the appropriate user as soon as the base
+ user has been verified, to avoid doing any more than necessary as
+ root, as well as to avoid the possibility of tricking the daemon into
+ reading a file another user wouldn't normally have access to.
+
+ To help avoid DoS on the local computer, a 1-second alarm is set as
+ soon as the connection is received, and is only cleared once all the
+ data has been read. If it takes longer than 1 second to read the data
+ from the socket, the server process exits.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+5.6 What are the differences between vmailmgr and vpopmail?
- This is where vmailmgr first enters the picture. The virtual user name
- is sent to `vdeliver' through environment variables. It looks in the
- configuration files (in `$HOME/.vmailmgr' and then in `/etc/vmailmgr')
- to determine the location of the password table, and looks up the
- virtual user name in the table to determine delivery instructions. If
- the name is not found, the message is bounced and delivery ends.
- Otherwise, it then looks for the `vdeliver-predeliver' script in the
- configuration directories (in reverse order) and executes any that are
- found. It then delivers the message to all the listed destinations --
- an optional mailbox directory and zero or more forwarding addresses.
- Finally, it looks for the `vdeliver-postdeliver' script and executes
- any that are found.
+ The primary difference between vmailmgr and vpopmail is the use of
+ base users. With vmailmgr there is one base user for each virtual
+ domain. With vpopmail, there is one base user for the entire virtual
+ domain system.
+ _________________________________________________________________
+
+ [Top] [Contents] [Index] [ ? ]
+
+ Table of Contents
- 55..44.. HHooww ddooeess oouuttggooiinngg eemmaaiill ggeett hhaannddlleedd??
+ 1. Building and Installing
- Outgoing email is not handled by vmailmgr. For details on outgoing
- email handling, check the qmail documentation.
-
+ 1.1 What compiler and libraries do I need to build vmailmgr?
+ 1.2 Does vmailmgr work with shadow passwords?
+ 1.3 Does vmailmgr support IMAP?
- 55..55.. WWhhaatt aabboouutt sseeccuurriittyy ooff CCGGII aanndd PPHHPP ffuunnccttiioonnss??
-
- The socket used by the daemon is a UNIX-domain socket (as opposed to
- Internet-domain), meaning you need local access on the computer to
- open up a connection. The path for this socket is run-time
- configurable.
+ 2. Setup and Configuration
+ 2.1 What other software is needed to run vmailmgr?
+ 2.2 How do I record the output of vmailmgrd with syslog?
+ 2.3 How do I record the output of vmailmgrd with multilog?
+ 2.4 How do I setup VMmailMgr IMAP support?
+ 2.5 Upgrading from Previous Versions
- The daemon forks a new connection for each connection, up to a
- configurable maximum (at which point it stops listening, IIRC, I
- should verify this). The idea of threading has been completely
- discarded to avoid a bug in a command creeping in and makeing the
- whole server break.
+ 2.5.1 Upgrading from version 0.96.6 or earlier
+ 2.5.2 Upgrading from version 0.96.2 or earlier
+ 2.5.3 Upgrading from version 0.94 or earlier, using the POP
+ bulletin facility
+ 2.5.4 Upgrading from version 0.93 or earlier
+ 2.5.5 Upgrading from version 0.92.2 or earlier
+ 2.5.6 Upgrading from version 0.90.2 or earlier
+ 2.5.7 Upgrading from version 0.88 or earlier
- The protocol spoken over the socket is explicitly bounded to at most
- 64kB of data, and all data is prefixed by a size. Static-sized
- buffers are only used with static-sized reads, and therefore can't be
- overflowed with stack-smashing tricks.
+ 2.6 How do I configure qmail+patches to use vmailmgr for POP?
+ 2.7 How do I allow clients to relay SMTP through me?
+ 3. Usage
+ 3.1 I can only use one IP address. How do I log in as a virtual user?
+ 3.2 How do I get all misdirected mail sent to me?
+ 3.3 How can I put system accounts in a virtual domain?
- The daemon commands setuid to the appropriate user as soon as the base
- user has been verified, to avoid doing any more than necessary as
- root, as well as to avoid the possibility of tricking the daemon into
- reading a file another user wouldn't normally have access to.
+ 4. Troubleshooting
+ 4.1 Bind error message from vmailmgrd.
+ 4.2 Error sending to an alias: qmail-queue exited with an error!
+ 4.3 Running vmailmgrd fails.
+ 4.4 POP3 or IMAP logins take 30 seconds or longer.
- To help avoid DoS on the local computer, a 1-second alarm is set as
- soon as the connection is received, and is only cleared once all the
- data has been read. If it takes longer than 1 second to read the data
- from the socket, the server process exits.
-
- 55..66.. WWhhaatt aarree tthhee ddiiffffeerreenncceess bbeettwweeeenn vvmmaaiillmmggrr aanndd vvppooppmmaaiill??
+ 5. Miscellaneous
+ 5.1 How do I get in contact with other users?
+ 5.2 Are development version of vmailmgr available anywhere?
+ 5.3 How does incoming email get handled?
+ 5.4 How does outgoing email get handled?
+ 5.5 What about security of CGI and PHP functions?
+ 5.6 What are the differences between vmailmgr and vpopmail?
+ _________________________________________________________________
- The primary difference between vmailmgr and vpopmail is the use of
- base users. With vmailmgr there is one base user for each virtual
- domain. With vpopmail, there is one base user for the entire virtual
- domain system.
+ [Top] [Contents] [Index] [ ? ]
+
+ Short Table of Contents
-
+ 1. Building and Installing
+ 2. Setup and Configuration
+ 3. Usage
+ 4. Troubleshooting
+ 5. Miscellaneous
+ _________________________________________________________________
+ [Top] [Contents] [Index] [ ? ]
-
+ About this document
-
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
-
+ The buttons in the navigation panels have the following meaning:
-
-
-
-
-
-
-
+ Button Name Go to From 1.2.3 go to
+ [ < ] Back previous section in reading order 1.2.2
+ [ > ] Forward next section in reading order 1.2.4
+ [ << ] FastBack previous or up-and-previous section 1.1
+ [ Up ] Up up section 1.2
+ [ >> ] FastForward next or up-and-next section 1.3
+ [Top] Top cover (top) of document
+ [Contents] Contents table of contents
+ [Index] Index concept index
+ [ ? ] About this page
-
-
+ where the Example assumes that the current position is at
+ Subsubsection One-Two-Three of a document of the following structure:
+ * 1. Section One
-
+ * 1.1 Subsection One-One
-
+ * ...
-
-
-
+ 1.2 Subsection One-Two
+ * 1.2.1 Subsubsection One-Two-One
+ * 1.2.2 Subsubsection One-Two-Two
+ * 1.2.3 Subsubsection One-Two-Three <== Current Position
+ * 1.2.4 Subsubsection One-Two-Four
-
+ 1.3 Subsection One-Three
+ * ...
+ 1.4 Subsection One-Four
+ _________________________________________________________________
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
--- a/doc/HOWTO.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/HOWTO.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,334 +1,1015 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on December, 29 2004 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
- <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
- <TITLE> VMailMgr HOWTO</TITLE>
+<TITLE>VMailMgr HOWTO: </TITLE>
+<META NAME="description" CONTENT="VMailMgr HOWTO: ">
+<META NAME="keywords" CONTENT="VMailMgr HOWTO: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
</HEAD>
-<BODY>
-<H1> VMailMgr HOWTO</H1>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-<H2>Bruce Guenter
-<A HREF="mailto:bruceg@em.ca">mailto:bruceg@em.ca</A>,
- Dan Kuykendall
-<A HREF="mailto:dan@kuykendall.org">mailto:dan@kuykendall.org</A></H2> v1.w, 2000-09-15
-<P><HR>
-<EM> This document explains how to setup VMailMgr support pop3 virtual domain services in conjunction with Qmail.</EM>
-<HR>
-<H2><A NAME="s1">1. Introduction</A></H2>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC2"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<P>
+
+Copyright (C) 1998 Bruce Guenter
+</P><P>
+
+This document explains how to setup VMailMgr support pop3 virtual domain
+services in conjunction with Qmail.
+</P><P>
+
+<H1> 1. Introduction </H1>
+<!--docid::SEC1::-->
+<P>
-<P>VMailMgr (short for Virtual MAIL ManaGeR) is a package of programs
+VMailMgr (an abbreviation for Virtual Mail Manager) is a package of programs
designed to manage multiple domains of mail addresses and mailboxes
-on a single host. It co-operates with qmail for mail delivery and
+on a single host. It co-operates with qmail for mail delivery and
program control.
-<H2>1.1 What is VMailMgr and why should I use it?</H2>
+</P><P>
-<P>VMailMgr is:
-<P> A series of utilities for managing virtual domains
-which include a password checking interface for qmail which replaces
-the usual checkpassword, and an authentication module for Courier
-IMAP, that provide access to the virtual mailboxes by one of three
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC3"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 What is VMailMgr and why should I use it? </H2>
+<!--docid::SEC2::-->
+<P>
+
+VMailMgr is a series of utilities for managing virtual domains, including:
+<UL>
+<LI>
+a password checking interface for qmail, which replaces the usual
+checkpassword, and
+<LI>
+an authentication module for Courier IMAP
+</UL>
+<P>
+
+These utilities provide access to the virtual mailboxes by one of three
methods:
+</P><P>
+
<UL>
-<LI> IP-based virtual server access (invisible to the POP3 user)</LI>
-<LI> username-based access (username-virtualuser)</LI>
-<LI> hostname-based access (virtualuser@virtual.host or
-virtualuser:virtual.host)</LI>
+<LI>
+IP-based virtual server access (invisible to the POP3 user)
+<LI>
+username-based access (virtual user logs in as <SAMP>`username-virtualuser'</SAMP>)
+<LI>
+hostname-based access (virtual user logs in as <SAMP>`virtualuser@virtual.host'</SAMP>
+or <SAMP>`virtualuser:virtual.host'</SAMP>)
</UL>
-<P>You should use it if you prefer to have each domain controlled by a
+<P>
+
+You should use VMailMgr if you prefer to have each domain controlled by a
seperate username, allowing the use of system quotas and better
-security
-<H2>1.2 New versions </H2>
+security.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC2"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC4"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 New versions </H2>
+<!--docid::SEC3::-->
+<P>
+
+The newest version of this document can be found on the VMailMgr homepage
+<A HREF="http://www.vmailmgr.org/">http://www.vmailmgr.org/</A> in various formats, including the
+texinfo source and HTML and plaintext versions.
+</P><P>
-<P>The newest version of this can be found on the VMailMgr homepage
-<A HREF="http://www.vmailmgr.org/">http://www.vmailmgr.org/</A> in its HTML version as well as
-in the source package SGML source, HTML, and text. Other versions
-may be found in different formats at the LDP homepage
-<A HREF="http://www.linuxdoc.org/">http://www.linuxdoc.org/</A>.
-<H2>1.3 Comments </H2>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC3"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC5"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Comments </H2>
+<!--docid::SEC4::-->
+<P>
+
+Comments on this HOWTO should be directed to the VMailMgr mailing
+list. To subscribe, send a blank email to
+<A HREF="mailto:vmailmgr-subscribe@lists.untroubled.org">vmailmgr-subscribe@lists.untroubled.org</A>.
+</P><P>
-<P>Comments on this HOWTO should be directed to the VMailMgr mailing
-list. To subscribe, send an email to
-<A HREF="mailto:vmailmgr-subscribe@lists.em.ca">vmailmgr-subscribe@lists.em.ca</A>.
-<H2>1.4 History </H2>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC4"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC6"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.4 History </H2>
+<!--docid::SEC5::-->
+<P>
+
+This document was started by Bruce Guenter and reworked by Dan
+Kuykendall, then by Charles Cazabon.
+</P><P>
-<P>This document was started by Bruce Guenter and reworked by Dan
-Kuykendall.
-<H2>1.5 Copyrights and Trademarks </H2>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC5"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC7"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.5 Copyrights and Trademarks </H2>
+<!--docid::SEC6::-->
+<P>
-<P>Copyright (c) Dan Kuykendall.
+Copyright (C) Dan Kuykendall.
+</P><P>
+
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation
-<P>A copy of the license is available at
-<A HREF="http://www.gnu.org/copyleft/fdl.txt">GNU Free Documentation License</A>.
-<H2>1.6 Acknowledgements and Thanks </H2>
+</P><P>
+
+A copy of the license is available at
+<A HREF="http://www.gnu.org/copyleft/fdl.txt">GNU Free Documentation License</A>.
+</P><P>
-<P>Thanks to Bruce Guenter for VMailMgr and the core of this
-HOWTO. Thanks to Mike Bell, who always seems to have the answers to
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC6"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC8"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.6 Acknowledgements and Thanks </H2>
+<!--docid::SEC7::-->
+<P>
+
+Thanks to Bruce Guenter for VMailMgr and the core of this
+HOWTO. Thanks to Mike Bell, who always seems to have the answers to
my questions. Finally, thanks to all those on the
-<A HREF="mailto:vmailmgr@lists.em.ca">vmailmgr@lists.em.ca</A>
+<A HREF="mailto:vmailmgr@lists.untroubled.org">vmailmgr@lists.untroubled.org</A>
mailing list who have helped me, or asked the same stuff so many
times that I had to write this to stop the repeat questions.
-<H2><A NAME="s2">2. Installation</A></H2>
+</P><P>
-<H2>2.1 Get the files</H2>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC7"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC9"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Installation </H1>
+<!--docid::SEC8::-->
+<P>
-<P>Visit the VMailMgr website
-<A HREF="http://www.vmailmgr.org/">http://www.vmailmgr.org/</A> to
-get the package.
-<P>If you get the binary RPMS you will need at least the vmailmgr package.
-<H2>2.2 Install with RPMS</H2>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC8"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC10"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Get the files </H2>
+<!--docid::SEC9::-->
+<P>
-<H3>Compiling SRC.RPM's</H3>
+Visit the VMailMgr website <A HREF="http://www.vmailmgr.org/">http://www.vmailmgr.org/</A> or one of its
+mirror sites to download the package. There are two primary methods of
+installing:
+</P><P>
+
+<UL>
+<LI>
+from source
+<P>
+
+<LI>
+from a binary package -- specifically, an <CODE>RPM</CODE> binary package
+<P>
-<P>Simply compile the src.rpm file with the `<CODE>rpm --rebuild</CODE>` command.
--Example-
-<HR>
-<PRE>
- rpm -ivh vmailmgr-0.96.9-1.src.rpm
-</PRE>
-<HR>
-<H3>Installing RPM's</H3>
+</UL>
+<P>
+
+If you get the binary RPMS you will need at least the vmailmgr package.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC9"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC11"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 Install with RPMS </H2>
+<!--docid::SEC10::-->
+<P>
+
+To install from binary <CODE>RPM</CODE> packages, you can download the binaries,
+or build them from the source RPM package.
+</P><P>
-<P>After compiling the source rpms, the binaries will be located
-in `<CODE>/usr/src/redhat/RPMS/i386/</CODE>` or something similar.
-<P>Simply run the following command for each package
-<PRE>
- rpm -ivh <location>/<package.i386.rpm>
-</PRE>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC10"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC12"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.1 Compiling the Source RPM (SRPM) Package </H3>
+<!--docid::SEC11::-->
+<P>
--Example-
-<HR>
-<PRE>
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-0.96.9-1.i386.rpm
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-0.96.9-1.i386.rpm
-</PRE>
-<HR>
-<P>
-<P>
-<H2>2.3 Install with source</H2>
+If you download the binary packages directly, skip to the next step.
+</P><P>
+
+Download the source rpm package (<SAMP>`vmailmgr-<VAR>VERSION</VAR>.src.rpm'</SAMP>),
+and then use the <CODE>rpm</CODE> tool to build the binary RPM package from it
+with the <SAMP>`rpm --rebuild'</SAMP> command as follows:
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>rpm --rebuild vmailmgr-1.0.0-1.src.rpm
+</pre></td></tr></table></P><P>
-<P>If you dont ue RPMS you can install from source.
-<P>Run the following command
-<PRE>
- (As non-root user)
- tar zxf <package.tar.gz>
- cd <newly created dir>
- ./configure
- make
- (As root)
- make install
-</PRE>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC11"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC13"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.2 Installing the Binary RPM packages </H3>
+<!--docid::SEC12::-->
+<P>
+
+After compiling the source RPM, the binary RPM packages will be located
+in the appropriate output directory (typically
+<TT>`/usr/src/redhat/RPMS/i386/'</TT>).
+</P><P>
+
+Install each package using the <SAMP>`-i'</SAMP> option of <CODE>rpm</CODE> (i.e.
+<SAMP>`rpm -ivh <VAR>PACKAGE</VAR>.i386.rpm'</SAMP>) as follows:
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-1.0.0-1.i386.rpm
+rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-1.0.0-1.i386.rpm
+</pre></td></tr></table></P><P>
--Example-
-<HR>
-<PRE>
- (As non-root user)
- tar zxf vmailmgr-0.96.9.tar.gz
- cd vmailmgr-0.96.9
- ./configure
- make
- (As root)
- make install
-</PRE>
-<HR>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC12"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC14"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 Install from source </H2>
+<!--docid::SEC13::-->
+<P>
+
+If you dont use RPM packages, you can install from source with the following
+commands. First, as a regular, non-root user:
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>tar xzf <TT>`vmailmgr-<VAR>VERSION</VAR>.tar.gz'</TT>
+cd <TT>`vmailmgr-<VAR>VERSION</VAR>'</TT>
+./configure
+make
+</pre></td></tr></table></P><P>
+
+Then, as user <SAMP>`root'</SAMP>:
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>make install
+</pre></td></tr></table></P><P>
-That should do it.
-<H2><A NAME="s3">3. Setup</A></H2>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC13"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC15"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 3. Setup </H1>
+<!--docid::SEC14::-->
+<P>
+
+In the following setup examples, it is assumed that your binaries are installed
+in the <TT>`/usr/bin]'</TT> directory, and configuration files are located in the
+<TT>`/etc/vmailmgr/'</TT> directory, as is the case if you installed from the RPMs.
+</P><P>
-<P>In the following setup examples, it is assumed that your binaries
-are installed in `<CODE>/usr/bin</CODE>`, and configuration is in
-`<CODE>/etc/vmailmgr</CODE>`, as is the case if you installed from the
-RPMs.
-If you installed from source, configure puts the binaries into
-`<CODE>/usr/local/bin</CODE>` and the configuration into
-`<CODE>/usr/local/etc/vmailmgr</CODE>` by default.
-<H2>3.1 Setting Up a Virtual Domain</H2>
+If you installed from source, configure instead puts the binaries into
+<TT>`/usr/local/bin/'</TT> and the configuration into
+<TT>`/usr/local/etc/vmailmgr/'</TT> by default.
+</P><P>
-<P>The following steps are necessary to set up a virtual domain with
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC14"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC16"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.1 Setting Up a Virtual Domain </H2>
+<!--docid::SEC15::-->
+<P>
+
+The following steps are necessary to set up a virtual domain with
vmailmgr (assuming vmailmgr has been compiled and installed). As an
-example, we'll set up a virtual user `<CODE>me@mydomain.org</CODE>`,
-with aliases of `<CODE>myself@mydomain.org</CODE>` and
-`<CODE>myname@mydomain.org</CODE>`.
+example, we'll set up a virtual user <SAMP>`me@mydomain.org'</SAMP>,
+with aliases of <SAMP>`myself@mydomain.org'</SAMP> and
+<SAMP>`myname@mydomain.org'</SAMP>.
+</P><P>
+
<OL>
-<LI>Set up a DNS entry for the domain. This is not covered here, as it
+<LI>
+Set up a DNS entry for the domain. This is not covered here, as it
is dependant on far too many other things. I will mention that to
-make IP based virtual domains work a PTR record which matches an
+make IP based virtual domains work a <SAMP>`PTR'</SAMP> record which matches an
entry in virtualdomains is nessesary, for example, if nslookup
-10.56.33.122 returns <CODE>mail.mydomain.com</CODE>,
-`<CODE>virtualdomains</CODE>` needs an entry like
-`<CODE>mail.mydomain.com:myuser</CODE>'
+10.56.33.122 returns <SAMP>`mail.mydomain.com'</SAMP>,
+<TT>`control/virtualdomains'</TT> needs an entry like
+<SAMP>`mail.mydomain.com:myuser'</SAMP>.
+<P>
+
For the example, we'll assume that the mail exchanger for
-mydomain.org is already set up to point to your computer.</LI>
-<LI>Set up a base user for the domain. Create a user, with a name of
+<SAMP>`mydomain.org'</SAMP> is already set up to point to your computer.
+</P><P>
+
+<LI>
+Set up a base user for the domain. Create a user, with a name of
your choosing. Since the maildirs for all the users in the
virtual domain will be stored under this user's home directory,
make sure you set the user up in a partition or disk that is
appropriate for such storage. The tools that you should use to
accomplish this step vary greatly between different systems. For
-our example, I'll add a user `<CODE>myuser</CODE>`.</LI>
-<LI>Configure qmail to recognize the domain. To do this, you need to
-modify two of qmail's configuration files in
-`<CODE>/var/qmail/control</CODE>` `<CODE>rcpthosts</CODE>` and
-`<CODE>virtualdomains</CODE>`.
-<UL>
-<LI>To `<CODE>rcpthosts</CODE>` :
-add the line `<CODE>mydomain.org</CODE>`. </LI>
-<LI>To `<CODE>virtualdomains</CODE>` :
-add the line `<CODE>mydomain.org:myuser</CODE>`.</LI>
-</UL>
+our example, I'll add a user <SAMP>`myuser'</SAMP>.
+<P>
-If you wish to have mail to `<CODE>anything.mydomain.org</CODE>`
-be delivered in the same way, add the following
+<LI>
+Configure qmail to recognize the domain. To do this, you need to
+modify two of qmail's configuration files in
+<TT>`/var/qmail/control'</TT>: <TT>`rcpthosts'</TT> and <TT>`virtualdomains'</TT>.
<UL>
-<LI>To `<CODE>rcpthosts</CODE>` :
-add the line `<CODE>.mydomain.org</CODE>`. </LI>
-<LI>To `<CODE>virtualdomains</CODE>` :
-add the line `<CODE>.mydomain.org:myuser</CODE>`.</LI>
+<LI>
+To <TT>`rcpthosts'</TT>, add the line <SAMP>`mydomain.org'</SAMP>.
+<LI>
+To <TT>`virtualdomains'</TT>, add the line <SAMP>`mydomain.org:myuser'</SAMP>.
</UL>
-</LI>
-<LI>Configure qmail-popup/qmail-pop3d to use `<CODE>checkvpw</CODE>` as
-the password checker. This step is dependant on how you have
-installed qmail.
+<P>
+
+If you wish to have mail to <SAMP>`anything.mydomain.org'</SAMP>
+be delivered in the same way:
+<UL>
+<LI>
+To <TT>`rcpthosts'</TT>, add the line <SAMP>`.mydomain.org'</SAMP>.
+<LI>
+To <TT>`virtualdomains'</TT>, add the line <SAMP>`.mydomain.org:myuser'</SAMP>.
+</UL>
+<P>
+
+<LI>
+Configure <CODE>qmail-popup</CODE>/<CODE>qmail-pop3d</CODE> to use <CODE>checkvpw</CODE> as the
+password checker. This step is dependant on how you have installed qmail.
<UL>
-<LI>Replace `<CODE>checkpassword</CODE>` in the command you use to
-invoke qmail-popup/qmail-pop3d (either in
-`<CODE>/etc/inet.conf</CODE>` or in a `<CODE>tcpserver</CODE>`
-command) with `<CODE>checkvpw</CODE>`.</LI>
-<LI>And/Or at the prompt type: `<CODE>echo checkvpw >
-/var/qmail/control/checkpassword</CODE>`</LI>
+<LI>
+Replace <CODE>checkpassword</CODE> in the command you use to
+invoke <CODE>qmail-popup</CODE>/<CODE>qmail-pop3d</CODE> (either in
+<TT>`/etc/inet.conf'</TT> or in a <CODE>tcpserver</CODE>
+command) with <CODE>checkvpw</CODE>.
+<LI>
+And/Or at the prompt type <SAMP>`echo checkvpw > <TT>`/var/qmail/control/checkpassword'</TT>'</SAMP>.
</UL>
-</LI>
-<LI>Set up the vmailmgr files:
+<P>
+
+<LI>
+Set up the vmailmgr files:
<UL>
-<LI>Either change user to the user you just created (for example,
-type `<CODE>su - myuser</CODE>`) or log in (with either telnet or
-at the console) as the new user.</LI>
-<LI>Set up the base vmailmgr files by running `<CODE>vsetup</CODE>`.</LI>
-<LI>Use the included programs to add users and aliases.
+<LI>
+Either change user to the user you just created (for example,
+type <SAMP>`su - myuser'</SAMP>) or log in (with either telnet or
+at the console) as the new user.
+<LI>
+Set up the base vmailmgr files by running <CODE>vsetup</CODE>.
+<LI>
+Use the included programs to add users and aliases.
For our example, we would type the following commands:
-<PRE>
- vadduser me
- vaddalias myself me
- vaddalias myname me
-</PRE>
-</LI>
+<P>
+
+<TABLE><tr><td> </td><td class=example><pre>vadduser me
+vaddalias myself me
+vaddalias myname me
+</pre></td></tr></table></P><P>
+
</UL>
-</LI>
+
</OL>
+<P>
After you have completed all these steps, you will need to kill and
-restart `<CODE>qmail-send</CODE>` to make it read the new
-`<CODE>virtualdomains</CODE>` table.
-<P>If you are using `<CODE>inetd</CODE>` to launch `<CODE>qmail-popup</CODE>`,
-`<CODE>kill -HUP</CODE>` the `<CODE>inetd</CODE>` process as well.
-<H2>3.2 Using one IP address for mutiple domains</H2>
+restart <CODE>qmail-send</CODE> to make it read the new
+<TT>`virtualdomains'</TT> control file.
+</P><P>
+
+If you are using <CODE>inetd</CODE> to launch <CODE>qmail-popup</CODE>,
+<SAMP>`kill -HUP'</SAMP> the <CODE>inetd</CODE> process as well.
+</P><P>
-<P>There are two ways to log in without using multiple IP addresses.
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC15"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC17"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.2 Using one IP address for mutiple domains </H2>
+<!--docid::SEC16::-->
<P>
+
+There are two ways to log in without using multiple IP addresses.
+</P><P>
+
<OL>
-<LI>The first way is to log in as
-`<CODE>userSEPvirtual.domain.org</CODE>`, where `<CODE>user</CODE>` is the
-mailbox name of the virtual user, SEP is one of `<CODE>@</CODE>` or
-`<CODE>:</CODE>` (by default, this is configurable in the
-`<CODE>/etc/vmailmgr/</CODE>' directory), and
-`<CODE>virtual.domain.org</CODE>' is the virtual domain's name, as
-listed in `<CODE>/var/qmail/control/virtualdomains</CODE>'.</LI>
-<LI>The second way is to use the internal form of the mailbox name --
-that is, `<CODE>baseuser-user</CODE>', where `<CODE>user</CODE>' is the
-same as above, and `<CODE>baseuser</CODE>' is the username of the
-managing user.</LI>
+<LI>
+The first way is to log in as
+<SAMP>`user<VAR>SEP</VAR>virtual.domain.org'</SAMP>, where <SAMP>`user'</SAMP> is the
+mailbox name of the virtual user, <VAR>SEP</VAR> is one of <SAMP>`@'</SAMP> or
+<SAMP>`:'</SAMP> (by default; this is configurable in the
+<TT>`/etc/vmailmgr/'</TT> directory), and
+<SAMP>`virtual.domain.org'</SAMP> is the virtual domain's name, as
+listed in <TT>`/var/qmail/control/virtualdomains'</TT>.
+<P>
+
+<LI>
+The second way is to use the internal form of the mailbox name --
+that is, <SAMP>`baseuser-user'</SAMP>, where <SAMP>`user'</SAMP> is the
+same as above, and <SAMP>`baseuser'</SAMP> is the username of the
+managing user.
+<P>
+
</OL>
+<P>
-Example: `<CODE>/var/qmail/control/virtualdomains</CODE>' contains
-<PRE>
- testdomain.org:testuser
-</PRE>
+For example, if <TT>`/var/qmail/control/virtualdomains'</TT> contains
+<SAMP>`mydomain.com:myuser'</SAMP> and user <SAMP>`myuser'</SAMP> exists and has
+set up a virtual mailbox with the name <SAMP>`me'</SAMP>, and the
+<TT>`separators'</TT> configuration file <TT>`/etc/vmailmgr/'</TT> contains <SAMP>`@'</SAMP>,
+this virtual user could log in as <SAMP>`me@mydomain.com'</SAMP>,
+<SAMP>`me:mydomain.com'</SAMP>, or <SAMP>`myuser-me'</SAMP>.
+</P><P>
-User `<CODE>myuser</CODE>' exists, and has set up a virtual mailbox with
-the name `<CODE>me</CODE>'. The `<CODE>separators</CODE>' variable in
-`<CODE>/etc/vmailmgr/</CODE>' contains `<CODE>@:</CODE>'. This virtual user
-could log in as `<CODE>me@mydomain.com</CODE>',
-`<CODE>me:mydomain.cm</CODE>', or `<CODE>myuser-me</CODE>'.
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC16"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC18"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.3 Catching all misdirected mail in a virtual domain </H2>
+<!--docid::SEC17::-->
<P>
-<P>
-<H2>3.3 Catching all misdirected mail in a virtual domain</H2>
-<P>In the `<CODE>vmailmgr/</CODE>' configuration directory, there is an
-entry called `<CODE>default-username</CODE>'. If mail to a virtual
+In the <CODE>vmailmgr</CODE> configuration directory, there is a
+file called <TT>`default-username'</TT>. If mail to a virtual
domain does not match any users or aliases in that domain, it is
delivered to the name listed in this configuration item if it exists
-(which defaults to `<CODE>+</CODE>'). To make this deliver to you,
-simply type:
-<PRE>
- vaddalias + me
-</PRE>
-<H2>3.4 VMailMgr IMAP support</H2>
+(which defaults to <SAMP>`+'</SAMP>). To make this deliver to you,
+simply type <SAMP>`vaddalias + me'</SAMP>.
+</P><P>
-<P>VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC17"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC19"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.4 VMailMgr IMAP support </H2>
+<!--docid::SEC18::-->
+<P>
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with
an authentication module for VMailMgr. This means that some minor
work is required for making the two work together.
+</P><P>
+
+The steps are:
+</P><P>
+
<UL>
-<LI>You must copy `<CODE>/usr/bin/authvmailmgr</CODE>` to
-`<CODE>/usr/lib/courier-imap/libexec/authlib/authvmailmgr</CODE>`.</LI>
-<LI>Then modify the `<CODE>AUTHMODULES</CODE>` statement in
-`<CODE>/usr/lib/courier-imap/etc/imapd.config</CODE>` and add
-`<CODE>authvmailmgr</CODE>` as the first authentication module.</LI>
+<LI>
+Copy <TT>`/usr/bin/authvmailmgr'</TT> to
+<TT>`/usr/lib/courier-imap/libexec/authlib/authvmailmgr'</TT>.
+<P>
+
+<LI>
+Modify the <CODE>AUTHMODULES</CODE> statement in
+<TT>`/usr/lib/courier-imap/etc/imapd.config'</TT> and add
+<SAMP>`authvmailmgr'</SAMP> as the first authentication module.
</UL>
-<H2>3.5 Enabling enforcement of virtual user quotas</H2>
+<P>
-<P>VMailMgr supports per-virtual-user quotas, but not out of the box,
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC18"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC20"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.5 Enabling enforcement of virtual user quotas </H2>
+<!--docid::SEC19::-->
+<P>
+
+VMailMgr supports per-virtual-user quotas, but not out of the box,
as it is not needed by the majority of users, and requires an extra
program to be run on each delivery.
+</P><P>
+
To configure quota support, create the file
-`<CODE>/etc/vmailmgr/vdeliver-predeliver</CODE>`, containing
+<TT>`/etc/vmailmgr/vdeliver-predeliver'</TT>, containing
the following:
-<PRE>
- #!/bin/sh
- /usr/bin/vcheckquota
-</PRE>
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>#!/bin/sh
+/usr/bin/vcheckquota
+</pre></td></tr></table></P><P>
This is executed as a shell script, so you will need to make it
-executable by running the following command:
-<PRE>
- chmod +x /etc/vmailmgr/vdeliver-predeliver
-</PRE>
-<H2>3.6 Enabling processing of autoresponses</H2>
+executable by running the command <SAMP>`chmod +x /etc/vmailmgr/vdeliver-predeliver'</SAMP>.
+</P><P>
-<P>Download and install the qmail-autoresponder package, found at
-<A HREF="http://em.ca/~bruceg/qmail-autoresponder/">http://em.ca/~bruceg/qmail-autoresponder/</A>.
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC19"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC21"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.6 Enabling processing of autoresponses </H2>
+<!--docid::SEC20::-->
+<P>
+
+Download and install the qmail-autoresponder package, found at
+<A HREF="http://untroubled.org/qmail-autoresponder/">http://untroubled.org/qmail-autoresponder/</A>.
+</P><P>
+
As with the above section, create a shell script
-`<CODE>/etc/vmailmgr/vdeliver-postdeliver</CODE>`, containing the
-following:
-<PRE>
- #!/bin/sh
- if test -s $MAILDIR/autoresponse/message.txt
- then
- qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
- fi
-</PRE>
-<H2>3.7 Web-based interfaces for vmailmgr</H2>
+<TT>`/etc/vmailmgr/vdeliver-postdeliver'</TT>, containing the following:
+</P><P>
+
+<TABLE><tr><td> </td><td class=example><pre>#!/bin/sh
+if test -s $MAILDIR/autoresponse/message.txt ; then
+ qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
+fi
+</pre></td></tr></table></P><P>
-<P>There are currently a few working solutions to administrate
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC20"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.7 Web-based interfaces for vmailmgr </H2>
+<!--docid::SEC21::-->
+<P>
+
+There are currently a few working solutions to administrate
your vmailmgr system via a web interface. Only requirement is
that the vmailmgrd daemon is running, and that you have
a webserver on your system.
-<OL>
-<LI>For Python fans, there is vpyadmin by Bruce Guenter. The files can
-be downloaded at
-<A HREF="http://em.ca/~bruceg/vpyadmin/">http://em.ca/~bruceg/vpyadmin/</A>, and
+</P><P>
+
+<UL>
+<LI>
+For Python fans, there is vpyadmin by Bruce Guenter. The files can
+be downloaded at <A HREF="http://untroubled.org/vpyadmin/">http://untroubled.org/vpyadmin/</A>, and
the development code is online at
<A HREF="http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/">http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/</A>
-(sample.org / samplevm).</LI>
-<LI>And if you like PHP, you can use oMail-admin by Olivier Müller:
+(sample.org / samplevm).
+<P>
+
+<LI>
+And if you like PHP, you can use oMail-admin by Olivier Müller:
it fully supports all vmailmgr functions, and speaks englich,
french, italian, spanish, german and russian. Project homepage:
<A HREF="http://omail.omnis.ch">http://omail.omnis.ch</A>. Online demo:
-<A HREF="http://admin.omnis.ch/omail/">http://admin.omnis.ch/omail/</A> (test.com / test).</LI>
-<LI>And there are also C-based CGI scripts in the <CODE>cgi</CODE>
-directory of the vmailmgr distribution.</LI>
-</OL>
+<A HREF="http://admin.omnis.ch/omail/">http://admin.omnis.ch/omail/</A> (test.com / test).
+<P>
+
+<LI>
+And there are also C-based CGI scripts in the <TT>`cgi'</TT>
+subdirectory of the vmailmgr distribution.
+<P>
+
+</UL>
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="HOWTO.html#SEC1">1. Introduction</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="HOWTO.html#SEC2">1.1 What is VMailMgr and why should I use it?</A>
+<BR>
+<A NAME="TOC3" HREF="HOWTO.html#SEC3">1.2 New versions</A>
+<BR>
+<A NAME="TOC4" HREF="HOWTO.html#SEC4">1.3 Comments</A>
+<BR>
+<A NAME="TOC5" HREF="HOWTO.html#SEC5">1.4 History</A>
+<BR>
+<A NAME="TOC6" HREF="HOWTO.html#SEC6">1.5 Copyrights and Trademarks</A>
+<BR>
+<A NAME="TOC7" HREF="HOWTO.html#SEC7">1.6 Acknowledgements and Thanks</A>
+<BR>
+</UL>
+<A NAME="TOC8" HREF="HOWTO.html#SEC8">2. Installation</A>
+<BR>
+<UL>
+<A NAME="TOC9" HREF="HOWTO.html#SEC9">2.1 Get the files</A>
+<BR>
+<A NAME="TOC10" HREF="HOWTO.html#SEC10">2.2 Install with RPMS</A>
+<BR>
+<UL>
+<A NAME="TOC11" HREF="HOWTO.html#SEC11">2.2.1 Compiling the Source RPM (SRPM) Package</A>
+<BR>
+<A NAME="TOC12" HREF="HOWTO.html#SEC12">2.2.2 Installing the Binary RPM packages</A>
+<BR>
+</UL>
+<A NAME="TOC13" HREF="HOWTO.html#SEC13">2.3 Install from source</A>
+<BR>
+</UL>
+<A NAME="TOC14" HREF="HOWTO.html#SEC14">3. Setup</A>
+<BR>
+<UL>
+<A NAME="TOC15" HREF="HOWTO.html#SEC15">3.1 Setting Up a Virtual Domain</A>
+<BR>
+<A NAME="TOC16" HREF="HOWTO.html#SEC16">3.2 Using one IP address for mutiple domains</A>
+<BR>
+<A NAME="TOC17" HREF="HOWTO.html#SEC17">3.3 Catching all misdirected mail in a virtual domain</A>
+<BR>
+<A NAME="TOC18" HREF="HOWTO.html#SEC18">3.4 VMailMgr IMAP support</A>
+<BR>
+<A NAME="TOC19" HREF="HOWTO.html#SEC19">3.5 Enabling enforcement of virtual user quotas</A>
+<BR>
+<A NAME="TOC20" HREF="HOWTO.html#SEC20">3.6 Enabling processing of autoresponses</A>
+<BR>
+<A NAME="TOC21" HREF="HOWTO.html#SEC21">3.7 Web-based interfaces for vmailmgr</A>
+<BR>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="HOWTO.html#SEC1">1. Introduction</A>
+<BR>
+<A NAME="TOC8" HREF="HOWTO.html#SEC8">2. Installation</A>
+<BR>
+<A NAME="TOC14" HREF="HOWTO.html#SEC14">3. Setup</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC1">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="HOWTO.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ < ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ > ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ << ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ >> ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG>
+<== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
</BODY>
</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/HOWTO.info Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,331 @@
+This is HOWTO.info, produced by makeinfo version 4.7 from HOWTO.texi.
+
+ Copyright (C) 1998 Bruce Guenter
+
+ This document explains how to setup VMailMgr support pop3 virtual
+domain services in conjunction with Qmail.
+
+1 Introduction
+**************
+
+VMailMgr (an abbreviation for Virtual Mail Manager) is a package of
+programs designed to manage multiple domains of mail addresses and
+mailboxes on a single host. It co-operates with qmail for mail
+delivery and program control.
+
+1.1 What is VMailMgr and why should I use it?
+=============================================
+
+VMailMgr is a series of utilities for managing virtual domains,
+including:
+ * a password checking interface for qmail, which replaces the usual
+ checkpassword, and
+
+ * an authentication module for Courier IMAP
+
+ These utilities provide access to the virtual mailboxes by one of
+three methods:
+
+ * IP-based virtual server access (invisible to the POP3 user)
+
+ * username-based access (virtual user logs in as
+ `username-virtualuser')
+
+ * hostname-based access (virtual user logs in as
+ `virtualuser@virtual.host' or `virtualuser:virtual.host')
+
+ You should use VMailMgr if you prefer to have each domain
+controlled by a seperate username, allowing the use of system quotas
+and better security.
+
+1.2 New versions
+================
+
+The newest version of this document can be found on the VMailMgr
+homepage `http://www.vmailmgr.org/' in various formats, including the
+texinfo source and HTML and plaintext versions.
+
+1.3 Comments
+============
+
+Comments on this HOWTO should be directed to the VMailMgr mailing list.
+To subscribe, send a blank email to
+<vmailmgr-subscribe@lists.untroubled.org>.
+
+1.4 History
+===========
+
+This document was started by Bruce Guenter and reworked by Dan
+Kuykendall, then by Charles Cazabon.
+
+1.5 Copyrights and Trademarks
+=============================
+
+Copyright (C) Dan Kuykendall.
+
+ Permission is granted to copy, distribute and/or modify this
+document under the terms of the GNU Free Documentation License, Version
+1.1 or any later version published by the Free Software Foundation
+
+ A copy of the license is available at GNU Free Documentation
+License (http://www.gnu.org/copyleft/fdl.txt).
+
+1.6 Acknowledgements and Thanks
+===============================
+
+Thanks to Bruce Guenter for VMailMgr and the core of this HOWTO.
+Thanks to Mike Bell, who always seems to have the answers to my
+questions. Finally, thanks to all those on the
+<vmailmgr@lists.untroubled.org> mailing list who have helped me, or
+asked the same stuff so many times that I had to write this to stop the
+repeat questions.
+
+2 Installation
+**************
+
+2.1 Get the files
+=================
+
+Visit the VMailMgr website `http://www.vmailmgr.org/' or one of its
+mirror sites to download the package. There are two primary methods of
+installing:
+
+ * from source
+
+ * from a binary package - specifically, an `RPM' binary package
+
+
+ If you get the binary RPMS you will need at least the vmailmgr
+package.
+
+2.2 Install with RPMS
+=====================
+
+To install from binary `RPM' packages, you can download the binaries,
+or build them from the source RPM package.
+
+2.2.1 Compiling the Source RPM (SRPM) Package
+---------------------------------------------
+
+If you download the binary packages directly, skip to the next step.
+
+ Download the source rpm package (`vmailmgr-VERSION.src.rpm'), and
+then use the `rpm' tool to build the binary RPM package from it with
+the `rpm --rebuild' command as follows:
+
+ rpm --rebuild vmailmgr-1.0.0-1.src.rpm
+
+2.2.2 Installing the Binary RPM packages
+----------------------------------------
+
+After compiling the source RPM, the binary RPM packages will be located
+in the appropriate output directory (typically
+`/usr/src/redhat/RPMS/i386/').
+
+ Install each package using the `-i' option of `rpm' (i.e. `rpm
+-ivh PACKAGE.i386.rpm') as follows:
+
+ rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-1.0.0-1.i386.rpm
+ rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-1.0.0-1.i386.rpm
+
+2.3 Install from source
+=======================
+
+If you dont use RPM packages, you can install from source with the
+following commands. First, as a regular, non-root user:
+
+ tar xzf `vmailmgr-VERSION.tar.gz'
+ cd `vmailmgr-VERSION'
+ ./configure
+ make
+
+ Then, as user `root':
+
+ make install
+
+3 Setup
+*******
+
+In the following setup examples, it is assumed that your binaries are
+installed in the `/usr/bin]' directory, and configuration files are
+located in the `/etc/vmailmgr/' directory, as is the case if you
+installed from the RPMs.
+
+ If you installed from source, configure instead puts the binaries
+into `/usr/local/bin/' and the configuration into
+`/usr/local/etc/vmailmgr/' by default.
+
+3.1 Setting Up a Virtual Domain
+===============================
+
+The following steps are necessary to set up a virtual domain with
+vmailmgr (assuming vmailmgr has been compiled and installed). As an
+example, we'll set up a virtual user `me@mydomain.org', with aliases of
+`myself@mydomain.org' and `myname@mydomain.org'.
+
+ 1. Set up a DNS entry for the domain. This is not covered here, as it
+ is dependant on far too many other things. I will mention that to
+ make IP based virtual domains work a `PTR' record which matches an
+ entry in virtualdomains is nessesary, for example, if nslookup
+ 10.56.33.122 returns `mail.mydomain.com', `control/virtualdomains'
+ needs an entry like `mail.mydomain.com:myuser'.
+
+ For the example, we'll assume that the mail exchanger for
+ `mydomain.org' is already set up to point to your computer.
+
+ 2. Set up a base user for the domain. Create a user, with a name of
+ your choosing. Since the maildirs for all the users in the
+ virtual domain will be stored under this user's home directory,
+ make sure you set the user up in a partition or disk that is
+ appropriate for such storage. The tools that you should use to
+ accomplish this step vary greatly between different systems. For
+ our example, I'll add a user `myuser'.
+
+ 3. Configure qmail to recognize the domain. To do this, you need to
+ modify two of qmail's configuration files in `/var/qmail/control':
+ `rcpthosts' and `virtualdomains'.
+ * To `rcpthosts', add the line `mydomain.org'.
+
+ * To `virtualdomains', add the line `mydomain.org:myuser'.
+
+ If you wish to have mail to `anything.mydomain.org' be delivered
+ in the same way:
+ * To `rcpthosts', add the line `.mydomain.org'.
+
+ * To `virtualdomains', add the line `.mydomain.org:myuser'.
+
+ 4. Configure `qmail-popup'/`qmail-pop3d' to use `checkvpw' as the
+ password checker. This step is dependant on how you have
+ installed qmail.
+ * Replace `checkpassword' in the command you use to invoke
+ `qmail-popup'/`qmail-pop3d' (either in `/etc/inet.conf' or in
+ a `tcpserver' command) with `checkvpw'.
+
+ * And/Or at the prompt type `echo checkvpw >
+ `/var/qmail/control/checkpassword''.
+
+ 5. Set up the vmailmgr files:
+ * Either change user to the user you just created (for example,
+ type `su - myuser') or log in (with either telnet or at the
+ console) as the new user.
+
+ * Set up the base vmailmgr files by running `vsetup'.
+
+ * Use the included programs to add users and aliases. For our
+ example, we would type the following commands:
+
+ vadduser me
+ vaddalias myself me
+ vaddalias myname me
+
+
+
+ After you have completed all these steps, you will need to kill and
+restart `qmail-send' to make it read the new `virtualdomains' control
+file.
+
+ If you are using `inetd' to launch `qmail-popup', `kill -HUP' the
+`inetd' process as well.
+
+3.2 Using one IP address for mutiple domains
+============================================
+
+There are two ways to log in without using multiple IP addresses.
+
+ 1. The first way is to log in as `userSEPvirtual.domain.org', where
+ `user' is the mailbox name of the virtual user, SEP is one of `@'
+ or `:' (by default; this is configurable in the `/etc/vmailmgr/'
+ directory), and `virtual.domain.org' is the virtual domain's name,
+ as listed in `/var/qmail/control/virtualdomains'.
+
+ 2. The second way is to use the internal form of the mailbox name -
+ that is, `baseuser-user', where `user' is the same as above, and
+ `baseuser' is the username of the managing user.
+
+
+ For example, if `/var/qmail/control/virtualdomains' contains
+`mydomain.com:myuser' and user `myuser' exists and has set up a virtual
+mailbox with the name `me', and the `separators' configuration file
+`/etc/vmailmgr/' contains `@', this virtual user could log in as
+`me@mydomain.com', `me:mydomain.com', or `myuser-me'.
+
+3.3 Catching all misdirected mail in a virtual domain
+=====================================================
+
+In the `vmailmgr' configuration directory, there is a file called
+`default-username'. If mail to a virtual domain does not match any
+users or aliases in that domain, it is delivered to the name listed in
+this configuration item if it exists (which defaults to `+'). To make
+this deliver to you, simply type `vaddalias + me'.
+
+3.4 VMailMgr IMAP support
+=========================
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with an
+authentication module for VMailMgr. This means that some minor work is
+required for making the two work together.
+
+ The steps are:
+
+ * Copy `/usr/bin/authvmailmgr' to
+ `/usr/lib/courier-imap/libexec/authlib/authvmailmgr'.
+
+ * Modify the `AUTHMODULES' statement in
+ `/usr/lib/courier-imap/etc/imapd.config' and add `authvmailmgr' as
+ the first authentication module.
+
+3.5 Enabling enforcement of virtual user quotas
+===============================================
+
+VMailMgr supports per-virtual-user quotas, but not out of the box, as
+it is not needed by the majority of users, and requires an extra
+program to be run on each delivery.
+
+ To configure quota support, create the file
+`/etc/vmailmgr/vdeliver-predeliver', containing the following:
+
+ #!/bin/sh
+ /usr/bin/vcheckquota
+
+ This is executed as a shell script, so you will need to make it
+executable by running the command `chmod +x
+/etc/vmailmgr/vdeliver-predeliver'.
+
+3.6 Enabling processing of autoresponses
+========================================
+
+Download and install the qmail-autoresponder package, found at
+`http://untroubled.org/qmail-autoresponder/'.
+
+ As with the above section, create a shell script
+`/etc/vmailmgr/vdeliver-postdeliver', containing the following:
+
+ #!/bin/sh
+ if test -s $MAILDIR/autoresponse/message.txt ; then
+ qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
+ fi
+
+3.7 Web-based interfaces for vmailmgr
+=====================================
+
+There are currently a few working solutions to administrate your
+vmailmgr system via a web interface. Only requirement is that the
+vmailmgrd daemon is running, and that you have a webserver on your
+system.
+
+ * For Python fans, there is vpyadmin by Bruce Guenter. The files can
+ be downloaded at `http://untroubled.org/vpyadmin/', and the
+ development code is online at
+ `http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/' (sample.org /
+ samplevm).
+
+ * And if you like PHP, you can use oMail-admin by Olivier Müller: it
+ fully supports all vmailmgr functions, and speaks englich, french,
+ italian, spanish, german and russian. Project homepage:
+ `http://omail.omnis.ch'. Online demo:
+ `http://admin.omnis.ch/omail/' (test.com / test).
+
+ * And there are also C-based CGI scripts in the `cgi' subdirectory
+ of the vmailmgr distribution.
+
+
Binary file doc/HOWTO.pdf has changed
--- a/doc/HOWTO.sgml Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,372 +0,0 @@
-<!doctype linuxdoc system>
-
-<!-- LinuxDoc file was created by hand by <Dan Kuykendall> Wed April 23 -->
-<article>
-<title>
- VMailMgr HOWTO
-</title>
-<author>
- Bruce Guenter <url url="mailto:bruceg@em.ca">,
- Dan Kuykendall <url url="mailto:dan@kuykendall.org">
-</author>
-<date>
- v1.w, 2000-09-15
-</date>
-<abstract>
- This document explains how to setup VMailMgr support pop3 virtual domain
- services in conjunction with Qmail.
-</abstract>
-
-<toc>
-
-<sect>Introduction
-<p>
- VMailMgr (short for Virtual MAIL ManaGeR) is a package of programs
- designed to manage multiple domains of mail addresses and mailboxes
- on a single host. It co-operates with qmail for mail delivery and
- program control.
-</p>
-
-<sect1>What is VMailMgr and why should I use it?
-<p>
- VMailMgr is:<p> A series of utilities for managing virtual domains
- which include a password checking interface for qmail which replaces
- the usual checkpassword, and an authentication module for Courier
- IMAP, that provide access to the virtual mailboxes by one of three
- methods:
-<itemize>
- <item> IP-based virtual server access (invisible to the POP3 user)
- <item> username-based access (username-virtualuser)
- <item> hostname-based access (virtualuser@virtual.host or
- virtualuser:virtual.host)
-</itemize>
-
- You should use it if you prefer to have each domain controlled by a
- seperate username, allowing the use of system quotas and better
- security
-</p>
-
-<sect1>New versions
-<p>
- The newest version of this can be found on the VMailMgr homepage
- <url url="http://www.vmailmgr.org/"> in its HTML version as well as
- in the source package SGML source, HTML, and text. Other versions
- may be found in different formats at the LDP homepage <url
- url="http://www.linuxdoc.org/">.
-</p>
-
-<sect1>Comments
-<p>
- Comments on this HOWTO should be directed to the VMailMgr mailing
- list. To subscribe, send an email to <url
- url="mailto:vmailmgr-subscribe@lists.em.ca"
- name="vmailmgr-subscribe@lists.em.ca">.
-</p>
-
-<sect1>History
-<p>
- This document was started by Bruce Guenter and reworked by Dan
- Kuykendall.
-</p>
-
-<sect1>Copyrights and Trademarks
-<p>
- Copyright (c) Dan Kuykendall.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.1
- or any later version published by the Free Software Foundation
-</p>
-<p>
- A copy of the license is available at <url
- url="http://www.gnu.org/copyleft/fdl.txt" name="GNU Free
- Documentation License">.
-</p>
-
-<sect1>Acknowledgements and Thanks
-<p>
- Thanks to Bruce Guenter for VMailMgr and the core of this
- HOWTO. Thanks to Mike Bell, who always seems to have the answers to
- my questions. Finally, thanks to all those on the <url
- url="mailto:vmailmgr@lists.em.ca" name="vmailmgr@lists.em.ca">
- mailing list who have helped me, or asked the same stuff so many
- times that I had to write this to stop the repeat questions.
-</p>
-
-<sect>Installation
-
-<sect1>Get the files
-<p>
- Visit the VMailMgr website <url url="http://www.vmailmgr.org/"> to
- get the package.
-<p>
- If you get the binary RPMS you will need at least the vmailmgr package.
-</p>
-
-<sect1>Install with RPMS
-<sect2>Compiling SRC.RPM's
-<p>
- Simply compile the src.rpm file with the `<tt>rpm --rebuild</tt>` command.
- -Example-
-<code>
- rpm -ivh vmailmgr-0.96.9-1.src.rpm
-</code>
-<sect2>Installing RPM's
-<p>
- After compiling the source rpms, the binaries will be located
- in `<tt>/usr/src/redhat/RPMS/i386/</tt>` or something similar.
-
- Simply run the following command for each package
-<verb>
- rpm -ivh <location>/<package.i386.rpm>
-</verb>
- -Example-
-<code>
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-0.96.9-1.i386.rpm
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-0.96.9-1.i386.rpm
-</code>
-
-
-<sect1>Install with source
-<p>
- If you dont ue RPMS you can install from source.<p>
- Run the following command
-<verb>
- (As non-root user)
- tar zxf <package.tar.gz>
- cd <newly created dir>
- ./configure
- make
- (As root)
- make install
-</verb>
- -Example-
-<code>
- (As non-root user)
- tar zxf vmailmgr-0.96.9.tar.gz
- cd vmailmgr-0.96.9
- ./configure
- make
- (As root)
- make install
-</code>
- That should do it.
-</p>
-
-<sect>Setup
-
-<p>
- In the following setup examples, it is assumed that your binaries
- are installed in `<tt>/usr/bin</tt>`, and configuration is in
- `<tt>/etc/vmailmgr</tt>`, as is the case if you installed from the
- RPMs.
- If you installed from source, configure puts the binaries into
- `<tt>/usr/local/bin</tt>` and the configuration into
- `<tt>/usr/local/etc/vmailmgr</tt>` by default.
-</p>
-
-<sect1>Setting Up a Virtual Domain
-<p>
- The following steps are necessary to set up a virtual domain with
- vmailmgr (assuming vmailmgr has been compiled and installed). As an
- example, we'll set up a virtual user `<tt>me@mydomain.org</tt>`,
- with aliases of `<tt>myself@mydomain.org</tt>` and
- `<tt>myname@mydomain.org</tt>`.
-<enum>
- <item>
- Set up a DNS entry for the domain. This is not covered here, as it
- is dependant on far too many other things. I will mention that to
- make IP based virtual domains work a PTR record which matches an
- entry in virtualdomains is nessesary, for example, if nslookup
- 10.56.33.122 returns <tt>mail.mydomain.com</tt>,
- `<tt>virtualdomains</tt>` needs an entry like
- `<tt>mail.mydomain.com:myuser</tt>'
- For the example, we'll assume that the mail exchanger for
- mydomain.org is already set up to point to your computer.
- <item>
- Set up a base user for the domain. Create a user, with a name of
- your choosing. Since the maildirs for all the users in the
- virtual domain will be stored under this user's home directory,
- make sure you set the user up in a partition or disk that is
- appropriate for such storage. The tools that you should use to
- accomplish this step vary greatly between different systems. For
- our example, I'll add a user `<tt>myuser</tt>`.
- <item>
- Configure qmail to recognize the domain. To do this, you need to
- modify two of qmail's configuration files in
- `<tt>/var/qmail/control</tt>` `<tt>rcpthosts</tt>` and
- `<tt>virtualdomains</tt>`.
- <itemize>
- <item>To `<tt>rcpthosts</tt>` :
- add the line `<tt>mydomain.org</tt>`.
- <item>To `<tt>virtualdomains</tt>` :
- add the line `<tt>mydomain.org:myuser</tt>`.
- </itemize>
- If you wish to have mail to `<tt>anything.mydomain.org</tt>`
- be delivered in the same way, add the following
- <itemize>
- <item>To `<tt>rcpthosts</tt>` :
- add the line `<tt>.mydomain.org</tt>`.
- <item>To `<tt>virtualdomains</tt>` :
- add the line `<tt>.mydomain.org:myuser</tt>`.
- </itemize>
- <item>
- Configure qmail-popup/qmail-pop3d to use `<tt>checkvpw</tt>` as
- the password checker. This step is dependant on how you have
- installed qmail.
- <itemize>
- <item>
- Replace `<tt>checkpassword</tt>` in the command you use to
- invoke qmail-popup/qmail-pop3d (either in
- `<tt>/etc/inet.conf</tt>` or in a `<tt>tcpserver</tt>`
- command) with `<tt>checkvpw</tt>`.
- <item>
- And/Or at the prompt type: `<tt>echo checkvpw >
- /var/qmail/control/checkpassword</tt>`
- </itemize>
- <item>
- Set up the vmailmgr files:
- <itemize>
- <item>
- Either change user to the user you just created (for example,
- type `<tt>su - myuser</tt>`) or log in (with either telnet or
- at the console) as the new user.
- <item>
- Set up the base vmailmgr files by running `<tt>vsetup</tt>`.
- <item>
- Use the included programs to add users and aliases.
- For our example, we would type the following commands:
-<verb>
- vadduser me
- vaddalias myself me
- vaddalias myname me
-</verb>
- </itemize>
-</enum>
- After you have completed all these steps, you will need to kill and
- restart `<tt>qmail-send</tt>` to make it read the new
- `<tt>virtualdomains</tt>` table.
-<p>
- If you are using `<tt>inetd</tt>` to launch `<tt>qmail-popup</tt>`,
- `<tt>kill -HUP</tt>` the `<tt>inetd</tt>` process as well.
-</p>
-
-<sect1>Using one IP address for mutiple domains
-<p>
- There are two ways to log in without using multiple IP addresses.
-<p>
-<enum>
- <item>
- The first way is to log in as
- `<tt>userSEPvirtual.domain.org</tt>`, where `<tt>user</tt>` is the
- mailbox name of the virtual user, SEP is one of `<tt>@</tt>` or
- `<tt>:</tt>` (by default, this is configurable in the
- `<tt>/etc/vmailmgr/</tt>' directory), and
- `<tt>virtual.domain.org</tt>' is the virtual domain's name, as
- listed in `<tt>/var/qmail/control/virtualdomains</tt>'.
- <item>
- The second way is to use the internal form of the mailbox name --
- that is, `<tt>baseuser-user</tt>', where `<tt>user</tt>' is the
- same as above, and `<tt>baseuser</tt>' is the username of the
- managing user.
-</enum>
- Example: `<tt>/var/qmail/control/virtualdomains</tt>' contains
-<verb>
- testdomain.org:testuser
-</verb>
- User `<tt>myuser</tt>' exists, and has set up a virtual mailbox with
- the name `<tt>me</tt>'. The `<tt>separators</tt>' variable in
- `<tt>/etc/vmailmgr/</tt>' contains `<tt>@:</tt>'. This virtual user
- could log in as `<tt>me@mydomain.com</tt>',
- `<tt>me:mydomain.cm</tt>', or `<tt>myuser-me</tt>'.
-<p>
-
-<sect1>Catching all misdirected mail in a virtual domain
-<p>
- In the `<tt>vmailmgr/</tt>' configuration directory, there is an
- entry called `<tt>default-username</tt>'. If mail to a virtual
- domain does not match any users or aliases in that domain, it is
- delivered to the name listed in this configuration item if it exists
- (which defaults to `<tt>+</tt>'). To make this deliver to you,
- simply type:
-<verb>
- vaddalias + me
-</verb>
-</p>
-
-<sect1>VMailMgr IMAP support
-<p>
- VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with
- an authentication module for VMailMgr. This means that some minor
- work is required for making the two work together.
-<itemize>
- <item>
- You must copy `<tt>/usr/bin/authvmailmgr</tt>` to
- `<tt>/usr/lib/courier-imap/libexec/authlib/authvmailmgr</tt>`.
- <item>
- Then modify the `<tt>AUTHMODULES</tt>` statement in
- `<tt>/usr/lib/courier-imap/etc/imapd.config</tt>` and add
- `<tt>authvmailmgr</tt>` as the first authentication module.
-</itemize>
-</p>
-
-<sect1>Enabling enforcement of virtual user quotas
-<p>
- VMailMgr supports per-virtual-user quotas, but not out of the box,
- as it is not needed by the majority of users, and requires an extra
- program to be run on each delivery.
- To configure quota support, create the file
- `<tt>/etc/vmailmgr/vdeliver-predeliver</tt>`, containing
- the following:
-<verb>
- #!/bin/sh
- /usr/bin/vcheckquota
-</verb>
- This is executed as a shell script, so you will need to make it
- executable by running the following command:
-<verb>
- chmod +x /etc/vmailmgr/vdeliver-predeliver
-</verb>
-</p>
-
-<sect1>Enabling processing of autoresponses
-<p>
- Download and install the qmail-autoresponder package, found at
- <url url="http://em.ca/~bruceg/qmail-autoresponder/">.
- As with the above section, create a shell script
- `<tt>/etc/vmailmgr/vdeliver-postdeliver</tt>`, containing the
- following:
-<verb>
- #!/bin/sh
- if test -s $MAILDIR/autoresponse/message.txt
- then
- qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
- fi
-</verb>
-</p>
-
-<sect1>Web-based interfaces for vmailmgr
-<p>
- There are currently a few working solutions to administrate
- your vmailmgr system via a web interface. Only requirement is
- that the vmailmgrd daemon is running, and that you have
- a webserver on your system.
-<enum>
- <item>
- For Python fans, there is vpyadmin by Bruce Guenter. The files can
- be downloaded at <url url="http://em.ca/~bruceg/vpyadmin/">, and
- the development code is online at <url
- url="http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/">
- (sample.org / samplevm).
- <item>
- And if you like PHP, you can use oMail-admin by Olivier Müller:
- it fully supports all vmailmgr functions, and speaks englich,
- french, italian, spanish, german and russian. Project homepage:
- <url url="http://omail.omnis.ch">. Online demo:
- <url url="http://admin.omnis.ch/omail/"> (test.com / test).
- <item>
- And there are also C-based CGI scripts in the <tt>cgi</tt>
- directory of the vmailmgr distribution.
-</enum>
-</p>
-
-</article>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/HOWTO.texi Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,393 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename HOWTO.info
+@settitle VMailMgr HOWTO
+@setchapternewpage off
+@paragraphindent 5
+@footnotestyle end
+@c %**end of header
+
+@ifinfo
+Copyright @copyright{} 1998 Bruce Guenter
+@end ifinfo
+
+@titlepage
+@title Vmailmgr HOWTO
+@author Bruce Guenter
+@author Dan Kuykendall
+@subtitle @today{}
+@end titlepage
+
+@ifinfo
+This document explains how to setup VMailMgr support pop3 virtual domain
+services in conjunction with Qmail.
+@end ifinfo
+
+@c ****************************************************************************
+@chapter Introduction
+
+VMailMgr (an abbreviation for Virtual Mail Manager) is a package of programs
+designed to manage multiple domains of mail addresses and mailboxes
+on a single host. It co-operates with qmail for mail delivery and
+program control.
+
+@section What is VMailMgr and why should I use it?
+
+VMailMgr is a series of utilities for managing virtual domains, including:
+@itemize
+@item
+a password checking interface for qmail, which replaces the usual
+checkpassword, and
+@item
+an authentication module for Courier IMAP
+@end itemize
+
+These utilities provide access to the virtual mailboxes by one of three
+methods:
+
+@itemize
+@item
+IP-based virtual server access (invisible to the POP3 user)
+@item
+username-based access (virtual user logs in as @samp{username-virtualuser})
+@item
+hostname-based access (virtual user logs in as @samp{virtualuser@@virtual.host}
+or @samp{virtualuser:virtual.host})
+@end itemize
+
+You should use VMailMgr if you prefer to have each domain controlled by a
+seperate username, allowing the use of system quotas and better
+security.
+
+@section New versions
+
+The newest version of this document can be found on the VMailMgr homepage
+@uref{http://www.vmailmgr.org/} in various formats, including the
+texinfo source and HTML and plaintext versions.
+
+@section Comments
+
+Comments on this HOWTO should be directed to the VMailMgr mailing
+list. To subscribe, send a blank email to
+@email{vmailmgr-subscribe@@lists.untroubled.org}.
+
+@section History
+
+This document was started by Bruce Guenter and reworked by Dan
+Kuykendall, then by Charles Cazabon.
+
+@section Copyrights and Trademarks
+
+Copyright @copyright{} Dan Kuykendall.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation
+
+A copy of the license is available at
+@uref{http://www.gnu.org/copyleft/fdl.txt,GNU Free Documentation License}.
+
+@section Acknowledgements and Thanks
+
+Thanks to Bruce Guenter for VMailMgr and the core of this
+HOWTO. Thanks to Mike Bell, who always seems to have the answers to
+my questions. Finally, thanks to all those on the
+@email{vmailmgr@@lists.untroubled.org}
+mailing list who have helped me, or asked the same stuff so many
+times that I had to write this to stop the repeat questions.
+
+@c ****************************************************************************
+@chapter Installation
+
+@section Get the files
+
+Visit the VMailMgr website @uref{http://www.vmailmgr.org/} or one of its
+mirror sites to download the package. There are two primary methods of
+installing:
+
+@itemize
+@item
+from source
+
+@item
+from a binary package -- specifically, an @code{RPM} binary package
+
+@end itemize
+
+If you get the binary RPMS you will need at least the vmailmgr package.
+
+@section Install with RPMS
+
+To install from binary @code{RPM} packages, you can download the binaries,
+or build them from the source RPM package.
+
+@subsection Compiling the Source RPM (SRPM) Package
+
+If you download the binary packages directly, skip to the next step.
+
+Download the source rpm package (@samp{vmailmgr-@var{VERSION}.src.rpm}),
+and then use the @code{rpm} tool to build the binary RPM package from it
+with the @samp{rpm --rebuild} command as follows:
+
+@example
+rpm --rebuild vmailmgr-1.0.0-1.src.rpm
+@end example
+
+@subsection Installing the Binary RPM packages
+
+After compiling the source RPM, the binary RPM packages will be located
+in the appropriate output directory (typically
+@file{/usr/src/redhat/RPMS/i386/}).
+
+Install each package using the @samp{-i} option of @code{rpm} (i.e.
+@samp{rpm -ivh @var{PACKAGE}.i386.rpm}) as follows:
+
+@example
+rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-1.0.0-1.i386.rpm
+rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-1.0.0-1.i386.rpm
+@end example
+
+@section Install from source
+
+If you dont use RPM packages, you can install from source with the following
+commands. First, as a regular, non-root user:
+
+@example
+tar xzf @file{vmailmgr-@var{VERSION}.tar.gz}
+cd @file{vmailmgr-@var{VERSION}}
+./configure
+make
+@end example
+
+Then, as user @samp{root}:
+
+@example
+make install
+@end example
+
+@c ****************************************************************************
+@chapter Setup
+
+In the following setup examples, it is assumed that your binaries are installed
+in the @file{/usr/bin]} directory, and configuration files are located in the
+@file{/etc/vmailmgr/} directory, as is the case if you installed from the RPMs.
+
+If you installed from source, configure instead puts the binaries into
+@file{/usr/local/bin/} and the configuration into
+@file{/usr/local/etc/vmailmgr/} by default.
+
+@section Setting Up a Virtual Domain
+
+The following steps are necessary to set up a virtual domain with
+vmailmgr (assuming vmailmgr has been compiled and installed). As an
+example, we'll set up a virtual user @samp{me@@mydomain.org},
+with aliases of @samp{myself@@mydomain.org} and
+@samp{myname@@mydomain.org}.
+
+@enumerate
+@item
+Set up a DNS entry for the domain. This is not covered here, as it
+is dependant on far too many other things. I will mention that to
+make IP based virtual domains work a @samp{PTR} record which matches an
+entry in virtualdomains is nessesary, for example, if nslookup
+10.56.33.122 returns @samp{mail.mydomain.com},
+@file{control/virtualdomains} needs an entry like
+@samp{mail.mydomain.com:myuser}.
+
+For the example, we'll assume that the mail exchanger for
+@samp{mydomain.org} is already set up to point to your computer.
+
+@item
+Set up a base user for the domain. Create a user, with a name of
+your choosing. Since the maildirs for all the users in the
+virtual domain will be stored under this user's home directory,
+make sure you set the user up in a partition or disk that is
+appropriate for such storage. The tools that you should use to
+accomplish this step vary greatly between different systems. For
+our example, I'll add a user @samp{myuser}.
+
+@item
+Configure qmail to recognize the domain. To do this, you need to
+modify two of qmail's configuration files in
+@file{/var/qmail/control}: @file{rcpthosts} and @file{virtualdomains}.
+@itemize
+@item
+To @file{rcpthosts}, add the line @samp{mydomain.org}.
+@item
+To @file{virtualdomains}, add the line @samp{mydomain.org:myuser}.
+@end itemize
+
+If you wish to have mail to @samp{anything.mydomain.org}
+be delivered in the same way:
+@itemize
+@item
+To @file{rcpthosts}, add the line @samp{.mydomain.org}.
+@item
+To @file{virtualdomains}, add the line @samp{.mydomain.org:myuser}.
+@end itemize
+
+@item
+Configure @code{qmail-popup}/@code{qmail-pop3d} to use @code{checkvpw} as the
+password checker. This step is dependant on how you have installed qmail.
+@itemize
+@item
+Replace @code{checkpassword} in the command you use to
+invoke @code{qmail-popup}/@code{qmail-pop3d} (either in
+@file{/etc/inet.conf} or in a @code{tcpserver}
+command) with @code{checkvpw}.
+@item
+And/Or at the prompt type @samp{echo checkvpw > @file{/var/qmail/control/checkpassword}}.
+@end itemize
+
+@item
+Set up the vmailmgr files:
+@itemize
+@item
+Either change user to the user you just created (for example,
+type @samp{su - myuser}) or log in (with either telnet or
+at the console) as the new user.
+@item
+Set up the base vmailmgr files by running @code{vsetup}.
+@item
+Use the included programs to add users and aliases.
+For our example, we would type the following commands:
+
+@example
+vadduser me
+vaddalias myself me
+vaddalias myname me
+@end example
+
+@end itemize
+
+@end enumerate
+
+After you have completed all these steps, you will need to kill and
+restart @code{qmail-send} to make it read the new
+@file{virtualdomains} control file.
+
+If you are using @code{inetd} to launch @code{qmail-popup},
+@samp{kill -HUP} the @code{inetd} process as well.
+
+@section Using one IP address for mutiple domains
+
+There are two ways to log in without using multiple IP addresses.
+
+@enumerate
+@item
+The first way is to log in as
+@samp{user@var{SEP}virtual.domain.org}, where @samp{user} is the
+mailbox name of the virtual user, @var{SEP} is one of @samp{@@} or
+@samp{:} (by default; this is configurable in the
+@file{/etc/vmailmgr/} directory), and
+@samp{virtual.domain.org} is the virtual domain's name, as
+listed in @file{/var/qmail/control/virtualdomains}.
+
+@item
+The second way is to use the internal form of the mailbox name --
+that is, @samp{baseuser-user}, where @samp{user} is the
+same as above, and @samp{baseuser} is the username of the
+managing user.
+
+@end enumerate
+
+For example, if @file{/var/qmail/control/virtualdomains} contains
+@samp{mydomain.com:myuser} and user @samp{myuser} exists and has
+set up a virtual mailbox with the name @samp{me}, and the
+@file{separators} configuration file @file{/etc/vmailmgr/} contains @samp{@@},
+this virtual user could log in as @samp{me@@mydomain.com},
+@samp{me:mydomain.com}, or @samp{myuser-me}.
+
+@section Catching all misdirected mail in a virtual domain
+
+In the @code{vmailmgr} configuration directory, there is a
+file called @file{default-username}. If mail to a virtual
+domain does not match any users or aliases in that domain, it is
+delivered to the name listed in this configuration item if it exists
+(which defaults to @samp{+}). To make this deliver to you,
+simply type @samp{vaddalias + me}.
+
+@section VMailMgr IMAP support
+
+VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with
+an authentication module for VMailMgr. This means that some minor
+work is required for making the two work together.
+
+The steps are:
+
+@itemize
+@item
+Copy @file{/usr/bin/authvmailmgr} to
+@file{/usr/lib/courier-imap/libexec/authlib/authvmailmgr}.
+
+@item
+Modify the @code{AUTHMODULES} statement in
+@file{/usr/lib/courier-imap/etc/imapd.config} and add
+@samp{authvmailmgr} as the first authentication module.
+@end itemize
+
+@section Enabling enforcement of virtual user quotas
+
+VMailMgr supports per-virtual-user quotas, but not out of the box,
+as it is not needed by the majority of users, and requires an extra
+program to be run on each delivery.
+
+To configure quota support, create the file
+@file{/etc/vmailmgr/vdeliver-predeliver}, containing
+the following:
+
+@example
+#!/bin/sh
+/usr/bin/vcheckquota
+@end example
+
+This is executed as a shell script, so you will need to make it
+executable by running the command @samp{chmod +x /etc/vmailmgr/vdeliver-predeliver}.
+
+@section Enabling processing of autoresponses
+
+Download and install the qmail-autoresponder package, found at
+@uref{http://untroubled.org/qmail-autoresponder/}.
+
+As with the above section, create a shell script
+@file{/etc/vmailmgr/vdeliver-postdeliver}, containing the following:
+
+@example
+#!/bin/sh
+if test -s $MAILDIR/autoresponse/message.txt ; then
+ qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
+fi
+@end example
+
+@section Web-based interfaces for vmailmgr
+
+There are currently a few working solutions to administrate
+your vmailmgr system via a web interface. Only requirement is
+that the vmailmgrd daemon is running, and that you have
+a webserver on your system.
+
+@itemize
+@item
+For Python fans, there is vpyadmin by Bruce Guenter. The files can
+be downloaded at @uref{http://untroubled.org/vpyadmin/}, and
+the development code is online at
+@uref{http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/}
+(sample.org / samplevm).
+
+@item
+And if you like PHP, you can use oMail-admin by Olivier Müller:
+it fully supports all vmailmgr functions, and speaks englich,
+french, italian, spanish, german and russian. Project homepage:
+@uref{http://omail.omnis.ch}. Online demo:
+@uref{http://admin.omnis.ch/omail/} (test.com / test).
+
+@item
+And there are also C-based CGI scripts in the @file{cgi}
+subdirectory of the vmailmgr distribution.
+
+@end itemize
+
+@contents
+
+@bye
+
--- a/doc/HOWTO.txt Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/HOWTO.txt Sun Jan 20 00:22:09 2008 +0100
@@ -1,396 +1,455 @@
- VMailMgr HOWTO
- Bruce Guenter <mailto:bruceg@em.ca>, Dan Kuykendall
- <mailto:dan@kuykendall.org>
- v1.w, 2000-09-15
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ Copyright (C) 1998 Bruce Guenter
+
+ This document explains how to setup VMailMgr support pop3 virtual
+ domain services in conjunction with Qmail.
+
+ 1. Introduction
- This document explains how to setup VMailMgr support pop3 virtual
- domain services in conjunction with Qmail.
- ______________________________________________________________________
+ VMailMgr (an abbreviation for Virtual Mail Manager) is a package of
+ programs designed to manage multiple domains of mail addresses and
+ mailboxes on a single host. It co-operates with qmail for mail
+ delivery and program control.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- Table of Contents
+1.1 What is VMailMgr and why should I use it?
+ VMailMgr is a series of utilities for managing virtual domains,
+ including:
+ * a password checking interface for qmail, which replaces the usual
+ checkpassword, and
+ * an authentication module for Courier IMAP
- 1. Introduction
+ These utilities provide access to the virtual mailboxes by one of
+ three methods:
- 1.1 What is VMailMgr and why should I use it?
- 1.2 New versions
- 1.3 Comments
- 1.4 History
- 1.5 Copyrights and Trademarks
- 1.6 Acknowledgements and Thanks
+ * IP-based virtual server access (invisible to the POP3 user)
+ * username-based access (virtual user logs in as
+ `username-virtualuser')
+ * hostname-based access (virtual user logs in as
+ `virtualuser@virtual.host' or `virtualuser:virtual.host')
+
+ You should use VMailMgr if you prefer to have each domain controlled
+ by a seperate username, allowing the use of system quotas and better
+ security.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.2 New versions
- 2. Installation
+ The newest version of this document can be found on the VMailMgr
+ homepage http://www.vmailmgr.org/ in various formats, including the
+ texinfo source and HTML and plaintext versions.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.3 Comments
- 2.1 Get the files
- 2.2 Install with RPMS
- 2.2.1 Compiling SRC.RPM's
- 2.2.2 Installing RPM's
- 2.3 Install with source
+ Comments on this HOWTO should be directed to the VMailMgr mailing
+ list. To subscribe, send a blank email to
+ vmailmgr-subscribe@lists.untroubled.org.
+ _________________________________________________________________
- 3. Setup
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.4 History
- 3.1 Setting Up a Virtual Domain
- 3.2 Using one IP address for mutiple domains
- 3.3 Catching all misdirected mail in a virtual domain
- 3.4 VMailMgr IMAP support
- 3.5 Enabling enforcement of virtual user quotas
- 3.6 Enabling processing of autoresponses
- 3.7 Web-based interfaces for vmailmgr
+ This document was started by Bruce Guenter and reworked by Dan
+ Kuykendall, then by Charles Cazabon.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.5 Copyrights and Trademarks
+
+ Copyright (C) Dan Kuykendall.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1 or
+ any later version published by the Free Software Foundation
+ A copy of the license is available at GNU Free Documentation License.
+ _________________________________________________________________
- ______________________________________________________________________
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+1.6 Acknowledgements and Thanks
- 11.. IInnttrroodduuccttiioonn
+ Thanks to Bruce Guenter for VMailMgr and the core of this HOWTO.
+ Thanks to Mike Bell, who always seems to have the answers to my
+ questions. Finally, thanks to all those on the
+ vmailmgr@lists.untroubled.org mailing list who have helped me, or
+ asked the same stuff so many times that I had to write this to stop
+ the repeat questions.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- VMailMgr (short for Virtual MAIL ManaGeR) is a package of programs
- designed to manage multiple domains of mail addresses and mailboxes on
- a single host. It co-operates with qmail for mail delivery and program
- control.
+ 2. Installation
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.1 Get the files
- 11..11.. WWhhaatt iiss VVMMaaiillMMggrr aanndd wwhhyy sshhoouulldd II uussee iitt??
+ Visit the VMailMgr website http://www.vmailmgr.org/ or one of its
+ mirror sites to download the package. There are two primary methods of
+ installing:
- VMailMgr is:
+ * from source
+ * from a binary package -- specifically, an RPM binary package
+
+ If you get the binary RPMS you will need at least the vmailmgr
+ package.
+ _________________________________________________________________
- A series of utilities for managing virtual domains which include a
- password checking interface for qmail which replaces the usual
- checkpassword, and an authentication module for Courier IMAP, that
- provide access to the virtual mailboxes by one of three methods:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.2 Install with RPMS
+
+ To install from binary RPM packages, you can download the binaries, or
+ build them from the source RPM package.
+ _________________________________________________________________
- +o IP-based virtual server access (invisible to the POP3 user)
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 2.2.1 Compiling the Source RPM (SRPM) Package
- +o username-based access (username-virtualuser)
+ If you download the binary packages directly, skip to the next step.
- +o hostname-based access (virtualuser@virtual.host or
- virtualuser:virtual.host)
+ Download the source rpm package (`vmailmgr-VERSION.src.rpm'), and then
+ use the rpm tool to build the binary RPM package from it with the `rpm
+ --rebuild' command as follows:
- You should use it if you prefer to have each domain controlled by a
- seperate username, allowing the use of system quotas and better
- security
-
- 11..22.. NNeeww vveerrssiioonnss
-
- The newest version of this can be found on the VMailMgr homepage
- <http://www.vmailmgr.org/> in its HTML version as well as in the
- source package SGML source, HTML, and text. Other versions may be
- found in different formats at the LDP homepage
- <http://www.linuxdoc.org/>.
-
- 11..33.. CCoommmmeennttss
+rpm --rebuild vmailmgr-1.0.0-1.src.rpm
+ _________________________________________________________________
- Comments on this HOWTO should be directed to the VMailMgr mailing
- list. To subscribe, send an email to vmailmgr-subscribe@lists.em.ca
- <mailto:vmailmgr-subscribe@lists.em.ca>.
-
- 11..44.. HHiissttoorryy
-
- This document was started by Bruce Guenter and reworked by Dan
- Kuykendall.
-
- 11..55.. CCooppyyrriigghhttss aanndd TTrraaddeemmaarrkkss
-
- Copyright (c) Dan Kuykendall. Permission is granted to copy,
- distribute and/or modify this document under the terms of the GNU Free
- Documentation License, Version 1.1 or any later version published by
- the Free Software Foundation
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- A copy of the license is available at GNU Free Documentation License
- <http://www.gnu.org/copyleft/fdl.txt>.
-
- 11..66.. AAcckknnoowwlleeddggeemmeennttss aanndd TThhaannkkss
-
- Thanks to Bruce Guenter for VMailMgr and the core of this HOWTO.
- Thanks to Mike Bell, who always seems to have the answers to my
- questions. Finally, thanks to all those on the vmailmgr@lists.em.ca
- <mailto:vmailmgr@lists.em.ca> mailing list who have helped me, or
- asked the same stuff so many times that I had to write this to stop
- the repeat questions.
-
- 22.. IInnssttaallllaattiioonn
-
- 22..11.. GGeett tthhee ffiilleess
+ 2.2.2 Installing the Binary RPM packages
- Visit the VMailMgr website <http://www.vmailmgr.org/> to get the
- package.
-
- If you get the binary RPMS you will need at least the vmailmgr
- package.
-
- 22..22.. IInnssttaallll wwiitthh RRPPMMSS
+ After compiling the source RPM, the binary RPM packages will be
+ located in the appropriate output directory (typically
+ `/usr/src/redhat/RPMS/i386/').
- 22..22..11.. CCoommppiilliinngg SSRRCC..RRPPMM''ss
-
- Simply compile the src.rpm file with the `rpm --rebuild` command.
- -Example-
-
- ______________________________________________________________________
- rpm -ivh vmailmgr-0.96.9-1.src.rpm
- ______________________________________________________________________
+ Install each package using the `-i' option of rpm (i.e. `rpm -ivh
+ PACKAGE.i386.rpm') as follows:
-
-
- 22..22..22.. IInnssttaalllliinngg RRPPMM''ss
-
- After compiling the source rpms, the binaries will be located in
- `/usr/src/redhat/RPMS/i386/` or something similar.
-
- Simply run the following command for each package
-
- rpm -ivh <location>/<package.i386.rpm>
+rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-1.0.0-1.i386.rpm
+rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-1.0.0-1.i386.rpm
+ _________________________________________________________________
-
- -Example-
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- ______________________________________________________________________
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-0.96.9-1.i386.rpm
- rpm -ivh /usr/src/redhat/RPMS/i386/vmailmgr-daemon-0.96.9-1.i386.rpm
- ______________________________________________________________________
+2.3 Install from source
-
-
+ If you dont use RPM packages, you can install from source with the
+ following commands. First, as a regular, non-root user:
- 22..33.. IInnssttaallll wwiitthh ssoouurrccee
-
- If you dont ue RPMS you can install from source.
-
- Run the following command
+tar xzf `vmailmgr-VERSION.tar.gz'
+cd `vmailmgr-VERSION'
+./configure
+make
- (As non-root user)
- tar zxf <package.tar.gz>
- cd <newly created dir>
- ./configure
- make
- (As root)
- make install
-
-
- -Example-
-
- ______________________________________________________________________
- (As non-root user)
- tar zxf vmailmgr-0.96.9.tar.gz
- cd vmailmgr-0.96.9
- ./configure
- make
- (As root)
- make install
- ______________________________________________________________________
+ Then, as user `root':
- That should do it.
+make install
+ _________________________________________________________________
- 33.. SSeettuupp
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- In the following setup examples, it is assumed that your binaries are
- installed in `/usr/bin`, and configuration is in `/etc/vmailmgr`, as
- is the case if you installed from the RPMs. If you installed from
- source, configure puts the binaries into `/usr/local/bin` and the
- configuration into `/usr/local/etc/vmailmgr` by default.
+ 3. Setup
- 33..11.. SSeettttiinngg UUpp aa VViirrttuuaall DDoommaaiinn
-
- The following steps are necessary to set up a virtual domain with
- vmailmgr (assuming vmailmgr has been compiled and installed). As an
- example, we'll set up a virtual user `me@mydomain.org`, with aliases
- of `myself@mydomain.org` and `myname@mydomain.org`.
+ In the following setup examples, it is assumed that your binaries are
+ installed in the `/usr/bin]' directory, and configuration files are
+ located in the `/etc/vmailmgr/' directory, as is the case if you
+ installed from the RPMs.
- 1. Set up a DNS entry for the domain. This is not covered here, as it
- is dependant on far too many other things. I will mention that to
- make IP based virtual domains work a PTR record which matches an
- entry in virtualdomains is nessesary, for example, if nslookup
- 10.56.33.122 returns mail.mydomain.com, `virtualdomains` needs an
- entry like `mail.mydomain.com:myuser' For the example, we'll assume
- that the mail exchanger for mydomain.org is already set up to point
- to your computer.
+ If you installed from source, configure instead puts the binaries into
+ `/usr/local/bin/' and the configuration into
+ `/usr/local/etc/vmailmgr/' by default.
+ _________________________________________________________________
- 2. Set up a base user for the domain. Create a user, with a name of
- your choosing. Since the maildirs for all the users in the virtual
- domain will be stored under this user's home directory, make sure
- you set the user up in a partition or disk that is appropriate for
- such storage. The tools that you should use to accomplish this step
- vary greatly between different systems. For our example, I'll add a
- user `myuser`.
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.1 Setting Up a Virtual Domain
- 3. Configure qmail to recognize the domain. To do this, you need to
- modify two of qmail's configuration files in `/var/qmail/control`
- `rcpthosts` and `virtualdomains`.
-
- +o To `rcpthosts` : add the line `mydomain.org`.
-
- +o To `virtualdomains` : add the line `mydomain.org:myuser`.
-
- If you wish to have mail to `anything.mydomain.org` be delivered in
- the same way, add the following
-
- +o To `rcpthosts` : add the line `.mydomain.org`.
-
- +o To `virtualdomains` : add the line `.mydomain.org:myuser`.
+ The following steps are necessary to set up a virtual domain with
+ vmailmgr (assuming vmailmgr has been compiled and installed). As an
+ example, we'll set up a virtual user `me@mydomain.org', with aliases
+ of `myself@mydomain.org' and `myname@mydomain.org'.
- 4. Configure qmail-popup/qmail-pop3d to use `checkvpw` as the password
- checker. This step is dependant on how you have installed qmail.
-
- +o Replace `checkpassword` in the command you use to invoke qmail-
- popup/qmail-pop3d (either in `/etc/inet.conf` or in a `tcpserver`
- command) with `checkvpw`.
-
- +o And/Or at the prompt type: `echo checkvpw >
- /var/qmail/control/checkpassword`
-
- 5. Set up the vmailmgr files:
-
- +o Either change user to the user you just created (for example, type
- `su - myuser`) or log in (with either telnet or at the console) as
- the new user.
-
- +o Set up the base vmailmgr files by running `vsetup`.
-
- +o Use the included programs to add users and aliases. For our
- example, we would type the following commands:
-
- vadduser me
- vaddalias myself me
- vaddalias myname me
-
-
-
- After you have completed all these steps, you will need to kill and
- restart `qmail-send` to make it read the new `virtualdomains` table.
-
- If you are using `inetd` to launch `qmail-popup`, `kill -HUP` the
- `inetd` process as well.
-
-
- 33..22.. UUssiinngg oonnee IIPP aaddddrreessss ffoorr mmuuttiippllee ddoommaaiinnss
-
- There are two ways to log in without using multiple IP addresses.
-
-
- 1. The first way is to log in as `userSEPvirtual.domain.org`, where
- `user` is the mailbox name of the virtual user, SEP is one of `@`
- or `:` (by default, this is configurable in the `/etc/vmailmgr/'
- directory), and `virtual.domain.org' is the virtual domain's name,
- as listed in `/var/qmail/control/virtualdomains'.
-
- 2. The second way is to use the internal form of the mailbox name --
- that is, `baseuser-user', where `user' is the same as above, and
- `baseuser' is the username of the managing user.
-
- Example: `/var/qmail/control/virtualdomains' contains
-
- testdomain.org:testuser
+ 1. Set up a DNS entry for the domain. This is not covered here, as it
+ is dependant on far too many other things. I will mention that to
+ make IP based virtual domains work a `PTR' record which matches an
+ entry in virtualdomains is nessesary, for example, if nslookup
+ 10.56.33.122 returns `mail.mydomain.com', `control/virtualdomains'
+ needs an entry like `mail.mydomain.com:myuser'.
+ For the example, we'll assume that the mail exchanger for
+ `mydomain.org' is already set up to point to your computer.
+ 2. Set up a base user for the domain. Create a user, with a name of
+ your choosing. Since the maildirs for all the users in the virtual
+ domain will be stored under this user's home directory, make sure
+ you set the user up in a partition or disk that is appropriate for
+ such storage. The tools that you should use to accomplish this
+ step vary greatly between different systems. For our example, I'll
+ add a user `myuser'.
+ 3. Configure qmail to recognize the domain. To do this, you need to
+ modify two of qmail's configuration files in `/var/qmail/control':
+ `rcpthosts' and `virtualdomains'.
+ + To `rcpthosts', add the line `mydomain.org'.
+ + To `virtualdomains', add the line `mydomain.org:myuser'.
+ If you wish to have mail to `anything.mydomain.org' be delivered
+ in the same way:
+ + To `rcpthosts', add the line `.mydomain.org'.
+ + To `virtualdomains', add the line `.mydomain.org:myuser'.
+ 4. Configure qmail-popup/qmail-pop3d to use checkvpw as the password
+ checker. This step is dependant on how you have installed qmail.
+ + Replace checkpassword in the command you use to invoke
+ qmail-popup/qmail-pop3d (either in `/etc/inet.conf' or in a
+ tcpserver command) with checkvpw.
+ + And/Or at the prompt type `echo checkvpw >
+ `/var/qmail/control/checkpassword''.
+ 5. Set up the vmailmgr files:
+ + Either change user to the user you just created (for example,
+ type `su - myuser') or log in (with either telnet or at the
+ console) as the new user.
+ + Set up the base vmailmgr files by running vsetup.
+ + Use the included programs to add users and aliases. For our
+ example, we would type the following commands:
- User `myuser' exists, and has set up a virtual mailbox with the name
- `me'. The `separators' variable in `/etc/vmailmgr/' contains `@:'.
- This virtual user could log in as `me@mydomain.com', `me:mydomain.cm',
- or `myuser-me'.
+vadduser me
+vaddalias myself me
+vaddalias myname me
+
+ After you have completed all these steps, you will need to kill and
+ restart qmail-send to make it read the new `virtualdomains' control
+ file.
+
+ If you are using inetd to launch qmail-popup, `kill -HUP' the inetd
+ process as well.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.2 Using one IP address for mutiple domains
+
+ There are two ways to log in without using multiple IP addresses.
-
+ 1. The first way is to log in as `userSEPvirtual.domain.org', where
+ `user' is the mailbox name of the virtual user, SEP is one of `@'
+ or `:' (by default; this is configurable in the `/etc/vmailmgr/'
+ directory), and `virtual.domain.org' is the virtual domain's name,
+ as listed in `/var/qmail/control/virtualdomains'.
+ 2. The second way is to use the internal form of the mailbox name --
+ that is, `baseuser-user', where `user' is the same as above, and
+ `baseuser' is the username of the managing user.
- 33..33.. CCaattcchhiinngg aallll mmiissddiirreecctteedd mmaaiill iinn aa vviirrttuuaall ddoommaaiinn
+ For example, if `/var/qmail/control/virtualdomains' contains
+ `mydomain.com:myuser' and user `myuser' exists and has set up a
+ virtual mailbox with the name `me', and the `separators' configuration
+ file `/etc/vmailmgr/' contains `@', this virtual user could log in as
+ `me@mydomain.com', `me:mydomain.com', or `myuser-me'.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
- In the `vmailmgr/' configuration directory, there is an entry called
- `default-username'. If mail to a virtual domain does not match any
- users or aliases in that domain, it is delivered to the name listed in
- this configuration item if it exists (which defaults to `+'). To make
- this deliver to you, simply type:
+3.3 Catching all misdirected mail in a virtual domain
+
+ In the vmailmgr configuration directory, there is a file called
+ `default-username'. If mail to a virtual domain does not match any
+ users or aliases in that domain, it is delivered to the name listed in
+ this configuration item if it exists (which defaults to `+'). To make
+ this deliver to you, simply type `vaddalias + me'.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.4 VMailMgr IMAP support
+
+ VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with an
+ authentication module for VMailMgr. This means that some minor work is
+ required for making the two work together.
- vaddalias + me
+ The steps are:
+
+ * Copy `/usr/bin/authvmailmgr' to
+ `/usr/lib/courier-imap/libexec/authlib/authvmailmgr'.
+ * Modify the AUTHMODULES statement in
+ `/usr/lib/courier-imap/etc/imapd.config' and add `authvmailmgr' as
+ the first authentication module.
+ _________________________________________________________________
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.5 Enabling enforcement of virtual user quotas
+
+ VMailMgr supports per-virtual-user quotas, but not out of the box, as
+ it is not needed by the majority of users, and requires an extra
+ program to be run on each delivery.
+
+ To configure quota support, create the file
+ `/etc/vmailmgr/vdeliver-predeliver', containing the following:
- 33..44.. VVMMaaiillMMggrr IIMMAAPP ssuuppppoorrtt
-
- VMailMgr supports Courier-IMAP, but Courier-IMAP does not come with an
- authentication module for VMailMgr. This means that some minor work
- is required for making the two work together.
+#!/bin/sh
+/usr/bin/vcheckquota
- +o You must copy `/usr/bin/authvmailmgr` to `/usr/lib/courier-
- imap/libexec/authlib/authvmailmgr`.
-
- +o Then modify the `AUTHMODULES` statement in `/usr/lib/courier-
- imap/etc/imapd.config` and add `authvmailmgr` as the first
- authentication module.
-
- 33..55.. EEnnaabblliinngg eennffoorrcceemmeenntt ooff vviirrttuuaall uusseerr qquuoottaass
+ This is executed as a shell script, so you will need to make it
+ executable by running the command `chmod +x
+ /etc/vmailmgr/vdeliver-predeliver'.
+ _________________________________________________________________
- VMailMgr supports per-virtual-user quotas, but not out of the box, as
- it is not needed by the majority of users, and requires an extra
- program to be run on each delivery. To configure quota support,
- create the file `/etc/vmailmgr/vdeliver-predeliver`, containing the
- following:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.6 Enabling processing of autoresponses
- #!/bin/sh
- /usr/bin/vcheckquota
-
+ Download and install the qmail-autoresponder package, found at
+ http://untroubled.org/qmail-autoresponder/.
- This is executed as a shell script, so you will need to make it exe-
- cutable by running the following command:
- chmod +x /etc/vmailmgr/vdeliver-predeliver
-
+ As with the above section, create a shell script
+ `/etc/vmailmgr/vdeliver-postdeliver', containing the following:
- 33..66.. EEnnaabblliinngg pprroocceessssiinngg ooff aauuttoorreessppoonnsseess
+#!/bin/sh
+if test -s $MAILDIR/autoresponse/message.txt ; then
+ qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
+fi
+ _________________________________________________________________
- Download and install the qmail-autoresponder package, found at
- <http://em.ca/~bruceg/qmail-autoresponder/>. As with the above
- section, create a shell script `/etc/vmailmgr/vdeliver-postdeliver`,
- containing the following:
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+3.7 Web-based interfaces for vmailmgr
- #!/bin/sh
- if test -s $MAILDIR/autoresponse/message.txt
- then
- qmail-autoresponder $MAILDIR/autoresponse/message.txt $MAILDIR/autoresponse
- fi
+ There are currently a few working solutions to administrate your
+ vmailmgr system via a web interface. Only requirement is that the
+ vmailmgrd daemon is running, and that you have a webserver on your
+ system.
-
+ * For Python fans, there is vpyadmin by Bruce Guenter. The files can
+ be downloaded at http://untroubled.org/vpyadmin/, and the
+ development code is online at
+ http://bruce-guenter.dyndns.org/cgi-bin/vpyadmin/ (sample.org /
+ samplevm).
+ * And if you like PHP, you can use oMail-admin by Olivier Müller: it
+ fully supports all vmailmgr functions, and speaks englich, french,
+ italian, spanish, german and russian. Project homepage:
+ http://omail.omnis.ch. Online demo: http://admin.omnis.ch/omail/
+ (test.com / test).
+ * And there are also C-based CGI scripts in the `cgi' subdirectory
+ of the vmailmgr distribution.
+ _________________________________________________________________
- 33..77.. WWeebb--bbaasseedd iinntteerrffaacceess ffoorr vvmmaaiillmmggrr
+ [Top] [Contents] [Index] [ ? ]
- There are currently a few working solutions to administrate your
- vmailmgr system via a web interface. Only requirement is that the
- vmailmgrd daemon is running, and that you have a webserver on your
- system.
+ Table of Contents
+
+ 1. Introduction
- 1. For Python fans, there is vpyadmin by Bruce Guenter. The files can
- be downloaded at <http://em.ca/~bruceg/vpyadmin/>, and the
- development code is online at <http://bruce-
- guenter.dyndns.org/cgi-bin/vpyadmin/> (sample.org / samplevm).
+ 1.1 What is VMailMgr and why should I use it?
+ 1.2 New versions
+ 1.3 Comments
+ 1.4 History
+ 1.5 Copyrights and Trademarks
+ 1.6 Acknowledgements and Thanks
+
+ 2. Installation
+ 2.1 Get the files
+ 2.2 Install with RPMS
+
+ 2.2.1 Compiling the Source RPM (SRPM) Package
+ 2.2.2 Installing the Binary RPM packages
- 2. And if you like PHP, you can use oMail-admin by Olivier Mller: it
- fully supports all vmailmgr functions, and speaks englich, french,
- italian, spanish, german and russian. Project homepage:
- <http://omail.omnis.ch>. Online demo:
- <http://admin.omnis.ch/omail/> (test.com / test).
+ 2.3 Install from source
+ 3. Setup
+ 3.1 Setting Up a Virtual Domain
+ 3.2 Using one IP address for mutiple domains
+ 3.3 Catching all misdirected mail in a virtual domain
+ 3.4 VMailMgr IMAP support
+ 3.5 Enabling enforcement of virtual user quotas
+ 3.6 Enabling processing of autoresponses
+ 3.7 Web-based interfaces for vmailmgr
+ _________________________________________________________________
- 3. And there are also C-based CGI scripts in the cgi directory of the
- vmailmgr distribution.
+ [Top] [Contents] [Index] [ ? ]
-
+ Short Table of Contents
-
+ 1. Introduction
+ 2. Installation
+ 3. Setup
+ _________________________________________________________________
+ [Top] [Contents] [Index] [ ? ]
+ About this document
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
-
+ The buttons in the navigation panels have the following meaning:
-
-
-
+ Button Name Go to From 1.2.3 go to
+ [ < ] Back previous section in reading order 1.2.2
+ [ > ] Forward next section in reading order 1.2.4
+ [ << ] FastBack previous or up-and-previous section 1.1
+ [ Up ] Up up section 1.2
+ [ >> ] FastForward next or up-and-next section 1.3
+ [Top] Top cover (top) of document
+ [Contents] Contents table of contents
+ [Index] Index concept index
+ [ ? ] About this page
-
+ where the Example assumes that the current position is at
+ Subsubsection One-Two-Three of a document of the following structure:
+ * 1. Section One
-
-
+ * 1.1 Subsection One-One
-
+ * ...
-
+ 1.2 Subsection One-Two
+ * 1.2.1 Subsubsection One-Two-One
+ * 1.2.2 Subsubsection One-Two-Two
+ * 1.2.3 Subsubsection One-Two-Three <== Current Position
+ * 1.2.4 Subsubsection One-Two-Four
-
+ 1.3 Subsection One-Three
+ * ...
+ 1.4 Subsection One-Four
+ _________________________________________________________________
-
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
--- a/doc/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -1,33 +1,35 @@
man_MANS = vmailmgr.7
-noinst_SGMLS = FAQ.sgml HOWTO.sgml
-noinst_TEXINFOS = configuration.texi vmailmgr-cgi.texi
+noinst_TEXINFOS = FAQ.texi HOWTO.texi configuration.texi vmailmgr-cgi.texi
noinst_HTMLS = vmailmgr.html HOWTO.html FAQ.html NEWS.html \
configuration.html ChangeLog.html vmailmgr-cgi.html
noinst_TXTS = HOWTO.txt FAQ.txt \
configuration.txt vmailmgr-cgi.txt protocol.txt \
record-format.txt
noinst_PODS = vmailmgr.pod
-noinst_MISC = translation.ps
+noinst_MISC = FAQ.info FAQ.pdf HOWTO.info HOWTO.pdf \
+ configuration.info translation.pdf translation.ps
EXTRA_DIST = ChangeLog-pre-vmailmgr ChangeLog-pre-0.70 \
changelog2html.pl news2html.pl \
- YEAR2000 translation.fig translation.ps \
+ YEAR2000 translation.fig \
$(man_MANS) \
$(noinst_PODS) \
- $(noinst_SGMLS) \
$(noinst_TEXINFOS) \
$(noinst_HTMLS) \
+ $(noinst_MISC) \
$(noinst_TXTS)
-CLEANFILES = $(noinst_HTMLS) $(man_MANS) \
- HOWTO.txt FAQ.txt configuration.txt vmailmgr-cgi.txt
+CLEANFILES = $(noinst_HTMLS) $(man_MANS) $(noinst_MISC) \
+ HOWTO.txt FAQ.txt configuration.txt vmailmgr-cgi.txt \
+ pod2htmd.tmp pod2htmi.tmp
TEXI2HTML = texi2html -monolithic -number
CL2HTML = perl changelog2html.pl
NEWS2HTML = perl news2html.pl
+FIG2PDF = fig2dev -L pdf -c
FIG2PS = fig2dev -L ps -c
-SGML2HTML = sgml2html --split=0
-SGML2TXT = sgml2txt
+TEXI2PDF = texi2pdf --clean --quiet
+TEXI2INFO = makeinfo --no-split --number-sections
-all: $(noinst_HTMLS) $(noinst_TXTS) $(noinst_MISC)
+all: $(noinst_HTMLS) $(noinst_PDFS) $(noinst_TXTS) $(noinst_MISC)
dist-hook:
touch $(distdir)/*.html
@@ -44,10 +46,11 @@
%.5: %.pod ../configure.in; $(POD2MAN) --section=5 $< >$@
%.7: %.pod ../configure.in; $(POD2MAN) --section=7 $< >$@
%.8: %.pod ../configure.in; $(POD2MAN) --section=8 $< >$@
-%.html: %.sgml; $(SGML2HTML) $<
-%.txt: %.sgml; $(SGML2TXT) $<
%.html: %.pod; $(POD2HTML) $< >$@
%.html: %.texi; $(TEXI2HTML) $< >$@
%.txt: %.html; $(HTML2TXT) $< >$@
+%.pdf: %.texi; $(TEXI2PDF) $<
+%.info: %.texi; $(TEXI2INFO) $<
+%.pdf: %.fig ../configure.in; $(FIG2PDF) $< $@
%.ps: %.fig ../configure.in; $(FIG2PS) $< $@
--- a/doc/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -82,25 +84,26 @@
pythonlibdir = @pythonlibdir@
man_MANS = vmailmgr.7
-noinst_SGMLS = FAQ.sgml HOWTO.sgml
-noinst_TEXINFOS = configuration.texi vmailmgr-cgi.texi
+noinst_TEXINFOS = FAQ.texi HOWTO.texi configuration.texi vmailmgr-cgi.texi
noinst_HTMLS = vmailmgr.html HOWTO.html FAQ.html NEWS.html configuration.html ChangeLog.html vmailmgr-cgi.html
noinst_TXTS = HOWTO.txt FAQ.txt configuration.txt vmailmgr-cgi.txt protocol.txt record-format.txt
noinst_PODS = vmailmgr.pod
-noinst_MISC = translation.ps
-EXTRA_DIST = ChangeLog-pre-vmailmgr ChangeLog-pre-0.70 changelog2html.pl news2html.pl YEAR2000 translation.fig translation.ps $(man_MANS) $(noinst_PODS) $(noinst_SGMLS) $(noinst_TEXINFOS) $(noinst_HTMLS) $(noinst_TXTS)
+noinst_MISC = FAQ.info FAQ.pdf HOWTO.info HOWTO.pdf configuration.info translation.pdf translation.ps
-CLEANFILES = $(noinst_HTMLS) $(man_MANS) HOWTO.txt FAQ.txt configuration.txt vmailmgr-cgi.txt
+EXTRA_DIST = ChangeLog-pre-vmailmgr ChangeLog-pre-0.70 changelog2html.pl news2html.pl YEAR2000 translation.fig $(man_MANS) $(noinst_PODS) $(noinst_TEXINFOS) $(noinst_HTMLS) $(noinst_MISC) $(noinst_TXTS)
+
+CLEANFILES = $(noinst_HTMLS) $(man_MANS) $(noinst_MISC) HOWTO.txt FAQ.txt configuration.txt vmailmgr-cgi.txt pod2htmd.tmp pod2htmi.tmp
TEXI2HTML = texi2html -monolithic -number
CL2HTML = perl changelog2html.pl
NEWS2HTML = perl news2html.pl
+FIG2PDF = fig2dev -L pdf -c
FIG2PS = fig2dev -L ps -c
-SGML2HTML = sgml2html --split=0
-SGML2TXT = sgml2txt
+TEXI2PDF = texi2pdf --clean --quiet
+TEXI2INFO = makeinfo --no-split --number-sections
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -113,7 +116,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -206,7 +209,7 @@
all-am: Makefile $(MANS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(mandir)/man7
@@ -247,7 +250,7 @@
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-all: $(noinst_HTMLS) $(noinst_TXTS) $(noinst_MISC)
+all: $(noinst_HTMLS) $(noinst_PDFS) $(noinst_TXTS) $(noinst_MISC)
dist-hook:
touch $(distdir)/*.html
@@ -264,12 +267,13 @@
%.5: %.pod ../configure.in; $(POD2MAN) --section=5 $< >$@
%.7: %.pod ../configure.in; $(POD2MAN) --section=7 $< >$@
%.8: %.pod ../configure.in; $(POD2MAN) --section=8 $< >$@
-%.html: %.sgml; $(SGML2HTML) $<
-%.txt: %.sgml; $(SGML2TXT) $<
%.html: %.pod; $(POD2HTML) $< >$@
%.html: %.texi; $(TEXI2HTML) $< >$@
%.txt: %.html; $(HTML2TXT) $< >$@
+%.pdf: %.texi; $(TEXI2PDF) $<
+%.info: %.texi; $(TEXI2INFO) $<
+%.pdf: %.fig ../configure.in; $(FIG2PDF) $< $@
%.ps: %.fig ../configure.in; $(FIG2PS) $< $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
--- a/doc/NEWS.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/NEWS.html Sun Jan 20 00:22:09 2008 +0100
@@ -4,6 +4,45 @@
<body>
<center><h1>Release History</h1></center>
<hr>
+<h2>Changes in version 0.97</h2>
+<p>
+New Features:
+<ul>
+<li>Aliases can now have autoresponders.
+<li>New "stat" command in the daemon to lookup the mailbox size.
+<li>Added a "dumpvuser" command, to output all of an account's data.
+<li>Renamed vpasswd2db to vupgrade and allvpasswd2db to vupgrade-all.
+<li>Authentication recognizes plain text (null-crypt) passwords.
+<li>Added options to turn off execution of vdeliver-predeliver and
+ vdeliver-postdeliver.
+<li>Added option to vadduser to specify the pre-encrypted password.
+<p>
+</ul>
+Internal Changes:
+<ul>
+<li>All accounts are created with an account directory now.
+<li>Created a vpwtable writer interface, and removed the CDB-specific
+ commands.
+<li>Added adduser3 daemon function, which works the same as the existing
+ adduser2 function but with an additional has-mailbox parameter.
+<li>New CDB library that uses mmap instead of file reads for efficiency.
+<li>Removed the vcheckquota and vpopbull tools that are now part of the
+ vmailmgr-tools package.
+<p>
+</ul>
+Bug Fixes:
+<ul>
+<li>Fixed a bug in Python library that caused the listdomain command to fail
+ on some OS's.
+<li>Fixed a bug in the PHP library that caused long listdomains to fail.
+<li>Exit code 99 from vdeliver-predeliver now causes vdeliver to exit
+ (with code 99) without delivering the message.
+<li>Fixed a bug that caused creating directories with a trailing slash to
+ fail.
+<li>Fixed the use of libstdc++ in showvconfig.
+<li>Personal information can now be changed by the virtual user in the daemon.
+</ul>
+<hr>
<h2>Changes in version 0.96.9</h2>
<p>
New Features:
--- a/doc/configuration.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/configuration.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,85 +1,93 @@
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on December, 29 2004 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
-<!-- Created by texi2html 1.56k from configuration.texi on 14 September 2000 -->
+<TITLE>Vmailmgr Configuration Files: </TITLE>
-<TITLE>Vmailmgr Configuration Files</TITLE>
+<META NAME="description" CONTENT="Vmailmgr Configuration Files: ">
+<META NAME="keywords" CONTENT="Vmailmgr Configuration Files: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
</HEAD>
-<BODY>
-<H1>Vmailmgr Configuration Files</H1>
-<H2>14 September 2000</H2>
-<ADDRESS>Bruce Guenter</ADDRESS>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Vmailmgr Configuration Files</H1></P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC1">1. General Information</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC5">2. Configuration Files</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="configuration.html#SEC1">1. General Information</A>
-<UL>
-<LI><A NAME="TOC2" HREF="configuration.html#SEC2">1.1 Search Order</A>
-<LI><A NAME="TOC3" HREF="configuration.html#SEC3">1.2 File Types</A>
-<LI><A NAME="TOC4" HREF="configuration.html#SEC4">1.3 Command Execution</A>
-</UL>
-<LI><A NAME="TOC5" HREF="configuration.html#SEC5">2. Configuration Files</A>
-<UL>
-<LI><A NAME="TOC6" HREF="configuration.html#SEC6">2.1 authvmailmgr-error</A>
-<LI><A NAME="TOC7" HREF="configuration.html#SEC7">2.2 authvmailmgr-loginfail</A>
-<LI><A NAME="TOC8" HREF="configuration.html#SEC8">2.3 authvmailmgr-postsetuid</A>
-<LI><A NAME="TOC9" HREF="configuration.html#SEC9">2.4 authvmailmgr-presetuid</A>
-<LI><A NAME="TOC10" HREF="configuration.html#SEC10">2.5 autoresponse-dir</A>
-<LI><A NAME="TOC11" HREF="configuration.html#SEC11">2.6 autoresponse-file</A>
-<LI><A NAME="TOC12" HREF="configuration.html#SEC12">2.7 bulletin-dir</A>
-<LI><A NAME="TOC13" HREF="configuration.html#SEC13">2.8 checkvpw-error</A>
-<LI><A NAME="TOC14" HREF="configuration.html#SEC14">2.9 checkvpw-loginfail</A>
-<LI><A NAME="TOC15" HREF="configuration.html#SEC15">2.10 checkvpw-postexec</A>
-<LI><A NAME="TOC16" HREF="configuration.html#SEC16">2.11 checkvpw-postsetuid</A>
-<LI><A NAME="TOC17" HREF="configuration.html#SEC17">2.12 checkvpw-presetuid</A>
-<LI><A NAME="TOC18" HREF="configuration.html#SEC18">2.13 default-expiry</A>
-<LI><A NAME="TOC19" HREF="configuration.html#SEC19">2.14 default-maildir</A>
-<LI><A NAME="TOC20" HREF="configuration.html#SEC20">2.15 default-msgcount</A>
-<LI><A NAME="TOC21" HREF="configuration.html#SEC21">2.16 default-msgsize</A>
-<LI><A NAME="TOC22" HREF="configuration.html#SEC22">2.17 default-hardquota</A>
-<LI><A NAME="TOC23" HREF="configuration.html#SEC23">2.18 default-softquota</A>
-<LI><A NAME="TOC24" HREF="configuration.html#SEC24">2.19 default-username</A>
-<LI><A NAME="TOC25" HREF="configuration.html#SEC25">2.20 error-maildir</A>
-<LI><A NAME="TOC26" HREF="configuration.html#SEC26">2.21 global-bulletin-dir</A>
-<LI><A NAME="TOC27" HREF="configuration.html#SEC27">2.22 maildir-arg-str</A>
-<LI><A NAME="TOC28" HREF="configuration.html#SEC28">2.23 password-file</A>
-<LI><A NAME="TOC29" HREF="configuration.html#SEC29">2.24 postmaster-aliases</A>
-<LI><A NAME="TOC30" HREF="configuration.html#SEC30">2.25 postmaster-email</A>
-<LI><A NAME="TOC31" HREF="configuration.html#SEC31">2.26 qmail-root</A>
-<LI><A NAME="TOC32" HREF="configuration.html#SEC32">2.27 separators</A>
-<LI><A NAME="TOC33" HREF="configuration.html#SEC33">2.28 socket-file</A>
-<LI><A NAME="TOC34" HREF="configuration.html#SEC34">2.29 user-dir</A>
-<LI><A NAME="TOC35" HREF="configuration.html#SEC35">2.30 user-dir-bits</A>
-<LI><A NAME="TOC36" HREF="configuration.html#SEC36">2.31 user-dir-slices</A>
-<LI><A NAME="TOC37" HREF="configuration.html#SEC37">2.32 vdeliver-postdeliver</A>
-<LI><A NAME="TOC38" HREF="configuration.html#SEC38">2.33 vdeliver-predeliver</A>
-<LI><A NAME="TOC39" HREF="configuration.html#SEC39">2.34 vsetup-pre</A>
-<LI><A NAME="TOC40" HREF="configuration.html#SEC40">2.35 vsetup-pre</A>
-</UL>
-</UL>
-<P><HR><P>
+
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC2"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> >> </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="General Information"></A>
+<H1> 1. General Information </H1>
+<!--docid::SEC1::-->
+<P>
-
-<H1><A NAME="SEC1" HREF="configuration.html#TOC1">1. General Information</A></H1>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC2">1.1 Search Order</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC3">1.2 File Types</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC4">1.3 Command Execution</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+<A NAME="Search Order"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC3"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> >> </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Search Order </H2>
+<!--docid::SEC2::-->
+<P>
-<H2><A NAME="SEC2" HREF="configuration.html#TOC2">1.1 Search Order</A></H2>
-
-<P>
The system will look for the configuration files listed below in one of
the following three locations, in the order they are listed:
-
<OL>
<LI>The domain-local configuration directory
-
<LI>The user-local configuration directory
-
<LI>The global configuration directory
-
</OL>
-
-<P>
The global configuration directory is set to <TT>`/etc/vmailmgr'</TT> by
default.
The user-local and domain-local configuration directories (for now, one
@@ -88,79 +96,112 @@
If a file matching the configuration name is found in one of the local
directories, the search stops and it is not searched for in any
higher up directories.
-
-
-
+<P>
-<H2><A NAME="SEC3" HREF="configuration.html#TOC3">1.2 File Types</A></H2>
-
+<A NAME="File Types"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC2"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC4"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> >> </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 File Types </H2>
+<!--docid::SEC3::-->
<P>
+
Each of the configuration files falls into one of the following types:
-
+</P><P>
<DL COMPACT>
<DT>String
-<DD>
+<DD><P>
+
A single line is read from this type and used as-is with no conversion.
All data after the first line is ignored.
+</P><P>
<DT>Directory
-<DD>
+<DD><P>
+
A single line is read from this type.
If it does not have a trailing slash (<SAMP>`/'</SAMP>), one is appended.
All data after the first line is ignored.
+</P><P>
<DT>Number
-<DD>
+<DD><P>
+
A single line is read from this type and converted to an unsigned
integer.
If the conversion succeeds, the value is used.
All data after the first line is ignored.
+</P><P>
<DT>List
-<DD>
+<DD><P>
+
Each line of the file is read, stripped of leading and trailing
whitespace, and treated as a separate value.
Lines that contain only whitespace (ie blank lines) or lines beginning
with a pound symbol (<SAMP>`#'</SAMP>) are ignored.
+</P><P>
<DT>Executable
-<DD>
+<DD><P>
+
If the execute bits on the file are set, it is treated as an executable
file and is executed with no interpretation by vmailmgr.
The the Command Execution section below for details.
+</P><P>
</DL>
+<P>
-<P>
All lines are stripped of any leading or trailing white space.
-
+</P><P>
-<P>
Configuration files marked as <SAMP>`(global only)'</SAMP> are read
before any user-level processing occurrs, and so are not functional in
the user-level configuration.
-
-
-
+</P><P>
-<H2><A NAME="SEC4" HREF="configuration.html#TOC4">1.3 Command Execution</A></H2>
+<A NAME="Command Execution"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC3"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> >> </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Command Execution </H2>
+<!--docid::SEC4::-->
+<P>
-<P>
The following rules apply to executing a single command or a list of
commands.
-
+</P><P>
-<P>
The executables are searched in reverse order of the configuration
files.
That is, the global setting is used first, and then the local settings.
If the named file either does not exist in a directory or is not
executable, that directory is skipped.
-
+</P><P>
-<P>
A command exit code of <SAMP>`99'</SAMP> indicates that the command completed
successfully but no further commands should be executed.
All other non-zero exit codes are treated as an error and will cause the
@@ -172,101 +213,160 @@
codes.
For <TT>`checkvpw'</TT>, any non-zero exit code (except as described above)
will cause authentication to fail.
-
+</P><P>
-<P>
The following environment variables will be set (where applicable):
-
+</P><P>
<DL COMPACT>
-
<DT><SAMP>`HOME'</SAMP>
-<DD>
-The home directory of the real user.
+<DD>The home directory of the real user.
<DT><SAMP>`MAILDIR'</SAMP>
-<DD>
-The mail directory of the real or virtual user.
+<DD>The mail directory of the real or virtual user.
<DT><SAMP>`USER'</SAMP>
-<DD>
-The real user's name.
+<DD>The real user's name.
<DT><SAMP>`VUSER'</SAMP>
-<DD>
-The virtual user's name.
+<DD>The virtual user's name.
For base user logins, this is blank, and all the following items
prefixed with <SAMP>`VUSER_'</SAMP> are not set.
<DT><SAMP>`VUSER_CTIME'</SAMP>
-<DD>
-The virtual user's creation time (or "0" if unknown).
+<DD>The virtual user's creation time (or "0" if unknown).
<DT><SAMP>`VUSER_EXPIRY'</SAMP>
-<DD>
-The virtual user's expiry time (or "-" if not applicable).
+<DD>The virtual user's expiry time (or "-" if not applicable).
<DT><SAMP>`VUSER_HARDQUOTA'</SAMP>
-<DD>
-The virtual user's total size hard quota (in bytes, or "-" if not applicable).
+<DD>The virtual user's total size hard quota (in bytes, or "-" if not applicable).
<DT><SAMP>`VUSER_MSGCOUNT'</SAMP>
-<DD>
-The virtual user's message count limit (or "-" if not applicable).
+<DD>The virtual user's message count limit (or "-" if not applicable).
<DT><SAMP>`VUSER_MSGSIZE'</SAMP>
-<DD>
-The virtual user's message size limit (or "-" if not applicable).
+<DD>The virtual user's message size limit (or "-" if not applicable).
<DT><SAMP>`VUSER_PERSONAL'</SAMP>
-<DD>
-The virtual user's personal data.
+<DD>The virtual user's personal data.
<DT><SAMP>`VUSER_SOFTQUOTA'</SAMP>
-<DD>
-The virtual user's total size soft quota (in bytes, or "-" if not applicable).
+<DD>The virtual user's total size soft quota (in bytes, or "-" if not applicable).
</DL>
+<P>
+<A NAME="Configuration Files"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC4"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC6"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC1"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Configuration Files </H1>
+<!--docid::SEC5::-->
+<P>
+Each of the following sections identifies a single configuration file
+</P><P>
-<H1><A NAME="SEC5" HREF="configuration.html#TOC5">2. Configuration Files</A></H1>
-
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC6">2.1 authvmailmgr-error</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC7">2.2 authvmailmgr-loginfail</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC8">2.3 authvmailmgr-postsetuid</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC9">2.4 authvmailmgr-presetuid</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC10">2.5 autoresponse-dir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC11">2.6 autoresponse-file</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC12">2.7 bulletin-dir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC13">2.8 checkvpw-error</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC14">2.9 checkvpw-loginfail</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC15">2.10 checkvpw-postexec</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC16">2.11 checkvpw-postsetuid</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC17">2.12 checkvpw-presetuid</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC18">2.13 default-expiry</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC19">2.14 default-maildir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC20">2.15 default-msgcount</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC21">2.16 default-msgsize</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC22">2.17 default-hardquota</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC23">2.18 default-softquota</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC24">2.19 default-username</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC25">2.20 error-maildir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC26">2.21 global-bulletin-dir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC27">2.22 maildir-arg-str</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC28">2.23 password-file</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC29">2.24 postmaster-aliases</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC30">2.25 postmaster-email</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC31">2.26 qmail-root</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC32">2.27 separators</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC33">2.28 socket-file</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC34">2.29 user-dir</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC35">2.30 user-dir-bits</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC36">2.31 user-dir-slices</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC37">2.32 vdeliver-postdeliver</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC38">2.33 vdeliver-predeliver</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC39">2.34 vsetup-post</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="configuration.html#SEC40">2.35 vsetup-pre</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
-Each of the following sections identifies a single configuration file
-
-
-
-<H2><A NAME="SEC6" HREF="configuration.html#TOC6">2.1 authvmailmgr-error</A></H2>
+<A NAME="authvmailmgr-error"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC7"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 authvmailmgr-error </H2>
+<!--docid::SEC6::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-authvmailmgr
+<DD>authvmailmgr
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by authvmailmgr if any error occurrs other than those
+<DD>This is executed by authvmailmgr if any error occurrs other than those
caught by <TT>`authvmailmgr-loginfail'</TT> below.
The environment variable <CODE>AUTHVMAILMGR_ERROR</CODE> will contain an error
message.
This can be used to output logging messages about errors in authvmailmgr.
</DL>
-
+<P>
-
-<H2><A NAME="SEC7" HREF="configuration.html#TOC7">2.2 authvmailmgr-loginfail</A></H2>
+<A NAME="authvmailmgr-loginfail"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC6"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC8"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 authvmailmgr-loginfail </H2>
+<!--docid::SEC7::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-authvmailmgr
+<DD>authvmailmgr
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by authvmailmgr if the user's login fails.
+<DD>This is executed by authvmailmgr if the user's login fails.
The environment variable <CODE>AUTHVMAILMGR_ERROR</CODE> will contain an error
message.
The environment variable <CODE>VUSER</CODE> will be set to the virtual user
@@ -274,45 +374,65 @@
This can be used to output logging messages about login failures or to
throttle hackers.
</DL>
-
+<P>
-
-<H2><A NAME="SEC8" HREF="configuration.html#TOC8">2.3 authvmailmgr-postsetuid</A></H2>
+<A NAME="authvmailmgr-postsetuid"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC7"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC9"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 authvmailmgr-postsetuid </H2>
+<!--docid::SEC8::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-@samp {vpopbull}
+<DD><SAMP>`vpopbull'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-authvmailmgr
+<DD>authvmailmgr
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by authvmailmgr after a user is successfully authenticated.
+<DD>This is executed by authvmailmgr after a user is successfully authenticated.
</DL>
+<P>
-
-
-<H2><A NAME="SEC9" HREF="configuration.html#TOC9">2.4 authvmailmgr-presetuid</A></H2>
+<A NAME="authvmailmgr-presetuid"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC8"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC10"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 authvmailmgr-presetuid </H2>
+<!--docid::SEC9::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-authvmailmgr
+<DD>authvmailmgr
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed by authvmailmgr before changing user away from root,
+<DD>This list is executed by authvmailmgr before changing user away from root,
and before authenticating a virtual user.
Note: The environment variable <SAMP>`MAILDIR'</SAMP> is not set since the
virtual user has not yet been authenticated, or even looked up
@@ -320,112 +440,162 @@
For the same reason, <SAMP>`VUSER'</SAMP> is not authenticated and is under
complete control of the invoking user.
</DL>
-
+<P>
-
-<H2><A NAME="SEC10" HREF="configuration.html#TOC10">2.5 autoresponse-dir</A></H2>
+<A NAME="autoresponse-dir"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC9"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC11"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 autoresponse-dir </H2>
+<!--docid::SEC10::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-directory
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`autoresponse'</SAMP>
+<DD><SAMP>`autoresponse'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd, autoresponder script
+<DD>vmailmgrd, autoresponder script
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the subdirectory of the virtual user directory in which all
+<DD>Identifies the subdirectory of the virtual user directory in which all
autoresponse data is stored.
</DL>
-
+<P>
-
-<H2><A NAME="SEC11" HREF="configuration.html#TOC11">2.6 autoresponse-file</A></H2>
+<A NAME="autoresponse-file"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC10"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC12"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.6 autoresponse-file </H2>
+<!--docid::SEC11::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`message.txt'</SAMP>
+<DD><SAMP>`message.txt'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd, autoresponder script
+<DD>vmailmgrd, autoresponder script
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the file name within the autoresponse directory that contains
+<DD>Identifies the file name within the autoresponse directory that contains
the autoresponse message.
</DL>
-
+<P>
-
-<H2><A NAME="SEC12" HREF="configuration.html#TOC12">2.7 bulletin-dir</A></H2>
+<A NAME="bulletin-dir"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC11"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC13"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.7 bulletin-dir </H2>
+<!--docid::SEC12::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-directory
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`bulletins'</SAMP>
+<DD><SAMP>`bulletins'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the subdirectory of the domain directory in which bulletins
+<DD>Identifies the subdirectory of the domain directory in which bulletins
local to a domain are stored.
</DL>
-
+<P>
-
-<H2><A NAME="SEC13" HREF="configuration.html#TOC13">2.8 checkvpw-error</A></H2>
+<A NAME="checkvpw-error"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC12"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC14"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.8 checkvpw-error </H2>
+<!--docid::SEC13::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by checkvpw if any error occurrs other than those
+<DD>This is executed by checkvpw if any error occurrs other than those
caught by <TT>`checkvpw-loginfail'</TT> below.
The environment variable <CODE>CHECKVPW_ERROR</CODE> will contain an error
message.
This can be used to output logging messages about errors in checkvpw.
</DL>
-
+<P>
-
-<H2><A NAME="SEC14" HREF="configuration.html#TOC14">2.9 checkvpw-loginfail</A></H2>
+<A NAME="checkvpw-loginfail"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC13"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC15"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.9 checkvpw-loginfail </H2>
+<!--docid::SEC14::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by checkvpw if the user's login fails.
+<DD>This is executed by checkvpw if the user's login fails.
The environment variable <CODE>CHECKVPW_ERROR</CODE> will contain an error
message.
The environment variable <CODE>VUSER</CODE> will be set to the virtual user
@@ -433,65 +603,95 @@
This can be used to output logging messages about login failures or to
throttle hackers.
</DL>
-
-
-
-<H2><A NAME="SEC15" HREF="configuration.html#TOC15">2.10 checkvpw-postexec</A></H2>
-
-<DL COMPACT>
+<P>
-<DT><STRONG>Type</STRONG>
-<DD>
-executable
-<DT><STRONG>Default</STRONG>
-<DD>
-Empty
-<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
-<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by checkvpw after the subcommand successfully completes.
-</DL>
-
-
-
-<H2><A NAME="SEC16" HREF="configuration.html#TOC16">2.11 checkvpw-postsetuid</A></H2>
+<A NAME="checkvpw-postexec"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC14"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC16"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.10 checkvpw-postexec </H2>
+<!--docid::SEC15::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-@samp {vpopbull}
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-This is executed by checkvpw after a user is successfully authenticated.
+<DD>This is executed by checkvpw after the subcommand successfully completes.
</DL>
+<P>
-
-
-<H2><A NAME="SEC17" HREF="configuration.html#TOC17">2.12 checkvpw-presetuid</A></H2>
+<A NAME="checkvpw-postsetuid"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC15"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC17"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.11 checkvpw-postsetuid </H2>
+<!--docid::SEC16::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD><SAMP>`vpopbull'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed by checkvpw before changing user away from root,
+<DD>This is executed by checkvpw after a user is successfully authenticated.
+</DL>
+<P>
+
+<A NAME="checkvpw-presetuid"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC16"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC18"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.12 checkvpw-presetuid </H2>
+<!--docid::SEC17::-->
+<P>
+
+<DL COMPACT>
+<DT><STRONG>Type</STRONG>
+<DD>executable
+<DT><STRONG>Default</STRONG>
+<DD>Empty
+<DT><STRONG>Used By</STRONG>
+<DD>checkvpw
+<DT><STRONG>Description</STRONG>
+<DD>This list is executed by checkvpw before changing user away from root,
and before authenticating a virtual user.
Note: The environment variable <SAMP>`MAILDIR'</SAMP> is not set since the
virtual user has not yet been authenticated, or even looked up
@@ -499,279 +699,409 @@
For the same reason, <SAMP>`VUSER'</SAMP> is not authenticated and is under
complete control of the invoking user.
</DL>
-
+<P>
-
-<H2><A NAME="SEC18" HREF="configuration.html#TOC18">2.13 default-expiry</A></H2>
+<A NAME="default-expiry"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC17"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC19"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.13 default-expiry </H2>
+<!--docid::SEC18::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-number
+<DD>number
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`-1'</SAMP>
+<DD><SAMP>`-1'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vadduser
+<DD>vadduser
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the default expiry value for newly created users.
+<DD>Sets the default expiry value for newly created users.
Negative values indicate no expiry.
</DL>
-
+<P>
-
-<H2><A NAME="SEC19" HREF="configuration.html#TOC19">2.14 default-maildir</A></H2>
+<A NAME="default-maildir"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC18"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC20"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.14 default-maildir </H2>
+<!--docid::SEC19::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-directory
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`Maildir'</SAMP>
+<DD><SAMP>`Maildir'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the name of the directory to be used as a non-virtual user's maildir.
+<DD>Sets the name of the directory to be used as a non-virtual user's maildir.
</DL>
+<P>
-
-
-<H2><A NAME="SEC20" HREF="configuration.html#TOC20">2.15 default-msgcount</A></H2>
+<A NAME="default-msgcount"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC19"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC21"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.15 default-msgcount </H2>
+<!--docid::SEC20::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-number
+<DD>number
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`-1'</SAMP>
+<DD><SAMP>`-1'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vadduser
+<DD>vadduser
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the default message count limit.
+<DD>Sets the default message count limit.
</DL>
+<P>
-
-
-<H2><A NAME="SEC21" HREF="configuration.html#TOC21">2.16 default-msgsize</A></H2>
+<A NAME="default-msgsize"></A>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC20"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC22"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.16 default-msgsize </H2>
+<!--docid::SEC21::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-number
+<DD>number
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`-1'</SAMP>
+<DD><SAMP>`-1'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vadduser
+<DD>vadduser
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the default message size limit, in bytes.
+<DD>Sets the default message size limit, in bytes.
</DL>
+<P>
-
-
-<H2><A NAME="SEC22" HREF="configuration.html#TOC22">2.17 default-hardquota</A></H2>
+<A NAME="default-hardquota"></A>
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC21"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC23"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.17 default-hardquota </H2>
+<!--docid::SEC22::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-number
+<DD>number
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`-1'</SAMP>
+<DD><SAMP>`-1'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vadduser
+<DD>vadduser
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the default hard quota, in bytes.
+<DD>Sets the default hard quota, in bytes.
</DL>
+<P>
-
-
-<H2><A NAME="SEC23" HREF="configuration.html#TOC23">2.18 default-softquota</A></H2>
+<A NAME="default-softquota"></A>
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC22"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC24"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.18 default-softquota </H2>
+<!--docid::SEC23::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-number
+<DD>number
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`-1'</SAMP>
+<DD><SAMP>`-1'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vadduser
+<DD>vadduser
<DT><STRONG>Description</STRONG>
-<DD>
-Sets the default soft quota, in bytes.
+<DD>Sets the default soft quota, in bytes.
</DL>
+<P>
-
-
-<H2><A NAME="SEC24" HREF="configuration.html#TOC24">2.19 default-username</A></H2>
+<A NAME="default-username"></A>
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC23"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC25"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.19 default-username </H2>
+<!--docid::SEC24::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`+'</SAMP>
+<DD><SAMP>`+'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd
+<DD>vmailmgrd
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the name of the virtual user to be looked up if a lookup of
+<DD>Identifies the name of the virtual user to be looked up if a lookup of
another virtual user fails.
</DL>
-
+<P>
-
-<H2><A NAME="SEC25" HREF="configuration.html#TOC25">2.20 error-maildir</A></H2>
+<A NAME="error-maildir"></A>
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC24"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC26"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.20 error-maildir </H2>
+<!--docid::SEC25::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-directory
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`/var/lib/vmailmgr/error-maildir'</SAMP>
+<DD><SAMP>`/var/lib/vmailmgr/error-maildir'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-Specifies the path of a read-only maildir containing a message to be
+<DD>Specifies the path of a read-only maildir containing a message to be
sent to the user when the maildir corresponding to that user does not
exist.
</DL>
-
-
-
-<H2><A NAME="SEC26" HREF="configuration.html#TOC26">2.21 global-bulletin-dir</A></H2>
-
-<DL COMPACT>
+<P>
-<DT><STRONG>Type</STRONG>
-<DD>
-directory
-<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`/var/spool/bulletins'</SAMP>
-<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw
-<DT><STRONG>Description</STRONG>
-<DD>
-Identifies a site-wide bulletin directory.
-</DL>
-
-
-
-<H2><A NAME="SEC27" HREF="configuration.html#TOC27">2.22 maildir-arg-str</A></H2>
+<A NAME="global-bulletin-dir"></A>
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC25"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC27"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.21 global-bulletin-dir </H2>
+<!--docid::SEC26::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`maildir'</SAMP>
+<DD><SAMP>`/var/spool/bulletins'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw (global only)
+<DD>checkvpw
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the string to search for when attempting to identify the
+<DD>Identifies a site-wide bulletin directory.
+</DL>
+<P>
+
+<A NAME="maildir-arg-str"></A>
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC26"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC28"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.22 maildir-arg-str </H2>
+<!--docid::SEC27::-->
+<P>
+
+<DL COMPACT>
+<DT><STRONG>Type</STRONG>
+<DD>string
+<DT><STRONG>Default</STRONG>
+<DD><SAMP>`maildir'</SAMP>
+<DT><STRONG>Used By</STRONG>
+<DD>checkvpw (global only)
+<DT><STRONG>Description</STRONG>
+<DD>Identifies the string to search for when attempting to identify the
maildir argument on the command line to checkvpw.
</DL>
-
+<P>
-
-<H2><A NAME="SEC28" HREF="configuration.html#TOC28">2.23 password-file</A></H2>
+<A NAME="password-file"></A>
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC27"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC29"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.23 password-file </H2>
+<!--docid::SEC28::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`passwd'</SAMP>
+<DD><SAMP>`passwd'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd and command-line programs
+<DD>vmailmgrd and command-line programs
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the file that contains user names, passwords, and
+<DD>Identifies the file that contains user names, passwords, and
destinations for a virtual domain.
Note that this has nothing to do with "real" users, for which the
password file is determined by the system libraries.
</DL>
-
+<P>
-
-<H2><A NAME="SEC29" HREF="configuration.html#TOC29">2.24 postmaster-aliases</A></H2>
+<A NAME="postmaster-aliases"></A>
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC28"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC30"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.24 postmaster-aliases </H2>
+<!--docid::SEC29::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-list
+<DD>list
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`mailer-daemon'</SAMP>
+<DD><SAMP>`mailer-daemon'</SAMP>
<SAMP>`postmaster'</SAMP>
<SAMP>`root'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vsetup
+<DD>vsetup
<DT><STRONG>Description</STRONG>
-<DD>
-A list of aliases to the postmaster email address to set
+<DD>A list of aliases to the postmaster email address to set
up when creating a new virtual domain with the vsetup command.
This should <EM>always</EM> contain both <SAMP>`postmaster'</SAMP> and
<SAMP>`mailer-daemon'</SAMP> (required by the RFCs), and should usually contain
<SAMP>`root'</SAMP>.
</DL>
-
+<P>
-
-<H2><A NAME="SEC30" HREF="configuration.html#TOC30">2.25 postmaster-email</A></H2>
+<A NAME="postmaster-email"></A>
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC29"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC31"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.25 postmaster-email </H2>
+<!--docid::SEC30::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`postmaster@'</SAMP>
+<DD><SAMP>`postmaster@'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vsetup
+<DD>vsetup
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the email address of the entity responsible
+<DD>Identifies the email address of the entity responsible
for the administration of the (virtual) host when building the
postmaster aliases above.
If this value ends with a trailing <SAMP>`@'</SAMP>, the value of
@@ -781,247 +1111,626 @@
If this is set to <SAMP>`postmaster'</SAMP>, a mail loop
will result and all mail to this address will bounce.
</DL>
-
+<P>
-
-<H2><A NAME="SEC31" HREF="configuration.html#TOC31">2.26 qmail-root</A></H2>
+<A NAME="qmail-root"></A>
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC30"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC32"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.26 qmail-root </H2>
+<!--docid::SEC31::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`/var/qmail'</SAMP>
+<DD><SAMP>`/var/qmail'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw, vdeliver, vmailmgrd
+<DD>checkvpw, vdeliver, vmailmgrd
<DT><STRONG>Description</STRONG>
-<DD>
-Specifies the location of the base directory of your qmail install.
+<DD>Specifies the location of the base directory of your qmail install.
Set this to whatever you put into <TT>`conf-home'</TT> when you built and
installed qmail.
</DL>
-
+<P>
-
-<H2><A NAME="SEC32" HREF="configuration.html#TOC32">2.27 separators</A></H2>
+<A NAME="separators"></A>
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC31"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC33"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.27 separators </H2>
+<!--docid::SEC32::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`@:'</SAMP>
+<DD><SAMP>`@:'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-checkvpw (global only)
+<DD>checkvpw (global only)
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the set of valid separators within a user login name between
+<DD>Identifies the set of valid separators within a user login name between
the virtual user name and virtual domain name when logging in via
checkvpw.
For example, if separators contains <SAMP>`@:'</SAMP> then <SAMP>`user@domain'</SAMP> and
<SAMP>`user:domain'</SAMP> are equivalent POP mailbox names.
</DL>
-
+<P>
-
-<H2><A NAME="SEC33" HREF="configuration.html#TOC33">2.28 socket-file</A></H2>
+<A NAME="socket-file"></A>
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC32"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC34"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.28 socket-file </H2>
+<!--docid::SEC33::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-string
+<DD>string
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`/tmp/.vmailmgrd'</SAMP>
+<DD><SAMP>`/tmp/.vmailmgrd'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd, checkvpw, vdeliver, and the CGI programs
+<DD>vmailmgrd, checkvpw, vdeliver, and the CGI programs
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the file name of the local socket used to
+<DD>Identifies the file name of the local socket used to
communicate between the vmailmgr daemon and the other programs.
<EM>Warning:</EM> Changing this in the local configuration directories
will cause vdeliver to fail.
</DL>
-
+<P>
-
-<H2><A NAME="SEC34" HREF="configuration.html#TOC34">2.29 user-dir</A></H2>
+<A NAME="user-dir"></A>
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC33"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC35"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.29 user-dir </H2>
+<!--docid::SEC34::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-directory
+<DD>directory
<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`users'</SAMP>
+<DD><SAMP>`users'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd and command-line programs
+<DD>vmailmgrd and command-line programs
<DT><STRONG>Description</STRONG>
-<DD>
-Identifies the subdirectory from the virtual domain directory in which a
+<DD>Identifies the subdirectory from the virtual domain directory in which a
virtual user's maildir will be created.
Since this maildir is recorded in the password table, it does not have
to be the same for each user within a domain.
This is prefixed with <SAMP>`./'</SAMP> before it is used in the password table.
</DL>
-
+<P>
-
-<H2><A NAME="SEC35" HREF="configuration.html#TOC35">2.30 user-dir-bits</A></H2>
+<A NAME="user-dir-bits"></A>
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC34"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC36"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.30 user-dir-bits </H2>
+<!--docid::SEC35::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`0'</SAMP>
+<DD><DT><STRONG>Default</STRONG>
+<DD><SAMP>`0'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd and command-line programs when creating new users.
+<DD>vmailmgrd and command-line programs when creating new users.
<DT><STRONG>Description</STRONG>
-<DD>
-See section <A HREF="configuration.html#SEC36">2.31 user-dir-slices</A>
+<DD>See section <A HREF="configuration.html#SEC36">2.31 user-dir-slices</A>.
</DL>
+<P>
-
-
-<H2><A NAME="SEC36" HREF="configuration.html#TOC36">2.31 user-dir-slices</A></H2>
+<A NAME="user-dir-slices"></A>
+<HR SIZE="6">
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC35"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC37"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.31 user-dir-slices </H2>
+<!--docid::SEC36::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-<DT><STRONG>Default</STRONG>
-<DD>
-<SAMP>`0'</SAMP>
+<DD><DT><STRONG>Default</STRONG>
+<DD><SAMP>`0'</SAMP>
<DT><STRONG>Used By</STRONG>
-<DD>
-vmailmgrd and command-line programs when creating new users.
+<DD>vmailmgrd and command-line programs when creating new users.
<DT><STRONG>Description</STRONG>
-<DD>
-<TT>`user-dir-bits'</TT> and <TT>`user-dir-slices'</TT> work together. When creating a
+<DD><TT>`user-dir-bits'</TT> and <TT>`user-dir-slices'</TT> work together. When creating a
new user directory name, a hash code is generated on the name of the
new user. This hash code is split into <TT>`user-dir-slices'</TT> pieces, each
<TT>`user-dir-bits'</TT> bits long. Each of these pieces is translated to an
ASCII string by converting the binary code to hexadecimal. The
resulting user directory name is then composed of:
-
<UL>
<LI>the base users directory, followed by a <SAMP>`/'</SAMP>
-
<LI>each of the string pieces, each followed by a <SAMP>`/'</SAMP>
-
<LI>the user's name
-
</UL>
-
For example, with <TT>`user-dir-bits'</TT> set to 6 and
<TT>`user-dir-slices'</TT> set to 1, a user
named <SAMP>`c'</SAMP> maps to a directory name of <SAMP>`users/2f/c/'</SAMP>.
</DL>
-
+<P>
-
-<H2><A NAME="SEC37" HREF="configuration.html#TOC37">2.32 vdeliver-postdeliver</A></H2>
+<A NAME="vdeliver-postdeliver"></A>
+<HR SIZE="6">
+<A NAME="SEC37"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC36"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC38"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.32 vdeliver-postdeliver </H2>
+<!--docid::SEC37::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-vdeliver
+<DD>vdeliver
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed after the delivery is successfully
+<DD>This list is executed after the delivery is successfully
completed.
Since vdeliver expects <SAMP>`USER'</SAMP> and <SAMP>`HOME'</SAMP> to be set, it does
not set them itself.
If the command returns with an error code, a warning is printed, but
delivery does not fail, as failure would lead to duplicates.
</DL>
-
+<P>
-
-<H2><A NAME="SEC38" HREF="configuration.html#TOC38">2.33 vdeliver-predeliver</A></H2>
+<A NAME="vdeliver-predeliver"></A>
+<HR SIZE="6">
+<A NAME="SEC38"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC37"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC39"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.33 vdeliver-predeliver </H2>
+<!--docid::SEC38::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-vdeliver
+<DD>vdeliver
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed before the delivery is attempted, but
+<DD>This list is executed before the delivery is attempted, but
after the virtual user information is looked up.
Since vdeliver expects <SAMP>`USER'</SAMP> and <SAMP>`HOME'</SAMP> to be set, it does
not set them itself.
</DL>
-
+<P>
-
-<H2><A NAME="SEC39" HREF="configuration.html#TOC39">2.34 vsetup-pre</A></H2>
+<A NAME="vsetup-post"></A>
+<HR SIZE="6">
+<A NAME="SEC39"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC38"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC40"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.34 vsetup-post </H2>
+<!--docid::SEC39::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-vsetup
+<DD>vsetup
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed after the vsetup command has sucessfully done
+<DD>This list is executed after the vsetup command has sucessfully done
everything else.
</DL>
-
+<P>
-
-<H2><A NAME="SEC40" HREF="configuration.html#TOC40">2.35 vsetup-pre</A></H2>
+<A NAME="vsetup-pre"></A>
+<HR SIZE="6">
+<A NAME="SEC40"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC39"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> << </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC5"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.35 vsetup-pre </H2>
+<!--docid::SEC40::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Type</STRONG>
-<DD>
-executable
+<DD>executable
<DT><STRONG>Default</STRONG>
-<DD>
-Empty
+<DD>Empty
<DT><STRONG>Used By</STRONG>
-<DD>
-vsetup
+<DD>vsetup
<DT><STRONG>Description</STRONG>
-<DD>
-This list is executed before the vsetup command makes any changes.
+<DD>This list is executed before the vsetup command makes any changes.
</DL>
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="configuration.html#SEC1">1. General Information</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="configuration.html#SEC2">1.1 Search Order</A>
+<BR>
+<A NAME="TOC3" HREF="configuration.html#SEC3">1.2 File Types</A>
+<BR>
+<A NAME="TOC4" HREF="configuration.html#SEC4">1.3 Command Execution</A>
+<BR>
+</UL>
+<A NAME="TOC5" HREF="configuration.html#SEC5">2. Configuration Files</A>
+<BR>
+<UL>
+<A NAME="TOC6" HREF="configuration.html#SEC6">2.1 authvmailmgr-error</A>
+<BR>
+<A NAME="TOC7" HREF="configuration.html#SEC7">2.2 authvmailmgr-loginfail</A>
+<BR>
+<A NAME="TOC8" HREF="configuration.html#SEC8">2.3 authvmailmgr-postsetuid</A>
+<BR>
+<A NAME="TOC9" HREF="configuration.html#SEC9">2.4 authvmailmgr-presetuid</A>
+<BR>
+<A NAME="TOC10" HREF="configuration.html#SEC10">2.5 autoresponse-dir</A>
+<BR>
+<A NAME="TOC11" HREF="configuration.html#SEC11">2.6 autoresponse-file</A>
+<BR>
+<A NAME="TOC12" HREF="configuration.html#SEC12">2.7 bulletin-dir</A>
+<BR>
+<A NAME="TOC13" HREF="configuration.html#SEC13">2.8 checkvpw-error</A>
+<BR>
+<A NAME="TOC14" HREF="configuration.html#SEC14">2.9 checkvpw-loginfail</A>
+<BR>
+<A NAME="TOC15" HREF="configuration.html#SEC15">2.10 checkvpw-postexec</A>
+<BR>
+<A NAME="TOC16" HREF="configuration.html#SEC16">2.11 checkvpw-postsetuid</A>
+<BR>
+<A NAME="TOC17" HREF="configuration.html#SEC17">2.12 checkvpw-presetuid</A>
+<BR>
+<A NAME="TOC18" HREF="configuration.html#SEC18">2.13 default-expiry</A>
+<BR>
+<A NAME="TOC19" HREF="configuration.html#SEC19">2.14 default-maildir</A>
+<BR>
+<A NAME="TOC20" HREF="configuration.html#SEC20">2.15 default-msgcount</A>
+<BR>
+<A NAME="TOC21" HREF="configuration.html#SEC21">2.16 default-msgsize</A>
+<BR>
+<A NAME="TOC22" HREF="configuration.html#SEC22">2.17 default-hardquota</A>
+<BR>
+<A NAME="TOC23" HREF="configuration.html#SEC23">2.18 default-softquota</A>
+<BR>
+<A NAME="TOC24" HREF="configuration.html#SEC24">2.19 default-username</A>
+<BR>
+<A NAME="TOC25" HREF="configuration.html#SEC25">2.20 error-maildir</A>
+<BR>
+<A NAME="TOC26" HREF="configuration.html#SEC26">2.21 global-bulletin-dir</A>
+<BR>
+<A NAME="TOC27" HREF="configuration.html#SEC27">2.22 maildir-arg-str</A>
+<BR>
+<A NAME="TOC28" HREF="configuration.html#SEC28">2.23 password-file</A>
+<BR>
+<A NAME="TOC29" HREF="configuration.html#SEC29">2.24 postmaster-aliases</A>
+<BR>
+<A NAME="TOC30" HREF="configuration.html#SEC30">2.25 postmaster-email</A>
+<BR>
+<A NAME="TOC31" HREF="configuration.html#SEC31">2.26 qmail-root</A>
+<BR>
+<A NAME="TOC32" HREF="configuration.html#SEC32">2.27 separators</A>
+<BR>
+<A NAME="TOC33" HREF="configuration.html#SEC33">2.28 socket-file</A>
+<BR>
+<A NAME="TOC34" HREF="configuration.html#SEC34">2.29 user-dir</A>
+<BR>
+<A NAME="TOC35" HREF="configuration.html#SEC35">2.30 user-dir-bits</A>
+<BR>
+<A NAME="TOC36" HREF="configuration.html#SEC36">2.31 user-dir-slices</A>
+<BR>
+<A NAME="TOC37" HREF="configuration.html#SEC37">2.32 vdeliver-postdeliver</A>
+<BR>
+<A NAME="TOC38" HREF="configuration.html#SEC38">2.33 vdeliver-predeliver</A>
+<BR>
+<A NAME="TOC39" HREF="configuration.html#SEC39">2.34 vsetup-post</A>
+<BR>
+<A NAME="TOC40" HREF="configuration.html#SEC40">2.35 vsetup-pre</A>
+<BR>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="configuration.html#SEC1">1. General Information</A>
+<BR>
+<A NAME="TOC5" HREF="configuration.html#SEC5">2. Configuration Files</A>
+<BR>
-<P><HR><P>
-This document was generated on 14 September 2000 using
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k.
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="configuration.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ < ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ > ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ << ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ >> ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG>
+<== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
</BODY>
</HTML>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/configuration.info Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,952 @@
+This is configuration.info, produced by makeinfo version 4.7 from
+configuration.texi.
+
+ Copyright (C) 1998 Bruce Guenter
+
+
+File: configuration.info, Node: Top, Next: General Information, Prev: (dir), Up: (dir)
+
+* Menu:
+
+* General Information::
+* Configuration Files::
+
+
+File: configuration.info, Node: General Information, Next: Configuration Files, Prev: Top, Up: Top
+
+1 General Information
+*********************
+
+* Menu:
+
+* Search Order::
+* File Types::
+* Command Execution::
+
+
+File: configuration.info, Node: Search Order, Next: File Types, Prev: General Information, Up: General Information
+
+1.1 Search Order
+================
+
+The system will look for the configuration files listed below in one of
+the following three locations, in the order they are listed:
+ 1. The domain-local configuration directory
+
+ 2. The user-local configuration directory
+
+ 3. The global configuration directory
+ The global configuration directory is set to `/etc/vmailmgr'
+by default. The user-local and domain-local configuration directories
+(for now, one and the same) are a subdirectory, named `.vmailmgr' by
+default, of either the user's home directory or the domain subdirectory.
+If a file matching the configuration name is found in one of the local
+directories, the search stops and it is not searched for in any higher
+up directories.
+
+
+File: configuration.info, Node: File Types, Next: Command Execution, Prev: Search Order, Up: General Information
+
+1.2 File Types
+==============
+
+Each of the configuration files falls into one of the following types:
+
+String
+ A single line is read from this type and used as-is with no
+ conversion. All data after the first line is ignored.
+
+Directory
+ A single line is read from this type. If it does not have a
+ trailing slash (`/'), one is appended. All data after the first
+ line is ignored.
+
+Number
+ A single line is read from this type and converted to an unsigned
+ integer. If the conversion succeeds, the value is used. All data
+ after the first line is ignored.
+
+List
+ Each line of the file is read, stripped of leading and trailing
+ whitespace, and treated as a separate value. Lines that contain
+ only whitespace (ie blank lines) or lines beginning with a pound
+ symbol (`#') are ignored.
+
+Executable
+ If the execute bits on the file are set, it is treated as an
+ executable file and is executed with no interpretation by vmailmgr.
+ The the Command Execution section below for details.
+
+
+ All lines are stripped of any leading or trailing white space.
+
+ Configuration files marked as `(global only)' are read before any
+user-level processing occurrs, and so are not functional in the
+user-level configuration.
+
+
+File: configuration.info, Node: Command Execution, Prev: File Types, Up: General Information
+
+1.3 Command Execution
+=====================
+
+The following rules apply to executing a single command or a list of
+commands.
+
+ The executables are searched in reverse order of the configuration
+files. That is, the global setting is used first, and then the local
+settings. If the named file either does not exist in a directory or is
+not executable, that directory is skipped.
+
+ A command exit code of `99' indicates that the command completed
+successfully but no further commands should be executed. All other
+non-zero exit codes are treated as an error and will cause the invoking
+program to stop with the same error code. For `vdeliver', an error
+exit of 111 will be passed up to qmail as a temporary error, and an
+error exit of 100 will be passed up as a permanent failure. See the
+`qmail-command' man page for full details on delivery error codes. For
+`checkvpw', any non-zero exit code (except as described above) will
+cause authentication to fail.
+
+ The following environment variables will be set (where applicable):
+
+`HOME'
+ The home directory of the real user.
+
+`MAILDIR'
+ The mail directory of the real or virtual user.
+
+`USER'
+ The real user's name.
+
+`VUSER'
+ The virtual user's name. For base user logins, this is blank, and
+ all the following items prefixed with `VUSER_' are not set.
+
+`VUSER_CTIME'
+ The virtual user's creation time (or "0" if unknown).
+
+`VUSER_EXPIRY'
+ The virtual user's expiry time (or "-" if not applicable).
+
+`VUSER_HARDQUOTA'
+ The virtual user's total size hard quota (in bytes, or "-" if not
+ applicable).
+
+`VUSER_MSGCOUNT'
+ The virtual user's message count limit (or "-" if not applicable).
+
+`VUSER_MSGSIZE'
+ The virtual user's message size limit (or "-" if not applicable).
+
+`VUSER_PERSONAL'
+ The virtual user's personal data.
+
+`VUSER_SOFTQUOTA'
+ The virtual user's total size soft quota (in bytes, or "-" if not
+ applicable).
+
+
+File: configuration.info, Node: Configuration Files, Prev: General Information, Up: Top
+
+2 Configuration Files
+*********************
+
+Each of the following sections identifies a single configuration file
+
+* Menu:
+
+* authvmailmgr-error::
+* authvmailmgr-loginfail::
+* authvmailmgr-postsetuid::
+* authvmailmgr-presetuid::
+* autoresponse-dir::
+* autoresponse-file::
+* bulletin-dir::
+* checkvpw-error::
+* checkvpw-loginfail::
+* checkvpw-postexec::
+* checkvpw-postsetuid::
+* checkvpw-presetuid::
+* default-expiry::
+* default-maildir::
+* default-msgcount::
+* default-msgsize::
+* default-hardquota::
+* default-softquota::
+* default-username::
+* error-maildir::
+* global-bulletin-dir::
+* maildir-arg-str::
+* password-file::
+* postmaster-aliases::
+* postmaster-email::
+* qmail-root::
+* separators::
+* socket-file::
+* user-dir::
+* user-dir-bits::
+* user-dir-slices::
+* vdeliver-postdeliver::
+* vdeliver-predeliver::
+* vsetup-post::
+* vsetup-pre::
+
+
+File: configuration.info, Node: authvmailmgr-error, Next: authvmailmgr-loginfail, Prev: Configuration Files, Up: Configuration Files
+
+2.1 authvmailmgr-error
+======================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ authvmailmgr
+
+*Description*
+ This is executed by authvmailmgr if any error occurrs other than
+ those caught by `authvmailmgr-loginfail' below. The environment
+ variable `AUTHVMAILMGR_ERROR' will contain an error message. This
+ can be used to output logging messages about errors in
+ authvmailmgr.
+
+
+File: configuration.info, Node: authvmailmgr-loginfail, Next: authvmailmgr-postsetuid, Prev: authvmailmgr-error, Up: Configuration Files
+
+2.2 authvmailmgr-loginfail
+==========================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ authvmailmgr
+
+*Description*
+ This is executed by authvmailmgr if the user's login fails. The
+ environment variable `AUTHVMAILMGR_ERROR' will contain an error
+ message. The environment variable `VUSER' will be set to the
+ virtual user name if it has been determined. This can be used to
+ output logging messages about login failures or to throttle
+ hackers.
+
+
+File: configuration.info, Node: authvmailmgr-postsetuid, Next: authvmailmgr-presetuid, Prev: authvmailmgr-loginfail, Up: Configuration Files
+
+2.3 authvmailmgr-postsetuid
+===========================
+
+*Type*
+ executable
+
+*Default*
+ `vpopbull'
+
+*Used By*
+ authvmailmgr
+
+*Description*
+ This is executed by authvmailmgr after a user is successfully
+ authenticated.
+
+
+File: configuration.info, Node: authvmailmgr-presetuid, Next: autoresponse-dir, Prev: authvmailmgr-postsetuid, Up: Configuration Files
+
+2.4 authvmailmgr-presetuid
+==========================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ authvmailmgr
+
+*Description*
+ This list is executed by authvmailmgr before changing user away
+ from root, and before authenticating a virtual user. Note: The
+ environment variable `MAILDIR' is not set since the virtual user
+ has not yet been authenticated, or even looked up at this point.
+ For the same reason, `VUSER' is not authenticated and is under
+ complete control of the invoking user.
+
+
+File: configuration.info, Node: autoresponse-dir, Next: autoresponse-file, Prev: authvmailmgr-presetuid, Up: Configuration Files
+
+2.5 autoresponse-dir
+====================
+
+*Type*
+ directory
+
+*Default*
+ `autoresponse'
+
+*Used By*
+ vmailmgrd, autoresponder script
+
+*Description*
+ Identifies the subdirectory of the virtual user directory in which
+ all autoresponse data is stored.
+
+
+File: configuration.info, Node: autoresponse-file, Next: bulletin-dir, Prev: autoresponse-dir, Up: Configuration Files
+
+2.6 autoresponse-file
+=====================
+
+*Type*
+ string
+
+*Default*
+ `message.txt'
+
+*Used By*
+ vmailmgrd, autoresponder script
+
+*Description*
+ Identifies the file name within the autoresponse directory that
+ contains the autoresponse message.
+
+
+File: configuration.info, Node: bulletin-dir, Next: checkvpw-error, Prev: autoresponse-file, Up: Configuration Files
+
+2.7 bulletin-dir
+================
+
+*Type*
+ directory
+
+*Default*
+ `bulletins'
+
+*Used By*
+ checkvpw
+
+*Description*
+ Identifies the subdirectory of the domain directory in which
+ bulletins local to a domain are stored.
+
+
+File: configuration.info, Node: checkvpw-error, Next: checkvpw-loginfail, Prev: bulletin-dir, Up: Configuration Files
+
+2.8 checkvpw-error
+==================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ checkvpw
+
+*Description*
+ This is executed by checkvpw if any error occurrs other than those
+ caught by `checkvpw-loginfail' below. The environment variable
+ `CHECKVPW_ERROR' will contain an error message. This can be used
+ to output logging messages about errors in checkvpw.
+
+
+File: configuration.info, Node: checkvpw-loginfail, Next: checkvpw-postexec, Prev: checkvpw-error, Up: Configuration Files
+
+2.9 checkvpw-loginfail
+======================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ checkvpw
+
+*Description*
+ This is executed by checkvpw if the user's login fails. The
+ environment variable `CHECKVPW_ERROR' will contain an error
+ message. The environment variable `VUSER' will be set to the
+ virtual user name if it has been determined. This can be used to
+ output logging messages about login failures or to throttle
+ hackers.
+
+
+File: configuration.info, Node: checkvpw-postexec, Next: checkvpw-postsetuid, Prev: checkvpw-loginfail, Up: Configuration Files
+
+2.10 checkvpw-postexec
+======================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ checkvpw
+
+*Description*
+ This is executed by checkvpw after the subcommand successfully
+ completes.
+
+
+File: configuration.info, Node: checkvpw-postsetuid, Next: checkvpw-presetuid, Prev: checkvpw-postexec, Up: Configuration Files
+
+2.11 checkvpw-postsetuid
+========================
+
+*Type*
+ executable
+
+*Default*
+ `vpopbull'
+
+*Used By*
+ checkvpw
+
+*Description*
+ This is executed by checkvpw after a user is successfully
+ authenticated.
+
+
+File: configuration.info, Node: checkvpw-presetuid, Next: default-expiry, Prev: checkvpw-postsetuid, Up: Configuration Files
+
+2.12 checkvpw-presetuid
+=======================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ checkvpw
+
+*Description*
+ This list is executed by checkvpw before changing user away from
+ root, and before authenticating a virtual user. Note: The
+ environment variable `MAILDIR' is not set since the virtual user
+ has not yet been authenticated, or even looked up at this point.
+ For the same reason, `VUSER' is not authenticated and is under
+ complete control of the invoking user.
+
+
+File: configuration.info, Node: default-expiry, Next: default-maildir, Prev: checkvpw-presetuid, Up: Configuration Files
+
+2.13 default-expiry
+===================
+
+*Type*
+ number
+
+*Default*
+ `-1'
+
+*Used By*
+ vadduser
+
+*Description*
+ Sets the default expiry value for newly created users. Negative
+ values indicate no expiry.
+
+
+File: configuration.info, Node: default-maildir, Next: default-msgcount, Prev: default-expiry, Up: Configuration Files
+
+2.14 default-maildir
+====================
+
+*Type*
+ directory
+
+*Default*
+ `Maildir'
+
+*Used By*
+ checkvpw
+
+*Description*
+ Sets the name of the directory to be used as a non-virtual user's
+ maildir.
+
+
+File: configuration.info, Node: default-msgcount, Next: default-msgsize, Prev: default-maildir, Up: Configuration Files
+
+2.15 default-msgcount
+=====================
+
+*Type*
+ number
+
+*Default*
+ `-1'
+
+*Used By*
+ vadduser
+
+*Description*
+ Sets the default message count limit.
+
+
+File: configuration.info, Node: default-msgsize, Next: default-hardquota, Prev: default-msgcount, Up: Configuration Files
+
+2.16 default-msgsize
+====================
+
+*Type*
+ number
+
+*Default*
+ `-1'
+
+*Used By*
+ vadduser
+
+*Description*
+ Sets the default message size limit, in bytes.
+
+
+File: configuration.info, Node: default-hardquota, Next: default-softquota, Prev: default-msgsize, Up: Configuration Files
+
+2.17 default-hardquota
+======================
+
+*Type*
+ number
+
+*Default*
+ `-1'
+
+*Used By*
+ vadduser
+
+*Description*
+ Sets the default hard quota, in bytes.
+
+
+File: configuration.info, Node: default-softquota, Next: default-username, Prev: default-hardquota, Up: Configuration Files
+
+2.18 default-softquota
+======================
+
+*Type*
+ number
+
+*Default*
+ `-1'
+
+*Used By*
+ vadduser
+
+*Description*
+ Sets the default soft quota, in bytes.
+
+
+File: configuration.info, Node: default-username, Next: error-maildir, Prev: default-softquota, Up: Configuration Files
+
+2.19 default-username
+=====================
+
+*Type*
+ string
+
+*Default*
+ `+'
+
+*Used By*
+ vmailmgrd
+
+*Description*
+ Identifies the name of the virtual user to be looked up if a
+ lookup of another virtual user fails.
+
+
+File: configuration.info, Node: error-maildir, Next: global-bulletin-dir, Prev: default-username, Up: Configuration Files
+
+2.20 error-maildir
+==================
+
+*Type*
+ directory
+
+*Default*
+ `/var/lib/vmailmgr/error-maildir'
+
+*Used By*
+ checkvpw
+
+*Description*
+ Specifies the path of a read-only maildir containing a message to
+ be sent to the user when the maildir corresponding to that user
+ does not exist.
+
+
+File: configuration.info, Node: global-bulletin-dir, Next: maildir-arg-str, Prev: error-maildir, Up: Configuration Files
+
+2.21 global-bulletin-dir
+========================
+
+*Type*
+ directory
+
+*Default*
+ `/var/spool/bulletins'
+
+*Used By*
+ checkvpw
+
+*Description*
+ Identifies a site-wide bulletin directory.
+
+
+File: configuration.info, Node: maildir-arg-str, Next: password-file, Prev: global-bulletin-dir, Up: Configuration Files
+
+2.22 maildir-arg-str
+====================
+
+*Type*
+ string
+
+*Default*
+ `maildir'
+
+*Used By*
+ checkvpw (global only)
+
+*Description*
+ Identifies the string to search for when attempting to identify the
+ maildir argument on the command line to checkvpw.
+
+
+File: configuration.info, Node: password-file, Next: postmaster-aliases, Prev: maildir-arg-str, Up: Configuration Files
+
+2.23 password-file
+==================
+
+*Type*
+ string
+
+*Default*
+ `passwd'
+
+*Used By*
+ vmailmgrd and command-line programs
+
+*Description*
+ Identifies the file that contains user names, passwords, and
+ destinations for a virtual domain. Note that this has nothing to
+ do with "real" users, for which the password file is determined by
+ the system libraries.
+
+
+File: configuration.info, Node: postmaster-aliases, Next: postmaster-email, Prev: password-file, Up: Configuration Files
+
+2.24 postmaster-aliases
+=======================
+
+*Type*
+ list
+
+*Default*
+ `mailer-daemon' `postmaster' `root'
+
+*Used By*
+ vsetup
+
+*Description*
+ A list of aliases to the postmaster email address to set up when
+ creating a new virtual domain with the vsetup command. This
+ should _always_ contain both `postmaster' and `mailer-daemon'
+ (required by the RFCs), and should usually contain `root'.
+
+
+File: configuration.info, Node: postmaster-email, Next: qmail-root, Prev: postmaster-aliases, Up: Configuration Files
+
+2.25 postmaster-email
+=====================
+
+*Type*
+ string
+
+*Default*
+ `postmaster@'
+
+*Used By*
+ vsetup
+
+*Description*
+ Identifies the email address of the entity responsible for the
+ administration of the (virtual) host when building the postmaster
+ aliases above. If this value ends with a trailing `@', the value
+ of `/var/qmail/control/me' is filled in for the host name. If no
+ `@' is present, the current virtual host name is filled in by
+ vdeliver. If this is set to `postmaster', a mail loop will result
+ and all mail to this address will bounce.
+
+
+File: configuration.info, Node: qmail-root, Next: separators, Prev: postmaster-email, Up: Configuration Files
+
+2.26 qmail-root
+===============
+
+*Type*
+ string
+
+*Default*
+ `/var/qmail'
+
+*Used By*
+ checkvpw, vdeliver, vmailmgrd
+
+*Description*
+ Specifies the location of the base directory of your qmail install.
+ Set this to whatever you put into `conf-home' when you built and
+ installed qmail.
+
+
+File: configuration.info, Node: separators, Next: socket-file, Prev: qmail-root, Up: Configuration Files
+
+2.27 separators
+===============
+
+*Type*
+ string
+
+*Default*
+ `@:'
+
+*Used By*
+ checkvpw (global only)
+
+*Description*
+ Identifies the set of valid separators within a user login name
+ between the virtual user name and virtual domain name when logging
+ in via checkvpw. For example, if separators contains `@:' then
+ `user@domain' and `user:domain' are equivalent POP mailbox names.
+
+
+File: configuration.info, Node: socket-file, Next: user-dir, Prev: separators, Up: Configuration Files
+
+2.28 socket-file
+================
+
+*Type*
+ string
+
+*Default*
+ `/tmp/.vmailmgrd'
+
+*Used By*
+ vmailmgrd, checkvpw, vdeliver, and the CGI programs
+
+*Description*
+ Identifies the file name of the local socket used to communicate
+ between the vmailmgr daemon and the other programs. _Warning:_
+ Changing this in the local configuration directories will cause
+ vdeliver to fail.
+
+
+File: configuration.info, Node: user-dir, Next: user-dir-bits, Prev: socket-file, Up: Configuration Files
+
+2.29 user-dir
+=============
+
+*Type*
+ directory
+
+*Default*
+ `users'
+
+*Used By*
+ vmailmgrd and command-line programs
+
+*Description*
+ Identifies the subdirectory from the virtual domain directory in
+ which a virtual user's maildir will be created. Since this
+ maildir is recorded in the password table, it does not have to be
+ the same for each user within a domain. This is prefixed with
+ `./' before it is used in the password table.
+
+
+File: configuration.info, Node: user-dir-bits, Next: user-dir-slices, Prev: user-dir, Up: Configuration Files
+
+2.30 user-dir-bits
+==================
+
+*Type*
+
+*Default*
+ `0'
+
+*Used By*
+ vmailmgrd and command-line programs when creating new users.
+
+*Description*
+ *Note user-dir-slices::.
+
+
+File: configuration.info, Node: user-dir-slices, Next: vdeliver-postdeliver, Prev: user-dir-bits, Up: Configuration Files
+
+2.31 user-dir-slices
+====================
+
+*Type*
+
+*Default*
+ `0'
+
+*Used By*
+ vmailmgrd and command-line programs when creating new users.
+
+*Description*
+ `user-dir-bits' and `user-dir-slices' work together. When
+ creating a new user directory name, a hash code is generated on
+ the name of the new user. This hash code is split into
+ `user-dir-slices' pieces, each `user-dir-bits' bits long. Each of
+ these pieces is translated to an ASCII string by converting the
+ binary code to hexadecimal. The resulting user directory name is
+ then composed of:
+ * the base users directory, followed by a `/'
+
+ * each of the string pieces, each followed by a `/'
+
+ * the user's name
+ For example, with `user-dir-bits' set to 6 and `user-dir-slices'
+ set to 1, a user named `c' maps to a directory name of
+ `users/2f/c/'.
+
+
+File: configuration.info, Node: vdeliver-postdeliver, Next: vdeliver-predeliver, Prev: user-dir-slices, Up: Configuration Files
+
+2.32 vdeliver-postdeliver
+=========================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ vdeliver
+
+*Description*
+ This list is executed after the delivery is successfully completed.
+ Since vdeliver expects `USER' and `HOME' to be set, it does not
+ set them itself. If the command returns with an error code, a
+ warning is printed, but delivery does not fail, as failure would
+ lead to duplicates.
+
+
+File: configuration.info, Node: vdeliver-predeliver, Next: vsetup-post, Prev: vdeliver-postdeliver, Up: Configuration Files
+
+2.33 vdeliver-predeliver
+========================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ vdeliver
+
+*Description*
+ This list is executed before the delivery is attempted, but after
+ the virtual user information is looked up. Since vdeliver expects
+ `USER' and `HOME' to be set, it does not set them itself.
+
+
+File: configuration.info, Node: vsetup-post, Next: vsetup-pre, Prev: vdeliver-predeliver, Up: Configuration Files
+
+2.34 vsetup-post
+================
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ vsetup
+
+*Description*
+ This list is executed after the vsetup command has sucessfully done
+ everything else.
+
+
+File: configuration.info, Node: vsetup-pre, Prev: vsetup-post, Up: Configuration Files
+
+2.35 vsetup-pre
+===============
+
+*Type*
+ executable
+
+*Default*
+ Empty
+
+*Used By*
+ vsetup
+
+*Description*
+ This list is executed before the vsetup command makes any changes.
+
+
+
+Tag Table:
+Node: Top126
+Node: General Information278
+Node: Search Order493
+Node: File Types1358
+Node: Command Execution2759
+Node: Configuration Files4801
+Node: authvmailmgr-error5743
+Node: authvmailmgr-loginfail6311
+Node: authvmailmgr-postsetuid6956
+Node: authvmailmgr-presetuid7343
+Node: autoresponse-dir8020
+Node: autoresponse-file8426
+Node: bulletin-dir8819
+Node: checkvpw-error9180
+Node: checkvpw-loginfail9700
+Node: checkvpw-postexec10311
+Node: checkvpw-postsetuid10663
+Node: checkvpw-presetuid11023
+Node: default-expiry11676
+Node: default-maildir12028
+Node: default-msgcount12371
+Node: default-msgsize12667
+Node: default-hardquota12972
+Node: default-softquota13274
+Node: default-username13577
+Node: error-maildir13939
+Node: global-bulletin-dir14381
+Node: maildir-arg-str14710
+Node: password-file15109
+Node: postmaster-aliases15623
+Node: postmaster-email16175
+Node: qmail-root16900
+Node: separators17325
+Node: socket-file17846
+Node: user-dir18359
+Node: user-dir-bits18940
+Node: user-dir-slices19246
+Node: vdeliver-postdeliver20259
+Node: vdeliver-predeliver20838
+Node: vsetup-post21312
+Node: vsetup-pre21647
+
+End Tag Table
--- a/doc/configuration.texi Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/configuration.texi Sun Jan 20 00:22:09 2008 +0100
@@ -247,7 +247,7 @@
@item Type
executable
@item Default
-@samp {vpopbull}
+@samp{vpopbull}
@item Used By
authvmailmgr
@item Description
@@ -386,7 +386,7 @@
@item Type
executable
@item Default
-@samp {vpopbull}
+@samp{vpopbull}
@item Used By
checkvpw
@item Description
@@ -715,7 +715,7 @@
@item Used By
vmailmgrd and command-line programs when creating new users.
@item Description
-@xref{user-dir-slices}
+@xref{user-dir-slices}.
@end table
@c ============================================================================
@@ -785,7 +785,7 @@
@c ============================================================================
@node vsetup-post, vsetup-pre, vdeliver-predeliver, Configuration Files
-@section vsetup-pre
+@section vsetup-post
@table @strong
@item Type
--- a/doc/configuration.txt Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/configuration.txt Sun Jan 20 00:22:09 2008 +0100
@@ -1,58 +1,24 @@
+ [Top] [Contents] [Index] [ ? ]
Vmailmgr Configuration Files
-
-14 September 2000
-
- Bruce Guenter
+ 1. General Information
+ 2. Configuration Files
_________________________________________________________________
-
- Table of Contents
-
- * 1. General Information
- + 1.1 Search Order
- + 1.2 File Types
- + 1.3 Command Execution
- * 2. Configuration Files
- + 2.1 authvmailmgr-error
- + 2.2 authvmailmgr-loginfail
- + 2.3 authvmailmgr-postsetuid
- + 2.4 authvmailmgr-presetuid
- + 2.5 autoresponse-dir
- + 2.6 autoresponse-file
- + 2.7 bulletin-dir
- + 2.8 checkvpw-error
- + 2.9 checkvpw-loginfail
- + 2.10 checkvpw-postexec
- + 2.11 checkvpw-postsetuid
- + 2.12 checkvpw-presetuid
- + 2.13 default-expiry
- + 2.14 default-maildir
- + 2.15 default-msgcount
- + 2.16 default-msgsize
- + 2.17 default-hardquota
- + 2.18 default-softquota
- + 2.19 default-username
- + 2.20 error-maildir
- + 2.21 global-bulletin-dir
- + 2.22 maildir-arg-str
- + 2.23 password-file
- + 2.24 postmaster-aliases
- + 2.25 postmaster-email
- + 2.26 qmail-root
- + 2.27 separators
- + 2.28 socket-file
- + 2.29 user-dir
- + 2.30 user-dir-bits
- + 2.31 user-dir-slices
- + 2.32 vdeliver-postdeliver
- + 2.33 vdeliver-predeliver
- + 2.34 vsetup-pre
- + 2.35 vsetup-pre
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 1. General Information
+
+ 1.1 Search Order
+ 1.2 File Types
+ 1.3 Command Execution
_________________________________________________________________
-
- 1. General Information
-
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.1 Search Order
The system will look for the configuration files listed below in one
@@ -60,7 +26,7 @@
1. The domain-local configuration directory
2. The user-local configuration directory
3. The global configuration directory
-
+
The global configuration directory is set to `/etc/vmailmgr' by
default. The user-local and domain-local configuration directories
(for now, one and the same) are a subdirectory, named `.vmailmgr' by
@@ -68,10 +34,15 @@
subdirectory. If a file matching the configuration name is found in
one of the local directories, the search stops and it is not searched
for in any higher up directories.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.2 File Types
Each of the configuration files falls into one of the following types:
+
String
A single line is read from this type and used as-is with no
conversion. All data after the first line is ignored.
@@ -92,23 +63,27 @@
If the execute bits on the file are set, it is treated as an
executable file and is executed with no interpretation by
vmailmgr. The the Command Execution section below for details.
-
+
All lines are stripped of any leading or trailing white space.
-
+
Configuration files marked as `(global only)' are read before any
user-level processing occurrs, and so are not functional in the
user-level configuration.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.3 Command Execution
The following rules apply to executing a single command or a list of
commands.
-
+
The executables are searched in reverse order of the configuration
files. That is, the global setting is used first, and then the local
settings. If the named file either does not exist in a directory or is
not executable, that directory is skipped.
-
+
A command exit code of `99' indicates that the command completed
successfully but no further commands should be executed. All other
non-zero exit codes are treated as an error and will cause the
@@ -118,8 +93,9 @@
`qmail-command' man page for full details on delivery error codes. For
`checkvpw', any non-zero exit code (except as described above) will
cause authentication to fail.
-
+
The following environment variables will be set (where applicable):
+
`HOME'
The home directory of the real user.
`MAILDIR'
@@ -147,11 +123,55 @@
`VUSER_SOFTQUOTA'
The virtual user's total size soft quota (in bytes, or "-" if
not applicable).
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2. Configuration Files
-
+
Each of the following sections identifies a single configuration file
-
+
+ 2.1 authvmailmgr-error
+ 2.2 authvmailmgr-loginfail
+ 2.3 authvmailmgr-postsetuid
+ 2.4 authvmailmgr-presetuid
+ 2.5 autoresponse-dir
+ 2.6 autoresponse-file
+ 2.7 bulletin-dir
+ 2.8 checkvpw-error
+ 2.9 checkvpw-loginfail
+ 2.10 checkvpw-postexec
+ 2.11 checkvpw-postsetuid
+ 2.12 checkvpw-presetuid
+ 2.13 default-expiry
+ 2.14 default-maildir
+ 2.15 default-msgcount
+ 2.16 default-msgsize
+ 2.17 default-hardquota
+ 2.18 default-softquota
+ 2.19 default-username
+ 2.20 error-maildir
+ 2.21 global-bulletin-dir
+ 2.22 maildir-arg-str
+ 2.23 password-file
+ 2.24 postmaster-aliases
+ 2.25 postmaster-email
+ 2.26 qmail-root
+ 2.27 separators
+ 2.28 socket-file
+ 2.29 user-dir
+ 2.30 user-dir-bits
+ 2.31 user-dir-slices
+ 2.32 vdeliver-postdeliver
+ 2.33 vdeliver-predeliver
+ 2.34 vsetup-post
+ 2.35 vsetup-pre
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.1 authvmailmgr-error
Type
@@ -166,7 +186,11 @@
environment variable AUTHVMAILMGR_ERROR will contain an error
message. This can be used to output logging messages about
errors in authvmailmgr.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.2 authvmailmgr-loginfail
Type
@@ -182,19 +206,27 @@
virtual user name if it has been determined. This can be used
to output logging messages about login failures or to throttle
hackers.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.3 authvmailmgr-postsetuid
Type
executable
Default
- @samp {vpopbull}
+ `vpopbull'
Used By
authvmailmgr
Description
This is executed by authvmailmgr after a user is successfully
authenticated.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.4 authvmailmgr-presetuid
Type
@@ -210,7 +242,11 @@
user has not yet been authenticated, or even looked up at this
point. For the same reason, `VUSER' is not authenticated and is
under complete control of the invoking user.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.5 autoresponse-dir
Type
@@ -222,7 +258,11 @@
Description
Identifies the subdirectory of the virtual user directory in
which all autoresponse data is stored.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.6 autoresponse-file
Type
@@ -234,7 +274,11 @@
Description
Identifies the file name within the autoresponse directory that
contains the autoresponse message.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.7 bulletin-dir
Type
@@ -246,7 +290,11 @@
Description
Identifies the subdirectory of the domain directory in which
bulletins local to a domain are stored.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.8 checkvpw-error
Type
@@ -260,7 +308,11 @@
those caught by `checkvpw-loginfail' below. The environment
variable CHECKVPW_ERROR will contain an error message. This can
be used to output logging messages about errors in checkvpw.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.9 checkvpw-loginfail
Type
@@ -276,7 +328,11 @@
virtual user name if it has been determined. This can be used
to output logging messages about login failures or to throttle
hackers.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.10 checkvpw-postexec
Type
@@ -288,19 +344,27 @@
Description
This is executed by checkvpw after the subcommand successfully
completes.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.11 checkvpw-postsetuid
Type
executable
Default
- @samp {vpopbull}
+ `vpopbull'
Used By
checkvpw
Description
This is executed by checkvpw after a user is successfully
authenticated.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.12 checkvpw-presetuid
Type
@@ -316,7 +380,11 @@
user has not yet been authenticated, or even looked up at this
point. For the same reason, `VUSER' is not authenticated and is
under complete control of the invoking user.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.13 default-expiry
Type
@@ -328,7 +396,11 @@
Description
Sets the default expiry value for newly created users. Negative
values indicate no expiry.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.14 default-maildir
Type
@@ -340,7 +412,11 @@
Description
Sets the name of the directory to be used as a non-virtual
user's maildir.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.15 default-msgcount
Type
@@ -351,7 +427,11 @@
vadduser
Description
Sets the default message count limit.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.16 default-msgsize
Type
@@ -362,7 +442,11 @@
vadduser
Description
Sets the default message size limit, in bytes.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.17 default-hardquota
Type
@@ -373,7 +457,11 @@
vadduser
Description
Sets the default hard quota, in bytes.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.18 default-softquota
Type
@@ -384,7 +472,11 @@
vadduser
Description
Sets the default soft quota, in bytes.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.19 default-username
Type
@@ -396,7 +488,11 @@
Description
Identifies the name of the virtual user to be looked up if a
lookup of another virtual user fails.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.20 error-maildir
Type
@@ -409,7 +505,11 @@
Specifies the path of a read-only maildir containing a message
to be sent to the user when the maildir corresponding to that
user does not exist.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.21 global-bulletin-dir
Type
@@ -420,7 +520,11 @@
checkvpw
Description
Identifies a site-wide bulletin directory.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.22 maildir-arg-str
Type
@@ -432,7 +536,11 @@
Description
Identifies the string to search for when attempting to identify
the maildir argument on the command line to checkvpw.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.23 password-file
Type
@@ -446,7 +554,11 @@
destinations for a virtual domain. Note that this has nothing
to do with "real" users, for which the password file is
determined by the system libraries.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.24 postmaster-aliases
Type
@@ -461,7 +573,11 @@
This should always contain both `postmaster' and
`mailer-daemon' (required by the RFCs), and should usually
contain `root'.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.25 postmaster-email
Type
@@ -478,7 +594,11 @@
host name. If no `@' is present, the current virtual host name
is filled in by vdeliver. If this is set to `postmaster', a
mail loop will result and all mail to this address will bounce.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.26 qmail-root
Type
@@ -491,7 +611,11 @@
Specifies the location of the base directory of your qmail
install. Set this to whatever you put into `conf-home' when you
built and installed qmail.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.27 separators
Type
@@ -506,7 +630,11 @@
logging in via checkvpw. For example, if separators contains
`@:' then `user@domain' and `user:domain' are equivalent POP
mailbox names.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.28 socket-file
Type
@@ -520,7 +648,11 @@
communicate between the vmailmgr daemon and the other programs.
Warning: Changing this in the local configuration directories
will cause vdeliver to fail.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.29 user-dir
Type
@@ -535,7 +667,11 @@
maildir is recorded in the password table, it does not have to
be the same for each user within a domain. This is prefixed
with `./' before it is used in the password table.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.30 user-dir-bits
Type
@@ -544,8 +680,12 @@
Used By
vmailmgrd and command-line programs when creating new users.
Description
- See section 2.31 user-dir-slices
-
+ See section 2.31 user-dir-slices.
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.31 user-dir-slices
Type
@@ -567,7 +707,11 @@
For example, with `user-dir-bits' set to 6 and
`user-dir-slices' set to 1, a user named `c' maps to a
directory name of `users/2f/c/'.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.32 vdeliver-postdeliver
Type
@@ -582,7 +726,11 @@
it does not set them itself. If the command returns with an
error code, a warning is printed, but delivery does not fail,
as failure would lead to duplicates.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.33 vdeliver-predeliver
Type
@@ -596,8 +744,12 @@
after the virtual user information is looked up. Since vdeliver
expects `USER' and `HOME' to be set, it does not set them
itself.
-
-2.34 vsetup-pre
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+2.34 vsetup-post
Type
executable
@@ -608,7 +760,11 @@
Description
This list is executed after the vsetup command has sucessfully
done everything else.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.35 vsetup-pre
Type
@@ -621,6 +777,102 @@
This list is executed before the vsetup command makes any
changes.
_________________________________________________________________
-
- This document was generated on 14 September 2000 using
- texi2html 1.56k.
+
+ [Top] [Contents] [Index] [ ? ]
+
+ Table of Contents
+
+ 1. General Information
+
+ 1.1 Search Order
+ 1.2 File Types
+ 1.3 Command Execution
+
+ 2. Configuration Files
+ 2.1 authvmailmgr-error
+ 2.2 authvmailmgr-loginfail
+ 2.3 authvmailmgr-postsetuid
+ 2.4 authvmailmgr-presetuid
+ 2.5 autoresponse-dir
+ 2.6 autoresponse-file
+ 2.7 bulletin-dir
+ 2.8 checkvpw-error
+ 2.9 checkvpw-loginfail
+ 2.10 checkvpw-postexec
+ 2.11 checkvpw-postsetuid
+ 2.12 checkvpw-presetuid
+ 2.13 default-expiry
+ 2.14 default-maildir
+ 2.15 default-msgcount
+ 2.16 default-msgsize
+ 2.17 default-hardquota
+ 2.18 default-softquota
+ 2.19 default-username
+ 2.20 error-maildir
+ 2.21 global-bulletin-dir
+ 2.22 maildir-arg-str
+ 2.23 password-file
+ 2.24 postmaster-aliases
+ 2.25 postmaster-email
+ 2.26 qmail-root
+ 2.27 separators
+ 2.28 socket-file
+ 2.29 user-dir
+ 2.30 user-dir-bits
+ 2.31 user-dir-slices
+ 2.32 vdeliver-postdeliver
+ 2.33 vdeliver-predeliver
+ 2.34 vsetup-post
+ 2.35 vsetup-pre
+ _________________________________________________________________
+
+ [Top] [Contents] [Index] [ ? ]
+
+ Short Table of Contents
+
+ 1. General Information
+ 2. Configuration Files
+ _________________________________________________________________
+
+ [Top] [Contents] [Index] [ ? ]
+
+ About this document
+
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
+
+ The buttons in the navigation panels have the following meaning:
+
+ Button Name Go to From 1.2.3 go to
+ [ < ] Back previous section in reading order 1.2.2
+ [ > ] Forward next section in reading order 1.2.4
+ [ << ] FastBack previous or up-and-previous section 1.1
+ [ Up ] Up up section 1.2
+ [ >> ] FastForward next or up-and-next section 1.3
+ [Top] Top cover (top) of document
+ [Contents] Contents table of contents
+ [Index] Index concept index
+ [ ? ] About this page
+
+ where the Example assumes that the current position is at
+ Subsubsection One-Two-Three of a document of the following structure:
+ * 1. Section One
+
+ * 1.1 Subsection One-One
+
+ * ...
+
+ 1.2 Subsection One-Two
+ * 1.2.1 Subsubsection One-Two-One
+ * 1.2.2 Subsubsection One-Two-Two
+ * 1.2.3 Subsubsection One-Two-Three <== Current Position
+ * 1.2.4 Subsubsection One-Two-Four
+
+ 1.3 Subsection One-Three
+ * ...
+
+ 1.4 Subsection One-Four
+ _________________________________________________________________
+
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
Binary file doc/translation.pdf has changed
--- a/doc/translation.ps Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/translation.ps Sun Jan 20 00:22:09 2008 +0100
@@ -1,13 +1,18 @@
%!PS-Adobe-2.0
%%Title: translation.fig
-%%Creator: fig2dev Version 3.2.3 Patchlevel
-%%CreationDate: Sat Sep 30 22:24:36 2000
-%%For: bruce@bruce-guenter.dyndns.org (Bruce Guenter)
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Dec 29 16:16:08 2004
+%%For: bruce@lorien (Bruce.Guenter.dyndns.org)
%%Orientation: Landscape
%%Pages: 1
%%BoundingBox: 0 0 612 792
+%%DocumentPaperSizes: letter
%%BeginSetup
-%%IncludeFeature: *PageSize Letter
+[{
+%BeginFeature: *PageRegion Letter
+<</PageSize [612 792]>> setpagedevice
+%EndFeature
+} stopped cleartomark
%%EndSetup
%%Magnification: 1.0000
%%EndComments
@@ -51,9 +56,7 @@
end
save
newpath 0 792 moveto 0 0 lineto 612 0 lineto 612 792 lineto closepath clip newpath
-116.0 109.5 translate
- 90 rotate
-1 -1 scale
+115.7 110.0 translate
/cp {closepath} bind def
/ef {eofill} bind def
@@ -104,7 +107,7 @@
8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
-8#255 /hypen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
@@ -129,10 +132,19 @@
/$F2psEnd {$F2psEnteredState restore end} def
$F2psBegin
-%%Page: 1 1
10 setmiterlimit
+0 slj 0 slc
0.06000 0.06000 sc
%%Page: 1 1
+%%BeginPageSetup
+ 90 rotate
+1 -1 scale
+%%EndPageSetup
+%
+% Fig objects follow
+%
+%
+% here starts figure with depth 0
% Polyline
7.500 slw
n 750 525 m 1650 525 l 1650 825 l 750 825 l
@@ -343,22 +355,22 @@
n 5887 3142 m 5989 3213 l 5932 3102 l 5887 3142 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
-6642 4119 m 6690 4154 l 6780 4033 l 6685 4112 l 6732 3998 l cp
+6641 4119 m 6690 4155 l 6780 4033 l 6685 4112 l 6732 3997 l cp
eoclip
n 7125 3525 m
6675 4125 l gs col0 s gr gr
% arrowhead
-n 6732 3998 m 6685 4112 l 6780 4033 l 6732 3998 l cp gs 0.00 setgray ef gr col0 s
+n 6732 3997 m 6685 4112 l 6780 4033 l 6732 3997 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
-6509 4154 m 6557 4119 l 6467 3998 l 6515 4112 l 6419 4033 l cp
+6509 4155 m 6558 4119 l 6467 3997 l 6515 4112 l 6419 4033 l cp
eoclip
n 6075 3525 m
6525 4125 l gs col0 s gr gr
% arrowhead
-n 6419 4033 m 6515 4112 l 6467 3998 l 6419 4033 l cp gs 0.00 setgray ef gr col0 s
+n 6419 4033 m 6515 4112 l 6467 3997 l 6419 4033 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6570 5115 m 6630 5115 l 6630 4964 l 6600 5084 l 6570 4964 l cp
@@ -370,13 +382,13 @@
n 6570 4964 m 6600 5084 l 6630 4964 l 6570 4964 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
-7109 3254 m 7157 3219 l 7067 3098 l 7115 3212 l 7019 3133 l cp
+7109 3255 m 7158 3219 l 7067 3097 l 7115 3212 l 7019 3133 l cp
eoclip
n 6675 2625 m
7125 3225 l gs col0 s gr gr
% arrowhead
-n 7019 3133 m 7115 3212 l 7067 3098 l 7019 3133 l cp gs 0.00 setgray ef gr col0 s
+n 7019 3133 m 7115 3212 l 7067 3097 l 7019 3133 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
6117 3216 m 6162 3256 l 6262 3142 l 6161 3213 l 6217 3102 l cp
@@ -423,6 +435,7 @@
/AvantGarde-Book-iso ff 180.00 scf sf
1950 5325 m
gs 1 -1 sc (Internal construct \(ie struct or class\)) col0 sh gr
+% here ends figure;
$F2psEnd
rs
showpage
--- a/doc/vmailmgr-cgi.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/vmailmgr-cgi.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,748 +1,1373 @@
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on December, 29 2004 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
-<!-- Created by texi2html 1.56k from vmailmgr-cgi.texi on 14 September 2000 -->
+<TITLE>vmailmgr CGI Documentation: </TITLE>
+
+<META NAME="description" CONTENT="vmailmgr CGI Documentation: ">
+<META NAME="keywords" CONTENT="vmailmgr CGI Documentation: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
+
+</HEAD>
+
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
-<TITLE>vmailmgr CGI Documentation</TITLE>
-</HEAD>
-<BODY>
-<H1>vmailmgr CGI Documentation</H1>
-<H2>14 September 2000</H2>
-<ADDRESS>Bruce Guenter</ADDRESS>
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>vmailmgr CGI Documentation</H1></P><P>
+
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC2"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 1. Introduction </H1>
+<!--docid::SEC1::-->
<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="vmailmgr-cgi.html#SEC1">1. Introduction</A>
-<UL>
-<LI><A NAME="TOC2" HREF="vmailmgr-cgi.html#SEC2">1.1 Common Form Configuration</A>
-<UL>
-<LI><A NAME="TOC3" HREF="vmailmgr-cgi.html#SEC3">1.1.1 Required Form Fields</A>
-<LI><A NAME="TOC4" HREF="vmailmgr-cgi.html#SEC4">1.1.2 Optional Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC5" HREF="vmailmgr-cgi.html#SEC5">2. listvdomain</A>
-<UL>
-<LI><A NAME="TOC6" HREF="vmailmgr-cgi.html#SEC6">2.1 Overview</A>
-<LI><A NAME="TOC7" HREF="vmailmgr-cgi.html#SEC7">2.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC8" HREF="vmailmgr-cgi.html#SEC8">2.2.1 Required Form Fields</A>
-<LI><A NAME="TOC9" HREF="vmailmgr-cgi.html#SEC9">2.2.2 Optional Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC10" HREF="vmailmgr-cgi.html#SEC10">3. vaddalias</A>
-<UL>
-<LI><A NAME="TOC11" HREF="vmailmgr-cgi.html#SEC11">3.1 Overview</A>
-<LI><A NAME="TOC12" HREF="vmailmgr-cgi.html#SEC12">3.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC13" HREF="vmailmgr-cgi.html#SEC13">3.2.1 Required Form Fields</A>
-<LI><A NAME="TOC14" HREF="vmailmgr-cgi.html#SEC14">3.2.2 Optional Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC15" HREF="vmailmgr-cgi.html#SEC15">4. vadduser</A>
-<UL>
-<LI><A NAME="TOC16" HREF="vmailmgr-cgi.html#SEC16">4.1 Overview</A>
-<LI><A NAME="TOC17" HREF="vmailmgr-cgi.html#SEC17">4.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC18" HREF="vmailmgr-cgi.html#SEC18">4.2.1 Required Form Fields</A>
-<LI><A NAME="TOC19" HREF="vmailmgr-cgi.html#SEC19">4.2.2 Optional Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC20" HREF="vmailmgr-cgi.html#SEC20">5. vchattr</A>
-<UL>
-<LI><A NAME="TOC21" HREF="vmailmgr-cgi.html#SEC21">5.1 Overview</A>
-<LI><A NAME="TOC22" HREF="vmailmgr-cgi.html#SEC22">5.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC23" HREF="vmailmgr-cgi.html#SEC23">5.2.1 Required Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC24" HREF="vmailmgr-cgi.html#SEC24">6. vchforwards</A>
-<UL>
-<LI><A NAME="TOC25" HREF="vmailmgr-cgi.html#SEC25">6.1 Overview</A>
-<LI><A NAME="TOC26" HREF="vmailmgr-cgi.html#SEC26">6.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC27" HREF="vmailmgr-cgi.html#SEC27">6.2.1 Required Form Fields</A>
-<LI><A NAME="TOC28" HREF="vmailmgr-cgi.html#SEC28">6.2.2 Optional Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC29" HREF="vmailmgr-cgi.html#SEC29">7. vdeluser</A>
-<UL>
-<LI><A NAME="TOC30" HREF="vmailmgr-cgi.html#SEC30">7.1 Overview</A>
-<LI><A NAME="TOC31" HREF="vmailmgr-cgi.html#SEC31">7.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC32" HREF="vmailmgr-cgi.html#SEC32">7.2.1 Required Form Fields</A>
-</UL>
-</UL>
-<LI><A NAME="TOC33" HREF="vmailmgr-cgi.html#SEC33">8. vpasswd</A>
-<UL>
-<LI><A NAME="TOC34" HREF="vmailmgr-cgi.html#SEC34">8.1 Overview</A>
-<LI><A NAME="TOC35" HREF="vmailmgr-cgi.html#SEC35">8.2 Form Configuration</A>
-<UL>
-<LI><A NAME="TOC36" HREF="vmailmgr-cgi.html#SEC36">8.2.1 Required Form Fields</A>
-</UL>
-</UL>
-</UL>
-<P><HR><P>
+
+This is the documentation for the CGI programs for vmailmgr.
+</P><P>
-
-<H1><A NAME="SEC1" HREF="vmailmgr-cgi.html#TOC1">1. Introduction</A></H1>
-
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC1"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC3"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Common Form Configuration </H2>
+<!--docid::SEC2::-->
<P>
-This is the documentation for the CGI programs for vmailmgr.
-
-
-
-<H2><A NAME="SEC2" HREF="vmailmgr-cgi.html#TOC2">1.1 Common Form Configuration</A></H2>
-
-<P>
The following form fields are common to all of the vmailmgr CGI
programs.
-
-
+</P><P>
-
-<H3><A NAME="SEC3" HREF="vmailmgr-cgi.html#TOC3">1.1.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC2"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC4"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.1 Required Form Fields </H3>
+<!--docid::SEC3::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- vdomain
+<DD> vdomain
<DT><STRONG>Description:</STRONG>
-<DD>
-This field specifies the name of the virtual domain under which to
+<DD>This field specifies the name of the virtual domain under which to
perform this operation.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=vdomain value="<VAR>domain-name</VAR>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=vdomain value="<VAR>domain-name</VAR>">'</SAMP>
or
<SAMP>`<input type=text name=vdomain>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- password
+<DD> password
<DT><STRONG>Description:</STRONG>
-<DD>
-Unless noted below, this field specifies the password of the
+<DD>Unless noted below, this field specifies the password of the
administrator for the given virtual domain.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=password name=password>'</SAMP>
+<DD><SAMP>`<input type=password name=password>'</SAMP>
</DL>
+<P>
-
-
-<H3><A NAME="SEC4" HREF="vmailmgr-cgi.html#TOC4">1.1.2 Optional Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC3"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC5"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.2 Optional Form Fields </H3>
+<!--docid::SEC4::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- error_redirect
+<DD> error_redirect
<DT><STRONG>Description:</STRONG>
-<DD>
-If this field is set, any operation that results in an error will be
+<DD>If this field is set, any operation that results in an error will be
redirected to the given URL.
If not set, a pre-programmed document (which includes the error message)
will be output.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=error_redirect value="<VAR>URL</VAR>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=error_redirect value="<VAR>URL</VAR>">'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- redirect
+<DD> redirect
<DT><STRONG>Description:</STRONG>
-<DD>
-If this field is set, any operation that completes successfully with be
+<DD>If this field is set, any operation that completes successfully with be
redirected to the given URL.
If not set, a pre-programmed document (which includes the completion
message) will be output.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=redirect value="<VAR>URL</VAR>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=redirect value="<VAR>URL</VAR>">'</SAMP>
</DL>
-
-
+<P>
-<H1><A NAME="SEC5" HREF="vmailmgr-cgi.html#TOC5">2. listvdomain</A></H1>
-
-
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC4"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC6"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. listvdomain </H1>
+<!--docid::SEC5::-->
+<P>
-<H2><A NAME="SEC6" HREF="vmailmgr-cgi.html#TOC6">2.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC5"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC7"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Overview </H2>
+<!--docid::SEC6::-->
+<P>
-<P>
This CGI program will list the mailboxes and aliases in a virtual domain
in a three-column table.
The first column lists the mailbox or alias name,
the second column is either <SAMP>`Alias'</SAMP> or <SAMP>`Mailbox'</SAMP>,
and the third column lists the destination.
-
-
-
+</P><P>
-<H2><A NAME="SEC7" HREF="vmailmgr-cgi.html#TOC7">2.2 Form Configuration</A></H2>
-
-
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC6"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC8"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 Form Configuration </H2>
+<!--docid::SEC7::-->
+<P>
-<H3><A NAME="SEC8" HREF="vmailmgr-cgi.html#TOC8">2.2.1 Required Form Fields</A></H3>
-
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC7"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC9"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.1 Required Form Fields </H3>
+<!--docid::SEC8::-->
<P>
-No additional form fields are Required.
-
+No additional form fields are Required.
+</P><P>
-
-<H3><A NAME="SEC9" HREF="vmailmgr-cgi.html#TOC9">2.2.2 Optional Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC8"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC10"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.2 Optional Form Fields </H3>
+<!--docid::SEC9::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- body-flags
+<DD> body-flags
<DT><STRONG>Description:</STRONG>
-<DD>
-If present, the contents of this field is inserted into the
+<DD>If present, the contents of this field is inserted into the
<SAMP>`<body>'</SAMP> tag at the start of the document.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=body-flags value="bgcolor=ffffff">'</SAMP>
+<DD><SAMP>`<input type=hidden name=body-flags value="bgcolor=ffffff">'</SAMP>
</DL>
-
-<DL COMPACT>
-
-<DT><STRONG>Field:</STRONG>
-<DD>
- cell-align
-<DT><STRONG>Description:</STRONG>
-<DD>
-Sets the cell alignment.
-Defaults to <SAMP>`left'</SAMP>.
-<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=cell-align value=center>'</SAMP>
-</DL>
-
-<DL COMPACT>
-
-<DT><STRONG>Field:</STRONG>
-<DD>
- cell-post
-<DT><STRONG>Description:</STRONG>
-<DD>
-If present, the contents of this field will be output prior to every
-<SAMP>`</td>'</SAMP> tag.
-<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=cell-post value="</font>">'</SAMP>
-</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- cell-pre
+<DD> cell-align
<DT><STRONG>Description:</STRONG>
-<DD>
-If present, the contents of this field will be output after every
-<SAMP>`<td>'</SAMP> tag.
+<DD>Sets the cell alignment.
+Defaults to <SAMP>`left'</SAMP>.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=cell-pre value="<font size=1 name=ariel>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=cell-align value=center>'</SAMP>
</DL>
+<P>
+
+<DL COMPACT>
+<DT><STRONG>Field:</STRONG>
+<DD> cell-post
+<DT><STRONG>Description:</STRONG>
+<DD>If present, the contents of this field will be output prior to every
+<SAMP>`</td>'</SAMP> tag.
+<DT><STRONG>Syntax:</STRONG>
+<DD><SAMP>`<input type=hidden name=cell-post value="</font>">'</SAMP>
+</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- p-align
+<DD> cell-pre
<DT><STRONG>Description:</STRONG>
-<DD>
-Sets the default paragraph alignment.
+<DD>If present, the contents of this field will be output after every
+<SAMP>`<td>'</SAMP> tag.
+<DT><STRONG>Syntax:</STRONG>
+<DD><SAMP>`<input type=hidden name=cell-pre value="<font size=1 name=ariel>">'</SAMP>
+</DL>
+<P>
+
+<DL COMPACT>
+<DT><STRONG>Field:</STRONG>
+<DD> p-align
+<DT><STRONG>Description:</STRONG>
+<DD>Sets the default paragraph alignment.
Defaults to <SAMP>`left'</SAMP>.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=p-align value=center>'</SAMP>
+<DD><SAMP>`<input type=hidden name=p-align value=center>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- title-post
+<DD> title-post
<DT><STRONG>Description:</STRONG>
-<DD>
-If present, the contents of this field are output after the title text.
+<DD>If present, the contents of this field are output after the title text.
Defaults to <SAMP>`</h1>'</SAMP>.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=title-post value="</font>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=title-post value="</font>">'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- table-align
+<DD> table-align
<DT><STRONG>Description:</STRONG>
-<DD>
-Sets the allignment of the table listing the users.
+<DD>Sets the allignment of the table listing the users.
Defaults to <SAMP>`left'</SAMP>.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=table-align value=center>'</SAMP>
+<DD><SAMP>`<input type=hidden name=table-align value=center>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- title-pre
+<DD> title-pre
<DT><STRONG>Description:</STRONG>
-<DD>
-If present, the contents of this field are output before the title text.
+<DD>If present, the contents of this field are output before the title text.
Defaults to <SAMP>`<h1>'</SAMP>.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=title-pre value="<font size=3 face=verdana>">'</SAMP>
+<DD><SAMP>`<input type=hidden name=title-pre value="<font size=3 face=verdana>">'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- userlink
+<DD> userlink
<DT><STRONG>Description:</STRONG>
-<DD>
-If this field is present, all user names will be enclosed in a link to the
+<DD>If this field is present, all user names will be enclosed in a link to the
contents of this field. If the field contains a '%', it will be
replaced by the user name.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=userlink value="/cgi-bin/admin-user?name=%">'</SAMP>
+<DD><SAMP>`<input type=hidden name=userlink value="/cgi-bin/admin-user?name=%">'</SAMP>
</DL>
-
-
+<P>
-<H1><A NAME="SEC10" HREF="vmailmgr-cgi.html#TOC10">3. vaddalias</A></H1>
-
-
-
-<H2><A NAME="SEC11" HREF="vmailmgr-cgi.html#TOC11">3.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC9"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC11"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 3. vaddalias </H1>
+<!--docid::SEC10::-->
+<P>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC10"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC12"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.1 Overview </H2>
+<!--docid::SEC11::-->
<P>
-This CGI program can be used to add an alias to a virtual domain.
-
-
+This CGI program can be used to add an alias to a virtual domain.
+</P><P>
-<H2><A NAME="SEC12" HREF="vmailmgr-cgi.html#TOC12">3.2 Form Configuration</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC11"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC13"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 3.2 Form Configuration </H2>
+<!--docid::SEC12::-->
+<P>
-
-<H3><A NAME="SEC13" HREF="vmailmgr-cgi.html#TOC13">3.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC12"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC14"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.2.1 Required Form Fields </H3>
+<!--docid::SEC13::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-The virtual user name of the alias to create.
+<DD>The virtual user name of the alias to create.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- destination
+<DD> destination
<DT><STRONG>Description:</STRONG>
-<DD>
-The destination address or addresses of the alias, separated by commas.
+<DD>The destination address or addresses of the alias, separated by commas.
If an address does not contain a host name (separated from the user name
with an <SAMP>`@'</SAMP>), it is treated as local to the virtual domain and
must already exist.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=destination>'</SAMP>
+<DD><SAMP>`<input type=text name=destination>'</SAMP>
</DL>
+<P>
-
-
-<H3><A NAME="SEC14" HREF="vmailmgr-cgi.html#TOC14">3.2.2 Optional Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC13"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC15"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 3.2.2 Optional Form Fields </H3>
+<!--docid::SEC14::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- newpass1, newpass2
+<DD> newpass1, newpass2
<DT><STRONG>Description:</STRONG>
-<DD>
-These two fields specify the new password of the user. They must match
+<DD>These two fields specify the new password of the user. They must match
for the password to be changed. The first eight characters are relevant,
and may be any combination of letters, digits, or punctuation symbols.
If these fields are not present or are empty, a null passcode is used.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=password name=newpass1><input type=password name=newpass1>'</SAMP>
+<DD><SAMP>`<input type=password name=newpass1><input type=password name=newpass1>'</SAMP>
</DL>
-
-
+<P>
-<H1><A NAME="SEC15" HREF="vmailmgr-cgi.html#TOC15">4. vadduser</A></H1>
-
-
-
-<H2><A NAME="SEC16" HREF="vmailmgr-cgi.html#TOC16">4.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC14"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC16"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 4. vadduser </H1>
+<!--docid::SEC15::-->
+<P>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC15"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC17"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.1 Overview </H2>
+<!--docid::SEC16::-->
<P>
-This CGI program can be used to add a user mailbox to a virtual domain.
-
-
+This CGI program can be used to add a user mailbox to a virtual domain.
+</P><P>
-<H2><A NAME="SEC17" HREF="vmailmgr-cgi.html#TOC17">4.2 Form Configuration</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC16"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC18"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 4.2 Form Configuration </H2>
+<!--docid::SEC17::-->
+<P>
-
-<H3><A NAME="SEC18" HREF="vmailmgr-cgi.html#TOC18">4.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC17"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC19"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 4.2.1 Required Form Fields </H3>
+<!--docid::SEC18::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-The virtual user name of the alias to create.
+<DD>The virtual user name of the alias to create.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- newpass1, newpass2
+<DD> newpass1, newpass2
<DT><STRONG>Description:</STRONG>
-<DD>
-These two fields specify the new password of the user. They must match
+<DD>These two fields specify the new password of the user. They must match
for the password to be changed. The first eight characters are relevant,
and may be any combination of letters, digits, or punctuation symbols.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=password name=newpass1><input type=password name=newpass1>'</SAMP>
+<DD><SAMP>`<input type=password name=newpass1><input type=password name=newpass1>'</SAMP>
</DL>
+<P>
-
-
-<H3><A NAME="SEC19" HREF="vmailmgr-cgi.html#TOC19">4.2.2 Optional Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC18"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC20"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 4.2.2 Optional Form Fields </H3>
+<!--docid::SEC19::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- destination
+<DD> destination
<DT><STRONG>Description:</STRONG>
-<DD>
-The destination address or addresses to direct a copy of incoming mail,
+<DD>The destination address or addresses to direct a copy of incoming mail,
separated by commas.
If an address does not contain a host name (separated from the user name
with an <SAMP>`@'</SAMP>), it is treated as local to the virtual domain and
must already exist.
If this field is not present or blank, no forwarding will be done.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=destination>'</SAMP>
+<DD><SAMP>`<input type=text name=destination>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- userdir
+<DD> userdir
<DT><STRONG>Description:</STRONG>
-<DD>
-This field can be used to specify the user mail directory name relative
+<DD>This field can be used to specify the user mail directory name relative
to the virtual domain's users directory.
If this field is not present, the directory name will be the same as the
user name.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=userdir>'</SAMP>
+<DD><SAMP>`<input type=text name=userdir>'</SAMP>
</DL>
-
-
+<P>
-<H1><A NAME="SEC20" HREF="vmailmgr-cgi.html#TOC20">5. vchattr</A></H1>
-
-
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC19"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC21"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 5. vchattr </H1>
+<!--docid::SEC20::-->
+<P>
-<H2><A NAME="SEC21" HREF="vmailmgr-cgi.html#TOC21">5.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC20"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC22"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.1 Overview </H2>
+<!--docid::SEC21::-->
+<P>
-<P>
This CGI program can be used to change the attributes of an existing
user in a virtual domain.
-
-
-
+</P><P>
-<H2><A NAME="SEC22" HREF="vmailmgr-cgi.html#TOC22">5.2 Form Configuration</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC21"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC23"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 5.2 Form Configuration </H2>
+<!--docid::SEC22::-->
+<P>
-
-<H3><A NAME="SEC23" HREF="vmailmgr-cgi.html#TOC23">5.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC22"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC24"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 5.2.1 Required Form Fields </H3>
+<!--docid::SEC23::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-The virtual user name to modify.
+<DD>The virtual user name to modify.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- attribute
+<DD> attribute
<DT><STRONG>Description:</STRONG>
-<DD>
-The number of the attribute to modify.
+<DD>The number of the attribute to modify.
The possible values are:
<DL COMPACT>
-
<DT><SAMP>`1'</SAMP>
-<DD>
-The password.
+<DD>The password.
Use the <TT>`vpasswd'</TT> CGI to do this.
<DT><SAMP>`2'</SAMP>
-<DD>
-The forwarding destination.
+<DD>The forwarding destination.
Use the <TT>`vchforwards'</TT> to do this.
<DT><SAMP>`3'</SAMP>
-<DD>
-The hard quota.
+<DD>The hard quota.
<DT><SAMP>`4'</SAMP>
-<DD>
-The soft quota.
+<DD>The soft quota.
<DT><SAMP>`5'</SAMP>
-<DD>
-The message size limit.
+<DD>The message size limit.
<DT><SAMP>`6'</SAMP>
-<DD>
-The message count limit.
+<DD>The message count limit.
<DT><SAMP>`7'</SAMP>
-<DD>
-The account's expiry time.
+<DD>The account's expiry time.
<DT><SAMP>`8'</SAMP>
-<DD>
-Set to zero to disable delivery to the account's mailbox (without
+<DD>Set to zero to disable delivery to the account's mailbox (without
deleting the account).
Set to non-zero to enable delivery.
<DT><SAMP>`9'</SAMP>
-<DD>
-The personal information string.
+<DD>The personal information string.
</DL>
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=hidden name=attribute value=2>'</SAMP>
+<DD><SAMP>`<input type=hidden name=attribute value=2>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- newvalue
+<DD> newvalue
<DT><STRONG>Description:</STRONG>
-<DD>
-The new value for the given attribute.
+<DD>The new value for the given attribute.
The format of this new value is dependant on the type of the attribute.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=newvalue>'</SAMP>
+<DD><SAMP>`<input type=text name=newvalue>'</SAMP>
</DL>
-
-
+<P>
-<H1><A NAME="SEC24" HREF="vmailmgr-cgi.html#TOC24">6. vchforwards</A></H1>
-
-
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC23"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC25"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 6. vchforwards </H1>
+<!--docid::SEC24::-->
+<P>
-<H2><A NAME="SEC25" HREF="vmailmgr-cgi.html#TOC25">6.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC24"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC26"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 6.1 Overview </H2>
+<!--docid::SEC25::-->
+<P>
-<P>
This CGI program can be used to change the forwarding destination of an
existing user.
-
-
-
+</P><P>
-<H2><A NAME="SEC26" HREF="vmailmgr-cgi.html#TOC26">6.2 Form Configuration</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC25"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC27"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 6.2 Form Configuration </H2>
+<!--docid::SEC26::-->
+<P>
-
-<H3><A NAME="SEC27" HREF="vmailmgr-cgi.html#TOC27">6.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC26"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC28"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 6.2.1 Required Form Fields </H3>
+<!--docid::SEC27::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-The virtual user name to modify.
+<DD>The virtual user name to modify.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- destination
+<DD> destination
<DT><STRONG>Description:</STRONG>
-<DD>
-The destination address or addresses of the alias, separated by commas.
+<DD>The destination address or addresses of the alias, separated by commas.
If an address does not contain a host name (separated from the user name
with an <SAMP>`@'</SAMP>), it is treated as local to the virtual domain and
must already exist.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=destination>'</SAMP>
+<DD><SAMP>`<input type=text name=destination>'</SAMP>
</DL>
+<P>
-
-
-<H3><A NAME="SEC28" HREF="vmailmgr-cgi.html#TOC28">6.2.2 Optional Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC27"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC29"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 6.2.2 Optional Form Fields </H3>
+<!--docid::SEC28::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- enable
+<DD> enable
<DT><STRONG>Description:</STRONG>
-<DD>
-Set this field to <SAMP>`0'</SAMP> to cause mailbox delivery to this account to
+<DD>Set this field to <SAMP>`0'</SAMP> to cause mailbox delivery to this account to
be disabled after changing the alias.
Set it to any number except <SAMP>`0'</SAMP> to cause mailbox delivery to be
enabled before changing the alias.
If it is not set, the mailbox is neither enabled nor disabled.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<select name=enable>
+<DD><SAMP>`<select name=enable>
<option value=0>Disable
<option value=1>Enable
</select>'</SAMP>
</DL>
-
-
-
-<H1><A NAME="SEC29" HREF="vmailmgr-cgi.html#TOC29">7. vdeluser</A></H1>
+<P>
-
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC28"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC30"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 7. vdeluser </H1>
+<!--docid::SEC29::-->
+<P>
-<H2><A NAME="SEC30" HREF="vmailmgr-cgi.html#TOC30">7.1 Overview</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC29"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC31"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 7.1 Overview </H2>
+<!--docid::SEC30::-->
<P>
+
This CGI program deletes a user from a virtual domain.
-
-
-
+</P><P>
-<H2><A NAME="SEC31" HREF="vmailmgr-cgi.html#TOC31">7.2 Form Configuration</A></H2>
-
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC30"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC32"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 7.2 Form Configuration </H2>
+<!--docid::SEC31::-->
+<P>
-
-<H3><A NAME="SEC32" HREF="vmailmgr-cgi.html#TOC32">7.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC31"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC33"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 7.2.1 Required Form Fields </H3>
+<!--docid::SEC32::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-The virtual user name of the user to delete.
+<DD>The virtual user name of the user to delete.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
-
-
-
-<H1><A NAME="SEC33" HREF="vmailmgr-cgi.html#TOC33">8. vpasswd</A></H1>
+<P>
-
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC32"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC34"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 8. vpasswd </H1>
+<!--docid::SEC33::-->
+<P>
-<H2><A NAME="SEC34" HREF="vmailmgr-cgi.html#TOC34">8.1 Overview</A></H2>
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC33"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC35"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 8.1 Overview </H2>
+<!--docid::SEC34::-->
+<P>
-<P>
This CGI program can be used to change the password of a user either by
the user themself or by the domain administrator.
-
-
-
+</P><P>
-<H2><A NAME="SEC35" HREF="vmailmgr-cgi.html#TOC35">8.2 Form Configuration</A></H2>
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC34"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC36"> > </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 8.2 Form Configuration </H2>
+<!--docid::SEC35::-->
+<P>
-<P>
The password field used by this CGI may match either the password of the
virtual domain administrator or that of the user being modified.
-
-
+</P><P>
-
-<H3><A NAME="SEC36" HREF="vmailmgr-cgi.html#TOC36">8.2.1 Required Form Fields</A></H3>
+<HR SIZE="6">
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC35"> < </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 8.2.1 Required Form Fields </H3>
+<!--docid::SEC36::-->
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- username
+<DD> username
<DT><STRONG>Description:</STRONG>
-<DD>
-This field specifies the name of the user that is to be modified.
+<DD>This field specifies the name of the user that is to be modified.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=text name=username>'</SAMP>
+<DD><SAMP>`<input type=text name=username>'</SAMP>
</DL>
+<P>
<DL COMPACT>
-
<DT><STRONG>Field:</STRONG>
-<DD>
- newpass1, newpass2
+<DD> newpass1, newpass2
<DT><STRONG>Description:</STRONG>
-<DD>
-These two fields specify the new password of the user.
+<DD>These two fields specify the new password of the user.
They must match for the password to be changed.
The password may contain any combination of
letters, digits, or punctuation symbols.
<DT><STRONG>Syntax:</STRONG>
-<DD>
-<SAMP>`<input type=password name=newpass1> <input type=password name=newpass2>'</SAMP>
+<DD><SAMP>`<input type=password name=newpass1> <input type=password name=newpass2>'</SAMP>
</DL>
+<P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="vmailmgr-cgi.html#SEC1">1. Introduction</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="vmailmgr-cgi.html#SEC2">1.1 Common Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC3" HREF="vmailmgr-cgi.html#SEC3">1.1.1 Required Form Fields</A>
+<BR>
+<A NAME="TOC4" HREF="vmailmgr-cgi.html#SEC4">1.1.2 Optional Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC5" HREF="vmailmgr-cgi.html#SEC5">2. listvdomain</A>
+<BR>
+<UL>
+<A NAME="TOC6" HREF="vmailmgr-cgi.html#SEC6">2.1 Overview</A>
+<BR>
+<A NAME="TOC7" HREF="vmailmgr-cgi.html#SEC7">2.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC8" HREF="vmailmgr-cgi.html#SEC8">2.2.1 Required Form Fields</A>
+<BR>
+<A NAME="TOC9" HREF="vmailmgr-cgi.html#SEC9">2.2.2 Optional Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC10" HREF="vmailmgr-cgi.html#SEC10">3. vaddalias</A>
+<BR>
+<UL>
+<A NAME="TOC11" HREF="vmailmgr-cgi.html#SEC11">3.1 Overview</A>
+<BR>
+<A NAME="TOC12" HREF="vmailmgr-cgi.html#SEC12">3.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC13" HREF="vmailmgr-cgi.html#SEC13">3.2.1 Required Form Fields</A>
+<BR>
+<A NAME="TOC14" HREF="vmailmgr-cgi.html#SEC14">3.2.2 Optional Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC15" HREF="vmailmgr-cgi.html#SEC15">4. vadduser</A>
+<BR>
+<UL>
+<A NAME="TOC16" HREF="vmailmgr-cgi.html#SEC16">4.1 Overview</A>
+<BR>
+<A NAME="TOC17" HREF="vmailmgr-cgi.html#SEC17">4.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC18" HREF="vmailmgr-cgi.html#SEC18">4.2.1 Required Form Fields</A>
+<BR>
+<A NAME="TOC19" HREF="vmailmgr-cgi.html#SEC19">4.2.2 Optional Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC20" HREF="vmailmgr-cgi.html#SEC20">5. vchattr</A>
+<BR>
+<UL>
+<A NAME="TOC21" HREF="vmailmgr-cgi.html#SEC21">5.1 Overview</A>
+<BR>
+<A NAME="TOC22" HREF="vmailmgr-cgi.html#SEC22">5.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC23" HREF="vmailmgr-cgi.html#SEC23">5.2.1 Required Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC24" HREF="vmailmgr-cgi.html#SEC24">6. vchforwards</A>
+<BR>
+<UL>
+<A NAME="TOC25" HREF="vmailmgr-cgi.html#SEC25">6.1 Overview</A>
+<BR>
+<A NAME="TOC26" HREF="vmailmgr-cgi.html#SEC26">6.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC27" HREF="vmailmgr-cgi.html#SEC27">6.2.1 Required Form Fields</A>
+<BR>
+<A NAME="TOC28" HREF="vmailmgr-cgi.html#SEC28">6.2.2 Optional Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC29" HREF="vmailmgr-cgi.html#SEC29">7. vdeluser</A>
+<BR>
+<UL>
+<A NAME="TOC30" HREF="vmailmgr-cgi.html#SEC30">7.1 Overview</A>
+<BR>
+<A NAME="TOC31" HREF="vmailmgr-cgi.html#SEC31">7.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC32" HREF="vmailmgr-cgi.html#SEC32">7.2.1 Required Form Fields</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC33" HREF="vmailmgr-cgi.html#SEC33">8. vpasswd</A>
+<BR>
+<UL>
+<A NAME="TOC34" HREF="vmailmgr-cgi.html#SEC34">8.1 Overview</A>
+<BR>
+<A NAME="TOC35" HREF="vmailmgr-cgi.html#SEC35">8.2 Form Configuration</A>
+<BR>
+<UL>
+<A NAME="TOC36" HREF="vmailmgr-cgi.html#SEC36">8.2.1 Required Form Fields</A>
+<BR>
+</UL>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="vmailmgr-cgi.html#SEC1">1. Introduction</A>
+<BR>
+<A NAME="TOC5" HREF="vmailmgr-cgi.html#SEC5">2. listvdomain</A>
+<BR>
+<A NAME="TOC10" HREF="vmailmgr-cgi.html#SEC10">3. vaddalias</A>
+<BR>
+<A NAME="TOC15" HREF="vmailmgr-cgi.html#SEC15">4. vadduser</A>
+<BR>
+<A NAME="TOC20" HREF="vmailmgr-cgi.html#SEC20">5. vchattr</A>
+<BR>
+<A NAME="TOC24" HREF="vmailmgr-cgi.html#SEC24">6. vchforwards</A>
+<BR>
+<A NAME="TOC29" HREF="vmailmgr-cgi.html#SEC29">7. vdeluser</A>
+<BR>
+<A NAME="TOC33" HREF="vmailmgr-cgi.html#SEC33">8. vpasswd</A>
+<BR>
-<P><HR><P>
-This document was generated on 14 September 2000 using
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> 1.56k.
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="vmailmgr-cgi.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>About this document</H1>
+This document was generated by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ < ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ > ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ << ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ >> ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG>
+<== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Bruce.Guenter.dyndns.org</I> on <I>December, 29 2004</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
</BODY>
</HTML>
--- a/doc/vmailmgr-cgi.txt Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/vmailmgr-cgi.txt Sun Jan 20 00:22:09 2008 +0100
@@ -1,63 +1,30 @@
+ [Top] [Contents] [Index] [ ? ]
vmailmgr CGI Documentation
-
-14 September 2000
-
-
- Bruce Guenter
_________________________________________________________________
-
- Table of Contents
-
- * 1. Introduction
- + 1.1 Common Form Configuration
- o 1.1.1 Required Form Fields
- o 1.1.2 Optional Form Fields
- * 2. listvdomain
- + 2.1 Overview
- + 2.2 Form Configuration
- o 2.2.1 Required Form Fields
- o 2.2.2 Optional Form Fields
- * 3. vaddalias
- + 3.1 Overview
- + 3.2 Form Configuration
- o 3.2.1 Required Form Fields
- o 3.2.2 Optional Form Fields
- * 4. vadduser
- + 4.1 Overview
- + 4.2 Form Configuration
- o 4.2.1 Required Form Fields
- o 4.2.2 Optional Form Fields
- * 5. vchattr
- + 5.1 Overview
- + 5.2 Form Configuration
- o 5.2.1 Required Form Fields
- * 6. vchforwards
- + 6.1 Overview
- + 6.2 Form Configuration
- o 6.2.1 Required Form Fields
- o 6.2.2 Optional Form Fields
- * 7. vdeluser
- + 7.1 Overview
- + 7.2 Form Configuration
- o 7.2.1 Required Form Fields
- * 8. vpasswd
- + 8.1 Overview
- + 8.2 Form Configuration
- o 8.2.1 Required Form Fields
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
+ 1. Introduction
+
+ This is the documentation for the CGI programs for vmailmgr.
_________________________________________________________________
-
- 1. Introduction
-
- This is the documentation for the CGI programs for vmailmgr.
-
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.1 Common Form Configuration
The following form fields are common to all of the vmailmgr CGI
programs.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.1.1 Required Form Fields
-
+
Field:
vdomain
Description:
@@ -66,7 +33,7 @@
Syntax:
`<input type=hidden name=vdomain value="domain-name">' or
`<input type=text name=vdomain>'
-
+
Field:
password
Description:
@@ -74,9 +41,13 @@
administrator for the given virtual domain.
Syntax:
`<input type=password name=password>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
1.1.2 Optional Form Fields
-
+
Field:
error_redirect
Description:
@@ -86,7 +57,7 @@
be output.
Syntax:
`<input type=hidden name=error_redirect value="URL">'
-
+
Field:
redirect
Description:
@@ -96,24 +67,44 @@
will be output.
Syntax:
`<input type=hidden name=redirect value="URL">'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2. listvdomain
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.1 Overview
This CGI program will list the mailboxes and aliases in a virtual
domain in a three-column table. The first column lists the mailbox or
alias name, the second column is either `Alias' or `Mailbox', and the
third column lists the destination.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
2.2.1 Required Form Fields
-
+
No additional form fields are Required.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
2.2.2 Optional Form Fields
-
+
Field:
body-flags
Description:
@@ -121,14 +112,14 @@
`<body>' tag at the start of the document.
Syntax:
`<input type=hidden name=body-flags value="bgcolor=ffffff">'
-
+
Field:
cell-align
Description:
Sets the cell alignment. Defaults to `left'.
Syntax:
`<input type=hidden name=cell-align value=center>'
-
+
Field:
cell-post
Description:
@@ -136,7 +127,7 @@
every `</td>' tag.
Syntax:
`<input type=hidden name=cell-post value="</font>">'
-
+
Field:
cell-pre
Description:
@@ -145,14 +136,14 @@
Syntax:
`<input type=hidden name=cell-pre value="<font size=1
name=ariel>">'
-
+
Field:
p-align
Description:
Sets the default paragraph alignment. Defaults to `left'.
Syntax:
`<input type=hidden name=p-align value=center>'
-
+
Field:
title-post
Description:
@@ -160,7 +151,7 @@
title text. Defaults to `</h1>'.
Syntax:
`<input type=hidden name=title-post value="</font>">'
-
+
Field:
table-align
Description:
@@ -168,7 +159,7 @@
`left'.
Syntax:
`<input type=hidden name=table-align value=center>'
-
+
Field:
title-pre
Description:
@@ -177,7 +168,7 @@
Syntax:
`<input type=hidden name=title-pre value="<font size=3
face=verdana>">'
-
+
Field:
userlink
Description:
@@ -187,24 +178,40 @@
Syntax:
`<input type=hidden name=userlink
value="/cgi-bin/admin-user?name=%">'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
3. vaddalias
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
3.1 Overview
This CGI program can be used to add an alias to a virtual domain.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
3.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
3.2.1 Required Form Fields
-
+
Field:
username
Description:
The virtual user name of the alias to create.
Syntax:
`<input type=text name=username>'
-
+
Field:
destination
Description:
@@ -214,9 +221,13 @@
virtual domain and must already exist.
Syntax:
`<input type=text name=destination>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
3.2.2 Optional Form Fields
-
+
Field:
newpass1, newpass2
Description:
@@ -228,25 +239,41 @@
Syntax:
`<input type=password name=newpass1><input type=password
name=newpass1>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
4. vadduser
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
4.1 Overview
This CGI program can be used to add a user mailbox to a virtual
domain.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
4.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
4.2.1 Required Form Fields
-
+
Field:
username
Description:
The virtual user name of the alias to create.
Syntax:
`<input type=text name=username>'
-
+
Field:
newpass1, newpass2
Description:
@@ -257,9 +284,13 @@
Syntax:
`<input type=password name=newpass1><input type=password
name=newpass1>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
4.2.2 Optional Form Fields
-
+
Field:
destination
Description:
@@ -271,7 +302,7 @@
will be done.
Syntax:
`<input type=text name=destination>'
-
+
Field:
userdir
Description:
@@ -281,25 +312,41 @@
name.
Syntax:
`<input type=text name=userdir>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
5. vchattr
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
5.1 Overview
This CGI program can be used to change the attributes of an existing
user in a virtual domain.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
5.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
5.2.1 Required Form Fields
-
+
Field:
username
Description:
The virtual user name to modify.
Syntax:
`<input type=text name=username>'
-
+
Field:
attribute
Description:
@@ -327,7 +374,7 @@
The personal information string.
Syntax:
`<input type=hidden name=attribute value=2>'
-
+
Field:
newvalue
Description:
@@ -335,25 +382,41 @@
value is dependant on the type of the attribute.
Syntax:
`<input type=text name=newvalue>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
6. vchforwards
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
6.1 Overview
This CGI program can be used to change the forwarding destination of
an existing user.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
6.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
6.2.1 Required Form Fields
-
+
Field:
username
Description:
The virtual user name to modify.
Syntax:
`<input type=text name=username>'
-
+
Field:
destination
Description:
@@ -363,9 +426,13 @@
virtual domain and must already exist.
Syntax:
`<input type=text name=destination>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
6.2.2 Optional Form Fields
-
+
Field:
enable
Description:
@@ -377,38 +444,70 @@
Syntax:
`<select name=enable> <option value=0>Disable <option
value=1>Enable </select>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
7. vdeluser
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
7.1 Overview
This CGI program deletes a user from a virtual domain.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
7.2 Form Configuration
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
7.2.1 Required Form Fields
-
+
Field:
username
Description:
The virtual user name of the user to delete.
Syntax:
`<input type=text name=username>'
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
8. vpasswd
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
8.1 Overview
This CGI program can be used to change the password of a user either
by the user themself or by the domain administrator.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
8.2 Form Configuration
The password field used by this CGI may match either the password of
the virtual domain administrator or that of the user being modified.
-
+ _________________________________________________________________
+
+ [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [
+ ? ]
+
8.2.1 Required Form Fields
-
+
Field:
username
Description:
@@ -416,7 +515,7 @@
modified.
Syntax:
`<input type=text name=username>'
-
+
Field:
newpass1, newpass2
Description:
@@ -428,6 +527,118 @@
`<input type=password name=newpass1> <input type=password
name=newpass2>'
_________________________________________________________________
-
- This document was generated on 14 September 2000 using
- texi2html 1.56k.
+
+ [Top] [Contents] [Index] [ ? ]
+
+ Table of Contents
+
+ 1. Introduction
+
+ 1.1 Common Form Configuration
+
+ 1.1.1 Required Form Fields
+ 1.1.2 Optional Form Fields
+
+ 2. listvdomain
+ 2.1 Overview
+ 2.2 Form Configuration
+
+ 2.2.1 Required Form Fields
+ 2.2.2 Optional Form Fields
+
+ 3. vaddalias
+ 3.1 Overview
+ 3.2 Form Configuration
+
+ 3.2.1 Required Form Fields
+ 3.2.2 Optional Form Fields
+
+ 4. vadduser
+ 4.1 Overview
+ 4.2 Form Configuration
+
+ 4.2.1 Required Form Fields
+ 4.2.2 Optional Form Fields
+
+ 5. vchattr
+ 5.1 Overview
+ 5.2 Form Configuration
+
+ 5.2.1 Required Form Fields
+
+ 6. vchforwards
+ 6.1 Overview
+ 6.2 Form Configuration
+
+ 6.2.1 Required Form Fields
+ 6.2.2 Optional Form Fields
+
+ 7. vdeluser
+ 7.1 Overview
+ 7.2 Form Configuration
+
+ 7.2.1 Required Form Fields
+
+ 8. vpasswd
+ 8.1 Overview
+ 8.2 Form Configuration
+
+ 8.2.1 Required Form Fields
+ _________________________________________________________________
+
+ [Top] [Contents] [Index] [ ? ]
+
+ Short Table of Contents
+
+ 1. Introduction
+ 2. listvdomain
+ 3. vaddalias
+ 4. vadduser
+ 5. vchattr
+ 6. vchforwards
+ 7. vdeluser
+ 8. vpasswd
+ _________________________________________________________________
+
+ [Top] [Contents] [Index] [ ? ]
+
+ About this document
+
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
+
+ The buttons in the navigation panels have the following meaning:
+
+ Button Name Go to From 1.2.3 go to
+ [ < ] Back previous section in reading order 1.2.2
+ [ > ] Forward next section in reading order 1.2.4
+ [ << ] FastBack previous or up-and-previous section 1.1
+ [ Up ] Up up section 1.2
+ [ >> ] FastForward next or up-and-next section 1.3
+ [Top] Top cover (top) of document
+ [Contents] Contents table of contents
+ [Index] Index concept index
+ [ ? ] About this page
+
+ where the Example assumes that the current position is at
+ Subsubsection One-Two-Three of a document of the following structure:
+ * 1. Section One
+
+ * 1.1 Subsection One-One
+
+ * ...
+
+ 1.2 Subsection One-Two
+ * 1.2.1 Subsubsection One-Two-One
+ * 1.2.2 Subsubsection One-Two-Two
+ * 1.2.3 Subsubsection One-Two-Three <== Current Position
+ * 1.2.4 Subsubsection One-Two-Four
+
+ 1.3 Subsection One-Three
+ * ...
+
+ 1.4 Subsection One-Four
+ _________________________________________________________________
+
+ This document was generated by Bruce.Guenter.dyndns.org on December,
+ 29 2004 using texi2html
--- a/doc/vmailmgr.7 Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/vmailmgr.7 Sun Jan 20 00:22:09 2008 +0100
@@ -1,9 +1,8 @@
-.rn '' }`
-''' $RCSfile$$Revision$$Date$
-'''
-''' $Log$
-'''
-.de Sh
+.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.13
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
@@ -11,150 +10,98 @@
\fB\\$1\fR
.PP
..
-.de Sp
+.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
+.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
-.de Ve
+.de Ve \" End verbatim text
.ft R
-
.fi
..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. | will give a
+.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
+.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
'br\}
.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
..
-.nr % 0
-.rr F
+. nr % 0
+. rr F
.\}
-.TH vmailmgr 7 "vmailmgr 0.96.9" "2000-09-30" "VMailMgr Tools Documentation"
-.UC
-.if n .hy 0
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
.\}
.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
.\}
-. \" simple accents for nroff and troff
+. \" simple accents for nroff and troff
.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
.\}
.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
-. \" troff and (daisy-wheel) nroff accents
+. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
@@ -162,37 +109,34 @@
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
+. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
+. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
.\}
.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "VMAILMGR 7"
+.TH VMAILMGR 7 "2003-12-01" "vmailmgr 0.97" "VMailMgr Tools Documentation"
.SH "NAME"
vmailmgr \- a package to manage virtual mailboxes and aliases
.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
This document describes the vmailmgr package which contains, among other
things, a virtualizing password
-checking interface for qmail-pop3d.
+checking interface for qmail\-pop3d.
It is intended as a drop-in replacement for the standard checkpassword
utility with several significant enhancements.
.PP
@@ -202,44 +146,30 @@
This means that this package attempts to use the same control files that
qmail uses to determine if a user is logging in via a virtual host.
It also implies that all programs should be compiled for two reasons:
-.Ip "1" 8
+.IP "1" 8
+.IX Item "1"
Compiled code will be more efficient than code executed by an
interpreter, such as perl or java
-.Ip "2" 8
+.IP "2" 8
+.IX Item "2"
There is no need for an
interpreter to reside on the system once the code is compiled, eliminating
concerns that such an interpreter could be used as an exploit in itself.
.SH "SEE ALSO"
-\fIcheckvpw\fR\|(8),
-\fIvaddalias\fR\|(1),
-\fIvadduser\fR\|(1),
-\fIvdelalias\fR\|(1),
-\fIvdeliver\fR\|(1),
-\fIvdeluser\fR\|(1),
-\fIvmailmgrd\fR\|(8),
-\fIvpasswd\fR\|(1),
-\fIvsetup\fR\|(1)
+.IX Header "SEE ALSO"
+\&\fIcheckvpw\fR\|(8),
+\&\fIvaddalias\fR\|(1),
+\&\fIvadduser\fR\|(1),
+\&\fIvdelalias\fR\|(1),
+\&\fIvdeliver\fR\|(1),
+\&\fIvdeluser\fR\|(1),
+\&\fIvmailmgrd\fR\|(8),
+\&\fIvpasswd\fR\|(1),
+\&\fIvsetup\fR\|(1)
.SH "AUTHOR"
+.IX Header "AUTHOR"
Bruce Guenter <\fIbruceg@em.ca\fR>.
.SH "HISTORY"
-\fBvmailmgr\fR used to be called \fBcheckvpw\fR, named for the original
-\*(L"core\*(R" of the package.
-
-.rn }` ''
-.IX Title "vmailmgr 7"
-.IX Name "vmailmgr - a package to manage virtual mailboxes and aliases"
-
-.IX Header "NAME"
-
-.IX Header "DESCRIPTION"
-
-.IX Item "1"
-
-.IX Item "2"
-
-.IX Header "SEE ALSO"
-
-.IX Header "AUTHOR"
-
.IX Header "HISTORY"
-
+\&\fBvmailmgr\fR used to be called \fBcheckvpw\fR, named for the original
+\&\*(L"core\*(R" of the package.
--- a/doc/vmailmgr.html Sun Jan 20 00:12:17 2008 +0100
+++ b/doc/vmailmgr.html Sun Jan 20 00:22:09 2008 +0100
@@ -1,79 +1,81 @@
-<HTML>
-<HEAD>
-<TITLE>vmailmgr - a package to manage virtual mailboxes and aliases</TITLE>
-<LINK REV="made" HREF="mailto:root@porky.devel.redhat.com">
-</HEAD>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>vmailmgr - a package to manage virtual mailboxes and aliases</title>
+<link rev="made" href="mailto:Gentoo@lorien.untroubled.org" />
+</head>
-<BODY>
+<body style="background-color: white">
+<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<!--
-<UL>
+<ul>
- <LI><A HREF="#NAME">NAME</A>
- <LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
- <LI><A HREF="#SEE_ALSO">SEE ALSO</A>
- <LI><A HREF="#AUTHOR">AUTHOR</A>
- <LI><A HREF="#HISTORY">HISTORY</A>
-</UL>
+ <li><a href="#name">NAME</a></li>
+ <li><a href="#description">DESCRIPTION</a></li>
+ <li><a href="#see_also">SEE ALSO</a></li>
+ <li><a href="#author">AUTHOR</a></li>
+ <li><a href="#history">HISTORY</a></li>
+</ul>
-->
<!-- INDEX END -->
-<P>
-<H1><A NAME="NAME">NAME</A></H1>
-<P>
-vmailmgr - a package to manage virtual mailboxes and aliases
-
-<P>
-<HR>
-<H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
-<P>
-This document describes the vmailmgr package which contains, among other
-things, a virtualizing password checking interface for qmail-pop3d. It is
-intended as a drop-in replacement for the standard checkpassword utility
-with several significant enhancements.
-
-<P>
-One of the goals of building this package was to provide a usable virtual
+<p>
+</p>
+<h1><a name="name">NAME</a></h1>
+<p>vmailmgr - a package to manage virtual mailboxes and aliases</p>
+<p>
+</p>
+<hr />
+<h1><a name="description">DESCRIPTION</a></h1>
+<p>This document describes the vmailmgr package which contains, among other
+things, a virtualizing password
+checking interface for qmail-pop3d.
+It is intended as a drop-in replacement for the standard checkpassword
+utility with several significant enhancements.</p>
+<p>One of the goals of building this package was to provide a usable virtual
mail interface that was efficient and as fully integrated into qmail as
-possible. This means that this package attempts to use the same control
-files that qmail uses to determine if a user is logging in via a virtual
-host. It also implies that all programs should be compiled for two reasons:
-
-<OL>
-<LI>
-<P>
-Compiled code will be more efficient than code executed by an interpreter,
-such as perl or java
+possible.
+This means that this package attempts to use the same control files that
+qmail uses to determine if a user is logging in via a virtual host.
+It also implies that all programs should be compiled for two reasons:</p>
+<ol>
+<li></li>
+Compiled code will be more efficient than code executed by an
+interpreter, such as perl or java
+<p></p>
+<li></li>
+There is no need for an
+interpreter to reside on the system once the code is compiled, eliminating
+concerns that such an interpreter could be used as an exploit in itself.
+<p></p></ol>
+<p>
+</p>
+<hr />
+<h1><a name="see_also">SEE ALSO</a></h1>
+<p>checkvpw(8),
+vaddalias(1),
+vadduser(1),
+vdelalias(1),
+vdeliver(1),
+vdeluser(1),
+vmailmgrd(8),
+vpasswd(1),
+<code>vsetup(1)</code></p>
+<p>
+</p>
+<hr />
+<h1><a name="author">AUTHOR</a></h1>
+<p>Bruce Guenter <<em><a href="mailto:bruceg@em.ca">bruceg@em.ca</a></em>>.</p>
+<p>
+</p>
+<hr />
+<h1><a name="history">HISTORY</a></h1>
+<p><strong>vmailmgr</strong> used to be called <strong>checkvpw</strong>, named for the original
+``core'' of the package.</p>
-<LI>
-<P>
-There is no need for an interpreter to reside on the system once the code
-is compiled, eliminating concerns that such an interpreter could be used as
-an exploit in itself.
+</body>
-</OL>
-<P>
-<HR>
-<H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
-<P>
-<CODE>checkvpw(8),</CODE> <CODE>vaddalias(1),</CODE>
-<CODE>vadduser(1),</CODE> <CODE>vdelalias(1),</CODE>
-<CODE>vdeliver(1),</CODE> <CODE>vdeluser(1),</CODE>
-<CODE>vmailmgrd(8),</CODE> <CODE>vpasswd(1),</CODE> <CODE>vsetup(1)</CODE>
-
-<P>
-<HR>
-<H1><A NAME="AUTHOR">AUTHOR</A></H1>
-<P>
-Bruce Guenter <<EM>bruceg@em.ca</EM>>.
-
-<P>
-<HR>
-<H1><A NAME="HISTORY">HISTORY</A></H1>
-<P>
-<STRONG>vmailmgr</STRONG> used to be called <STRONG>checkvpw</STRONG>, named for the original ``core'' of the package.
-</BODY>
-
-</HTML>
+</html>
--- a/lib/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -1,4 +1,4 @@
-SUBDIRS = misc vdomain vpwentry vpwtable cdb++ cgi cli fdbuf mystring config \
+SUBDIRS = misc vdomain vpwentry vpwtable cdb++ cgi cli++ fdbuf mystring config \
courier-authlib
noinst_LIBRARIES = libvmailmgr.a libcgi.a libcli.a
EXTRA_DIST = mergelib.sh
@@ -13,9 +13,9 @@
vdomain/libvdomain.a fdbuf/libfdbuf.a mystring/libmystring.a
libcli_a_SOURCES =
-libcli.a: cli/libcli.a mergelib.sh
+libcli.a: cli++/libcli++.a mergelib.sh
$(RM) -f $@
- sh mergelib.sh $@ cli/libcli.a
+ sh mergelib.sh $@ cli++/libcli++.a
libcgi_a_SOURCES =
libcgi.a: cgi/libcgi.a mergelib.sh
--- a/lib/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -81,7 +83,7 @@
phpdir = @phpdir@
pythonlibdir = @pythonlibdir@
-SUBDIRS = misc vdomain vpwentry vpwtable cdb++ cgi cli fdbuf mystring config courier-authlib
+SUBDIRS = misc vdomain vpwentry vpwtable cdb++ cgi cli++ fdbuf mystring config courier-authlib
noinst_LIBRARIES = libvmailmgr.a libcgi.a libcli.a
EXTRA_DIST = mergelib.sh
@@ -113,7 +115,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libvmailmgr_a_SOURCES) $(libcgi_a_SOURCES) $(libcli_a_SOURCES)
OBJECTS = $(libvmailmgr_a_OBJECTS) $(libcgi_a_OBJECTS) $(libcli_a_OBJECTS)
@@ -193,7 +195,7 @@
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
- test "$$subdir" = "." && dot_seen=yes; \
+ test "$$subdir" != "." || dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
@@ -293,7 +295,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-recursive
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs: installdirs-recursive
installdirs-am:
@@ -353,9 +355,9 @@
sh mergelib.sh $@ cdb++/libcdb++.a misc/libmisc.a \
config/libconfig.a vpwentry/libvpwentry.a vpwtable/libvpwtable.a \
vdomain/libvdomain.a fdbuf/libfdbuf.a mystring/libmystring.a
-libcli.a: cli/libcli.a mergelib.sh
+libcli.a: cli++/libcli++.a mergelib.sh
$(RM) -f $@
- sh mergelib.sh $@ cli/libcli.a
+ sh mergelib.sh $@ cli++/libcli++.a
libcgi.a: cgi/libcgi.a mergelib.sh
$(RM) -f $@
sh mergelib.sh $@ cgi/libcgi.a
--- a/lib/ac/dirent.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/ac/dirent.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: dirent.h 616 2005-08-19 20:11:01Z bruce $ */
#include <sys/types.h>
#if HAVE_DIRENT_H
# include <dirent.h>
--- a/lib/ac/time.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/ac/time.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: time.h 616 2005-08-19 20:11:01Z bruce $ */
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
--- a/lib/ac/wait.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/ac/wait.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: wait.h 616 2005-08-19 20:11:01Z bruce $ */
#include <sys/types.h>
#if HAVE_SYS_WAIT_H
# include <sys/wait.h>
--- a/lib/cdb++/ChangeLog Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/ChangeLog Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,7 @@
+2000-11-20 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cdb_reader.cc: Fixed several typos.
+
1999-05-01 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
* cdb_writer.cc (cdb_writer): Added "mode" parameter, passed to
--- a/lib/cdb++/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -117,7 +119,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libcdb___a_SOURCES)
OBJECTS = $(libcdb___a_OBJECTS)
@@ -258,7 +260,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/cdb++/cdb++.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/cdb++.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,4 +1,5 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+/* $Id: cdb++.h 633 2005-09-04 04:20:59Z bruce $ */
+// Copyright (C) 1999,2000,2005 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -21,23 +22,22 @@
#include "cdb++/datum.h"
#include "fdbuf/fdbuf.h"
-typedef unsigned long uint32;
+typedef unsigned uint32;
#define CDBMAKE_HPLIST 1000
class cdb_reader
{
private:
- fdibuf in;
- uint32 eod;
- uint32 pos;
+ unsigned char* map;
+ size_t size;
+ unsigned char* ptr;
+ unsigned char* eod;
bool failed;
bool eof;
- unsigned char header[2048];
-
void abort();
- int seek(const mystring& key, uint32& len);
+ char* seek(const mystring& key, uint32& len);
public:
cdb_reader(const mystring& filename);
~cdb_reader();
--- a/lib/cdb++/cdb_get.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/cdb_get.cc Sun Jan 20 00:22:09 2008 +0100
@@ -17,54 +17,32 @@
#include "cdb++.h"
#include "internal.h"
-static int match(fdibuf& in, const mystring& key)
-{
- unsigned len = key.length();
- const char* keyptr = key.c_str();
-
- while (len > 0) {
- char buf[32];
- unsigned n = sizeof buf;
- if(n > len) n = len;
- if(!in.read(buf, n)) return -1;
- for(unsigned i = 0;i < n;++i)
- if(buf[i] != keyptr[i]) return 0;
- keyptr += n;
- len -= n;
- }
- return 1;
-}
-
-int cdb_reader::seek(const mystring& key, uint32& dlen)
+char* cdb_reader::seek(const mystring& key, uint32& dlen)
{
if(failed)
- return -1;
+ return 0;
uint32 h = hash(key);
uint32 pos = 8 * (h & 255);
- uint32 poshash = unpack(header+pos);
- uint32 lenhash = unpack(header+pos+4);
+ uint32 poshash = unpack(map+pos);
+ uint32 lenhash = unpack(map+pos+4);
- if(!lenhash) return 0;
+ if(!lenhash)
+ return 0;
uint32 h2 = (h >> 8) % lenhash;
for (uint32 loop = 0; loop < lenhash; ++loop) {
- if(!in.seek(poshash+8*h2)) return -1;
- unsigned char packbuf[8];
- if(!in.read(packbuf, 8)) return -1;
- uint32 poskd = unpack(packbuf + 4);
- if(!poskd) return 0;
- if(unpack(packbuf) == h) {
- if(!in.seek(poskd)) return -1;
- if(!in.read(packbuf, 8)) return -1;
- if(unpack(packbuf) == key.length())
- switch(match(in, key)) {
- case -1:
- return -1;
- case 1:
- dlen = unpack(packbuf + 4);
- return 1;
- }
+ unsigned char* ptrhash = map + poshash + 8*h2;
+ uint32 poskd = unpack(ptrhash + 4);
+ if(!poskd)
+ return 0;
+ if(unpack(ptrhash) == h) {
+ unsigned char* ptrmatch = map + poskd;
+ if(unpack(ptrmatch) == key.length() &&
+ !memcmp(ptrmatch+8, key.c_str(), key.length())) {
+ dlen = unpack(ptrmatch + 4);
+ return (char*)ptrmatch + 8 + key.length();
+ }
}
if(++h2 == lenhash) h2 = 0;
}
@@ -75,13 +53,9 @@
{
if(failed)
return 0;
- uint32 len;
- switch(seek(key, len)) {
- case -1: return 0;
- case 0: return 0;
- }
- // Big assume: data is relatively small (will fit on stack)
- char buf[len];
- datum* d = !in.read(buf, len) ? 0 : new datum(key, mystring(buf, len));
- return d;
+ uint32 datalen;
+ char* dataptr = seek(key, datalen);
+ if(!dataptr)
+ return 0;
+ return new datum(key, mystring(dataptr, datalen));
}
--- a/lib/cdb++/cdb_reader.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/cdb_reader.cc Sun Jan 20 00:22:09 2008 +0100
@@ -14,6 +14,10 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <unistd.h>
#include "cdb++.h"
#include "internal.h"
@@ -25,10 +29,17 @@
}
cdb_reader::cdb_reader(const mystring& filename)
- : in(filename.c_str()),
- failed(!in),
+ : map(0),
+ failed(1),
eof(false)
{
+ int fd = open(filename.c_str(), O_RDONLY);
+ if(fd == -1) return;
+ struct stat buf;
+ if(fstat(fd, &buf) != -1)
+ map = (unsigned char*)mmap(0, buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ close(fd);
+ failed = !map;
firstrec();
}
@@ -39,43 +50,31 @@
void cdb_reader::abort()
{
failed = true;
- in.close();
+ if(map)
+ munmap(map, size);
}
bool cdb_reader::firstrec()
{
if(failed) return false;
- if(!in.seek(0) || !in.read(header, 2048)) {
- abort();
- return false;
- }
- eof = false;
- eod = unpack(header);
- pos = 2048;
+ ptr = map + 2048;
+ eod = map + unpack(map);
return true;
}
datum* cdb_reader::nextrec()
{
if(eof) return 0;
- if(pos >= eod) {
+ if(ptr >= eod) {
eof = true;
return 0;
}
- if(failed || eod-pos < 8 || !in.seek(pos)) FAIL;
- pos += 8;
- unsigned char buf[8];
- if(!in.read(buf, 8)) FAIL;
- uint32 klen = unpack(buf);
- uint32 dlen = unpack(buf+4);
- if (eod - pos < klen) FAIL;
- pos += klen;
- if (eod - pos < dlen) FAIL;
- pos += dlen;
- char tmp[max(klen, dlen)];
- if(!in.read(tmp, klen)) FAIL;
- mystring key(tmp, klen);
- if(!in.read(tmp, dlen)) FAIL;
- mystring data(tmp, dlen);
- return new datum(key, data);
+ if(failed || eod-ptr < 8) FAIL;
+ uint32 klen = unpack(ptr); ptr += 4;
+ uint32 dlen = unpack(ptr); ptr += 4;
+ if ((uint32)(eod - ptr) < klen + dlen) FAIL;
+ datum* result = new datum(mystring((char*)ptr, klen),
+ mystring((char*)ptr+klen, dlen));
+ ptr += klen + dlen;
+ return result;
}
--- a/lib/cdb++/datum.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/datum.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: datum.h 616 2005-08-19 20:11:01Z bruce $ */
#ifndef DATUM__H__
#define DATUM__H__
--- a/lib/cdb++/internal.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cdb++/internal.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: internal.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/cgi/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cgi/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -113,7 +115,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libcgi_a_SOURCES)
OBJECTS = $(libcgi_a_OBJECTS)
@@ -238,7 +240,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/cgi/cgi-args.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cgi/cgi-args.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: cgi-args.h 616 2005-08-19 20:11:01Z bruce $ */
#ifndef CHECKVPW__CGI_ARGS__H__
#define CHECKVPW__CGI_ARGS__H__
--- a/lib/cgi/cgi-base.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/cgi/cgi-base.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: cgi-base.h 616 2005-08-19 20:11:01Z bruce $ */
#ifndef CHECKVPW__CGI_BASE__H__
#define CHECKVPW__CGI_BASE__H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/ChangeLog Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,123 @@
+2001-03-07 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * Renamed cli.h to cli++.h
+
+2000-10-25 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cli2pod.pl (parse_options): Ignore {0,} as well as {0}.
+
+2000-08-15 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cli2pod.pl: Replaced the CLI documentation programs with this
+ script which outputs POD, which can be translated to man pages or
+ HTML (or LaTeX, or text, or FM).
+
+2000-08-14 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cli_parse.pl (parse_header_line): Rewrote the parsing to deal
+ with multi-line strings.
+
+ * cli2man.pl (synopsis): Add usage string.
+
+ * cli2html.pl (synopsis): Add usage string.
+
+2000-08-12 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cli_parse.pl, cli2html.pl, cli2man.pl: Created these programs.
+
+2000-08-01 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * main.cc (show_option): Fixed several width glitches.
+
+2000-07-18 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * cli.h (struct cli_option): Added new uinteger type.
+
+ * main.cc (fill): Removed use of mystring.
+
+2000-07-13 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
+
+ * Removed include of mystring.
+
+2000-01-09 Bruce Guenter <bruceg@daedalus.bfsmedia.com>
+
+ * main.cc (parse_short): Modified the logic here to treat a string
+ value immediately following a string option as the value for that
+ option rather than as more flags. This makes it behave much more
+ like the standard getopt library.
+
+1999-09-30 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (show_option): Changed stringlist option string from
+ "=LIST" to "=ITEM".
+
+1999-09-29 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (cli_option::set): Fixed problem with setting a string
+ list option.
+
+1999-09-11 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (show_help): Split off two parts of this routine into
+ calc_max_width and show_option.
+ (show_option): Add "=INT" for integer options, and don't add extra
+ space for non-value long options.
+ (set): Use strtol instead of atoi to parse the integer string, to
+ allow for error checking.
+ (show_option): Fixed handling of string lists.
+
+1999-08-14 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (set_argv0): Sets argv0 to the complete value of
+ argv[0], argv0dir to the part of argv[0] up to and including the
+ last '/' (or blank if there is none), and argv0base to the
+ remainder of argv[0]. This is for use in programs that determine
+ what to do based on the value of the program name.
+
+1999-07-14 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (parse_long_eq): Fixed to account for "counter" flag
+ type.
+ (parse_long_noeq): Fixed to account for "counter" flag type.
+ (parse_long_eq): set() will return one, but this shouldn't return
+ one, so subtract one from its result.
+ (show_help): Added a mechanism to display default values on a
+ second line.
+ (show_help): Output a blank line before the "--help" option line.
+
+1999-07-04 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (show_help): Only show a "=VALUE" for string and integer
+ option types.
+
+1999-06-30 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * messages.cc (cli_error): Moved this routine into a separate
+ module, and added a "cli_warning" routine.
+
+1999-06-25 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc (set): Added handling for two new option types: string
+ list and counters. A stringlist maintains a linked list of all
+ the given option arguments. A counter adds the flag_value to the
+ dataptr each time it is encountered.
+ (parse_short): Fixed faulty logic regarding options with values.
+ Need to merge parts into cli_option::set().
+
+1999-06-24 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
+
+ * main.cc: Rewrote the "help" option handling to stop it being a
+ special case, by making an internal option list that includes a
+ "help" option at the end of it.
+ (show_help): Cleaned up the option formatting to produce more
+ correct output.
+ (build_options): Removed the need to count the options. Note
+ that this breaks compatibility with previous versions.
+ (cli_error): Added this convenience function for the CLI program
+ to report errors and optionally exit.
+ (set): Added functionality to call functions when an option is
+ parsed, and moved some of the option parsing into class methods
+ from the structure.
+ (main): Moved the test for showing the usage information before
+ the test for counting command-line arguments.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,9 @@
+noinst_LIBRARIES = libcli++.a
+EXTRA_DIST = clitest.cc cli++topod.pl
+
+INCLUDES = -I..
+#LIBS = @LIBS@ -L. -lcli++ -L../lib -lvmailmgr
+
+libcli___a_SOURCES = cli++.h main.cc messages.cc
+#clitest_SOURCES = clitest.cc
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,292 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+CC = @CC@
+CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
+HTML2TXT = @HTML2TXT@
+LIB = @LIB@
+LN = @LN@
+LTLIB = @LTLIB@
+LYNX = @LYNX@
+MAKEINFO = @MAKEINFO@
+MKDIR = @MKDIR@
+PACKAGE = @PACKAGE@
+POD2HTML = @POD2HTML@
+POD2MAN = @POD2MAN@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RM = @RM@
+STRIP = @STRIP@
+SUFFIXES = @SUFFIXES@
+VERSION = @VERSION@
+W3M = @W3M@
+cgidir = @cgidir@
+phpdir = @phpdir@
+pythonlibdir = @pythonlibdir@
+
+noinst_LIBRARIES = libcli++.a
+EXTRA_DIST = clitest.cc cli++topod.pl
+
+INCLUDES = -I..
+#LIBS = @LIBS@ -L. -lcli++ -L../lib -lvmailmgr
+
+libcli___a_SOURCES = cli++.h main.cc messages.cc
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../..
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+libcli___a_LIBADD =
+libcli___a_OBJECTS = main.o messages.o
+AR = ar
+CXXFLAGS = @CXXFLAGS@
+CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = ChangeLog Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+SOURCES = $(libcli___a_SOURCES)
+OBJECTS = $(libcli___a_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .cc .o .s @SUFFIXES@
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps lib/cli++/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstLIBRARIES:
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+distclean-noinstLIBRARIES:
+
+maintainer-clean-noinstLIBRARIES:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+libcli++.a: $(libcli___a_OBJECTS) $(libcli___a_DEPENDENCIES)
+ -rm -f libcli++.a
+ $(AR) cru libcli++.a $(libcli___a_OBJECTS) $(libcli___a_LIBADD)
+ $(RANLIB) libcli++.a
+.cc.o:
+ $(CXXCOMPILE) -c $<
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = lib/cli++
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+main.o: main.cc ../../config.h ../ac/time.h ../fdbuf/fdbuf.h \
+ ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h cli++.h
+messages.o: messages.cc ../../config.h ../fdbuf/fdbuf.h \
+ ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h cli++.h
+
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(LIBRARIES)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
+ mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
+ mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstLIBRARIES distclean-compile \
+ distclean-tags distclean-generic clean-am
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
+clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+#clitest_SOURCES = clitest.cc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/cli++.h Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,60 @@
+/* $Id: cli++.h 616 2005-08-19 20:11:01Z bruce $ */
+#ifndef VMAILMGR__CLIPP__CLIPP__H__
+#define VMAILMGR__CLIPP__CLIPP__H__
+
+typedef bool (*cli_funcptr)(void*);
+
+struct cli_stringlist
+{
+ const char* string;
+ cli_stringlist* next;
+
+ cli_stringlist(const char* s)
+ : string(s), next(0)
+ {
+ }
+};
+
+struct cli_option
+{
+ char ch;
+ const char* name;
+ enum { flag, counter, integer, string, stringlist, uinteger } type;
+ int flag_value;
+ void* dataptr;
+ const char* helpstr;
+ const char* defaultstr;
+
+ int set(const char* arg);
+ int parse_long_eq(const char* arg);
+ int parse_long_noeq(const char* arg);
+};
+
+/* The following are required from the CLI program */
+extern const char* cli_program;
+extern const char* cli_help_prefix;
+extern const char* cli_help_suffix;
+extern const char* cli_args_usage;
+extern const int cli_args_min;
+extern const int cli_args_max;
+extern cli_option cli_options[];
+extern int cli_main(int argc, char* argv[]);
+
+/* The following are provided to the CLI program */
+extern const char* argv0;
+extern const char* argv0base;
+extern const char* argv0dir;
+extern void usage(int exit_value, const char* errorstr = 0);
+
+extern void cli_error(int exit_value,
+ const char*,
+ const char* = 0,
+ const char* = 0,
+ const char* = 0);
+
+extern void cli_warning(const char*,
+ const char* = 0,
+ const char* = 0,
+ const char* = 0);
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/cli++topod.pl Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,213 @@
+#!/usr/bin/perl
+
+sub cstr2pod {
+ local($_) = shift;
+ s/\\"/"/go;
+ s/"([^\"]*)"/"C<$1>"/go;
+ $_;
+}
+
+$section = 1;
+
+@section_order = (
+ 'NAME',
+ 'SYNOPSIS',
+ 'DESCRIPTION',
+ 'OPTIONS',
+ 'RETURN VALUE',
+ 'ERRORS',
+ 'EXAMPLES',
+ 'ENVIRONMENT',
+ 'FILES',
+ 'SEE ALSO',
+ 'NOTES',
+ 'CAVEATS',
+ 'WARNINGS',
+ 'DIAGNOSTICS',
+ 'BUGS',
+ 'RESTRICTIONS',
+ 'AUTHOR',
+ 'AUTHORS',
+ 'HISTORY'
+ );
+
+sub type2word {
+ my($type) = shift;
+ return 'INT' if $type eq 'integer';
+ return 'UINT' if $type eq 'uinteger';
+ return 'STR' if $type eq 'string' || $type eq 'stringlist';
+ return '' if $type eq 'flag' || $type eq 'counter';
+ die "Invalid cli option type '$type'";
+}
+
+sub add_option {
+ my($short, $long, $type, $desc) = @_;
+
+ my $s = '[B<';
+ my $o = '=item B<';
+ if($short) {
+ $s .= "-$short";
+ $o .= "-$short";
+ if($type) {
+ $s .= " $type";
+ $o .= " $type";
+ }
+ }
+ if($short && $long) {
+ $s .= ">]\n[B<";
+ $o .= ">, B<";
+ }
+ if($long) {
+ $s .= "--$long";
+ $o .= "--$long";
+ if($type) {
+ $s .= "=$type";
+ $o .= "=$type";
+ }
+ }
+ $s .= ">]\n";
+ $o .= ">\n\n$desc\n\n";
+
+ $synopsis .= $s;
+ $options = "=over 8\n\n" unless $options;
+ $options .= $o;
+}
+
+sub parse_option {
+ local($_) = shift;
+ s/^\s*\{\s*//o;
+ s/\s*\},?\s*/ /o;
+
+ my $short = $1 if s/^'([^\'])',\s*//o;
+ die "Invalid cli option" unless $short || s/^0,\s*//o;
+
+ my $long = $1 if s/^"([^\"]+)",\s*//o;
+ die "Invalid cli_option" unless $long || s/^0,\s*//o;
+
+ my $type = $1 if s/^cli_option::(\S+),\s*//o;
+ die "Invalid cli_option" unless $type;
+ $type = &type2word($type);
+
+ my $val = $1 if s/^([^,]+),\s*//o;
+ my $var = $1 if s/^&([^,]+),\s*//o;
+
+ my $desc = cstr2pod($1) if s/^"([^,]+)",\s*//o;
+ die "Invalid cli_option" unless $desc;
+ $desc =~ s/\.?$/./o if $desc;
+
+ my $default = $1 if s/^"([^\"]+)"\s+//o;
+ die "Invalid cli_option" unless $default || s/^0\s+//o;
+ $desc .= " Defaults to $default." if $default;
+
+ s/\s*\/\/\s*/ /go;
+ s/^\s*//o;
+
+ add_option($short, $long, $type, $_ || $desc);
+}
+
+sub parse_options {
+ $synopsis = "B<$program>\n";
+
+ my $line;
+ while(<>) {
+ s/^\s+//o;
+ s/\s+$//o;
+ if($line && /^\{/o) {
+ &parse_option($line);
+ $line = "";
+ }
+ next if /^\{\s*0\s*\},?/o;
+ next if /^\{\s*0\s*,\s*\},?/o;
+ last if /^\s*\};/o;
+ $line =~ s/$/ $_/;
+ }
+ &parse_option($line) if $line;
+
+ $synopsis .= "I<$usage>" if $usage;
+ $options .= "=back" if $options;
+ $sections{'SYNOPSIS'} = $synopsis;
+ $sections{'OPTIONS'} = $options;
+}
+
+sub parse_notes {
+ my $section;
+ my $title;
+ while(<>) {
+ chomp;
+ last unless /^$/o || s/^\/\/\s*//o;
+ if(/^[\sA-Z]+$/o) {
+ $sections{$title} = $section if $title && $section;
+ undef $section;
+ $title = $_;
+ } else {
+ $section .= "$_\n";
+ }
+ }
+ $sections{$title} = $section if $title && $section;
+}
+
+sub parse_header_line {
+ local($_, $comment) = @_;
+ if(s/^\s*const\s+char\s*\*\s*cli_(\S+)\s*=\s*//o) {
+ my $name = $1;
+ s/;\s*$//o;
+ s/^\"//;
+ s/\"$//o;
+ s/\\n$//o;
+ s/\\n""/\n/go;
+ $program = $_ if $name eq 'program';
+ $prefix = $_ if $name eq 'help_prefix';
+ $usage = $_ if $name eq 'args_usage';
+ $suffix = $_ if $name eq 'help_suffix';
+ }
+}
+
+sub parse_header {
+ my $comment = '';
+ my $line = '';
+ while(<>) {
+ s/^\s+//o;
+ s/\s+$//o;
+ if(s/^.*Copyright\s*\(C\)\s*[\d,]+\s*//o) {
+ $author = $_;
+ } else {
+ last if ($program && $prefix && /^$/o);
+ next if /^#/o;
+ $comment .= "$1\n" if s|\s*//\s*(.*)$||o;
+ $line =~ s/$/\n$_/;
+ if(/;$/o) {
+ &parse_header_line($line, $comment);
+ undef $line;
+ undef $comment;
+ }
+ }
+ }
+}
+
+sub parse_description {
+ while(<>) {
+ s/^\s+//o;
+ s/\s+$//o;
+ last if / cli_options\[\]\s*=\s*\{/o;
+ next unless s/^\/\/\s*//o;
+ $description .= "$_\n";
+ }
+}
+
+&parse_header;
+&parse_description;
+&parse_options;
+&parse_notes;
+
+$description .= "\n\n$suffix\n" if $suffix;
+
+$sections{'NAME'} = "$program - $prefix";
+$sections{'DESCRIPTION'} = $description;
+$sections{'AUTHORS'} = $author if $author;
+
+foreach $section (@section_order) {
+ print "=head1 $section\n\n$sections{$section}\n\n"
+ if $sections{$section};
+}
+
+1;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/clitest.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,47 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "cli++.h"
+#include "fdbuf/fdbuf.h"
+
+const char* cli_program = "clitest";
+const char* cli_help_prefix = "Does nothing but set flags\n";
+const char* cli_help_suffix = "";
+const char* cli_args_usage = "";
+const int cli_args_min = 0;
+const int cli_args_max = -1;
+int o_flag = 0;
+int o_int = 0;
+char* o_string = "nostring";
+cli_option cli_options[] = {
+ { 'f', "flag", cli_option::flag, 1, &o_flag, "Sets a flag", 0 },
+ { 'i', "int", cli_option::integer, 0, &o_int, "Sets an integer", 0 },
+ { 's', "str", cli_option::string, 0, &o_string, "Sets a string", 0},
+ {0} };
+
+int cli_main(int argc, char* argv[])
+{
+ fout << "argv0=" << argv0 << endl
+ << " argv0dir=" << argv0dir << endl
+ << " argv0base=" << argv0base << endl;
+ fout << "The flag is set to " << o_flag << endl;
+ fout << "The integer is set to " << o_int << endl;
+ fout << "The string is set to " << o_string << endl;
+ for(int i = 0; i < argc; i++)
+ fout << "argv[" << i << "] = '" << argv[i] << "'\n";
+ return 0;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/main.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,342 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "ac/time.h"
+#include "fdbuf/fdbuf.h"
+#include <stdlib.h>
+#include <string.h>
+#include "cli++.h"
+
+#ifndef HAVE_SRANDOM
+void srandom(unsigned int seed);
+#endif
+
+static bool do_show_usage = false;
+const char* argv0;
+const char* argv0base;
+const char* argv0dir;
+
+static cli_option help_option = { 'h', "help", cli_option::flag,
+ true, &do_show_usage,
+ "Display this help and exit", 0 };
+
+static cli_option** options;
+static unsigned optionc;
+
+static void build_options()
+{
+ for(optionc = 0;
+ cli_options[optionc].ch || cli_options[optionc].name;
+ optionc++) ;
+ optionc++;
+ options = new cli_option*[optionc];
+ for(unsigned i = 0; i < optionc-1; i++)
+ options[i] = &cli_options[i];
+ options[optionc-1] = &help_option;
+}
+
+static inline unsigned max(unsigned a, unsigned b)
+{
+ return (a>b) ? a : b;
+}
+
+static const char* fill(unsigned i)
+{
+ static unsigned lastlen = 0;
+ static char* buf = 0;
+ if(i > lastlen) {
+ delete[] buf;
+ buf = new char[i+1];
+ lastlen = i;
+ }
+ memset(buf, ' ', i);
+ buf[i] = 0;
+ return buf;
+}
+
+static void show_usage()
+{
+ fout << "usage: " << cli_program << " [flags] " << cli_args_usage << endl;
+}
+
+static unsigned calc_max_width()
+{
+ // maxwidth is the maximum width of the long argument
+ unsigned maxwidth = 0;
+ for(unsigned i = 0; i < optionc; i++) {
+ unsigned width = 0;
+ cli_option* o = options[i];
+ if(o->name) {
+ width += strlen(o->name);
+ switch(o->type) {
+ case cli_option::string: width += 6; break;
+ case cli_option::integer: width += 4; break;
+ case cli_option::uinteger: width += 4; break;
+ case cli_option::stringlist: width += 5; break;
+ case cli_option::flag: break;
+ case cli_option::counter: break;
+ }
+ }
+ if(width > maxwidth)
+ maxwidth = width;
+ }
+ return maxwidth;
+}
+
+static void show_option(cli_option* o, unsigned maxwidth)
+{
+ if(o == &help_option)
+ fout << '\n';
+ if(o->ch)
+ fout << " -" << o->ch;
+ else
+ fout << " ";
+ fout << (o->ch && o->name ? ", " : " ");
+ if(o->name) {
+ const char* extra = "";
+ switch(o->type) {
+ case cli_option::string: extra = "=VALUE"; break;
+ case cli_option::integer: extra = "=INT"; break;
+ case cli_option::uinteger: extra = "=UNS"; break;
+ case cli_option::stringlist: extra = "=ITEM"; break;
+ case cli_option::flag: break;
+ case cli_option::counter: break;
+ }
+ fout << "--" << o->name << extra
+ << fill(maxwidth - strlen(o->name) - strlen(extra) + 2);
+ }
+ else
+ fout << fill(maxwidth+4);
+ fout << o->helpstr << '\n';
+ if(o->defaultstr)
+ fout << fill(maxwidth+10) << "(Defaults to " << o->defaultstr << ")\n";
+}
+
+static void show_help()
+{
+ if(cli_help_prefix)
+ fout << cli_help_prefix;
+ unsigned maxwidth = calc_max_width();
+ for(unsigned i = 0; i < optionc; i++)
+ show_option(options[i], maxwidth);
+ if(cli_help_suffix)
+ fout << cli_help_suffix;
+}
+
+void usage(int exit_value, const char* errorstr)
+{
+ if(errorstr)
+ ferr << cli_program << ": " << errorstr << endl;
+ show_usage();
+ show_help();
+ exit(exit_value);
+}
+
+cli_stringlist* stringlist_append(cli_stringlist* node, const char* newstr)
+{
+ cli_stringlist* newnode = new cli_stringlist(newstr);
+ if(node) {
+ cli_stringlist* head = node;
+ while(node->next)
+ node = node->next;
+ node->next = newnode;
+ return head;
+ }
+ else
+ return newnode;
+}
+
+int cli_option::set(const char* arg)
+{
+ char* endptr;
+ switch(type) {
+ case flag:
+ *(int*)dataptr = flag_value;
+ return 0;
+ case counter:
+ *(int*)dataptr += flag_value;
+ return 0;
+ case integer:
+ *(int*)dataptr = strtol(arg, &endptr, 10);
+ if(*endptr) {
+ ferr << argv0 << ": invalid integer: " << arg << endl;
+ return -1;
+ }
+ return 1;
+ case uinteger:
+ *(unsigned*)dataptr = strtoul(arg, &endptr, 10);
+ if(*endptr) {
+ ferr << argv0 << ": invalid unsigned integer: " << arg << endl;
+ return -1;
+ }
+ return 1;
+ case stringlist:
+ *(cli_stringlist**)dataptr =
+ stringlist_append(*(cli_stringlist**)dataptr, arg);
+ return 1;
+ default: // string
+ *(const char**)dataptr = arg;
+ return 1;
+ }
+}
+
+static int parse_short(int argc, char* argv[])
+{
+ int end = strlen(argv[0]) - 1;
+ for(int i = 1; i <= end; i++) {
+ int ch = argv[0][i];
+ unsigned j;
+ for(j = 0; j < optionc; j++) {
+ cli_option* o = options[j];
+ if(o->ch == ch) {
+ if(o->type != cli_option::flag &&
+ o->type != cli_option::counter) {
+ if(i < end) {
+ if(o->set(argv[0]+i+1) != -1)
+ return 0;
+ }
+ else if(argc <= 1) {
+ ferr << argv0 << ": option -" << o->ch
+ << " requires a value." << endl;
+ }
+ else
+ if(o->set(argv[1]) != -1)
+ return 1;
+ }
+ else if(o->set(0) != -1)
+ break;
+ return -1;
+ }
+ }
+ if(j >= optionc) {
+ ferr << argv0 << ": unknown option letter -" << argv[0][i] << endl;
+ return -1;
+ }
+ }
+ return 0;
+}
+
+int cli_option::parse_long_eq(const char* arg)
+{
+ if(type == flag || type == counter) {
+ ferr << argv0 << ": option --" << name
+ << " does not take a value." << endl;
+ return -1;
+ }
+ else
+ return set(arg)-1;
+}
+
+int cli_option::parse_long_noeq(const char* arg)
+{
+ if(type == flag || type == counter)
+ return set(0);
+ else if(arg)
+ return set(arg);
+ else {
+ ferr << argv0 << ": option --" << name
+ << " requires a value." << endl;
+ return -1;
+ }
+}
+
+static int parse_long(int, char* argv[])
+{
+ const char* arg = argv[0]+2;
+ for(unsigned j = 0; j < optionc; j++) {
+ cli_option* o = options[j];
+ if(o->name) {
+ size_t len = strlen(o->name);
+ if(!memcmp(arg, o->name, len)) {
+ if(arg[len] == '\0')
+ return o->parse_long_noeq(argv[1]);
+ else if(arg[len] == '=')
+ return o->parse_long_eq(arg+len+1);
+ }
+ }
+ }
+ ferr << argv0 << ": unknown option string: '--" << arg << "'" << endl;
+ return -1;
+}
+
+static int parse_args(int argc, char* argv[])
+{
+ build_options();
+ int i;
+ for(i = 1; i < argc; i++) {
+ const char* arg = argv[i];
+ // Stop at the first non-option argument
+ if(arg[0] != '-')
+ break;
+ // Stop after the first "-" or "--"
+ if(arg[1] == '\0' ||
+ (arg[1] == '-' && arg[2] == '\0')) {
+ i++;
+ break;
+ }
+ int j = (arg[1] != '-') ?
+ parse_short(argc-i, argv+i) :
+ parse_long(argc-i, argv+i);
+ if(j < 0)
+ usage(1);
+ else
+ i += j;
+ }
+ return i;
+}
+
+static void set_argv0(const char* p)
+{
+ argv0 = p;
+ static const char* empty = "";
+ const char* s = strrchr(p, '/');
+ if(s) {
+ ++s;
+ argv0base = s;
+ size_t length = s-p;
+ char* tmp = new char[length+1];
+ memcpy(tmp, p, length);
+ tmp[length] = 0;
+ argv0dir = tmp;
+ }
+ else {
+ argv0base = p;
+ argv0dir = empty;
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ struct timeval tv;
+ gettimeofday(&tv, 0);
+ srandom(tv.tv_usec ^ tv.tv_sec);
+
+ set_argv0(argv[0]);
+ int lastarg = parse_args(argc, argv);
+
+ if(do_show_usage)
+ usage(0);
+
+ argc -= lastarg;
+ argv += lastarg;
+ if(argc < cli_args_min)
+ usage(1, "Too few command-line arguments");
+ if(cli_args_max >= cli_args_min && argc > cli_args_max)
+ usage(1, "Too many command-line arguments");
+
+ return cli_main(argc, argv);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/cli++/messages.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,44 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "fdbuf/fdbuf.h"
+#include <stdlib.h>
+#include "cli++.h"
+
+extern const char* argv0;
+
+void cli_error(int exit_value,
+ const char* a,
+ const char* b,
+ const char* c,
+ const char* d)
+{
+ cli_warning(a,b,c,d);
+ exit(exit_value);
+}
+
+void cli_warning(const char* a,
+ const char* b,
+ const char* c,
+ const char* d)
+{
+ ferr << cli_program << ": " << a;
+ if(b) ferr << b;
+ if(c) ferr << c;
+ if(d) ferr << d;
+ ferr << endl;
+}
--- a/lib/cli/ChangeLog Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-2000-08-15 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * cli2pod.pl: Replaced the CLI documentation programs with this
- script which outputs POD, which can be translated to man pages or
- HTML (or LaTeX, or text, or FM).
-
-2000-08-14 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * cli_parse.pl (parse_header_line): Rewrote the parsing to deal
- with multi-line strings.
-
- * cli2man.pl (synopsis): Add usage string.
-
- * cli2html.pl (synopsis): Add usage string.
-
-2000-08-12 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * cli_parse.pl, cli2html.pl, cli2man.pl: Created these programs.
-
-2000-08-01 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * main.cc (show_option): Fixed several width glitches.
-
-2000-07-18 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * cli.h (struct cli_option): Added new uinteger type.
-
- * main.cc (fill): Removed use of mystring.
-
-2000-07-13 Bruce Guenter <bruce@bruce-guenter.dyndns.org>
-
- * Removed include of mystring.
-
-2000-01-09 Bruce Guenter <bruceg@daedalus.bfsmedia.com>
-
- * main.cc (parse_short): Modified the logic here to treat a string
- value immediately following a string option as the value for that
- option rather than as more flags. This makes it behave much more
- like the standard getopt library.
-
-1999-09-30 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (show_option): Changed stringlist option string from
- "=LIST" to "=ITEM".
-
-1999-09-29 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (cli_option::set): Fixed problem with setting a string
- list option.
-
-1999-09-11 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (show_help): Split off two parts of this routine into
- calc_max_width and show_option.
- (show_option): Add "=INT" for integer options, and don't add extra
- space for non-value long options.
- (set): Use strtol instead of atoi to parse the integer string, to
- allow for error checking.
- (show_option): Fixed handling of string lists.
-
-1999-08-14 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (set_argv0): Sets argv0 to the complete value of
- argv[0], argv0dir to the part of argv[0] up to and including the
- last '/' (or blank if there is none), and argv0base to the
- remainder of argv[0]. This is for use in programs that determine
- what to do based on the value of the program name.
-
-1999-07-14 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (parse_long_eq): Fixed to account for "counter" flag
- type.
- (parse_long_noeq): Fixed to account for "counter" flag type.
- (parse_long_eq): set() will return one, but this shouldn't return
- one, so subtract one from its result.
- (show_help): Added a mechanism to display default values on a
- second line.
- (show_help): Output a blank line before the "--help" option line.
-
-1999-07-04 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (show_help): Only show a "=VALUE" for string and integer
- option types.
-
-1999-06-30 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * messages.cc (cli_error): Moved this routine into a separate
- module, and added a "cli_warning" routine.
-
-1999-06-25 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc (set): Added handling for two new option types: string
- list and counters. A stringlist maintains a linked list of all
- the given option arguments. A counter adds the flag_value to the
- dataptr each time it is encountered.
- (parse_short): Fixed faulty logic regarding options with values.
- Need to merge parts into cli_option::set().
-
-1999-06-24 Bruce Guenter <bguenter@mikhail.qcc.sk.ca>
-
- * main.cc: Rewrote the "help" option handling to stop it being a
- special case, by making an internal option list that includes a
- "help" option at the end of it.
- (show_help): Cleaned up the option formatting to produce more
- correct output.
- (build_options): Removed the need to count the options. Note
- that this breaks compatibility with previous versions.
- (cli_error): Added this convenience function for the CLI program
- to report errors and optionally exit.
- (set): Added functionality to call functions when an option is
- parsed, and moved some of the option parsing into class methods
- from the structure.
- (main): Moved the test for showing the usage information before
- the test for counting command-line arguments.
-
--- a/lib/cli/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-noinst_LIBRARIES = libcli.a
-EXTRA_DIST = clitest.cc cli2pod.pl
-
-INCLUDES = -I..
-#LIBS = @LIBS@ -L. -lcli -L../lib -lvmailmgr
-
-libcli_a_SOURCES = cli.h main.cc messages.cc
-#clitest_SOURCES = clitest.cc
-
--- a/lib/cli/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,290 +0,0 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ../..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
-CXX = @CXX@
-HTML2TXT = @HTML2TXT@
-LN = @LN@
-LYNX = @LYNX@
-MAKEINFO = @MAKEINFO@
-MKDIR = @MKDIR@
-PACKAGE = @PACKAGE@
-POD2HTML = @POD2HTML@
-POD2MAN = @POD2MAN@
-PYTHON = @PYTHON@
-RANLIB = @RANLIB@
-RM = @RM@
-STRIP = @STRIP@
-SUFFIXES = @SUFFIXES@
-VERSION = @VERSION@
-W3M = @W3M@
-cgidir = @cgidir@
-phpdir = @phpdir@
-pythonlibdir = @pythonlibdir@
-
-noinst_LIBRARIES = libcli.a
-EXTRA_DIST = clitest.cc cli2pod.pl
-
-INCLUDES = -I..
-#LIBS = @LIBS@ -L. -lcli -L../lib -lvmailmgr
-
-libcli_a_SOURCES = cli.h main.cc messages.cc
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I../..
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-libcli_a_LIBADD =
-libcli_a_OBJECTS = main.o messages.o
-AR = ar
-CXXFLAGS = @CXXFLAGS@
-CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-CXXLD = $(CXX)
-CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON = ChangeLog Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = $(libcli_a_SOURCES)
-OBJECTS = $(libcli_a_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .cc .o .s @SUFFIXES@
-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps lib/cli/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-noinstLIBRARIES:
-
-clean-noinstLIBRARIES:
- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-
-distclean-noinstLIBRARIES:
-
-maintainer-clean-noinstLIBRARIES:
-
-.c.o:
- $(COMPILE) -c $<
-
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
-mostlyclean-compile:
- -rm -f *.o core *.core
-
-clean-compile:
-
-distclean-compile:
- -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-libcli.a: $(libcli_a_OBJECTS) $(libcli_a_DEPENDENCIES)
- -rm -f libcli.a
- $(AR) cru libcli.a $(libcli_a_OBJECTS) $(libcli_a_LIBADD)
- $(RANLIB) libcli.a
-.cc.o:
- $(CXXCOMPILE) -c $<
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = lib/cli
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- d=$(srcdir); \
- if test -d $$d/$$file; then \
- cp -pr $$d/$$file $(distdir)/$$file; \
- else \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file || :; \
- fi; \
- done
-main.o: main.cc ../../config.h ../ac/time.h ../fdbuf/fdbuf.h \
- ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h cli.h
-messages.o: messages.cc ../../config.h ../fdbuf/fdbuf.h \
- ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h cli.h
-
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
-check-am: all-am
-check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
-
-install-data-am:
-install-data: install-data-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile $(LIBRARIES)
-all-redirect: all-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
-installdirs:
-
-
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
-mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
- mostlyclean-tags mostlyclean-generic
-
-mostlyclean: mostlyclean-am
-
-clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
- mostlyclean-am
-
-clean: clean-am
-
-distclean-am: distclean-noinstLIBRARIES distclean-compile \
- distclean-tags distclean-generic clean-am
-
-distclean: distclean-am
-
-maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
- maintainer-clean-compile maintainer-clean-tags \
- maintainer-clean-generic distclean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-am
-
-.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \
-clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
-check-am installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
-
-#clitest_SOURCES = clitest.cc
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
--- a/lib/cli/cli.h Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-#ifndef VMAILMGR__CLI__CLI__H__
-#define VMAILMGR__CLI__CLI__H__
-
-typedef bool (*cli_funcptr)(void*);
-
-struct cli_stringlist
-{
- const char* string;
- cli_stringlist* next;
-
- cli_stringlist(const char* s)
- : string(s), next(0)
- {
- }
-};
-
-struct cli_option
-{
- char ch;
- const char* name;
- enum { flag, counter, integer, string, stringlist, uinteger } type;
- int flag_value;
- void* dataptr;
- const char* helpstr;
- const char* defaultstr;
-
- int set(const char* arg);
- int parse_long_eq(const char* arg);
- int parse_long_noeq(const char* arg);
-};
-
-/* The following are required from the CLI program */
-extern const char* cli_program;
-extern const char* cli_help_prefix;
-extern const char* cli_help_suffix;
-extern const char* cli_args_usage;
-extern const int cli_args_min;
-extern const int cli_args_max;
-extern cli_option cli_options[];
-extern int cli_main(int argc, char* argv[]);
-
-/* The following are provided to the CLI program */
-extern const char* argv0;
-extern const char* argv0base;
-extern const char* argv0dir;
-extern void usage(int exit_value, const char* errorstr = 0);
-
-extern void cli_error(int exit_value,
- const char*,
- const char* = 0,
- const char* = 0,
- const char* = 0);
-
-extern void cli_warning(const char*,
- const char* = 0,
- const char* = 0,
- const char* = 0);
-
-#endif // VMAILMGR__CLI__CLI__H__
--- a/lib/cli/cli2pod.pl Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-#!/usr/bin/perl
-
-sub cstr2pod {
- local($_) = shift;
- s/\\"/"/go;
- s/"([^\"]*)"/"C<$1>"/go;
- $_;
-}
-
-$section = 1;
-
-@section_order = (
- 'NAME',
- 'SYNOPSIS',
- 'DESCRIPTION',
- 'OPTIONS',
- 'RETURN VALUE',
- 'ERRORS',
- 'EXAMPLES',
- 'ENVIRONMENT',
- 'FILES',
- 'SEE ALSO',
- 'NOTES',
- 'CAVEATS',
- 'WARNINGS',
- 'DIAGNOSTICS',
- 'BUGS',
- 'RESTRICTIONS',
- 'AUTHOR',
- 'AUTHORS',
- 'HISTORY'
- );
-
-sub type2word {
- my($type) = shift;
- return 'INT' if $type eq 'integer';
- return 'UINT' if $type eq 'uinteger';
- return 'STR' if $type eq 'string' || $type eq 'stringlist';
- return '' if $type eq 'flag' || $type eq 'counter';
- die "Invalid cli option type '$type'";
-}
-
-sub add_option {
- my($short, $long, $type, $desc) = @_;
-
- my $s = '[B<';
- my $o = '=item B<';
- if($short) {
- $s .= "-$short";
- $o .= "-$short";
- if($type) {
- $s .= " $type";
- $o .= " $type";
- }
- }
- if($short && $long) {
- $s .= ">]\n[B<";
- $o .= ">, B<";
- }
- if($long) {
- $s .= "--$long";
- $o .= "--$long";
- if($type) {
- $s .= "=$type";
- $o .= "=$type";
- }
- }
- $s .= ">]\n";
- $o .= ">\n\n$desc\n\n";
-
- $synopsis .= $s;
- $options = "=over 8\n\n" unless $options;
- $options .= $o;
-}
-
-sub parse_option {
- local($_) = shift;
- s/^\s*\{\s*//o;
- s/\s*\},?\s*/ /o;
-
- my $short = $1 if s/^'([^\'])',\s*//o;
- die "Invalid cli option" unless $short || s/^0,\s*//o;
-
- my $long = $1 if s/^"([^\"]+)",\s*//o;
- die "Invalid cli_option" unless $long || s/^0,\s*//o;
-
- my $type = $1 if s/^cli_option::(\S+),\s*//o;
- die "Invalid cli_option" unless $type;
- $type = &type2word($type);
-
- my $val = $1 if s/^([^,]+),\s*//o;
- my $var = $1 if s/^&([^,]+),\s*//o;
-
- my $desc = cstr2pod($1) if s/^"([^,]+)",\s*//o;
- die "Invalid cli_option" unless $desc;
- $desc =~ s/\.?$/./o if $desc;
-
- my $default = $1 if s/^"([^\"]+)"\s+//o;
- die "Invalid cli_option" unless $default || s/^0\s+//o;
- $desc .= " Defaults to $default." if $default;
-
- s/\s*\/\/\s*/ /go;
- s/^\s*//o;
-
- add_option($short, $long, $type, $_ || $desc);
-}
-
-sub parse_options {
- $synopsis = "B<$program>\n";
-
- my $line;
- while(<>) {
- s/^\s+//o;
- s/\s+$//o;
- if($line && /^\{/o) {
- &parse_option($line);
- $line = "";
- }
- next if /^\{\s*0\s*\},?/o;
- last if /^\s*\};/o;
- $line =~ s/$/ $_/;
- }
- &parse_option($line) if $line;
-
- $synopsis .= "I<$usage>" if $usage;
- $options .= "=back" if $options;
- $sections{'SYNOPSIS'} = $synopsis;
- $sections{'OPTIONS'} = $options;
-}
-
-sub parse_notes {
- my $section;
- my $title;
- while(<>) {
- chomp;
- last unless /^$/o || s/^\/\/\s*//o;
- if(/^[\sA-Z]+$/o) {
- $sections{$title} = $section if $title && $section;
- undef $section;
- $title = $_;
- } else {
- $section .= "$_\n";
- }
- }
- $sections{$title} = $section if $title && $section;
-}
-
-sub parse_header_line {
- local($_, $comment) = @_;
- if(s/^\s*const\s+char\s*\*\s*cli_(\S+)\s*=\s*//o) {
- my $name = $1;
- s/;\s*$//o;
- s/^\"//;
- s/\"$//o;
- s/\\n$//o;
- s/\\n""/\n/go;
- $program = $_ if $name eq 'program';
- $prefix = $_ if $name eq 'help_prefix';
- $usage = $_ if $name eq 'args_usage';
- $suffix = $_ if $name eq 'help_suffix';
- }
-}
-
-sub parse_header {
- my $comment = '';
- my $line = '';
- while(<>) {
- s/^\s+//o;
- s/\s+$//o;
- if(s/^.*Copyright\s*\(C\)\s*[\d,]+\s*//o) {
- $author = $_;
- } else {
- last if ($program && $prefix && /^$/o);
- next if /^#/o;
- $comment .= "$1\n" if s|\s*//\s*(.*)$||o;
- $line =~ s/$/\n$_/;
- if(/;$/o) {
- &parse_header_line($line, $comment);
- undef $line;
- undef $comment;
- }
- }
- }
-}
-
-sub parse_description {
- while(<>) {
- s/^\s+//o;
- s/\s+$//o;
- last if / cli_options\[\]\s*=\s*\{/o;
- next unless s/^\/\/\s*//o;
- $description .= "$_\n";
- }
-}
-
-&parse_header;
-&parse_description;
-&parse_options;
-&parse_notes;
-
-$description .= "\n\n$suffix\n" if $suffix;
-
-$sections{'NAME'} = "$program - $prefix";
-$sections{'DESCRIPTION'} = $description;
-$sections{'AUTHORS'} = $author if $author;
-
-foreach $section (@section_order) {
- print "=head1 $section\n\n$sections{$section}\n\n"
- if $sections{$section};
-}
-
-1;
--- a/lib/cli/clitest.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include "cli.h"
-#include "fdbuf/fdbuf.h"
-
-const char* cli_program = "clitest";
-const char* cli_help_prefix = "Does nothing but set flags\n";
-const char* cli_help_suffix = "";
-const char* cli_args_usage = "";
-const int cli_args_min = 0;
-const int cli_args_max = -1;
-int o_flag = 0;
-int o_int = 0;
-char* o_string = "nostring";
-cli_option cli_options[] = {
- { 'f', "flag", cli_option::flag, 1, &o_flag, "Sets a flag", 0 },
- { 'i', "int", cli_option::integer, 0, &o_int, "Sets an integer", 0 },
- { 's', "str", cli_option::string, 0, &o_string, "Sets a string", 0},
- {0} };
-
-int cli_main(int argc, char* argv[])
-{
- fout << "argv0=" << argv0 << endl
- << " argv0dir=" << argv0dir << endl
- << " argv0base=" << argv0base << endl;
- fout << "The flag is set to " << o_flag << endl;
- fout << "The integer is set to " << o_int << endl;
- fout << "The string is set to " << o_string << endl;
- for(int i = 0; i < argc; i++)
- fout << "argv[" << i << "] = '" << argv[i] << "'\n";
- return 0;
-}
--- a/lib/cli/main.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,342 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include "ac/time.h"
-#include "fdbuf/fdbuf.h"
-#include <stdlib.h>
-#include <string.h>
-#include "cli.h"
-
-#ifndef HAVE_SRANDOM
-void srandom(unsigned int seed);
-#endif
-
-static bool do_show_usage = false;
-const char* argv0;
-const char* argv0base;
-const char* argv0dir;
-
-static cli_option help_option = { 'h', "help", cli_option::flag,
- true, &do_show_usage,
- "Display this help and exit", 0 };
-
-static cli_option** options;
-static unsigned optionc;
-
-static void build_options()
-{
- for(optionc = 0;
- cli_options[optionc].ch || cli_options[optionc].name;
- optionc++) ;
- optionc++;
- options = new cli_option*[optionc];
- for(unsigned i = 0; i < optionc-1; i++)
- options[i] = &cli_options[i];
- options[optionc-1] = &help_option;
-}
-
-static inline unsigned max(unsigned a, unsigned b)
-{
- return (a>b) ? a : b;
-}
-
-static const char* fill(unsigned i)
-{
- static unsigned lastlen = 0;
- static char* buf = 0;
- if(i > lastlen) {
- delete[] buf;
- buf = new char[i+1];
- lastlen = i;
- }
- memset(buf, ' ', i);
- buf[i] = 0;
- return buf;
-}
-
-static void show_usage()
-{
- fout << "usage: " << cli_program << " [flags] " << cli_args_usage << endl;
-}
-
-static unsigned calc_max_width()
-{
- // maxwidth is the maximum width of the long argument
- unsigned maxwidth = 0;
- for(unsigned i = 0; i < optionc; i++) {
- unsigned width = 0;
- cli_option* o = options[i];
- if(o->name) {
- width += strlen(o->name);
- switch(o->type) {
- case cli_option::string: width += 6; break;
- case cli_option::integer: width += 4; break;
- case cli_option::uinteger: width += 4; break;
- case cli_option::stringlist: width += 5; break;
- case cli_option::flag: break;
- case cli_option::counter: break;
- }
- }
- if(width > maxwidth)
- maxwidth = width;
- }
- return maxwidth;
-}
-
-static void show_option(cli_option* o, unsigned maxwidth)
-{
- if(o == &help_option)
- fout << '\n';
- if(o->ch)
- fout << " -" << o->ch;
- else
- fout << " ";
- fout << (o->ch && o->name ? ", " : " ");
- if(o->name) {
- const char* extra = "";
- switch(o->type) {
- case cli_option::string: extra = "=VALUE"; break;
- case cli_option::integer: extra = "=INT"; break;
- case cli_option::uinteger: extra = "=UNS"; break;
- case cli_option::stringlist: extra = "=ITEM"; break;
- case cli_option::flag: break;
- case cli_option::counter: break;
- }
- fout << "--" << o->name << extra
- << fill(maxwidth - strlen(o->name) - strlen(extra) + 2);
- }
- else
- fout << fill(maxwidth+4);
- fout << o->helpstr << '\n';
- if(o->defaultstr)
- fout << fill(maxwidth+10) << "(Defaults to " << o->defaultstr << ")\n";
-}
-
-static void show_help()
-{
- if(cli_help_prefix)
- fout << cli_help_prefix;
- unsigned maxwidth = calc_max_width();
- for(unsigned i = 0; i < optionc; i++)
- show_option(options[i], maxwidth);
- if(cli_help_suffix)
- fout << cli_help_suffix;
-}
-
-void usage(int exit_value, const char* errorstr)
-{
- if(errorstr)
- ferr << cli_program << ": " << errorstr << endl;
- show_usage();
- show_help();
- exit(exit_value);
-}
-
-cli_stringlist* stringlist_append(cli_stringlist* node, const char* newstr)
-{
- cli_stringlist* newnode = new cli_stringlist(newstr);
- if(node) {
- cli_stringlist* head = node;
- while(node->next)
- node = node->next;
- node->next = newnode;
- return head;
- }
- else
- return newnode;
-}
-
-int cli_option::set(const char* arg)
-{
- char* endptr;
- switch(type) {
- case flag:
- *(int*)dataptr = flag_value;
- return 0;
- case counter:
- *(int*)dataptr += flag_value;
- return 0;
- case integer:
- *(int*)dataptr = strtol(arg, &endptr, 10);
- if(*endptr) {
- ferr << argv0 << ": invalid integer: " << arg << endl;
- return -1;
- }
- return 1;
- case uinteger:
- *(unsigned*)dataptr = strtoul(arg, &endptr, 10);
- if(*endptr) {
- ferr << argv0 << ": invalid unsigned integer: " << arg << endl;
- return -1;
- }
- return 1;
- case stringlist:
- *(cli_stringlist**)dataptr =
- stringlist_append(*(cli_stringlist**)dataptr, arg);
- return 1;
- default: // string
- *(const char**)dataptr = arg;
- return 1;
- }
-}
-
-static int parse_short(int argc, char* argv[])
-{
- int end = strlen(argv[0]) - 1;
- for(int i = 1; i <= end; i++) {
- int ch = argv[0][i];
- unsigned j;
- for(j = 0; j < optionc; j++) {
- cli_option* o = options[j];
- if(o->ch == ch) {
- if(o->type != cli_option::flag &&
- o->type != cli_option::counter) {
- if(i < end) {
- if(o->set(argv[0]+i+1) != -1)
- return 0;
- }
- else if(argc <= 1) {
- ferr << argv0 << ": option -" << o->ch
- << " requires a value." << endl;
- }
- else
- if(o->set(argv[1]) != -1)
- return 1;
- }
- else if(o->set(0) != -1)
- break;
- return -1;
- }
- }
- if(j >= optionc) {
- ferr << argv0 << ": unknown option letter -" << argv[0][i] << endl;
- return -1;
- }
- }
- return 0;
-}
-
-int cli_option::parse_long_eq(const char* arg)
-{
- if(type == flag || type == counter) {
- ferr << argv0 << ": option --" << name
- << " does not take a value." << endl;
- return -1;
- }
- else
- return set(arg)-1;
-}
-
-int cli_option::parse_long_noeq(const char* arg)
-{
- if(type == flag || type == counter)
- return set(0);
- else if(arg)
- return set(arg);
- else {
- ferr << argv0 << ": option --" << name
- << " requires a value." << endl;
- return -1;
- }
-}
-
-static int parse_long(int, char* argv[])
-{
- const char* arg = argv[0]+2;
- for(unsigned j = 0; j < optionc; j++) {
- cli_option* o = options[j];
- if(o->name) {
- size_t len = strlen(o->name);
- if(!memcmp(arg, o->name, len)) {
- if(arg[len] == '\0')
- return o->parse_long_noeq(argv[1]);
- else if(arg[len] == '=')
- return o->parse_long_eq(arg+len+1);
- }
- }
- }
- ferr << argv0 << ": unknown option string: '--" << arg << "'" << endl;
- return -1;
-}
-
-static int parse_args(int argc, char* argv[])
-{
- build_options();
- int i;
- for(i = 1; i < argc; i++) {
- const char* arg = argv[i];
- // Stop at the first non-option argument
- if(arg[0] != '-')
- break;
- // Stop after the first "-" or "--"
- if(arg[1] == '\0' ||
- (arg[1] == '-' && arg[2] == '\0')) {
- i++;
- break;
- }
- int j = (arg[1] != '-') ?
- parse_short(argc-i, argv+i) :
- parse_long(argc-i, argv+i);
- if(j < 0)
- usage(1);
- else
- i += j;
- }
- return i;
-}
-
-static void set_argv0(const char* p)
-{
- argv0 = p;
- static const char* empty = "";
- const char* s = strrchr(p, '/');
- if(s) {
- ++s;
- argv0base = s;
- size_t length = s-p;
- char* tmp = new char[length+1];
- memcpy(tmp, p, length);
- tmp[length] = 0;
- argv0dir = tmp;
- }
- else {
- argv0base = p;
- argv0dir = empty;
- }
-}
-
-int main(int argc, char* argv[])
-{
- struct timeval tv;
- gettimeofday(&tv, 0);
- srandom(tv.tv_usec ^ tv.tv_sec);
-
- set_argv0(argv[0]);
- int lastarg = parse_args(argc, argv);
-
- if(do_show_usage)
- usage(0);
-
- argc -= lastarg;
- argv += lastarg;
- if(argc < cli_args_min)
- usage(1, "Too few command-line arguments");
- if(cli_args_max >= cli_args_min && argc > cli_args_max)
- usage(1, "Too many command-line arguments");
-
- return cli_main(argc, argv);
-}
--- a/lib/cli/messages.cc Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-#include <config.h>
-#include "fdbuf/fdbuf.h"
-#include <stdlib.h>
-#include "cli.h"
-
-extern const char* argv0;
-
-void cli_error(int exit_value,
- const char* a,
- const char* b,
- const char* c,
- const char* d)
-{
- cli_warning(a,b,c,d);
- exit(exit_value);
-}
-
-void cli_warning(const char* a,
- const char* b,
- const char* c,
- const char* d)
-{
- ferr << cli_program << ": " << a;
- if(b) ferr << b;
- if(c) ferr << c;
- if(d) ferr << d;
- ferr << endl;
-}
--- a/lib/config/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/config/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -134,7 +136,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libconfig_a_SOURCES) $(showvconfig_SOURCES)
OBJECTS = $(libconfig_a_OBJECTS) $(showvconfig_OBJECTS)
@@ -197,8 +199,8 @@
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -297,9 +299,6 @@
_maildir_arg_str.o: _maildir_arg_str.cc configio.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../config/configrc.h ../misc/strlist.h
-_max_fork.o: _max_fork.cc configio.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../config/configrc.h ../misc/strlist.h
_password_file.o: _password_file.cc configio.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
../config/configrc.h ../misc/strlist.h
@@ -377,7 +376,7 @@
all-am: Makefile $(LIBRARIES) $(PROGRAMS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir)
--- a/lib/courier-authlib/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -109,7 +111,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libauthmod_a_SOURCES)
OBJECTS = $(libauthmod_a_OBJECTS)
@@ -204,12 +206,7 @@
done
authexit.o: authexit.c
authmod.o: authmod.c auth.h ../../config.h authmod.h authwait.h
-authmodclient.o: authmodclient.c authmod.h ../../config.h authwait.h
authmodfail.o: authmodfail.c auth.h ../../config.h authmod.h
-authmoduser.o: authmoduser.c auth.h ../../config.h authmod.h authwait.h
-authmoduser2.o: authmoduser2.c auth.h ../../config.h authmod.h \
- authwait.h
-authmoduser3.o: authmoduser3.c auth.h ../../config.h authmod.h
chain.o: chain.c ../../config.h auth.h
changeuidgid.o: changeuidgid.c ../../config.h auth.h
copyargv.o: copyargv.c ../../config.h auth.h
@@ -237,7 +234,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/courier-authlib/README Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/README Sun Jan 20 00:22:09 2008 +0100
@@ -1,7 +1,6 @@
The contents of this directory have been taken intact from the "authlib"
-directory of the courier-imap package, version 0.30.31pre1. The
-courier-imap package is distributed under the GPL, included in this
-directory.
+directory of the courier-imap package, version 1.2.2. The courier-imap
+package is distributed under the GPL, included in this directory.
Courier-IMAP written by:
--- a/lib/courier-authlib/auth.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/auth.h Sun Jan 20 00:22:09 2008 +0100
@@ -15,7 +15,7 @@
extern "C" {
#endif
-static const char auth_h_rcsid[]="$Id: auth.h,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char auth_h_rcsid[]="$Id: auth.h,v 1.2 2000/12/18 20:20:10 bruce Exp $";
/*
** authcopyargv prepares the arguments to execv for a module that receives
--- a/lib/courier-authlib/authexit.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/authexit.c Sun Jan 20 00:22:09 2008 +0100
@@ -5,7 +5,7 @@
#include <stdlib.h>
-static const char rcsid[]="$Id: authexit.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: authexit.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
void authexit(int rc)
{
--- a/lib/courier-authlib/authmod.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/authmod.c Sun Jan 20 00:22:09 2008 +0100
@@ -14,7 +14,7 @@
#include <unistd.h>
#endif
-static const char rcsid[]="$Id: authmod.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: authmod.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
static char authrec[BUFSIZ];
static char buf[BUFSIZ];
--- a/lib/courier-authlib/authmod.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/authmod.h Sun Jan 20 00:22:09 2008 +0100
@@ -16,7 +16,7 @@
extern "C" {
#endif
-static const char authmod_h_rcsid[]="$Id: authmod.h,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char authmod_h_rcsid[]="$Id: authmod.h,v 1.2 2000/12/18 20:20:10 bruce Exp $";
/*
** Authentication modules must call authmod_init the first thing in main.
@@ -131,6 +131,8 @@
const char *, /* userid */
const char *); /* password */
+/* Magic for authdaemon */
+
#ifdef __cplusplus
}
#endif
--- a/lib/courier-authlib/authmodfail.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/authmodfail.c Sun Jan 20 00:22:09 2008 +0100
@@ -13,7 +13,7 @@
#include <unistd.h>
#endif
-static const char rcsid[]="$Id: authmodfail.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: authmodfail.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
void authmod_fail_completely()
{
--- a/lib/courier-authlib/authwait.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/authwait.h Sun Jan 20 00:22:09 2008 +0100
@@ -10,7 +10,7 @@
#include "config.h"
#endif
-static const char authwait_h_rcsid[]="$Id: authwait.h,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char authwait_h_rcsid[]="$Id: authwait.h,v 1.2 2000/12/18 20:20:10 bruce Exp $";
#include <sys/types.h>
#if HAVE_SYS_WAIT_H
--- a/lib/courier-authlib/chain.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/chain.c Sun Jan 20 00:22:09 2008 +0100
@@ -18,7 +18,7 @@
#include "auth.h"
-static const char rcsid[]="$Id: chain.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: chain.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
void authchain(int argc, char **argv, const char *buf)
{
@@ -29,6 +29,7 @@
char *prog;
vec=authcopyargv(argc, argv, &prog);
+ close(3);
if (!prog || open("/dev/null", O_RDONLY) != 3) authexit(1);
if (pipe(pipes))
@@ -53,7 +54,6 @@
authexit(1);
}
l=strlen(buf);
- close(3);
close(pipes[0]);
while (l)
{
--- a/lib/courier-authlib/changeuidgid.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/changeuidgid.c Sun Jan 20 00:22:09 2008 +0100
@@ -1,5 +1,5 @@
/*
-** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
+** Copyright 1998 - 2000 Double Precision, Inc. See COPYING for
** distribution information.
*/
@@ -12,13 +12,14 @@
#endif
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <grp.h>
#include <pwd.h>
#include <errno.h>
#include "auth.h"
-static const char rcsid[]="$Id: changeuidgid.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: changeuidgid.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
void authchangegroup(gid_t gid)
{
--- a/lib/courier-authlib/copyargv.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/copyargv.c Sun Jan 20 00:22:09 2008 +0100
@@ -14,7 +14,7 @@
#endif
#include "auth.h"
-static const char rcsid[]="$Id: copyargv.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: copyargv.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
char **authcopyargv(int c, char **oldv, char **prog)
{
--- a/lib/courier-authlib/success.c Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/courier-authlib/success.c Sun Jan 20 00:22:09 2008 +0100
@@ -14,7 +14,7 @@
#include <unistd.h>
#endif
-static const char rcsid[]="$Id: success.c,v 1.1 2000/04/13 17:55:05 bruce Exp $";
+static const char rcsid[]="$Id: success.c,v 1.2 2000/12/18 20:20:10 bruce Exp $";
void authsuccess(const char *homedir,
const char *username,
@@ -27,12 +27,6 @@
static char *authfullname_buf=0;
char *p;
- if (chdir(homedir))
- {
- perror("chdir");
- authexit(1);
- }
-
if (username)
{
if (gid)
@@ -49,6 +43,12 @@
authchangeuidgid(*uid, *gid);
}
+ if (chdir(homedir))
+ {
+ perror("chdir");
+ authexit(1);
+ }
+
if (!authaddr) authaddr="";
if (authaddr_buf) free(authaddr_buf);
authaddr_buf=malloc(sizeof("AUTHADDR=")+strlen(authaddr));
--- a/lib/fdbuf/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/fdbuf/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -99,14 +101,14 @@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libfdbuf_a_LIBADD =
+@FDBUF_NO_MYSTRING_TRUE@libfdbuf_a_OBJECTS = fdbuf.o fdbuf_copy.o \
+@FDBUF_NO_MYSTRING_TRUE@fdibuf.o fdobuf.o fdobuf_chownmod.o \
+@FDBUF_NO_MYSTRING_TRUE@fdobuf_seek.o fdobuf_signed.o fdobuf_unsigned.o
@FDBUF_NO_MYSTRING_FALSE@libfdbuf_a_OBJECTS = fdbuf.o fdbuf_copy.o \
@FDBUF_NO_MYSTRING_FALSE@fdibuf.o fdobuf.o fdobuf_chownmod.o \
@FDBUF_NO_MYSTRING_FALSE@fdobuf_seek.o fdobuf_signed.o \
@FDBUF_NO_MYSTRING_FALSE@fdobuf_unsigned.o fdibuf_mystring.o \
@FDBUF_NO_MYSTRING_FALSE@fdibuf_netstring.o
-@FDBUF_NO_MYSTRING_TRUE@libfdbuf_a_OBJECTS = fdbuf.o fdbuf_copy.o \
-@FDBUF_NO_MYSTRING_TRUE@fdibuf.o fdobuf.o fdobuf_chownmod.o \
-@FDBUF_NO_MYSTRING_TRUE@fdobuf_seek.o fdobuf_signed.o fdobuf_unsigned.o
AR = ar
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -121,7 +123,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libfdbuf_a_SOURCES)
OBJECTS = $(libfdbuf_a_OBJECTS)
@@ -261,7 +263,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/fdbuf/fdbuf.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/fdbuf/fdbuf.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: fdbuf.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/fdbuf/fdibuf.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/fdbuf/fdibuf.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: fdibuf.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/fdbuf/fdobuf.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/fdbuf/fdobuf.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: fdobuf.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/misc/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -100,6 +102,15 @@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libmisc_a_LIBADD =
+@KRB5_FALSE@libmisc_a_OBJECTS = crc32.o exec.o itoa.o keystrlist.o \
+@KRB5_FALSE@list_table.o lookup_baseuser.o lookup_domain.o maildir.o \
+@KRB5_FALSE@map_table.o md5.o md5-crypt.o passwdfn.o pwcrypt.o \
+@KRB5_FALSE@pwentry.o pwentry_auth.o pwentry_export_env.o \
+@KRB5_FALSE@pwentry_table.o response_write.o response_message.o \
+@KRB5_FALSE@response_read.o server.o server_call0.o server_call1.o \
+@KRB5_FALSE@server_call2.o server_call3.o server_call4.o server_call5.o \
+@KRB5_FALSE@server_call6.o strlist.o strlist_read.o strlist_write.o \
+@KRB5_FALSE@strtou.o utoa.o
@KRB5_TRUE@libmisc_a_OBJECTS = krbauth.o crc32.o exec.o itoa.o \
@KRB5_TRUE@keystrlist.o list_table.o lookup_baseuser.o lookup_domain.o \
@KRB5_TRUE@maildir.o map_table.o md5.o md5-crypt.o passwdfn.o pwcrypt.o \
@@ -109,15 +120,6 @@
@KRB5_TRUE@server_call2.o server_call3.o server_call4.o server_call5.o \
@KRB5_TRUE@server_call6.o strlist.o strlist_read.o strlist_write.o \
@KRB5_TRUE@strtou.o utoa.o
-@KRB5_FALSE@libmisc_a_OBJECTS = crc32.o exec.o itoa.o keystrlist.o \
-@KRB5_FALSE@list_table.o lookup_baseuser.o lookup_domain.o maildir.o \
-@KRB5_FALSE@map_table.o md5.o md5-crypt.o passwdfn.o pwcrypt.o \
-@KRB5_FALSE@pwentry.o pwentry_auth.o pwentry_export_env.o \
-@KRB5_FALSE@pwentry_table.o response_write.o response_message.o \
-@KRB5_FALSE@response_read.o server.o server_call0.o server_call1.o \
-@KRB5_FALSE@server_call2.o server_call3.o server_call4.o server_call5.o \
-@KRB5_FALSE@server_call6.o strlist.o strlist_read.o strlist_write.o \
-@KRB5_FALSE@strtou.o utoa.o
AR = ar
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -132,7 +134,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libmisc_a_SOURCES)
OBJECTS = $(libmisc_a_OBJECTS)
@@ -333,33 +335,6 @@
strtou.o: strtou.c ../../config.h
utoa.o: utoa.cc ../../config.h utoa.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h
-vdomain.o: vdomain.cc ../../config.h vdomain.h ../mystring/mystring.h \
- ../fdbuf/fdbuf.h ../config/configrc.h strlist.h pwentry.h \
- ../vpw/vpwtable.h ../vpw/vpwentry.h response.h
-vdomain_chattr.o: vdomain_chattr.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h pwcrypt.h autodelete.h
-vdomain_deluser.o: vdomain_deluser.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h autodelete.h maildir.h
-vdomain_lookup.o: vdomain_lookup.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h autodelete.h
-vdomain_set.o: vdomain_set.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h maildir.h
-vdomain_userdir.o: vdomain_userdir.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h crc_hash.h crc32.h
-vdomain_validate.o: vdomain_validate.cc ../../config.h vdomain.h \
- ../mystring/mystring.h ../fdbuf/fdbuf.h ../config/configrc.h \
- strlist.h pwentry.h ../vpw/vpwtable.h ../vpw/vpwentry.h \
- response.h
info-am:
info: info-am
@@ -383,7 +358,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/misc/crc32.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/crc32.h Sun Jan 20 00:22:09 2008 +0100
@@ -45,4 +45,4 @@
(unsigned char)(octet) ] ^ ( ((crc32)>>8) & 0x00FFFFFFL ) )
#endif
-#endif CRC32INIT
+#endif
--- a/lib/misc/exec.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/exec.cc Sun Jan 20 00:22:09 2008 +0100
@@ -17,6 +17,7 @@
#include <config.h>
#include <errno.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
@@ -84,6 +85,5 @@
int execute(const mystring& name)
{
- int i = execute(config, name);
- return (i == 99) ? 0 : i;
+ return execute(config, name);
}
--- a/lib/misc/keystrlist.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/keystrlist.cc Sun Jan 20 00:22:09 2008 +0100
@@ -15,6 +15,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <config.h>
+#include <string.h>
#include "strlist.h"
void keystrlist::set(const mystring& var, const mystring& val)
--- a/lib/misc/maildir.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/maildir.cc Sun Jan 20 00:22:09 2008 +0100
@@ -36,7 +36,9 @@
if(mkdirp(dirname.left(i), 0755))
return -1;
}
- return mkdir(dirname.c_str(), mode);
+ if(i != dirname.length() - 1)
+ return mkdir(dirname.c_str(), mode);
+ return 0;
}
bool make_maildir(const mystring& dirname)
@@ -66,28 +68,35 @@
bool delete_directory(const mystring& dirname)
{
- DIR* dir = opendir(dirname.c_str());
- if(!dir)
- return false;
- while(dirent* entry = readdir(dir)) {
- const char* name = entry->d_name;
- if(name[0] == '.' &&
- (NAMLEN(entry) == 1 ||
- (name[1] == '.' && NAMLEN(entry) == 2)))
- continue;
- mystring fullname = dirname + "/";
- fullname += mystring(name, NAMLEN(entry));
- if(is_dir(fullname.c_str())) {
- if(!delete_directory(fullname)) {
+ int retry;
+ retry = 0;
+ do {
+ DIR* dir = opendir(dirname.c_str());
+ if(!dir)
+ return false;
+ while(dirent* entry = readdir(dir)) {
+ const char* name = entry->d_name;
+ if(name[0] == '.' &&
+ (NAMLEN(entry) == 1 ||
+ (name[1] == '.' && NAMLEN(entry) == 2)))
+ continue;
+ mystring fullname = dirname + "/";
+ fullname += mystring(name, NAMLEN(entry));
+ if(is_dir(fullname.c_str())) {
+ if(!delete_directory(fullname)) {
+ closedir(dir);
+ return false;
+ }
+ }
+ else if(unlink(fullname.c_str())) {
closedir(dir);
return false;
}
}
- else if(unlink(fullname.c_str())) {
- closedir(dir);
- return false;
- }
- }
- closedir(dir);
- return !rmdir(dirname);
+ closedir(dir);
+ if (rmdir(dirname) == 0)
+ return true;
+ ++retry;
+ } while (retry < 3);
+ return false;
}
--- a/lib/misc/pwcrypt.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/pwcrypt.cc Sun Jan 20 00:22:09 2008 +0100
@@ -1,4 +1,4 @@
-// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+// Copyright (C) 1999,2000,2005 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -30,33 +30,6 @@
long int random(void);
#endif
-#ifdef USE_CRYPT
-
-static const char passwd_table[65] =
-"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
-
-bool crypt_cmp(const mystring& pass, const mystring& stored)
-{
- if(!stored || !pass)
- return false;
- const char* encrypted = crypt(pass.c_str(), stored.c_str());
- return stored == encrypted;
-}
-
-const char* pwcrypt(const mystring& pass)
-{
- char salt[2] = {
- passwd_table[random() % 64],
- passwd_table[random() % 64]
- };
- return crypt(pass.c_str(), salt);
-}
-
-#else // USE_CRYPT
-
-static const char passwd_table[65] =
-"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
extern "C"
{
#include "md5.h"
@@ -85,6 +58,13 @@
extern "C" char *md5_crypt __P ((const char *key, const char *salt));
+const char* null_crypt(const mystring& pass)
+{
+ static mystring s;
+ s = "$0$" + pass;
+ return s.c_str();
+}
+
bool crypt_cmp(const mystring& pass, const mystring& stored)
{
if(!stored || !pass)
@@ -94,11 +74,32 @@
encrypted = encrypt_old_md5(pass.c_str());
else if(stored[0] == '$' && stored[1] == '1' && stored[2] == '$')
encrypted = md5_crypt(pass.c_str(), stored.c_str());
+ else if(stored[0] == '$' && stored[1] == '0' && stored[2] == '$')
+ encrypted = null_crypt(pass);
else
encrypted = crypt(pass.c_str(), stored.c_str());
return stored == encrypted;
}
+#ifdef USE_CRYPT
+
+static const char passwd_table[65] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
+
+const char* pwcrypt(const mystring& pass)
+{
+ char salt[2] = {
+ passwd_table[random() % 64],
+ passwd_table[random() % 64]
+ };
+ return crypt(pass.c_str(), salt);
+}
+
+#else
+
+static const char passwd_table[65] =
+"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
const char* pwcrypt(const mystring& pass)
{
char salt[14] = "$1$";
@@ -108,4 +109,4 @@
return md5_crypt(pass.c_str(), salt);
}
-#endif // USE_MD5
+#endif
--- a/lib/misc/strlist.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/misc/strlist.cc Sun Jan 20 00:22:09 2008 +0100
@@ -15,6 +15,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include <config.h>
+#include <string.h>
#include "strlist.h"
static const char* compare(const char* ptr, const char* end,
--- a/lib/mystring/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -113,7 +115,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libmystring_a_SOURCES)
OBJECTS = $(libmystring_a_OBJECTS)
@@ -270,7 +272,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/mystring/append.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/append.cc Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+#include <string.h>
#include "mystring.h"
#include "trace.h"
--- a/lib/mystring/iter.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/iter.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: iter.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/mystring/join.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/join.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: join.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/mystring/mystring.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/mystring.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: mystring.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/mystring/rep.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/rep.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: rep.h 616 2005-08-19 20:11:01Z bruce $ */
// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
//
// This program is free software; you can redistribute it and/or modify
--- a/lib/mystring/trace.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/mystring/trace.h Sun Jan 20 00:22:09 2008 +0100
@@ -1,3 +1,4 @@
+/* $Id: trace.h 616 2005-08-19 20:11:01Z bruce $ */
#include "mystring.h"
#ifdef MYSTRING_TRACE
--- a/lib/vdomain/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vdomain/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -110,7 +112,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libvdomain_a_SOURCES)
OBJECTS = $(libvdomain_a_OBJECTS)
@@ -264,7 +266,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/vdomain/deluser.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vdomain/deluser.cc Sun Jan 20 00:22:09 2008 +0100
@@ -25,11 +25,11 @@
autodelete<vpwentry> vpw = table()->getbyname(user);
if(!vpw)
RETURN(err, "User does not exist");
- if(!del_mailbox && !!vpw->mailbox)
+ if(!del_mailbox && vpw->has_mailbox)
RETURN(err, "User has a mailbox");
if(!table()->del(vpw->name))
RETURN(err, "Couldn't delete user from the password file");
- if(!!vpw->mailbox && !delete_directory(vpw->mailbox))
- RETURN(err, "Couldn't delete user's mail directory");
+ if(!!vpw->directory && !delete_directory(vpw->directory))
+ RETURN(err, "Couldn't delete user's directory");
RETURN(ok, "Deleted user.");
}
--- a/lib/vdomain/lookup.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vdomain/lookup.cc Sun Jan 20 00:22:09 2008 +0100
@@ -37,15 +37,8 @@
return table()->exists(name);
}
-vpwentry* vdomain::lookup(mystring name, bool nodefault)
+vpwentry* vdomain::lookup(mystring name)
{
- vpwentry* vpw;
- if(!name)
- vpw = 0;
- else {
- vpw = table()->getbyname(name);
- if(!vpw && !nodefault)
- vpw = table()->getbyname(config.default_username());
- }
- return vpw;
+ if(!name) return 0;
+ return table()->getbyname(name);
}
--- a/lib/vdomain/set.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vdomain/set.cc Sun Jan 20 00:22:09 2008 +0100
@@ -18,8 +18,7 @@
#include "vdomain.h"
#include "misc/maildir.h"
-response vdomain::set(const vpwentry* vpw, bool onlyadd,
- mystring maildir)
+response vdomain::set(const vpwentry* vpw, bool onlyadd)
{
if(!vpw)
RETURN(err, "Internal error: no vpwentry");
@@ -27,14 +26,13 @@
RETURN(bad, "Virtual user or alias name contains invalid characters");
if(!validate_password(vpw->pass))
RETURN(bad, "Password field contains invalid characters");
- if(!!maildir && !make_maildir(maildir.c_str()))
- RETURN(err, "Can't create the mail directory '" + maildir + "'");
+ if(mkdirp(vpw->directory, 0700) == -1)
+ RETURN(err, "Can't create the user directory '" + vpw->directory + "'");
+ if(vpw->has_mailbox && !make_maildir(vpw->directory))
+ RETURN(err, "Can't create the mail directory '" + vpw->directory + "'");
if(!table()->put(vpw, onlyadd)) {
- if(!!maildir)
- delete_directory(maildir.c_str());
+ delete_directory(vpw->directory);
RETURN(err, "Can't add the user to the password file");
}
- RETURN(ok, !maildir
- ? "Alias added successfully"
- : "User added successfully");
+ RETURN(ok, "User added successfully");
}
--- a/lib/vdomain/vdomain.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vdomain/vdomain.h Sun Jan 20 00:22:09 2008 +0100
@@ -29,10 +29,10 @@
mystring userdir(mystring username) const;
// Virtual user manipulation functions
- vpwentry* lookup(mystring name, bool nodefault);
+ vpwentry* lookup(mystring name);
bool exists(mystring name);
- response set(const vpwentry*, bool onlyadd, mystring maildir = "");
+ response set(const vpwentry*, bool onlyadd);
response chattr(mystring user, unsigned attr, mystring newval);
response chattr(const vpwentry*, unsigned attr, mystring newval);
response deluser(mystring name, bool del_mailbox);
@@ -51,6 +51,7 @@
static const unsigned ATTR_EXPIRY = 7;
static const unsigned ATTR_MAILBOX_ENABLED = 8;
static const unsigned ATTR_PERSONAL = 9;
+ static const unsigned ATTR_HAS_MAILBOX = 10;
};
#endif // VMAILMGR__VDOMAIN__H__
--- a/lib/vpwentry/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -11,5 +11,6 @@
from_old.cc \
from_ver1.cc \
from_ver2.cc \
+ new.cc \
to.cc \
vpwentry.cc
--- a/lib/vpwentry/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -85,7 +87,7 @@
INCLUDES = -I..
EXTRA_DIST = vpwentry.h
-libvpwentry_a_SOURCES = auth.cc decode.cc defaults.cc export_env.cc from.cc from_old.cc from_ver1.cc from_ver2.cc to.cc vpwentry.cc
+libvpwentry_a_SOURCES = auth.cc decode.cc defaults.cc export_env.cc from.cc from_old.cc from_ver1.cc from_ver2.cc new.cc to.cc vpwentry.cc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config.h
@@ -99,7 +101,7 @@
LIBS = @LIBS@
libvpwentry_a_LIBADD =
libvpwentry_a_OBJECTS = auth.o decode.o defaults.o export_env.o from.o \
-from_old.o from_ver1.o from_ver2.o to.o vpwentry.o
+from_old.o from_ver1.o from_ver2.o new.o to.o vpwentry.o
AR = ar
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -110,7 +112,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libvpwentry_a_SOURCES)
OBJECTS = $(libvpwentry_a_OBJECTS)
@@ -216,9 +218,6 @@
defaults.o: defaults.cc ../../config.h vpwentry.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
../misc/strlist.h ../config/configrc.h
-disable.o: disable.cc ../../config.h vpwentry.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../misc/stat_fns.h
export_env.o: export_env.cc ../../config.h vpwentry.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../misc/strlist.h ../misc/exec.h \
@@ -229,16 +228,15 @@
from_old.o: from_old.cc ../../config.h vpwentry.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
../misc/strlist.h
-from_uint.o: from_uint.cc ../../config.h ../misc/strtou.h
from_ver1.o: from_ver1.cc ../../config.h vpwentry.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../misc/strlist.h
from_ver2.o: from_ver2.cc ../../config.h vpwentry.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../misc/strlist.h
-is_enabled.o: is_enabled.cc ../../config.h vpwentry.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../misc/strlist.h ../misc/stat_fns.h
+new.o: new.cc ../../config.h vpwentry.h ../mystring/mystring.h \
+ ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
+ ../misc/strlist.h
to.o: to.cc ../../config.h vpwentry.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
../misc/strlist.h ../misc/utoa.h ../vdomain/vdomain.h \
@@ -270,7 +268,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/vpwentry/decode.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/decode.cc Sun Jan 20 00:22:09 2008 +0100
@@ -38,6 +38,9 @@
return 0;
bool value = *(unsigned char*)ptr++;
switch(flag) {
+ case vdomain::ATTR_HAS_MAILBOX:
+ has_mailbox = value;
+ break;
case vdomain::ATTR_MAILBOX_ENABLED:
is_mailbox_enabled = value;
break;
@@ -54,8 +57,10 @@
ptr += pass.length() + 1;
if(ptr >= end) return 0;
- mailbox = ptr;
- ptr += mailbox.length() + 1;
+ directory = ptr;
+ if(!directory)
+ has_mailbox = false;
+ ptr += directory.length() + 1;
if(ptr >= end) return 0;
const char* start = ptr;
--- a/lib/vpwentry/export_env.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/export_env.cc Sun Jan 20 00:22:09 2008 +0100
@@ -27,7 +27,7 @@
bool vpwentry::export_env() const
{
return presetenv("VUSER=", name) == 0 &&
- presetenv("MAILDIR=", mailbox) == 0 &&
+ presetenv("MAILDIR=", directory) == 0 &&
presetenv("VUSER_CTIME=", ctime) == 0 &&
presetenv("VUSER_EXPIRY=", expiry) == 0 &&
presetenv("VUSER_MSGCOUNT=", msgcount) == 0 &&
@@ -35,6 +35,7 @@
presetenv("VUSER_PERSONAL=", personal) == 0 &&
presetenv("VUSER_HARDQUOTA=", hardquota) == 0 &&
presetenv("VUSER_SOFTQUOTA=", softquota) == 0 &&
+ presetenv("VUSER_HAS_MAILBOX=", has_mailbox) == 0 &&
presetenv("VUSER_MAILBOX_ENABLED=", is_mailbox_enabled) == 0;
//for(mystring_iter iter(data.str(), '\0'); iter; ++iter)
// presetenv("VUSER_"+...+"=", *iter);
--- a/lib/vpwentry/from_old.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/from_old.cc Sun Jan 20 00:22:09 2008 +0100
@@ -28,13 +28,15 @@
pass = text.sub(1, end-passptr);
++end;
if(*end == '.' || *end == '/') {
- mailbox = end;
+ has_mailbox = true;
+ directory = end;
forwards = 0;
}
else {
if(*end == '&')
++end;
- mailbox = 0;
+ has_mailbox = false;
+ directory = 0;
forwards = end;
forwards = forwards.subst(',', '\0');
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/vpwentry/new.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,29 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "vpwentry.h"
+
+vpwentry* vpwentry::new_from_record(const mystring& name,
+ const mystring& text)
+{
+ vpwentry* v = new vpwentry;
+ if(!v->from_record(name, text)) {
+ delete v;
+ v = 0;
+ }
+ return v;
+}
--- a/lib/vpwentry/to.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/to.cc Sun Jan 20 00:22:09 2008 +0100
@@ -27,13 +27,15 @@
if(!!forwards)
f = forwards + mystring::NUL;
char flagstmp[] = {
+ vdomain::ATTR_HAS_MAILBOX,
+ has_mailbox && !!directory,
vdomain::ATTR_MAILBOX_ENABLED,
is_mailbox_enabled,
0
};
- mystring flags(flagstmp, 3);
+ mystring flags(flagstmp, 5);
return prefix + flags + pass + mystring::NUL +
- mailbox + mystring::NUL +
+ directory + mystring::NUL +
f + mystring::NUL +
personal + mystring::NUL +
utoa(hardquota) + mystring::NUL +
--- a/lib/vpwentry/vpwentry.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/vpwentry.cc Sun Jan 20 00:22:09 2008 +0100
@@ -18,15 +18,16 @@
#include "vpwentry.h"
vpwentry::vpwentry()
- : is_mailbox_enabled(true)
+ : has_mailbox(true), is_mailbox_enabled(true)
{
}
vpwentry::vpwentry(const mystring& n, const mystring& p,
- const mystring& m, const mystring& f)
- : name(n), pass(p), mailbox(m), forwards(f),
- is_mailbox_enabled(true)
+ const mystring& d, const mystring& f, bool m)
+ : name(n), pass(p), directory(d), forwards(f),
+ has_mailbox(m), is_mailbox_enabled(true)
{
+ set_defaults(true, true);
}
vpwentry::~vpwentry()
--- a/lib/vpwentry/vpwentry.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwentry/vpwentry.h Sun Jan 20 00:22:09 2008 +0100
@@ -15,10 +15,12 @@
bool from_ver2_record(const mystring& text);
bool from_old_record(const mystring& text);
+ void set_defaults(bool ctime_now, bool set_flags);
+
public:
mystring name;
mystring pass;
- mystring mailbox;
+ mystring directory;
mystring forwards;
mystring personal;
unsigned hardquota;
@@ -27,11 +29,18 @@
unsigned msgcount;
unsigned ctime;
unsigned expiry;
+ bool has_mailbox;
bool is_mailbox_enabled;
// keystrlist data;
+private:
vpwentry();
- vpwentry(const mystring&, const mystring&, const mystring&, const mystring&);
+
+public:
+ static vpwentry* new_from_record(const mystring& name, const mystring& text);
+
+ vpwentry(const mystring&, const mystring&, const mystring&, const mystring&,
+ bool);
~vpwentry();
//mystring get(const mystring& var) const { return data.get(var); }
@@ -40,10 +49,8 @@
// return data.set(var, val);
// }
- void set_defaults(bool ctime_now, bool set_flags);
+ bool authenticate(const mystring& phrase) const;
- bool authenticate(const mystring& phrase) const;
-
bool from_record(const mystring& name, const mystring& text);
mystring to_record() const;
--- a/lib/vpwtable/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -7,12 +7,14 @@
cdb_getbyname.cc \
cdb_put.cc \
cdb_read.cc \
+ cdb_write.cc \
gdbm_vpwtable.cc \
gdbm_del.cc \
gdbm_exists.cc \
gdbm_getbyname.cc \
gdbm_put.cc \
- gdbm_read.cc
+ gdbm_read.cc \
+ gdbm_write.cc
if VPWTABLE_CDB
CDBSOURCES = \
@@ -21,7 +23,8 @@
cdb_exists.cc \
cdb_getbyname.cc \
cdb_put.cc \
- cdb_read.cc
+ cdb_read.cc \
+ cdb_write.cc
else
CDBSOURCES =
endif
@@ -33,10 +36,11 @@
gdbm_exists.cc \
gdbm_getbyname.cc \
gdbm_put.cc \
- gdbm_read.cc
+ gdbm_read.cc \
+ gdbm_write.cc
else
GDBMSOURCES =
endif
libvpwtable_a_SOURCES = $(CDBSOURCES) $(GDBMSOURCES) \
- reader.cc
+ reader.cc writer.cc
--- a/lib/vpwtable/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -83,14 +85,14 @@
noinst_LIBRARIES = libvpwtable.a
INCLUDES = -I..
-EXTRA_DIST = vpwtable.h cdb_vpwtable.cc cdb_del.cc cdb_exists.cc cdb_getbyname.cc cdb_put.cc cdb_read.cc gdbm_vpwtable.cc gdbm_del.cc gdbm_exists.cc gdbm_getbyname.cc gdbm_put.cc gdbm_read.cc
+EXTRA_DIST = vpwtable.h cdb_vpwtable.cc cdb_del.cc cdb_exists.cc cdb_getbyname.cc cdb_put.cc cdb_read.cc cdb_write.cc gdbm_vpwtable.cc gdbm_del.cc gdbm_exists.cc gdbm_getbyname.cc gdbm_put.cc gdbm_read.cc gdbm_write.cc
-@VPWTABLE_CDB_TRUE@CDBSOURCES = cdb_vpwtable.cc cdb_del.cc cdb_exists.cc cdb_getbyname.cc cdb_put.cc cdb_read.cc
+@VPWTABLE_CDB_TRUE@CDBSOURCES = cdb_vpwtable.cc cdb_del.cc cdb_exists.cc cdb_getbyname.cc cdb_put.cc cdb_read.cc cdb_write.cc
@VPWTABLE_CDB_FALSE@CDBSOURCES =
-@VPWTABLE_GDBM_TRUE@GDBMSOURCES = gdbm_vpwtable.cc gdbm_del.cc gdbm_exists.cc gdbm_getbyname.cc gdbm_put.cc gdbm_read.cc
+@VPWTABLE_GDBM_TRUE@GDBMSOURCES = gdbm_vpwtable.cc gdbm_del.cc gdbm_exists.cc gdbm_getbyname.cc gdbm_put.cc gdbm_read.cc gdbm_write.cc
@VPWTABLE_GDBM_FALSE@GDBMSOURCES =
-libvpwtable_a_SOURCES = $(CDBSOURCES) $(GDBMSOURCES) reader.cc
+libvpwtable_a_SOURCES = $(CDBSOURCES) $(GDBMSOURCES) reader.cc writer.cc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../../config.h
@@ -103,23 +105,26 @@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libvpwtable_a_LIBADD =
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@libvpwtable_a_OBJECTS = \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@cdb_vpwtable.o cdb_del.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@cdb_exists.o cdb_getbyname.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@cdb_put.o cdb_read.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@gdbm_vpwtable.o gdbm_del.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@gdbm_exists.o gdbm_getbyname.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_TRUE@gdbm_put.o gdbm_read.o reader.o
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_FALSE@libvpwtable_a_OBJECTS = \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_FALSE@cdb_vpwtable.o cdb_del.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_FALSE@cdb_exists.o cdb_getbyname.o \
-@VPWTABLE_CDB_TRUE@@VPWTABLE_GDBM_FALSE@cdb_put.o cdb_read.o reader.o
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_TRUE@libvpwtable_a_OBJECTS = \
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_TRUE@gdbm_vpwtable.o gdbm_del.o \
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_TRUE@gdbm_exists.o gdbm_getbyname.o \
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_TRUE@gdbm_put.o gdbm_read.o reader.o
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_FALSE@libvpwtable_a_OBJECTS = \
-@VPWTABLE_CDB_FALSE@@VPWTABLE_GDBM_FALSE@reader.o
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_FALSE@libvpwtable_a_OBJECTS = \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_FALSE@gdbm_vpwtable.o gdbm_del.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_FALSE@gdbm_exists.o gdbm_getbyname.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_FALSE@gdbm_put.o gdbm_read.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_FALSE@gdbm_write.o reader.o writer.o
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_TRUE@libvpwtable_a_OBJECTS = \
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_TRUE@cdb_vpwtable.o cdb_del.o \
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_TRUE@cdb_exists.o cdb_getbyname.o \
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_TRUE@cdb_put.o cdb_read.o \
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_TRUE@cdb_write.o reader.o writer.o
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_FALSE@libvpwtable_a_OBJECTS = \
+@VPWTABLE_GDBM_FALSE@@VPWTABLE_CDB_FALSE@reader.o writer.o
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@libvpwtable_a_OBJECTS = \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@cdb_vpwtable.o cdb_del.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@cdb_exists.o cdb_getbyname.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@cdb_put.o cdb_read.o cdb_write.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@gdbm_vpwtable.o gdbm_del.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@gdbm_exists.o gdbm_getbyname.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@gdbm_put.o gdbm_read.o \
+@VPWTABLE_GDBM_TRUE@@VPWTABLE_CDB_TRUE@gdbm_write.o reader.o writer.o
AR = ar
CXXFLAGS = @CXXFLAGS@
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -130,7 +135,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libvpwtable_a_SOURCES)
OBJECTS = $(libvpwtable_a_OBJECTS)
@@ -235,11 +240,6 @@
../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h \
../cdb++/cdb++.h ../cdb++/datum.h ../fdbuf/fdbuf.h \
../fdbuf/fdibuf.h ../fdbuf/fdobuf.h
-cdb_get.o: cdb_get.cc ../../config.h ../misc/autodelete.h \
- ../cdb++/cdb++.h ../mystring/mystring.h ../mystring/rep.h \
- ../mystring/iter.h ../mystring/join.h ../cdb++/datum.h \
- ../fdbuf/fdbuf.h ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h vpwtable.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
cdb_getbyname.o: cdb_getbyname.cc ../../config.h vpwtable.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h \
@@ -260,62 +260,17 @@
../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h \
../vdomain/vdomain.h ../config/configrc.h ../misc/pwentry.h \
../vpwtable/vpwtable.h ../misc/response.h
-del.o: del.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h ../cdb++/cdb++.h \
- ../cdb++/datum.h ../fdbuf/fdbuf.h ../fdbuf/fdibuf.h \
- ../fdbuf/fdobuf.h
-exists.o: exists.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h ../cdb++/cdb++.h \
- ../cdb++/datum.h ../fdbuf/fdbuf.h ../fdbuf/fdibuf.h \
- ../fdbuf/fdobuf.h
-gdbm_del.o: gdbm_del.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_exists.o: gdbm_exists.cc ../../config.h vpwtable.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_get.o: gdbm_get.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_getbyname.o: gdbm_getbyname.cc ../../config.h vpwtable.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_put.o: gdbm_put.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_read.o: gdbm_read.cc ../../config.h vpwtable.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h
-gdbm_vpwtable.o: gdbm_vpwtable.cc ../../config.h vpwtable.h \
+cdb_write.o: cdb_write.cc ../../config.h vpwtable.h \
../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
../mystring/join.h ../misc/strlist.h ../vpwentry/vpwentry.h \
- ../vdomain/vdomain.h ../config/configrc.h ../misc/pwentry.h \
- ../vpwtable/vpwtable.h ../misc/response.h
-get.o: get.cc ../../config.h ../misc/autodelete.h ../cdb++/cdb++.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../cdb++/datum.h ../fdbuf/fdbuf.h \
- ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h vpwtable.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
-getbyname.o: getbyname.cc ../../config.h ../cdb++/cdb++.h \
- ../mystring/mystring.h ../mystring/rep.h ../mystring/iter.h \
- ../mystring/join.h ../cdb++/datum.h ../fdbuf/fdbuf.h \
- ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h vpwtable.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h
-put.o: put.cc ../../config.h vpwtable.h ../mystring/mystring.h \
- ../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h ../cdb++/cdb++.h \
- ../cdb++/datum.h ../fdbuf/fdbuf.h ../fdbuf/fdibuf.h \
- ../fdbuf/fdobuf.h
+ ../cdb++/cdb++.h ../cdb++/datum.h ../fdbuf/fdbuf.h \
+ ../fdbuf/fdibuf.h ../fdbuf/fdobuf.h
reader.o: reader.cc ../../config.h vpwtable.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
../misc/strlist.h ../vpwentry/vpwentry.h
-vpwtable.o: vpwtable.cc ../../config.h vpwtable.h ../mystring/mystring.h \
+writer.o: writer.cc ../../config.h vpwtable.h ../mystring/mystring.h \
../mystring/rep.h ../mystring/iter.h ../mystring/join.h \
- ../misc/strlist.h ../vpwentry/vpwentry.h ../vdomain/vdomain.h \
- ../config/configrc.h ../misc/pwentry.h ../vpwtable/vpwtable.h \
- ../misc/response.h
+ ../misc/strlist.h ../vpwentry/vpwentry.h
info-am:
info: info-am
@@ -339,7 +294,7 @@
all-am: Makefile $(LIBRARIES)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/lib/vpwtable/cdb_getbyname.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/cdb_getbyname.cc Sun Jan 20 00:22:09 2008 +0100
@@ -23,11 +23,7 @@
datum* d = cdb_getrec(filename, name.lower());
if(!d)
return 0;
- vpwentry v;
- if(!v.from_record(name, d->data)) {
- delete d;
- return 0;
- }
+ vpwentry* v = vpwentry::new_from_record(name, d->data);
delete d;
- return new vpwentry(v);
+ return v;
}
--- a/lib/vpwtable/cdb_read.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/cdb_read.cc Sun Jan 20 00:22:09 2008 +0100
@@ -28,7 +28,7 @@
cdb_vpwtable_reader(const mystring& filename);
~cdb_vpwtable_reader();
bool operator!() const;
- bool get(vpwentry& out);
+ vpwentry* get();
bool rewind();
bool end();
};
@@ -63,12 +63,10 @@
return !!cdb && cdb.firstrec();
}
-bool cdb_vpwtable_reader::get(vpwentry& out)
+vpwentry* cdb_vpwtable_reader::get()
{
autodelete<datum> rec = cdb.nextrec();
if(!rec)
- return false;
- if(!out.from_record(rec->key, rec->data))
- return false;
- return true;
+ return 0;
+ return vpwentry::new_from_record(rec->key, rec->data);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/vpwtable/cdb_write.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,79 @@
+// Copyright (C) 2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "vpwtable.h"
+#include <stdlib.h>
+#include <unistd.h>
+#include "cdb++/cdb++.h"
+
+class cdb_vpwtable_writer : public vpwtable_writer
+{
+private:
+ const mystring& tmpname;
+ const mystring& cdbname;
+ cdb_writer out;
+ bool opened;
+public:
+ cdb_vpwtable_writer(const mystring& filename);
+ ~cdb_vpwtable_writer();
+ bool operator!() const;
+ bool put(const vpwentry& vpw);
+ bool end();
+ bool abort();
+};
+
+vpwtable_writer* vpwtable::start_write() const
+{
+ return new cdb_vpwtable_writer(filename);
+}
+
+cdb_vpwtable_writer::cdb_vpwtable_writer(const mystring& filename)
+ : tmpname(filename + ".tmp"), cdbname(filename),
+ out(filename, 0600), opened(true)
+{
+}
+
+cdb_vpwtable_writer::~cdb_vpwtable_writer()
+{
+ end();
+}
+
+bool cdb_vpwtable_writer::operator!() const
+{
+ return opened;
+}
+
+bool cdb_vpwtable_writer::put(const vpwentry& vpw)
+{
+ return out.put(vpw.name.lower(), vpw.to_record());
+}
+
+bool cdb_vpwtable_writer::end()
+{
+ if(!opened)
+ return false;
+ opened = false;
+ return out.end(cdbname);
+}
+
+bool cdb_vpwtable_writer::abort()
+{
+ if(!opened)
+ return false;
+ opened = false;
+ return unlink(tmpname.c_str()) == 0;
+}
--- a/lib/vpwtable/gdbm_getbyname.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/gdbm_getbyname.cc Sun Jan 20 00:22:09 2008 +0100
@@ -27,8 +27,5 @@
datum key = { (char*)lower.c_str(), lower.length() };
datum result = gdbm_fetch(db, key);
gdbm_close(db);
- vpwentry v;
- if(!v.from_record(name, mystring(result.dptr, result.dsize)))
- return 0;
- return new vpwentry(v);
+ return vpwentry::new_from_record(name, mystring(result.dptr, result.dsize));
}
--- a/lib/vpwtable/gdbm_read.cc Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/gdbm_read.cc Sun Jan 20 00:22:09 2008 +0100
@@ -28,7 +28,7 @@
gdbm_vpwtable_reader(const mystring& filename);
~gdbm_vpwtable_reader();
bool operator!() const;
- bool get(vpwentry& out);
+ vpwentry* get();
bool rewind();
bool end();
};
@@ -77,17 +77,16 @@
return false;
}
-bool gdbm_vpwtable_reader::get(vpwentry& out)
+vpwentry* gdbm_vpwtable_reader::get()
{
+ vpwentry* v = 0;
if(key.dptr) {
mystring name(key.dptr, key.dsize);
datum rec = gdbm_fetch(dbf, key);
mystring result(rec.dptr, rec.dsize);
free(rec.dptr);
- if(!out.from_record(name, result))
- return false;
+ v = vpwentry::new_from_record(name, result);
key = gdbm_nextkey(dbf, key);
- return true;
}
- return false;
+ return v;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/vpwtable/gdbm_write.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,86 @@
+// Copyright (C) 1999,2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include <errno.h>
+#include "vpwtable.h"
+#include <gdbm.h>
+
+class gdbm_vpwtable_writer : public vpwtable_writer
+{
+private:
+ const mystring& tmpname;
+ const mystring& destname;
+ GDBM_FILE out;
+ bool opened;
+public:
+ gdbm_vpwtable_writer(const mystring& filename);
+ ~gdbm_vpwtable_writer();
+ bool operator!() const;
+ bool put(const vpwentry& vpw);
+ bool end();
+ bool abort();
+};
+
+vpwtable_writer* vpwtable::start_write() const
+{
+ return new gdbm_vpwtable_writer(filename);
+}
+
+gdbm_vpwtable_writer::gdbm_vpwtable_writer(const mystring& filename)
+ : tmpname(filename + ".tmp"), destname(filename),
+ out(gdbm_open((char*)filename.c_str(), 0, GDBM_NEWDB|GDBM_FAST, 0600, 0)),
+ opened(true)
+{
+}
+
+gdbm_vpwtable_writer::~gdbm_vpwtable_writer()
+{
+ end();
+}
+
+bool gdbm_vpwtable_writer::operator!() const
+{
+ return opened;
+}
+
+bool gdbm_vpwtable_writer::put(const vpwentry& vpw)
+{
+ mystring name = vpw->name.lower();
+ datum key = { (char*)name.c_str(), name.length() };
+ mystring binary = vpw->to_record();
+ datum data = { (char*)binary.c_str(), binary.length() };
+ return gdbm_store(out, key, data, GDBM_INSERT) == 0;
+}
+
+bool gdbm_vpwtable_writer::end()
+{
+ if(!opened)
+ return false;
+ gdbm_sync(out);
+ opened = false;
+ return gdbm_close(out) == 0 &&
+ rename(tmpname.c_str(), destname.c_str()) == 0;
+}
+
+bool gdbm_vpwtable_writer::abort()
+{
+ if(!opened)
+ return false;
+ opened = false;
+ gdbm_close(out);
+ return unlink(tmpname.c_str()) == 0;
+}
--- a/lib/vpwtable/vpwtable.h Sun Jan 20 00:12:17 2008 +0100
+++ b/lib/vpwtable/vpwtable.h Sun Jan 20 00:22:09 2008 +0100
@@ -12,11 +12,21 @@
public:
virtual ~vpwtable_reader();
virtual bool operator!() const = 0;
- virtual bool get(vpwentry& out) = 0;
+ virtual vpwentry* get() = 0;
virtual bool rewind() = 0;
virtual bool end() = 0;
};
+class vpwtable_writer
+{
+public:
+ virtual ~vpwtable_writer();
+ virtual bool operator!() const = 0;
+ virtual bool put(const vpwentry& vpw) = 0;
+ virtual bool end() = 0;
+ virtual bool abort() = 0;
+};
+
class vpwtable
{
private:
@@ -28,7 +38,8 @@
~vpwtable();
vpwtable_reader* start_read() const;
-
+ vpwtable_writer* start_write() const;
+
vpwentry* getbyname(const mystring& name) const;
bool exists(const mystring& name) const;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/vpwtable/writer.cc Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,22 @@
+// Copyright (C) 2000 Bruce Guenter <bruceg@em.ca>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#include <config.h>
+#include "vpwtable.h"
+
+vpwtable_writer::~vpwtable_writer()
+{
+}
--- a/missing Sun Jan 20 00:12:17 2008 +0100
+++ b/missing Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,14 @@
exit 1
fi
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.in; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
case "$1" in
-h|--h|--he|--hel|--help)
@@ -58,10 +66,10 @@
exit 1
;;
- aclocal)
+ aclocal*)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acinclude.m4' or \`configure.in'. You might want
+ you modified \`acinclude.m4' or \`$configure_ac'. You might want
to install the \`Automake' and \`Perl' packages. Grab them from
any GNU archive site."
touch aclocal.m4
@@ -70,7 +78,7 @@
autoconf)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`configure.in'. You might want to install the
+ you modified \`$configure_ac'. You might want to install the
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
archive site."
touch configure
@@ -79,10 +87,10 @@
autoheader)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`acconfig.h' or \`configure.in'. You might want
+ you modified \`acconfig.h' or \`$configure_ac'. You might want
to install the \`Autoconf' and \`GNU m4' packages. Grab them
from any GNU archive site."
- files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac`
test -z "$files" && files="config.h"
touch_files=
for f in $files; do
@@ -95,10 +103,10 @@
touch $touch_files
;;
- automake)
+ automake*)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+ you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'.
You might want to install the \`Automake' and \`Perl' packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
--- a/php/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/php/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -93,7 +95,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -165,7 +167,7 @@
all-am: Makefile $(DATA)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(phpdir)
--- a/php/vmail.inc Sun Jan 20 00:12:17 2008 +0100
+++ b/php/vmail.inc Sun Jan 20 00:22:09 2008 +0100
@@ -65,7 +65,7 @@
if ($length == 0) {
while (!feof($vmailsock))
- $out=fread($vmailsock, 65535);
+ $out.=fread($vmailsock, 65535);
fclose($vmailsock);
return $out;
}
--- a/python/Makefile.am Sun Jan 20 00:12:17 2008 +0100
+++ b/python/Makefile.am Sun Jan 20 00:22:09 2008 +0100
@@ -26,6 +26,6 @@
types.pyo: types.py local.py
.py.pyc:
- python -c 'import $*'
+ python -c 'import $*' && touch $@
.py.pyo:
- python -O -c 'import $*'
+ python -O -c 'import $*' && touch $@
--- a/python/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/python/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -99,7 +101,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -171,7 +173,7 @@
all-am: Makefile $(DATA)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(pythonlibdir)
@@ -229,9 +231,9 @@
types.pyo: types.py local.py
.py.pyc:
- python -c 'import $*'
+ python -c 'import $*' && touch $@
.py.pyo:
- python -O -c 'import $*'
+ python -O -c 'import $*' && touch $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
--- a/python/commands.py Sun Jan 20 00:12:17 2008 +0100
+++ b/python/commands.py Sun Jan 20 00:22:09 2008 +0100
@@ -36,10 +36,11 @@
users.append(types.NamedVUser(username, types.VUser(data)))
return users
-def adduser(domain, newuser, password, newpass, maildir=None, forwards=[]):
- return daemon.execute('adduser2',
+def adduser(domain, newuser, password, newpass,
+ maildir=None, has_mailbox=None, forwards=[]):
+ return daemon.execute('adduser3',
(domain, newuser, password, newpass,
- maildir or '') + tuple(forwards))
+ maildir or '', has_mailbox or '') + tuple(forwards))
def lookup(domain, username, password):
return types.VUser(execute('lookup', domain, username, password))
--- a/python/daemon.py Sun Jan 20 00:12:17 2008 +0100
+++ b/python/daemon.py Sun Jan 20 00:22:09 2008 +0100
@@ -28,8 +28,9 @@
def encode_int(i):
return chr((i/256)%256) + chr(i%256)
-def encode_str(str):
- return encode_int(len(str)) + str
+def encode_str(s):
+ s = str(s)
+ return encode_int(len(s)) + s
class Command:
def __init__(self, name, args):
@@ -59,7 +60,10 @@
reply = self.socket.recv(3)
code = ord(reply[0])
msglen = ord(reply[1])*256 + ord(reply[2])
- message = self.socket.recv(msglen)
+ if msglen:
+ message = self.socket.recv(msglen)
+ else:
+ message = ""
except:
return (econn, 'Server aborted the connection')
return (code, message)
--- a/scripts/Makefile.in Sun Jan 20 00:12:17 2008 +0100
+++ b/scripts/Makefile.in Sun Jan 20 00:22:09 2008 +0100
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4a from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -46,10 +46,9 @@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -58,12 +57,15 @@
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
CC = @CC@
-CDBPROGS = @CDBPROGS@
-CDBSCRIPTS = @CDBSCRIPTS@
CXX = @CXX@
+HAVE_LIB = @HAVE_LIB@
HTML2TXT = @HTML2TXT@
+LIB = @LIB@
LN = @LN@
+LTLIB = @LTLIB@
LYNX = @LYNX@
MAKEINFO = @MAKEINFO@
MKDIR = @MKDIR@
@@ -91,7 +93,7 @@
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -144,7 +146,7 @@
all-am: Makefile
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs:
--- a/vmailmgr-0.96.9.spec Sun Jan 20 00:12:17 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-Name: vmailmgr
-Version: 0.96.9
-Release: 1
-Group: Utilities/System
-URL: http://www.vmailmgr.org/
-Copyright: GPL
-Source: http://www.vmailmgr.org/archive/%{PACKAGE_VERSION}/vmailmgr-%{PACKAGE_VERSION}.tar.gz
-Summary: Simple virtualizing POP3 password interface
-Packager: Bruce Guenter <bruceg@em.ca>
-Buildroot: /tmp/vmailmgr
-Obsoletes: checkvpw
-
-%description
-Vmailmgr provides a virtualizing password-checking interface to
-qmail-pop3d as well as both a delivery agent to automatically delivery
-mail within a virtual domain and a set of tools to manage such a domain.
-
-%package cgi
-Summary: CGI applications for vmailmgr
-Group: Utilities/System
-Requires: vmailmgr-daemon = %{PACKAGE_VERSION}
-%description cgi
-This package contains CGI applications to allow web-based administration
-of vmailmgr systems.
-
-%package courier-imap
-Summary: Vmailmgr authentication module for Courier IMAP
-Requires: courier-imap
-Group: Utilities/System
-%description courier-imap
-This package contains the vmailmgr authentication module to be used by
-Courier IMAP.
-
-%package daemon
-Summary: Vmailmgr daemon for CGIs
-Requires: supervise-scripts >= 2.2
-Requires: ucspi-unix
-Group: Utilities/System
-%description daemon
-This package contains the vmailmgrd daemon that provides virtual domain
-manipulation services to support unprivileged clients like CGIs.
-
-%package php
-Summary: PHP include files
-Group: Development/Libraries
-%description php
-This package contains the include files necessary to call VMailMgr
-functions from PHP.
-
-%package python
-Summary: Python library for accessing VMailMgr
-Group: Development/Libraries
-Requires: python >= 1.5
-%description python
-This package contains the Python library code necessary to call VMailMgr
-
-%prep
-%setup
-CFLAGS="$RPM_OPT_FLAGS" \
-CXXFLAGS="$RPM_OPT_FLAGS" \
-LDFLAGS="-s" \
-./configure --prefix=/usr
-
-%build
-make all
-make all
-
-%install
-rm -rf $RPM_BUILD_ROOT
-for dir in var/service/vmailmgrd/log var/log/vmailmgrd \
- etc/rc.d/init.d etc/rc.d/rc{0,1,2,3,4,5,6}.d etc/vmailmgr
-do
- mkdir -p $RPM_BUILD_ROOT/$dir
-done
-make prefix=$RPM_BUILD_ROOT/usr \
- cgidir=$RPM_BUILD_ROOT/home/httpd/cgi-bin \
- pythonlibdir=$RPM_BUILD_ROOT/usr/lib/python1.5/vmailmgr \
- phpdir=$RPM_BUILD_ROOT/home/httpd/php \
- install-strip
-install -m 755 scripts/vmailmgrd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/vmailmgrd
-install -m 755 scripts/vmailmgrd.run $RPM_BUILD_ROOT/var/service/vmailmgrd/run
-install -m 755 scripts/vmailmgrd-log.run $RPM_BUILD_ROOT/var/service/vmailmgrd/log/run
-pushd $RPM_BUILD_ROOT/etc/rc.d
-ln -s ../init.d/vmailmgrd rc0.d/K35vmailmgrd
-ln -s ../init.d/vmailmgrd rc1.d/K35vmailmgrd
-ln -s ../init.d/vmailmgrd rc2.d/S65vmailmgrd
-ln -s ../init.d/vmailmgrd rc3.d/S65vmailmgrd
-ln -s ../init.d/vmailmgrd rc4.d/S65vmailmgrd
-ln -s ../init.d/vmailmgrd rc5.d/S65vmailmgrd
-ln -s ../init.d/vmailmgrd rc6.d/K35vmailmgrd
-popd
-pushd $RPM_BUILD_ROOT/etc/vmailmgr
-echo users >user-dir
-echo passwd >password-file
-echo ./Maildir/ >default-maildir
-echo maildir >maildir-arg-str
-echo /var/service/vmailmgrd/socket >socket-file
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-if [ $# -eq 2 -a -f /etc/vmailmgr.conf ]; then
- vconf2dir /etc/vmailmgr.conf /etc/vmailmgr
-fi
-
-%files
-%defattr(-,root,root)
-%doc AUTHORS ChangeLog COPYING NEWS TODO doc/ChangeLog* doc/YEAR2000
-%doc doc/*.txt */*.html doc/*.sgml
-%doc scripts/autoresponder.sh
-%dir /etc/vmailmgr
-%config(missingok,noreplace) %verify(user,group,mode) /etc/vmailmgr/*
-/usr/bin/*
-/usr/man/man1/*
-/usr/man/man7/*
-/usr/man/man8/*
-
-%files cgi
-%defattr(-,root,root)
-%doc cgi/*.html
-/home/httpd/cgi-bin/listvdomain
-/home/httpd/cgi-bin/vaddalias
-/home/httpd/cgi-bin/vadduser
-/home/httpd/cgi-bin/vchattr
-/home/httpd/cgi-bin/vchforwards
-/home/httpd/cgi-bin/vdeluser
-/home/httpd/cgi-bin/vpasswd
-
-%files courier-imap
-%defattr(-,root,root)
-/usr/lib/courier-imap/libexec/authlib/*
-
-%files daemon
-%defattr(-,root,root)
-%config /etc/rc.d/init.d/vmailmgrd
-%config /etc/rc.d/rc?.d/*vmailmgrd
-/usr/sbin/vmailmgrd
-%attr(1755,root,root) %dir /var/service/vmailmgrd
-%dir /var/service/vmailmgrd/log
-/var/service/vmailmgrd/log/run
-/var/service/vmailmgrd/run
-%attr(0700,root,root) /var/log/vmailmgrd
-
-%files php
-%defattr(-,root,root)
-%doc php/vmail.features
-/home/httpd/php/*
-
-%files python
-%defattr(-,root,root)
-/usr/lib/python1.5/vmailmgr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vmailmgr-0.97.spec Sun Jan 20 00:22:09 2008 +0100
@@ -0,0 +1,152 @@
+Name: vmailmgr
+Version: 0.97
+Release: 1
+Group: Utilities/System
+URL: http://www.vmailmgr.org/
+Copyright: GPL
+Source: http://www.vmailmgr.org/archive/%{PACKAGE_VERSION}/vmailmgr-%{PACKAGE_VERSION}.tar.gz
+Summary: Simple virtualizing POP3 password interface
+Packager: Bruce Guenter <bruceg@em.ca>
+Buildroot: %{_tmppath}/vmailmgr
+Obsoletes: checkvpw
+
+%description
+Vmailmgr provides a virtualizing password-checking interface to
+qmail-pop3d as well as both a delivery agent to automatically delivery
+mail within a virtual domain and a set of tools to manage such a domain.
+
+%package cgi
+Summary: CGI applications for vmailmgr
+Group: Utilities/System
+Requires: vmailmgr-daemon = %{PACKAGE_VERSION}
+%description cgi
+This package contains CGI applications to allow web-based administration
+of vmailmgr systems.
+
+%package courier-imap
+Summary: Vmailmgr authentication module for Courier IMAP
+Requires: courier-imap
+Group: Utilities/System
+%description courier-imap
+This package contains the vmailmgr authentication module to be used by
+Courier IMAP.
+
+%package daemon
+Summary: Vmailmgr daemon for CGIs
+Requires: supervise-scripts >= 2.2
+Requires: ucspi-unix
+Group: Utilities/System
+%description daemon
+This package contains the vmailmgrd daemon that provides virtual domain
+manipulation services to support unprivileged clients like CGIs.
+
+%package php
+Summary: PHP include files
+Group: Development/Libraries
+%description php
+This package contains the include files necessary to call VMailMgr
+functions from PHP.
+
+%package python
+Summary: Python library for accessing VMailMgr
+Group: Development/Libraries
+Requires: python >= 1.5
+%description python
+This package contains the Python library code necessary to call VMailMgr
+
+%prep
+%setup
+CFLAGS="$RPM_OPT_FLAGS" \
+CXXFLAGS="$RPM_OPT_FLAGS" \
+LDFLAGS="-s" \
+./configure --prefix=/usr
+
+%build
+make all
+make all
+
+%install
+rm -rf $RPM_BUILD_ROOT
+for dir in var/service/vmailmgrd/log var/log/vmailmgrd \
+ etc/rc.d/init.d etc/rc.d/rc{0,1,2,3,4,5,6}.d etc/vmailmgr
+do
+ mkdir -p $RPM_BUILD_ROOT/$dir
+done
+make prefix=$RPM_BUILD_ROOT/usr \
+ cgidir=$RPM_BUILD_ROOT/home/httpd/cgi-bin \
+ pythonlibdir=$RPM_BUILD_ROOT/usr/lib/python1.5/vmailmgr \
+ phpdir=$RPM_BUILD_ROOT/home/httpd/php \
+ install-strip
+install -m 755 scripts/vmailmgrd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/vmailmgrd
+install -m 755 scripts/vmailmgrd.run $RPM_BUILD_ROOT/var/service/vmailmgrd/run
+install -m 755 scripts/vmailmgrd-log.run $RPM_BUILD_ROOT/var/service/vmailmgrd/log/run
+pushd $RPM_BUILD_ROOT/etc/rc.d
+ln -s ../init.d/vmailmgrd rc0.d/K35vmailmgrd
+ln -s ../init.d/vmailmgrd rc1.d/K35vmailmgrd
+ln -s ../init.d/vmailmgrd rc2.d/S65vmailmgrd
+ln -s ../init.d/vmailmgrd rc3.d/S65vmailmgrd
+ln -s ../init.d/vmailmgrd rc4.d/S65vmailmgrd
+ln -s ../init.d/vmailmgrd rc5.d/S65vmailmgrd
+ln -s ../init.d/vmailmgrd rc6.d/K35vmailmgrd
+popd
+pushd $RPM_BUILD_ROOT/etc/vmailmgr
+echo users >user-dir
+echo passwd >password-file
+echo ./Maildir/ >default-maildir
+echo maildir >maildir-arg-str
+echo /var/service/vmailmgrd/socket >socket-file
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post
+if [ $# -eq 2 -a -f /etc/vmailmgr.conf ]; then
+ vconf2dir /etc/vmailmgr.conf /etc/vmailmgr
+fi
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS ChangeLog COPYING NEWS TODO doc/ChangeLog* doc/YEAR2000
+%doc doc/*.txt doc/*.html commands/*.html authenticate/*.html daemon/*.html
+%doc scripts/autoresponder.sh
+%dir /etc/vmailmgr
+%config(missingok,noreplace) %verify(user,group,mode) /etc/vmailmgr/*
+/usr/bin/*
+/usr/man/man1/*
+/usr/man/man7/*
+/usr/man/man8/*
+
+%files cgi
+%defattr(-,root,root)
+%doc cgi/*.html
+/home/httpd/cgi-bin/listvdomain
+/home/httpd/cgi-bin/vaddalias
+/home/httpd/cgi-bin/vadduser
+/home/httpd/cgi-bin/vchattr
+/home/httpd/cgi-bin/vchforwards
+/home/httpd/cgi-bin/vdeluser
+/home/httpd/cgi-bin/vpasswd
+
+%files courier-imap
+%defattr(-,root,root)
+/usr/lib/courier-imap/libexec/authlib/*
+
+%files daemon
+%defattr(-,root,root)
+%config /etc/rc.d/init.d/vmailmgrd
+%config /etc/rc.d/rc?.d/*vmailmgrd
+/usr/sbin/vmailmgrd
+%attr(1755,root,root) %dir /var/service/vmailmgrd
+%dir /var/service/vmailmgrd/log
+/var/service/vmailmgrd/log/run
+/var/service/vmailmgrd/run
+%attr(0700,root,root) /var/log/vmailmgrd
+
+%files php
+%defattr(-,root,root)
+%doc php/vmail.features
+/home/httpd/php/*
+
+%files python
+%defattr(-,root,root)
+/usr/lib/python1.5/vmailmgr