v1.4
This commit is contained in:
parent
258f872d39
commit
446ba5e515
14
ChangeLog
14
ChangeLog
@ -1,6 +1,20 @@
|
||||
E-MailRelay Change Log
|
||||
======================
|
||||
|
||||
1.3.3 -> 1.4
|
||||
------------
|
||||
* POP3 server (enable with "--pop", disable at build-time with "./configure --disable-pop").
|
||||
* Fix for logging reentrancy bug (affects "./configure --enable-debug" with "--debug").
|
||||
* Fix to ensure sockets are always non-blocking (affects "--scanner").
|
||||
* Allow "--verifier" scripts to reject addresses with a temporary "4xx" error code.
|
||||
* Automatic re-reading of secrets files.
|
||||
* Write to the Windows event log even if no write access to the registry.
|
||||
* Modification of set-group-id policy if not started as root.
|
||||
* Better checking of spool directory access on startup.
|
||||
* New "emailrelay-submit.sh" example script for submitting messages for "--pop-by-name".
|
||||
* The "--dont-listen" switch is now "--no-smtp".
|
||||
* Better IPv6 support (Linux only).
|
||||
|
||||
1.3.2 -> 1.3.3
|
||||
--------------
|
||||
* No bind() for outgoing connections [bug-id 1051689].
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
|
17
Makefile.in
17
Makefile.in
@ -107,10 +107,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -121,6 +125,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -143,11 +148,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -178,7 +179,7 @@ all: config.h
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -205,9 +206,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
config.h: stamp-h1
|
||||
@ -219,7 +220,7 @@ config.h: stamp-h1
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
12
README
12
README
@ -14,6 +14,8 @@ Because of its functional simplicity E-MailRelay is easy to configure, typically
|
||||
only requiring the address of the target SMTP server to be put on the command
|
||||
line.
|
||||
|
||||
E-MailRelay can also run as a POP3 server.
|
||||
|
||||
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
|
||||
Distribution is under the GNU General Public License.
|
||||
|
||||
@ -45,10 +47,14 @@ And then to forward the spooled mail to "smarthost" run somthing like this:
|
||||
|
||||
emailrelay --as-client smarthost:smtp --spool-dir $HOME/tmp
|
||||
|
||||
You can also have an E-MailRelay storage daemon forward spooled e-mails
|
||||
periodically by using the "--poll" switch.
|
||||
To run E-MailRelay as a POP server without SMTP you can use a command like this:
|
||||
|
||||
By default E-MailRelay will reject connections from remote machines. To
|
||||
emailrelay --pop --no-smtp --log --close-stderr
|
||||
|
||||
The "emailrelay-submit" utility can be used to put messages straight into the
|
||||
spool directory.
|
||||
|
||||
By default E-MailRelay will always reject connections from remote machines. To
|
||||
allow connections from anywhere use the "--remote-clients" switch.
|
||||
|
||||
For more information on the command-line options refer to the reference guide
|
||||
|
103
acinclude.m4
103
acinclude.m4
@ -1,4 +1,4 @@
|
||||
dnl Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
dnl Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU General Public License
|
||||
@ -37,6 +37,69 @@ AC_DEFUN([ACLOCAL_TYPE_SOCKLEN_T],
|
||||
fi
|
||||
])
|
||||
|
||||
dnl ipv6
|
||||
dnl
|
||||
AC_DEFUN([ACLOCAL_CHECK_IPV6],
|
||||
[AC_CACHE_CHECK([for ipv6], aclocal_cv_ipv6,
|
||||
[
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>],
|
||||
[sockaddr_in6 * p = 0;],
|
||||
aclocal_cv_ipv6=yes ,
|
||||
aclocal_cv_ipv6=no )
|
||||
])
|
||||
if test $aclocal_cv_ipv6 = yes; then
|
||||
AC_DEFINE(HAVE_IPV6,1,[Define if ipv6 is available])
|
||||
else
|
||||
AC_DEFINE(HAVE_IPV6,0,[Define if ipv6 is available])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl getipnodebyname for ipv6 rfc2553
|
||||
dnl
|
||||
AC_DEFUN([ACLOCAL_CHECK_GETIPNODEBYNAME],
|
||||
[AC_CACHE_CHECK([for getipnodebyname], aclocal_cv_getipnodebyname,
|
||||
[
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>],
|
||||
[int i=0; getipnodebyname("",AF_INET6,AI_DEFAULT,&i);],
|
||||
aclocal_cv_getipnodebyname=yes ,
|
||||
aclocal_cv_getipnodebyname=no )
|
||||
])
|
||||
if test $aclocal_cv_getipnodebyname = yes; then
|
||||
AC_DEFINE(HAVE_GETIPNODEBYNAME,1,[Define if getipnodebyname() is available])
|
||||
else
|
||||
AC_DEFINE(HAVE_GETIPNODEBYNAME,0,[Define if getipnodebyname() is available])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl check for sin6_len in sockaddr_in6
|
||||
dnl
|
||||
AC_DEFUN([ACLOCAL_CHECK_SIN6_LEN],
|
||||
[AC_CACHE_CHECK([for sin6_len], aclocal_cv_sin6_len,
|
||||
[
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>],
|
||||
[struct sockaddr_in6 s; s.sin6_len = 1;],
|
||||
aclocal_cv_sin6_len=yes ,
|
||||
aclocal_cv_sin6_len=no )
|
||||
])
|
||||
if test $aclocal_cv_sin6_len = yes; then
|
||||
AC_DEFINE(HAVE_SIN6_LEN,1,[Define if sockaddr_in6 has a sin6_len member])
|
||||
else
|
||||
AC_DEFINE(HAVE_SIN6_LEN,0,[Define if sockaddr_in6 has a sin6_len member])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl setgroups
|
||||
dnl
|
||||
AC_DEFUN([ACLOCAL_CHECK_SETGROUPS],
|
||||
@ -152,6 +215,38 @@ then
|
||||
fi
|
||||
])
|
||||
|
||||
dnl enable-pop
|
||||
dnl
|
||||
AC_DEFUN([ENABLE_POP],
|
||||
[
|
||||
if test "$enable_pop" = "no"
|
||||
then
|
||||
POPLIB="libgnopop.a"
|
||||
else
|
||||
POPLIB="libgpop.a"
|
||||
fi
|
||||
AC_SUBST(POPLIB)
|
||||
])
|
||||
|
||||
dnl enable-ipv6
|
||||
dnl
|
||||
AC_DEFUN([ENABLE_IPV6],
|
||||
[
|
||||
if test "$enable_ipv6" = "yes"
|
||||
then
|
||||
if test "$aclocal_cv_ipv6" != "yes"
|
||||
then
|
||||
AC_MSG_WARN(ignoring --enable-ipv6)
|
||||
IP="ipv4"
|
||||
else
|
||||
IP="ipv6"
|
||||
fi
|
||||
else
|
||||
IP="ipv4"
|
||||
fi
|
||||
AC_SUBST(IP)
|
||||
])
|
||||
|
||||
dnl with-workshop
|
||||
dnl
|
||||
AC_DEFUN([WITH_WORKSHOP],
|
||||
@ -172,7 +267,7 @@ if test "$with_doxygen" != ""
|
||||
then
|
||||
if test "$with_doxygen" = "yes" -a "$HAVE_DOXYGEN" != "yes"
|
||||
then
|
||||
echo ignoring --with-doxygen
|
||||
AC_MSG_WARN(ignoring --with-doxygen)
|
||||
else
|
||||
HAVE_DOXYGEN="$with_doxygen"
|
||||
AC_SUBST(HAVE_DOXYGEN)
|
||||
@ -188,7 +283,7 @@ if test "$with_man2html" != ""
|
||||
then
|
||||
if test "$with_man2html" = "yes" -a "$HAVE_MAN2HTML" != "yes"
|
||||
then
|
||||
echo ignoring --with-man2html
|
||||
AC_MSG_WARN(ignoring --with-man2html)
|
||||
else
|
||||
HAVE_MAN2HTML="$with_man2html"
|
||||
AC_SUBST(HAVE_MAN2HTML)
|
||||
@ -218,7 +313,7 @@ AC_DEFUN([FHS_COMPLIANCE],
|
||||
sbindir='/usr/sbin'
|
||||
libexecdir='/usr/lib'
|
||||
localstatedir='/var'
|
||||
mandir='/usr/man'
|
||||
mandir='/usr/share/man'
|
||||
datadir='/usr/share'
|
||||
sysconfdir='/etc'
|
||||
#
|
||||
|
40
aclocal.m4
vendored
40
aclocal.m4
vendored
@ -603,6 +603,46 @@ fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Add --enable-maintainer-mode option to configure.
|
||||
# From Jim Meyering
|
||||
|
||||
# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
|
||||
# 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
|
||||
# 02111-1307, USA.
|
||||
|
||||
# serial 3
|
||||
|
||||
AC_DEFUN([AM_MAINTAINER_MODE],
|
||||
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
||||
dnl maintainer-mode is disabled by default
|
||||
AC_ARG_ENABLE(maintainer-mode,
|
||||
[ --enable-maintainer-mode enable make rules and dependencies not useful
|
||||
(and sometimes confusing) to the casual installer],
|
||||
USE_MAINTAINER_MODE=$enableval,
|
||||
USE_MAINTAINER_MODE=no)
|
||||
AC_MSG_RESULT([$USE_MAINTAINER_MODE])
|
||||
AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
|
||||
MAINT=$MAINTAINER_MODE_TRUE
|
||||
AC_SUBST(MAINT)dnl
|
||||
]
|
||||
)
|
||||
|
||||
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
@ -18,11 +18,11 @@
|
||||
##
|
||||
#
|
||||
|
||||
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh
|
||||
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh emailrelay-submit.sh_
|
||||
noinst_cleanup = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh
|
||||
noinst_SCRIPTS = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
|
||||
e_init_SCRIPTS = emailrelay
|
||||
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh
|
||||
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh emailrelay-submit.sh
|
||||
work_scripts = txt2mu.sh mu2html.sh expand.sh txt2html.sh emailrelay.sh
|
||||
|
||||
CLEANFILES = $(noinst_cleanup) $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)
|
||||
@ -32,7 +32,7 @@ TESTS = emailrelay-test.sh
|
||||
SUFFIXES = .sh_ .sh
|
||||
|
||||
.sh_.sh:
|
||||
cat $(srcdir)/../bin/$*.sh_ | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${e_sbindir}%g" > $*.tmp && mv $*.tmp $*.sh
|
||||
cat $(srcdir)/../bin/$*.sh_ | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${sbindir}%g" > $*.tmp && mv $*.tmp $*.sh
|
||||
chmod ugo+x $*.sh
|
||||
|
||||
emailrelay: emailrelay.sh
|
||||
@ -43,6 +43,7 @@ install-data-local: install-e_examplesDATA install-e_initSCRIPTS
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-notify.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-resubmit.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-deliver.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-submit.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-process.sh
|
||||
|
||||
uninstall-local:
|
||||
|
@ -89,10 +89,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -103,6 +107,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -125,11 +130,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -147,11 +148,11 @@ sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh
|
||||
EXTRA_DIST = emailrelay-doxygen-filter.sh_ emailrelay-test.sh_ emailrelay-soak.sh_ emailrelay.sh_ txt2html.sh_ txt2mu.sh_ mu2html.sh_ expand.sh_ emailrelay-notify.sh_ emailrelay-resubmit.sh_ emailrelay-deliver.sh_ emailrelay-process.sh_ emailrelay-runperl.js emailrelay-resubmit.js fastbuild.sh emailrelay-submit.sh_
|
||||
noinst_cleanup = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh
|
||||
noinst_SCRIPTS = emailrelay-doxygen-filter.sh emailrelay-test.sh emailrelay-soak.sh emailrelay-runperl.js emailrelay-resubmit.js
|
||||
e_init_SCRIPTS = emailrelay
|
||||
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh
|
||||
e_examples_DATA = emailrelay-process.sh emailrelay-notify.sh emailrelay-deliver.sh emailrelay-resubmit.sh emailrelay-submit.sh
|
||||
work_scripts = txt2mu.sh mu2html.sh expand.sh txt2html.sh emailrelay.sh
|
||||
CLEANFILES = $(noinst_cleanup) $(e_init_SCRIPTS) $(e_examples_DATA) $(work_scripts)
|
||||
TESTS = emailrelay-test.sh
|
||||
@ -160,7 +161,7 @@ all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .sh_ .sh
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -185,9 +186,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-e_initSCRIPTS: $(e_init_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
@ -428,7 +429,7 @@ uninstall-am: uninstall-e_examplesDATA uninstall-e_initSCRIPTS \
|
||||
|
||||
|
||||
.sh_.sh:
|
||||
cat $(srcdir)/../bin/$*.sh_ | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${e_sbindir}%g" > $*.tmp && mv $*.tmp $*.sh
|
||||
cat $(srcdir)/../bin/$*.sh_ | sed "s%__SPOOL_DIR__%${e_spooldir}%g;s%__SBIN_DIR__%${sbindir}%g" > $*.tmp && mv $*.tmp $*.sh
|
||||
chmod ugo+x $*.sh
|
||||
|
||||
emailrelay: emailrelay.sh
|
||||
@ -439,6 +440,7 @@ install-data-local: install-e_examplesDATA install-e_initSCRIPTS
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-notify.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-resubmit.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-deliver.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-submit.sh
|
||||
chmod ugo+x $(DESTDIR)$(e_examplesdir)/emailrelay-process.sh
|
||||
|
||||
uninstall-local:
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -21,7 +21,17 @@
|
||||
#
|
||||
# emailrelay-soak.sh
|
||||
#
|
||||
# Soak tests the E-MailRelay system.
|
||||
# Soak tests the E-MailRelay system to check for large
|
||||
# memory leaks.
|
||||
#
|
||||
# It starts two servers, with a proxy fronting onto one
|
||||
# of them, then in a loop it creates a large message file
|
||||
# and runs a client to fowrard it to both servers in
|
||||
# turn.
|
||||
#
|
||||
# Use 'ps' to check for large leaks.
|
||||
#
|
||||
# Files are created under a sub-directory of /tmp.
|
||||
#
|
||||
# usage: emailrelay-soak.sh [<exe>]
|
||||
#
|
||||
@ -129,10 +139,12 @@ RunServer()
|
||||
fi
|
||||
|
||||
mkdir -p "${spool_dir}"
|
||||
set -x
|
||||
${exe} ${as_server} --port ${port} --spool-dir ${spool_dir} \
|
||||
--pid-file ${pid_file} \
|
||||
--server-auth ${auth_file} \
|
||||
--admin `expr ${port} + 100` --forward-to localhost:smtp --no-syslog 2> "${log}"
|
||||
set +x
|
||||
}
|
||||
|
||||
RunProxy()
|
||||
@ -149,11 +161,13 @@ RunProxy()
|
||||
fi
|
||||
|
||||
mkdir -p "${spool_dir}"
|
||||
set -x
|
||||
${exe} ${as_proxy} ${to_address} --port ${port} --spool-dir ${spool_dir} \
|
||||
--pid-file ${pid_file} \
|
||||
--server-auth ${auth_file} \
|
||||
--client-auth ${auth_file} \
|
||||
--admin `expr ${port} + 100` --no-syslog 2> "${log}"
|
||||
set +x
|
||||
}
|
||||
|
||||
Init()
|
||||
|
114
bin/emailrelay-submit.sh_
Normal file
114
bin/emailrelay-submit.sh_
Normal file
@ -0,0 +1,114 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
#
|
||||
# ===
|
||||
#
|
||||
# emailrelay-submit.sh
|
||||
#
|
||||
# An example wrapper script for the "emailrelay-submit"
|
||||
# utility that adds the capability of copying messages
|
||||
# into multiple subdirectories (eg. for "pop-by-name")
|
||||
# based on the message content.
|
||||
#
|
||||
# Edit as required.
|
||||
#
|
||||
# Reads the message content from the standard input.
|
||||
# All output goes to a log file.
|
||||
#
|
||||
# usage: emailrelay-submit.sh
|
||||
#
|
||||
|
||||
store="__SPOOL_DIR__"
|
||||
log="/var/log/emailrelay-submit.out"
|
||||
awk="awk" # nawk
|
||||
|
||||
tmp="/tmp/`basename $0.$$.tmp`"
|
||||
trap "rm -f ${tmp} 2>/dev/null ; exit 0" 0
|
||||
trap "rm -f ${tmp} 2>/dev/null ; exit 1" 1 2 3 13 15
|
||||
|
||||
List()
|
||||
{
|
||||
# Maps from the given "To:" address to a spool subdirectory -- edit as required
|
||||
to_="${1}"
|
||||
to_="`echo \"${to_}\" | tr '[A-Z]' '[a-z]'`"
|
||||
case "${to_}" in
|
||||
me@*) echo me_1 me_2 ;;
|
||||
other@*) echo other_1 other_2 ;;
|
||||
*) echo postmaster ;;
|
||||
esac
|
||||
}
|
||||
|
||||
Create()
|
||||
{
|
||||
# Creates a spool subdirectory if it doesnt already exist
|
||||
dir_="${1}"
|
||||
if test ! -f "${dir_}"
|
||||
then
|
||||
echo `basename $0`: creating directory \"${dir_}\"
|
||||
mkdir "${dir_}"
|
||||
chown root:daemon "${dir_}"
|
||||
chmod 775 "${dir_}"
|
||||
fi
|
||||
}
|
||||
|
||||
Main()
|
||||
{
|
||||
# take a copy of the content
|
||||
cat > ${tmp}
|
||||
|
||||
# parse out the "To:" address
|
||||
to="`head -500 \"${tmp}\" | grep '^To:' | ${awk} '{print $2}'`"
|
||||
echo `basename $0`: to \"${to}\"
|
||||
|
||||
# submit the message into the main spool directory
|
||||
content="`cat \"${tmp}\" | ${sbin}emailrelay-submit --verbose --spool-dir \"${store}\" \"${to}\"`"
|
||||
envelope="`echo ${content} | sed 's/content/envelope/'`"
|
||||
if test \! -f "${content}"
|
||||
then
|
||||
echo `basename $0`: emailrelay-submit failed >&2
|
||||
trap "" 0 # leave it in /tmp
|
||||
return
|
||||
fi
|
||||
|
||||
# link & copy into subdirectories
|
||||
copied="0"
|
||||
for name in `List "${to}"` ""
|
||||
do
|
||||
if test "${name}" != ""
|
||||
then
|
||||
Create "${store}/${name}"
|
||||
|
||||
c="${store}/${name}/`basename \"${content}\"`"
|
||||
e="${store}/${name}/`basename \"${envelope}\"`"
|
||||
|
||||
ln "${content}" "${c}" && cp -p "${envelope}" "${e}"
|
||||
if test "$?" -ne 0 ; then return ; fi
|
||||
copied="1"
|
||||
fi
|
||||
done
|
||||
|
||||
# delete from the main directory
|
||||
if test "${copied}" -eq 1
|
||||
then
|
||||
rm -f "${envelope}" && rm -f "${content}"
|
||||
fi
|
||||
}
|
||||
|
||||
Main "$@" >> "${log}" 2>&1
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -36,7 +36,9 @@
|
||||
# messages in store-4 which server-5 is continuously polling.
|
||||
# Server-5 forwards messages that appear in store-4 to
|
||||
# server-6 using a client preprocessor. Server-6 stores messages
|
||||
# in store-5 using a server preprocessor.
|
||||
# in store-5 using a server preprocessor. If using fetchmail
|
||||
# then fetchmail extracts messages from server-6 and sends them
|
||||
# on to server-7 which stores them in store-6.
|
||||
#
|
||||
# The test succeeds if the message gets into the final spool directory.
|
||||
#
|
||||
@ -45,27 +47,32 @@
|
||||
#
|
||||
# If this test takes more a minute then it has failed.
|
||||
#
|
||||
# usage: emailrelay-test.sh [-v] [-d] [-n] [<exe-dir> [<content-file>]]
|
||||
# usage: emailrelay-test.sh [-v] [-f] [-d] [-n] [<exe-dir> [<content-file>]]
|
||||
# -v use valgrind
|
||||
# -f use fetchmail
|
||||
# -d use --debug
|
||||
# -n no cleanup
|
||||
# -s smaller content
|
||||
#
|
||||
|
||||
# parse the command line
|
||||
#
|
||||
opt_use_valgrind="0"
|
||||
opt_use_fetchmail="0"
|
||||
opt_smaller="0"
|
||||
opt_debug="0"
|
||||
opt_no_cleanup="0"
|
||||
while getopts 'vdn' opt ; do
|
||||
while getopts 'vfdns' opt ; do
|
||||
case "$opt" in
|
||||
v) opt_use_valgrind="1" ;;
|
||||
d) opt_use_debug="1" ;;
|
||||
f) opt_use_fetchmail="1" ;;
|
||||
s) opt_smaller="1" ;;
|
||||
d) opt_debug="1" ;;
|
||||
n) opt_no_cleanup="1" ;;
|
||||
esac
|
||||
done
|
||||
shift `expr $OPTIND - 1`
|
||||
opt_exe_dir="${1}"
|
||||
opt_content_file="${2}"
|
||||
|
||||
# configuration
|
||||
#
|
||||
@ -75,7 +82,6 @@ cfg_exe_dir="../src/main" ; test -z "${opt_exe_dir}" || cfg_exe_dir="${opt_exe_d
|
||||
cfg_main_exe="${cfg_exe_dir}/emailrelay"
|
||||
cfg_poke_exe="${cfg_exe_dir}/emailrelay-poke"
|
||||
cfg_null_filter="/bin/touch" ; test -f ${cfg_null_filter} || cfg_null_filter="/usr/bin/touch"
|
||||
cfg_content_file="/etc/services" ; test -z "${opt_content_file}" || cfg_content_file="${opt_content_file}"
|
||||
cfg_pp="201" # port-prefix
|
||||
cfg_base_dir="/tmp/`basename $0`.$$.tmp"
|
||||
cfg_summary_log="/tmp/`basename $0`.out"
|
||||
@ -109,6 +115,10 @@ Cleanup()
|
||||
${cfg_poke_exe} ${cfg_pp}14 terminate
|
||||
${cfg_poke_exe} ${cfg_pp}15 terminate
|
||||
${cfg_poke_exe} ${cfg_pp}16 terminate
|
||||
if test "${opt_use_fetchmail}" -eq 1
|
||||
then
|
||||
${cfg_poke_exe} ${cfg_pp}17 terminate
|
||||
fi
|
||||
sleep 2
|
||||
|
||||
kill `cat ${cfg_base_dir}/pid-* 2>/dev/null`
|
||||
@ -148,6 +158,8 @@ RunServer()
|
||||
pidfile_="${5}"
|
||||
extra_="${6}"
|
||||
|
||||
pop_port_="`expr ${port_} + 80`"
|
||||
|
||||
mkdir -p ${cfg_base_dir}/${spool_}
|
||||
${cfg_run} ${cfg_main_exe} ${cfg_sw_extra} ${cfg_sw_debug} \
|
||||
--log --verbose --no-syslog \
|
||||
@ -155,6 +167,8 @@ RunServer()
|
||||
--spool-dir ${cfg_base_dir}/${spool_} \
|
||||
--admin ${cfg_pp}${admin_port_} \
|
||||
--admin-terminate \
|
||||
--pop --pop-port ${cfg_pp}${pop_port_} \
|
||||
--pop-auth ${cfg_base_dir}/pop.auth \
|
||||
--pid-file ${cfg_base_dir}/${pidfile_} \
|
||||
${extra_} 2> ${cfg_base_dir}/${log_} &
|
||||
}
|
||||
@ -173,6 +187,18 @@ RunClient()
|
||||
--spool-dir ${cfg_base_dir}/${spool_} 2> ${cfg_base_dir}/${log_}
|
||||
}
|
||||
|
||||
RunFetchmail()
|
||||
{
|
||||
pop_port_="${1}"
|
||||
smtp_port_="${2}"
|
||||
|
||||
cfg_=${cfg_base_dir}/fetchmailrc
|
||||
echo poll localhost username me password secret > ${cfg_}
|
||||
chmod 700 ${cfg_}
|
||||
|
||||
fetchmail -f ${cfg_} --verbose --protocol APOP --port ${cfg_pp}${pop_port_} --smtphost localhost/${cfg_pp}${smtp_port_} localhost > ${cfg_base_dir}/log-fetchmail 2>&1
|
||||
}
|
||||
|
||||
RunPoke()
|
||||
{
|
||||
port_="${1}"
|
||||
@ -186,8 +212,16 @@ Content()
|
||||
echo "To: recipient-1@f.q.d.n, recipient-2@f.q.d.n"
|
||||
echo "Subject: test message 1"
|
||||
echo "From: sender"
|
||||
echo " "
|
||||
cat "${cfg_content_file}"
|
||||
echo " " | tr -d ' '
|
||||
if test "${opt_smaller}" -eq 1
|
||||
then
|
||||
cat $0
|
||||
else
|
||||
cat $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0
|
||||
cat $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0
|
||||
cat $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0
|
||||
cat $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0 $0
|
||||
fi
|
||||
}
|
||||
|
||||
Envelope()
|
||||
@ -256,6 +290,9 @@ CreateAuth()
|
||||
file="${cfg_base_dir}/client-joe.auth"
|
||||
echo "# client-joe.auth" > ${file}
|
||||
echo "CRAM-MD5 client joe ${key}" >> ${file}
|
||||
|
||||
file="${cfg_base_dir}/pop.auth"
|
||||
echo "APOP server me secret" >> ${file}
|
||||
}
|
||||
|
||||
CreateFilter()
|
||||
@ -299,7 +336,7 @@ Main()
|
||||
CreateFilter
|
||||
CreateMessages
|
||||
|
||||
RunServer 01 10 store-2 log-1 pid-1
|
||||
RunServer 01 11 store-2 log-1 pid-1
|
||||
RunServer 02 12 store-2 log-2 pid-2 "--forward-to localhost:${cfg_pp}03 --client-auth ${cfg_base_dir}/client-joe.auth"
|
||||
RunServer 03 13 store-3 log-3 pid-3 "--immediate --forward-to localhost:${cfg_pp}04 --filter ${cfg_null_filter} --client-auth ${cfg_base_dir}/client-fred.auth --server-auth ${cfg_base_dir}/server.auth"
|
||||
RunServer 04 14 store-4 log-4 pid-4 "--server-auth ${cfg_base_dir}/server.auth"
|
||||
@ -307,7 +344,7 @@ Main()
|
||||
RunServer 06 16 store-5 log-6 pid-6 "--filter ${cfg_base_dir}/filter.sh"
|
||||
|
||||
Wait
|
||||
RunClient localhost:${cfg_pp}01 store-1 log-c pid-7
|
||||
RunClient localhost:${cfg_pp}01 store-1 log-c pid-c
|
||||
RunPoke 12 log-p
|
||||
|
||||
success="0"
|
||||
@ -320,7 +357,21 @@ Main()
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if test "${success}" -eq 1 -a "${opt_use_fetchmail}" -eq 1
|
||||
then
|
||||
success="0"
|
||||
RunServer 07 17 store-6 log-7 pid-7
|
||||
Wait
|
||||
RunFetchmail 86 07
|
||||
if TestDone store-6
|
||||
then
|
||||
success="1"
|
||||
fi
|
||||
fi
|
||||
|
||||
ReportResults "${success}"
|
||||
test "${success}" -ne 0
|
||||
}
|
||||
|
||||
Main
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -50,7 +50,8 @@
|
||||
# LSB comment block...
|
||||
#
|
||||
# The bogus 345 run-levels are a workround for a buggy RedHat chkconfig which
|
||||
# reads the LSB comment block (incorrectly) as an undocumented 'feature'.
|
||||
# reads the LSB comment block as an undocumented 'feature' and then parses it
|
||||
# wrongly.
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: emailrelay
|
||||
@ -90,7 +91,7 @@ pid_file="${var_run}/emailrelay.pid"
|
||||
PATH="${PATH}:/sbin:/bin:/usr/bin"
|
||||
cfg_file="/etc/emailrelay.conf"
|
||||
|
||||
# server configuration
|
||||
# server configuration using the config file
|
||||
#
|
||||
start_switches="--as-server --pid-file ${pid_file} `cat \"${cfg_file}\" 2>/dev/null | egrep -v '^#|^ *$' | sed 's/^/--/'`"
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -211,6 +211,12 @@ Main()
|
||||
# item lines separated with 'ignore' patterns are
|
||||
# treated as being contiguous.
|
||||
#
|
||||
# Eg: Number foo bar
|
||||
# foo,1: first line
|
||||
# ignore,bar:
|
||||
# foo,2: second line
|
||||
# foo-end:
|
||||
#
|
||||
Number()
|
||||
{
|
||||
${awk} -v item_tag="${1}" -v ignore_1="${2}" -v ignore_2="${3}" -v ignore_3="${4}" -v ignore_4="${5}" '
|
||||
|
@ -7,6 +7,9 @@
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
|
||||
/* Define if getipnodebyname() is available */
|
||||
#undef HAVE_GETIPNODEBYNAME
|
||||
|
||||
/* Define to 1 if you have the `glob' function. */
|
||||
#undef HAVE_GLOB
|
||||
|
||||
@ -16,6 +19,9 @@
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if ipv6 is available */
|
||||
#undef HAVE_IPV6
|
||||
|
||||
/* Define if localtime_r in time.h */
|
||||
#undef HAVE_LOCALTIME_R
|
||||
|
||||
@ -28,6 +34,9 @@
|
||||
/* Define if setgroups is available */
|
||||
#undef HAVE_SETGROUPS
|
||||
|
||||
/* Define if sockaddr_in6 has a sin6_len member */
|
||||
#undef HAVE_SIN6_LEN
|
||||
|
||||
/* Define if socklen_t type definition in sys/socket.h */
|
||||
#undef HAVE_SOCKLEN_T
|
||||
|
||||
|
334
configure
vendored
334
configure
vendored
@ -309,7 +309,7 @@ ac_includes_default="\
|
||||
# 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 CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE RANLIB ac_ct_RANLIB MAKE AR GZIP HAVE_DOXYGEN HAVE_MAN2HTML COMPILER_VERSION CPP EGREP e_sbindir e_libexecdir e_sysconfdir e_docdir e_initdir e_spooldir e_man1dir e_examplesdir LIBOBJS LTLIBOBJS'
|
||||
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 CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE RANLIB ac_ct_RANLIB MAKE AR GZIP HAVE_DOXYGEN HAVE_MAN2HTML COMPILER_VERSION CPP EGREP POPLIB IP e_docdir e_initdir e_spooldir e_examplesdir LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files=''
|
||||
|
||||
# Initialize some variables set by options.
|
||||
@ -853,20 +853,28 @@ if test -n "$ac_init_help"; then
|
||||
Optional Features:
|
||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||
--enable-maintainer-mode enable make rules and dependencies not useful
|
||||
(and sometimes confusing) to the casual installer
|
||||
--disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors
|
||||
--enable-debug enable extra debug messages at compile-time
|
||||
--enable-fastbuild enable experimental faster building; requires
|
||||
--enable-debug enable extra debug messages at compile-time (default
|
||||
disabled)
|
||||
--enable-fastbuild enable faster building (default disabled); requires
|
||||
--disable-dependency-tracking
|
||||
--enable-pop enable pop server code (default enabled)
|
||||
--enable-ipv6 enable ipv6 (default disabled)
|
||||
--enable-fhs force FHS-compliant directories, ignoring --prefix
|
||||
etc
|
||||
etc (default disabled)
|
||||
|
||||
Optional Packages:
|
||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
||||
--with-workshop use Sun WorkShop 'CC -xar' as the 'ar' tool
|
||||
--with-workshop use Sun WorkShop 'CC -xar' as the 'ar' tool (default
|
||||
disabled)
|
||||
--with-doxygen generate source code documentation with doxygen
|
||||
--with-man2html convert man pages to html using man2html
|
||||
(default auto)
|
||||
--with-man2html convert man pages to html using man2html (default
|
||||
auto)
|
||||
|
||||
Some influential environment variables:
|
||||
CC C compiler command
|
||||
@ -1616,7 +1624,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE=emailrelay
|
||||
VERSION=1.3.3
|
||||
VERSION=1.4
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@ -1744,6 +1752,30 @@ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
|
||||
|
||||
ac_config_headers="$ac_config_headers config.h"
|
||||
|
||||
echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
|
||||
echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
|
||||
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
|
||||
if test "${enable_maintainer_mode+set}" = set; then
|
||||
enableval="$enable_maintainer_mode"
|
||||
USE_MAINTAINER_MODE=$enableval
|
||||
else
|
||||
USE_MAINTAINER_MODE=no
|
||||
fi;
|
||||
echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
|
||||
echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
|
||||
|
||||
|
||||
if test $USE_MAINTAINER_MODE = yes; then
|
||||
MAINTAINER_MODE_TRUE=
|
||||
MAINTAINER_MODE_FALSE='#'
|
||||
else
|
||||
MAINTAINER_MODE_TRUE='#'
|
||||
MAINTAINER_MODE_FALSE=
|
||||
fi
|
||||
|
||||
MAINT=$MAINTAINER_MODE_TRUE
|
||||
|
||||
|
||||
|
||||
ac_ext=c
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
@ -5325,6 +5357,222 @@ _ACEOF
|
||||
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for ipv6" >&5
|
||||
echo $ECHO_N "checking for ipv6... $ECHO_C" >&6
|
||||
if test "${aclocal_cv_ipv6+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/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
sockaddr_in6 * p = 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_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
|
||||
aclocal_cv_ipv6=yes
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
aclocal_cv_ipv6=no
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $aclocal_cv_ipv6" >&5
|
||||
echo "${ECHO_T}$aclocal_cv_ipv6" >&6
|
||||
if test $aclocal_cv_ipv6 = yes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_IPV6 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_IPV6 0
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for getipnodebyname" >&5
|
||||
echo $ECHO_N "checking for getipnodebyname... $ECHO_C" >&6
|
||||
if test "${aclocal_cv_getipnodebyname+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/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
int i=0; getipnodebyname("",AF_INET6,AI_DEFAULT,&i);
|
||||
;
|
||||
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
|
||||
aclocal_cv_getipnodebyname=yes
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
aclocal_cv_getipnodebyname=no
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $aclocal_cv_getipnodebyname" >&5
|
||||
echo "${ECHO_T}$aclocal_cv_getipnodebyname" >&6
|
||||
if test $aclocal_cv_getipnodebyname = yes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_GETIPNODEBYNAME 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_GETIPNODEBYNAME 0
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for sin6_len" >&5
|
||||
echo $ECHO_N "checking for sin6_len... $ECHO_C" >&6
|
||||
if test "${aclocal_cv_sin6_len+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/socket.h>
|
||||
#include <netinet/in.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct sockaddr_in6 s; s.sin6_len = 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_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
|
||||
aclocal_cv_sin6_len=yes
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
aclocal_cv_sin6_len=no
|
||||
fi
|
||||
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $aclocal_cv_sin6_len" >&5
|
||||
echo "${ECHO_T}$aclocal_cv_sin6_len" >&6
|
||||
if test $aclocal_cv_sin6_len = yes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_SIN6_LEN 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_SIN6_LEN 0
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking for buggy ctime" >&5
|
||||
echo $ECHO_N "checking for buggy ctime... $ECHO_C" >&6
|
||||
if test "${aclocal_cv_buggy_ctime+set}" = set; then
|
||||
@ -5636,6 +5884,43 @@ then
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --enable-pop or --disable-pop was given.
|
||||
if test "${enable_pop+set}" = set; then
|
||||
enableval="$enable_pop"
|
||||
|
||||
fi;
|
||||
|
||||
if test "$enable_pop" = "no"
|
||||
then
|
||||
POPLIB="libgnopop.a"
|
||||
else
|
||||
POPLIB="libgpop.a"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Check whether --enable-ipv6 or --disable-ipv6 was given.
|
||||
if test "${enable_ipv6+set}" = set; then
|
||||
enableval="$enable_ipv6"
|
||||
|
||||
fi;
|
||||
|
||||
if test "$enable_ipv6" = "yes"
|
||||
then
|
||||
if test "$aclocal_cv_ipv6" != "yes"
|
||||
then
|
||||
{ echo "$as_me:$LINENO: WARNING: ignoring --enable-ipv6" >&5
|
||||
echo "$as_me: WARNING: ignoring --enable-ipv6" >&2;}
|
||||
IP="ipv4"
|
||||
else
|
||||
IP="ipv6"
|
||||
fi
|
||||
else
|
||||
IP="ipv4"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
# Check whether --with-workshop or --without-workshop was given.
|
||||
if test "${with_workshop+set}" = set; then
|
||||
@ -5662,7 +5947,8 @@ if test "$with_doxygen" != ""
|
||||
then
|
||||
if test "$with_doxygen" = "yes" -a "$HAVE_DOXYGEN" != "yes"
|
||||
then
|
||||
echo ignoring --with-doxygen
|
||||
{ echo "$as_me:$LINENO: WARNING: ignoring --with-doxygen" >&5
|
||||
echo "$as_me: WARNING: ignoring --with-doxygen" >&2;}
|
||||
else
|
||||
HAVE_DOXYGEN="$with_doxygen"
|
||||
|
||||
@ -5681,7 +5967,8 @@ if test "$with_man2html" != ""
|
||||
then
|
||||
if test "$with_man2html" = "yes" -a "$HAVE_MAN2HTML" != "yes"
|
||||
then
|
||||
echo ignoring --with-man2html
|
||||
{ echo "$as_me:$LINENO: WARNING: ignoring --with-man2html" >&5
|
||||
echo "$as_me: WARNING: ignoring --with-man2html" >&2;}
|
||||
else
|
||||
HAVE_MAN2HTML="$with_man2html"
|
||||
|
||||
@ -5695,20 +5982,12 @@ if test "${enable_fhs+set}" = set; then
|
||||
|
||||
fi;
|
||||
|
||||
if test "$e_sbindir" = "" ; then e_sbindir="$sbindir" ; fi
|
||||
|
||||
if test "$e_libexecdir" = "" ; then e_libexecdir="$libexecdir" ; fi
|
||||
|
||||
if test "$e_sysconfdir" = "" ; then e_sysconfdir="$sysconfdir" ; fi
|
||||
|
||||
if test "$e_docdir" = "" ; then e_docdir="$datadir/$PACKAGE/doc" ; fi
|
||||
|
||||
if test "$e_initdir" = "" ; then e_initdir="$libexecdir" ; fi
|
||||
|
||||
if test "$e_spooldir" = "" ; then e_spooldir="$localstatedir/spool/emailrelay" ; fi
|
||||
|
||||
if test "$e_man1dir" = "" ; then e_man1dir="$mandir/man1" ; fi
|
||||
|
||||
if test "$e_examplesdir" = "" ; then e_examplesdir="$libexecdir" ; fi
|
||||
|
||||
if test "$enable_fhs" = "yes"
|
||||
@ -5722,7 +6001,7 @@ then
|
||||
sbindir='/usr/sbin'
|
||||
libexecdir='/usr/lib'
|
||||
localstatedir='/var'
|
||||
mandir='/usr/man'
|
||||
mandir='/usr/share/man'
|
||||
datadir='/usr/share'
|
||||
sysconfdir='/etc'
|
||||
#
|
||||
@ -5749,7 +6028,7 @@ fi
|
||||
|
||||
SET_MAKE=""
|
||||
|
||||
ac_config_files="$ac_config_files Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/main/Makefile src/win32/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/Makefile"
|
||||
ac_config_files="$ac_config_files Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/gpop/Makefile src/main/Makefile src/win32/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/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
|
||||
@ -5841,6 +6120,13 @@ LIBOBJS=$ac_libobjs
|
||||
LTLIBOBJS=$ac_ltlibobjs
|
||||
|
||||
|
||||
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
|
||||
{ { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&5
|
||||
echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
|
||||
{ { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
|
||||
Usually this means the macro was only invoked conditionally." >&5
|
||||
@ -6311,6 +6597,7 @@ do
|
||||
"src/glib/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/glib/Makefile" ;;
|
||||
"src/gnet/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gnet/Makefile" ;;
|
||||
"src/gsmtp/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gsmtp/Makefile" ;;
|
||||
"src/gpop/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gpop/Makefile" ;;
|
||||
"src/main/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/main/Makefile" ;;
|
||||
"src/win32/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/win32/Makefile" ;;
|
||||
"lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
|
||||
@ -6427,6 +6714,9 @@ s,@mkdir_p@,$mkdir_p,;t t
|
||||
s,@AWK@,$AWK,;t t
|
||||
s,@SET_MAKE@,$SET_MAKE,;t t
|
||||
s,@am__leading_dot@,$am__leading_dot,;t t
|
||||
s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
|
||||
s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
|
||||
s,@MAINT@,$MAINT,;t t
|
||||
s,@CC@,$CC,;t t
|
||||
s,@CFLAGS@,$CFLAGS,;t t
|
||||
s,@LDFLAGS@,$LDFLAGS,;t t
|
||||
@ -6459,13 +6749,11 @@ s,@HAVE_MAN2HTML@,$HAVE_MAN2HTML,;t t
|
||||
s,@COMPILER_VERSION@,$COMPILER_VERSION,;t t
|
||||
s,@CPP@,$CPP,;t t
|
||||
s,@EGREP@,$EGREP,;t t
|
||||
s,@e_sbindir@,$e_sbindir,;t t
|
||||
s,@e_libexecdir@,$e_libexecdir,;t t
|
||||
s,@e_sysconfdir@,$e_sysconfdir,;t t
|
||||
s,@POPLIB@,$POPLIB,;t t
|
||||
s,@IP@,$IP,;t t
|
||||
s,@e_docdir@,$e_docdir,;t t
|
||||
s,@e_initdir@,$e_initdir,;t t
|
||||
s,@e_spooldir@,$e_spooldir,;t t
|
||||
s,@e_man1dir@,$e_man1dir,;t t
|
||||
s,@e_examplesdir@,$e_examplesdir,;t t
|
||||
s,@LIBOBJS@,$LIBOBJS,;t t
|
||||
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
||||
|
42
configure.ac
42
configure.ac
@ -1,4 +1,4 @@
|
||||
dnl Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
dnl Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU General Public License
|
||||
@ -21,8 +21,9 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
|
||||
AC_INIT(src/gsmtp/gsmtp.h)
|
||||
AM_INIT_AUTOMAKE(emailrelay,1.3.3)
|
||||
AM_INIT_AUTOMAKE(emailrelay,1.4)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
dnl ===
|
||||
dnl check for programs...
|
||||
@ -57,6 +58,9 @@ AC_CHECK_HEADERS(sys/time.h)
|
||||
AC_CHECK_FUNCS(glob)
|
||||
AC_LANG_CPLUSPLUS
|
||||
ACLOCAL_TYPE_SOCKLEN_T
|
||||
ACLOCAL_CHECK_IPV6
|
||||
ACLOCAL_CHECK_GETIPNODEBYNAME
|
||||
ACLOCAL_CHECK_SIN6_LEN
|
||||
ACLOCAL_CHECK_BUGGY_CTIME
|
||||
ACLOCAL_CHECK_GMTIME_R
|
||||
ACLOCAL_CHECK_LOCALTIME_R
|
||||
@ -65,52 +69,56 @@ ACLOCAL_CHECK_SETGROUPS
|
||||
dnl ===
|
||||
dnl "--enable-debug"
|
||||
dnl
|
||||
AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[enable extra debug messages at compile-time]))
|
||||
AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug],[enable extra debug messages at compile-time (default disabled)]))
|
||||
ENABLE_DEBUG
|
||||
|
||||
dnl ===
|
||||
dnl "--enable-fastbuild"
|
||||
dnl
|
||||
AC_ARG_ENABLE(fastbuild,AC_HELP_STRING([--enable-fastbuild],[enable experimental faster building; requires --disable-dependency-tracking]))
|
||||
AC_ARG_ENABLE(fastbuild,AC_HELP_STRING([--enable-fastbuild],[enable faster building (default disabled); requires --disable-dependency-tracking]))
|
||||
ENABLE_FASTBUILD
|
||||
|
||||
dnl ===
|
||||
dnl "--enable-pop"
|
||||
dnl
|
||||
AC_ARG_ENABLE(pop,AC_HELP_STRING([--enable-pop],[enable pop server code (default enabled)]))
|
||||
ENABLE_POP
|
||||
|
||||
dnl ===
|
||||
dnl "--enable-ipv6"
|
||||
dnl
|
||||
AC_ARG_ENABLE(ipv6,AC_HELP_STRING([--enable-ipv6],[enable ipv6 (default disabled)]))
|
||||
ENABLE_IPV6
|
||||
|
||||
dnl ===
|
||||
dnl "--with-workshop"
|
||||
dnl
|
||||
AC_ARG_WITH(workshop,AC_HELP_STRING([--with-workshop],[use Sun WorkShop 'CC -xar' as the 'ar' tool]))
|
||||
AC_ARG_WITH(workshop,AC_HELP_STRING([--with-workshop],[use Sun WorkShop 'CC -xar' as the 'ar' tool (default disabled)]))
|
||||
WITH_WORKSHOP
|
||||
|
||||
dnl ===
|
||||
dnl "--with-doxygen"
|
||||
dnl
|
||||
AC_ARG_WITH(doxygen,AC_HELP_STRING([--with-doxygen],[generate source code documentation with doxygen]))
|
||||
AC_ARG_WITH(doxygen,AC_HELP_STRING([--with-doxygen],[generate source code documentation with doxygen (default auto)]))
|
||||
WITH_DOXYGEN
|
||||
|
||||
dnl ===
|
||||
dnl "--with-man2html"
|
||||
dnl
|
||||
AC_ARG_WITH(man2html,AC_HELP_STRING([--with-man2html],[convert man pages to html using man2html]))
|
||||
AC_ARG_WITH(man2html,AC_HELP_STRING([--with-man2html],[convert man pages to html using man2html (default auto)]))
|
||||
WITH_MAN2HTML
|
||||
|
||||
dnl ===
|
||||
dnl directory tweaking and "--enable-fhs" ...
|
||||
dnl
|
||||
dnl not AC_PREFIX_DEFAULT([/usr])
|
||||
AC_ARG_ENABLE(fhs,AC_HELP_STRING([--enable-fhs],[force FHS-compliant directories, ignoring --prefix etc]))
|
||||
AC_SUBST(e_sbindir)
|
||||
if test "$e_sbindir" = "" ; then e_sbindir="$sbindir" ; fi
|
||||
AC_SUBST(e_libexecdir)
|
||||
if test "$e_libexecdir" = "" ; then e_libexecdir="$libexecdir" ; fi
|
||||
AC_SUBST(e_sysconfdir)
|
||||
if test "$e_sysconfdir" = "" ; then e_sysconfdir="$sysconfdir" ; fi
|
||||
AC_ARG_ENABLE(fhs,AC_HELP_STRING([--enable-fhs],[force FHS-compliant directories, ignoring --prefix etc (default disabled)]))
|
||||
AC_SUBST(e_docdir)
|
||||
if test "$e_docdir" = "" ; then e_docdir="$datadir/$PACKAGE/doc" ; fi
|
||||
AC_SUBST(e_initdir)
|
||||
if test "$e_initdir" = "" ; then e_initdir="$libexecdir" ; fi
|
||||
AC_SUBST(e_spooldir)
|
||||
if test "$e_spooldir" = "" ; then e_spooldir="$localstatedir/spool/emailrelay" ; fi
|
||||
AC_SUBST(e_man1dir)
|
||||
if test "$e_man1dir" = "" ; then e_man1dir="$mandir/man1" ; fi
|
||||
AC_SUBST(e_examplesdir)
|
||||
if test "$e_examplesdir" = "" ; then e_examplesdir="$libexecdir" ; fi
|
||||
ENABLE_FHS
|
||||
@ -123,5 +131,5 @@ SET_MAKE=""
|
||||
dnl ===
|
||||
dnl generate files...
|
||||
dnl
|
||||
AC_OUTPUT(Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/main/Makefile src/win32/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/Makefile)
|
||||
AC_OUTPUT(Makefile src/Makefile src/glib/Makefile src/gnet/Makefile src/gsmtp/Makefile src/gpop/Makefile src/main/Makefile src/win32/Makefile lib/Makefile lib/gcc2.95/Makefile lib/msvc6.0/Makefile lib/sunpro5/Makefile bin/Makefile doc/Makefile etc/Makefile)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
@ -29,7 +29,8 @@ png_files=gsmtp-classes.png gnet-classes.png sequence-1.png sequence-2.png seque
|
||||
|
||||
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files)
|
||||
noinst_SCRIPTS = .dox
|
||||
e_man1_DATA = $(man_files_out)
|
||||
man1_MANS = $(man_files_in)
|
||||
#man1_DATA = $(man_files_out)
|
||||
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files)
|
||||
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) doxygen/*
|
||||
|
||||
@ -95,7 +96,7 @@ emailrelay-submit.1.gz : emailrelay-submit.1
|
||||
emailrelay-poke.1.gz: emailrelay-poke.1
|
||||
if test -n "$(GZIP)" ; then $(GZIP) -c $(top_srcdir)/doc/emailrelay-poke.1 > emailrelay-poke.1.gz ; fi
|
||||
|
||||
install-data-local: install-e_docDATA install-e_man1DATA
|
||||
install-data-local: install-e_docDATA
|
||||
$(mkinstalldirs) $(DESTDIR)$(e_docdir)/doxygen
|
||||
if test "$(HAVE_DOXYGEN)" = "yes" ; then for file in doxygen/* ; do $(INSTALL) $$file $(DESTDIR)$(e_docdir)/$$file ; done ; fi
|
||||
|
||||
|
115
doc/Makefile.in
115
doc/Makefile.in
@ -51,10 +51,12 @@ CONFIG_CLEAN_FILES =
|
||||
SCRIPTS = $(noinst_SCRIPTS)
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__installdirs = "$(DESTDIR)$(e_docdir)" "$(DESTDIR)$(e_man1dir)"
|
||||
man1dir = $(mandir)/man1
|
||||
am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(e_docdir)"
|
||||
NROFF = nroff
|
||||
MANS = $(man1_MANS)
|
||||
e_docDATA_INSTALL = $(INSTALL_DATA)
|
||||
e_man1DATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(e_doc_DATA) $(e_man1_DATA)
|
||||
DATA = $(e_doc_DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
@ -89,10 +91,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -103,6 +109,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -125,11 +132,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -157,7 +160,8 @@ html_files_out = readme.html developer.html reference.html userguide.html window
|
||||
png_files = gsmtp-classes.png gnet-classes.png sequence-1.png sequence-2.png sequence-3.png sequence-4.png gnet-client.png gsmtp-serverprotocol.png gsmtp-scannerclient.png auth.png
|
||||
EXTRA_DIST = $(man_files_in) $(txt_files) $(html_files_in) $(html_files_thru) $(png_files)
|
||||
noinst_SCRIPTS = .dox
|
||||
e_man1_DATA = $(man_files_out)
|
||||
man1_MANS = $(man_files_in)
|
||||
#man1_DATA = $(man_files_out)
|
||||
e_doc_DATA = $(txt_files) $(html_files_out) $(html_files_thru) $(png_files)
|
||||
CLEANFILES = $(noinst_SCRIPTS) $(man_files_out) $(html_files_out) doxygen/*
|
||||
SUFFIXES = .txt .html
|
||||
@ -175,7 +179,7 @@ all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .txt .html
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -200,11 +204,56 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
install-man1: $(man1_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
done
|
||||
uninstall-man1:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
done
|
||||
install-e_docDATA: $(e_doc_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(e_docdir)" || $(mkdir_p) "$(DESTDIR)$(e_docdir)"
|
||||
@ -222,23 +271,6 @@ uninstall-e_docDATA:
|
||||
echo " rm -f '$(DESTDIR)$(e_docdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(e_docdir)/$$f"; \
|
||||
done
|
||||
install-e_man1DATA: $(e_man1_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(e_man1dir)" || $(mkdir_p) "$(DESTDIR)$(e_man1dir)"
|
||||
@list='$(e_man1_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " $(e_man1DATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_man1dir)/$$f'"; \
|
||||
$(e_man1DATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_man1dir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-e_man1DATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(e_man1_DATA)'; for p in $$list; do \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " rm -f '$(DESTDIR)$(e_man1dir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(e_man1dir)/$$f"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
@ -275,9 +307,9 @@ distdir: $(DISTFILES)
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(SCRIPTS) $(DATA)
|
||||
all-am: Makefile $(SCRIPTS) $(MANS) $(DATA)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(e_docdir)" "$(DESTDIR)$(e_man1dir)"; do \
|
||||
for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(e_docdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
@ -323,14 +355,13 @@ info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-data-local install-e_docDATA \
|
||||
install-e_man1DATA
|
||||
install-data-am: install-data-local install-e_docDATA install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
install-man: install-man1
|
||||
|
||||
installcheck-am:
|
||||
|
||||
@ -350,19 +381,21 @@ ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-e_docDATA uninstall-e_man1DATA \
|
||||
uninstall-info-am uninstall-local
|
||||
uninstall-am: uninstall-e_docDATA uninstall-info-am uninstall-local \
|
||||
uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man1
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am \
|
||||
install-data-local install-e_docDATA install-e_man1DATA \
|
||||
install-exec install-exec-am install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
install-data-local install-e_docDATA install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man1 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
|
||||
uninstall-am uninstall-e_docDATA uninstall-e_man1DATA \
|
||||
uninstall-info-am uninstall-local
|
||||
uninstall-am uninstall-e_docDATA uninstall-info-am \
|
||||
uninstall-local uninstall-man uninstall-man1
|
||||
|
||||
|
||||
.txt.html:
|
||||
@ -414,7 +447,7 @@ emailrelay-submit.1.gz : emailrelay-submit.1
|
||||
emailrelay-poke.1.gz: emailrelay-poke.1
|
||||
if test -n "$(GZIP)" ; then $(GZIP) -c $(top_srcdir)/doc/emailrelay-poke.1 > emailrelay-poke.1.gz ; fi
|
||||
|
||||
install-data-local: install-e_docDATA install-e_man1DATA
|
||||
install-data-local: install-e_docDATA
|
||||
$(mkinstalldirs) $(DESTDIR)$(e_docdir)/doxygen
|
||||
if test "$(HAVE_DOXYGEN)" = "yes" ; then for file in doxygen/* ; do $(INSTALL) $$file $(DESTDIR)$(e_docdir)/$$file ; done ; fi
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
E-MailRelay Design and implementation
|
||||
=====================================
|
||||
E-MailRelay Internals
|
||||
=====================
|
||||
|
||||
Module structure
|
||||
----------------
|
||||
There are three C++ libraries in the E-MailRelay code: "glib" provides low-level
|
||||
There are four C++ libraries in the E-MailRelay code: "glib" provides low-level
|
||||
classes for file-system abstraction, date and time representation, string
|
||||
utility functions, logging, command line parsing etc., "gnet" provides network
|
||||
classes using the Berkley socket and Winsock APIs, and "gsmtp" contains SMTP and
|
||||
message-store classes. All three libraries are portable between POSIX-like
|
||||
systems (eg. Linux) and Windows.
|
||||
classes using the Berkley socket and Winsock APIs, "gsmtp" contains SMTP and
|
||||
message-store classes, and "gpop" contains POP3 classes. All four libraries are
|
||||
portable between POSIX-like systems (eg. Linux) and Windows.
|
||||
|
||||
Under Windows there is an additional library for event handling. Windows has
|
||||
historically built network event processing on top of the GUI event system,
|
||||
@ -95,6 +95,10 @@ Directory structure
|
||||
|
||||
An SMTP library.
|
||||
|
||||
# src/gpop
|
||||
|
||||
A POP3 library.
|
||||
|
||||
# src/win32
|
||||
|
||||
Additional classes for windows event processing.
|
||||
@ -177,8 +181,10 @@ Windows build
|
||||
Simple MSVC project files are provided in the "src/main" directory, bundled into
|
||||
the "emailrelay.dws" workspace.
|
||||
|
||||
Makefiles for the *MinGW* [http://www.mingw.org/] system (gcc on Windows) are also
|
||||
provided.
|
||||
Makefiles for the *MinGW* [http://www.mingw.org/] system (gcc on Windows) are
|
||||
also provided. If building from cygwin start by creating a "/mingw" mount to
|
||||
your MinGW installation directory (eg. "mount -u c:/sw/mingw /mingw"), and then
|
||||
run "make -f mingw.mak" from the E-MailRelay "src" directory.
|
||||
|
||||
Style
|
||||
-----
|
||||
@ -270,4 +276,4 @@ to reassign a std::auto_ptr<>.
|
||||
|
||||
|
||||
|
||||
Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
|
@ -11,6 +11,7 @@ h1 { text-align: center; font-family: veranda, arial, helvetica, sans-serif; col
|
||||
h2 { font-family: veranda, geneva, arial, helvetica, sans-serif; color: #09c ; }
|
||||
h3 { font-family: veranda, geneva, arial, helvetica, sans-serif; color: #09c ; }
|
||||
a { color: #09c }
|
||||
a:visited { color: #09c }
|
||||
a.qindex { color: #09c }
|
||||
a.qindex:visited { color: #09c }
|
||||
a.qindex:hover { background-color: #ccf }
|
||||
|
@ -95,7 +95,7 @@ Runs as a server: equivalent to <I>--log</I> <I>--close-stderr</I> <I>--postmast
|
||||
<DT><B>-C,--client-auth </B><I>file</I>
|
||||
|
||||
<DD>
|
||||
Enables authentication with remote server, using the given secrets file.
|
||||
Enables smtp authentication with remote server, using the given secrets file.
|
||||
<DT><B>-Y,--client-filter </B><I>program</I>
|
||||
|
||||
<DD>
|
||||
@ -111,19 +111,15 @@ Sets the timeout (in seconds) when connecting to a remote server (default is 40)
|
||||
<DT><B>-g,--debug </B>
|
||||
|
||||
<DD>
|
||||
Generates debug-level logging (if compiled-in).
|
||||
Generates debug-level logging if compiled-in.
|
||||
<DT><B>-D,--domain </B><I>fqdn</I>
|
||||
|
||||
<DD>
|
||||
Sets an override for the host's fully qualified domain name.
|
||||
<DT><B>-X,--dont-listen </B>
|
||||
|
||||
<DD>
|
||||
Disables listening for smtp connections (usually used with <I>--admin</I>).
|
||||
<DT><B>-x,--dont-serve </B>
|
||||
|
||||
<DD>
|
||||
Disables acting as a server (usually used with <I>--forward</I>).
|
||||
Disables acting as a server on any port (part of <I>--as-client</I> and usually used with <I>--forward</I>).
|
||||
<DT><B>-z,--filter </B><I>program</I>
|
||||
|
||||
<DD>
|
||||
@ -160,6 +156,10 @@ Adds a timestamp to the logging output.
|
||||
|
||||
<DD>
|
||||
Does not detach from the terminal.
|
||||
<DT><B>-X,--no-smtp </B>
|
||||
|
||||
<DD>
|
||||
Disables listening for smtp connections (usually used with <I>--admin</I> or <I>--pop</I>).
|
||||
<DT><B>-n,--no-syslog </B>
|
||||
|
||||
<DD>
|
||||
@ -172,6 +172,26 @@ Defines a file for storing the daemon process-id.
|
||||
|
||||
<DD>
|
||||
Enables polling with the specified period (requires <I>--forward-to</I>).
|
||||
<DT><B>-B,--pop </B>
|
||||
|
||||
<DD>
|
||||
Enables the pop server if compiled-in.
|
||||
<DT><B>-F,--pop-auth </B><I>file</I>
|
||||
|
||||
<DD>
|
||||
Defines the pop server secrets file (default is <I>/etc/emailrelay.auth</I>).
|
||||
<DT><B>-J,--pop-by-name </B>
|
||||
|
||||
<DD>
|
||||
Modifies the pop spool directory according to the user name (requires <I>--pop</I>).
|
||||
<DT><B>-G,--pop-no-delete </B>
|
||||
|
||||
<DD>
|
||||
Disables message deletion via pop (requires <I>--pop</I>).
|
||||
<DT><B>-E,--pop-port </B><I>port</I>
|
||||
|
||||
<DD>
|
||||
Specifies the pop listening port number (requires <I>--pop</I>).
|
||||
<DT><B>-p,--port </B><I>port</I>
|
||||
|
||||
<DD>
|
||||
@ -226,6 +246,9 @@ GNU style...
|
||||
/usr/local/etc/emailrelay.conf
|
||||
<BR>
|
||||
|
||||
/usr/local/etc/emailrelay.conf.template
|
||||
<BR>
|
||||
|
||||
/usr/local/libexec/emailrelay
|
||||
<BR>
|
||||
|
||||
@ -250,6 +273,9 @@ GNU style...
|
||||
/usr/local/libexec/emailrelay-runperl.js
|
||||
<BR>
|
||||
|
||||
/usr/local/libexec/emailrelay-submit.sh
|
||||
<BR>
|
||||
|
||||
/usr/local/man/man1/emailrelay.1.gz
|
||||
<BR>
|
||||
|
||||
@ -334,10 +360,13 @@ FHS style...
|
||||
/etc/emailrelay.conf
|
||||
<BR>
|
||||
|
||||
/etc/emailrelay.conf.template
|
||||
<BR>
|
||||
|
||||
/etc/init.d/emailrelay
|
||||
<BR>
|
||||
|
||||
/usr/lib/emailrelay/emailrelay-poke
|
||||
/usr/lib/emailrelay-poke
|
||||
<BR>
|
||||
|
||||
/usr/sbin/emailrelay
|
||||
@ -379,6 +408,9 @@ FHS style...
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
|
||||
<BR>
|
||||
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
|
||||
<BR>
|
||||
|
||||
/usr/share/doc/emailrelay/index.html
|
||||
<BR>
|
||||
|
||||
@ -470,7 +502,7 @@ Graeme Walker, mailto:<A HREF="mailto:graeme_walker@users.sourceforge.net">graem
|
||||
This document was created by
|
||||
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
|
||||
using the manual pages.<BR>
|
||||
Time: 14:38:57 GMT, July 24, 2005
|
||||
Time: 23:24:49 GMT, January 08, 2006
|
||||
</BODY>
|
||||
</HTML>
|
||||
<!-- Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
|
||||
<!-- Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\"
|
||||
.\" This program is free software; you can redistribute it and/or
|
||||
.\" modify it under the terms of the GNU General Public License
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\"
|
||||
.\" This program is free software; you can redistribute it and/or
|
||||
.\" modify it under the terms of the GNU General Public License
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\"
|
||||
.\" This program is free software; you can redistribute it and/or
|
||||
.\" modify it under the terms of the GNU General Public License
|
||||
@ -20,7 +20,7 @@
|
||||
emailrelay-submit \- a submission utility for E-MailRelay
|
||||
.SH SYNOPSIS
|
||||
.B emailrelay-submit
|
||||
[--help] [--spool-dir
|
||||
[--help] [--verbose] [--spool-dir
|
||||
.IR spool-directory ]
|
||||
[--from
|
||||
.IR from-address ]
|
||||
@ -33,6 +33,9 @@ input, with SMTP envelope recipient addresses passed on the
|
||||
command-line, and writes it into the
|
||||
.B E-MailRelay
|
||||
spool directory.
|
||||
.LP
|
||||
The verbose switch causes the path of the new content file
|
||||
to be printed.
|
||||
.SH SEE ALSO
|
||||
.BR emailrelay (1),
|
||||
.BR emailrelay-poke (1),
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\" Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
.\"
|
||||
.\" This program is free software; you can redistribute it and/or
|
||||
.\" modify it under the terms of the GNU General Public License
|
||||
@ -74,7 +74,7 @@ Runs as a proxy: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--immediate\f
|
||||
Runs as a server: equivalent to \fI--log\fR \fI--close-stderr\fR \fI--postmaster\fR.
|
||||
.TP
|
||||
.B \-C,--client-auth \fIfile\fR
|
||||
Enables authentication with remote server, using the given secrets file.
|
||||
Enables smtp authentication with remote server, using the given secrets file.
|
||||
.TP
|
||||
.B \-Y,--client-filter \fIprogram\fR
|
||||
Specifies an external program to process messages when they are forwarded.
|
||||
@ -86,16 +86,13 @@ Closes the standard error stream after start-up.
|
||||
Sets the timeout (in seconds) when connecting to a remote server (default is 40).
|
||||
.TP
|
||||
.B \-g,--debug
|
||||
Generates debug-level logging (if compiled-in).
|
||||
Generates debug-level logging if compiled-in.
|
||||
.TP
|
||||
.B \-D,--domain \fIfqdn\fR
|
||||
Sets an override for the host's fully qualified domain name.
|
||||
.TP
|
||||
.B \-X,--dont-listen
|
||||
Disables listening for smtp connections (usually used with \fI--admin\fR).
|
||||
.TP
|
||||
.B \-x,--dont-serve
|
||||
Disables acting as a server (usually used with \fI--forward\fR).
|
||||
Disables acting as a server on any port (part of \fI--as-client\fR and usually used with \fI--forward\fR).
|
||||
.TP
|
||||
.B \-z,--filter \fIprogram\fR
|
||||
Specifies an external program to process messages as they are stored.
|
||||
@ -124,6 +121,9 @@ Adds a timestamp to the logging output.
|
||||
.B \-t,--no-daemon
|
||||
Does not detach from the terminal.
|
||||
.TP
|
||||
.B \-X,--no-smtp
|
||||
Disables listening for smtp connections (usually used with \fI--admin\fR or \fI--pop\fR).
|
||||
.TP
|
||||
.B \-n,--no-syslog
|
||||
Disables syslog output.
|
||||
.TP
|
||||
@ -133,6 +133,21 @@ Defines a file for storing the daemon process-id.
|
||||
.B \-O,--poll \fIperiod\fR
|
||||
Enables polling with the specified period (requires \fI--forward-to\fR).
|
||||
.TP
|
||||
.B \-B,--pop
|
||||
Enables the pop server if compiled-in.
|
||||
.TP
|
||||
.B \-F,--pop-auth \fIfile\fR
|
||||
Defines the pop server secrets file (default is \fI/etc/emailrelay.auth\fR).
|
||||
.TP
|
||||
.B \-J,--pop-by-name
|
||||
Modifies the pop spool directory according to the user name (requires \fI--pop\fR).
|
||||
.TP
|
||||
.B \-G,--pop-no-delete
|
||||
Disables message deletion via pop (requires \fI--pop\fR).
|
||||
.TP
|
||||
.B \-E,--pop-port \fIport\fR
|
||||
Specifies the pop listening port number (requires \fI--pop\fR).
|
||||
.TP
|
||||
.B \-p,--port \fIport\fR
|
||||
Specifies the smtp listening port number.
|
||||
.TP
|
||||
@ -170,6 +185,8 @@ GNU style...
|
||||
.br
|
||||
/usr/local/etc/emailrelay.conf
|
||||
.br
|
||||
/usr/local/etc/emailrelay.conf.template
|
||||
.br
|
||||
/usr/local/libexec/emailrelay
|
||||
.br
|
||||
/usr/local/libexec/emailrelay-deliver.sh
|
||||
@ -186,6 +203,8 @@ GNU style...
|
||||
.br
|
||||
/usr/local/libexec/emailrelay-runperl.js
|
||||
.br
|
||||
/usr/local/libexec/emailrelay-submit.sh
|
||||
.br
|
||||
/usr/local/man/man1/emailrelay.1.gz
|
||||
.br
|
||||
/usr/local/man/man1/emailrelay-passwd.1.gz
|
||||
@ -242,9 +261,11 @@ FHS style...
|
||||
.br
|
||||
/etc/emailrelay.conf
|
||||
.br
|
||||
/etc/emailrelay.conf.template
|
||||
.br
|
||||
/etc/init.d/emailrelay
|
||||
.br
|
||||
/usr/lib/emailrelay/emailrelay-poke
|
||||
/usr/lib/emailrelay-poke
|
||||
.br
|
||||
/usr/sbin/emailrelay
|
||||
.br
|
||||
@ -272,6 +293,8 @@ FHS style...
|
||||
.br
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
|
||||
.br
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
|
||||
.br
|
||||
/usr/share/doc/emailrelay/index.html
|
||||
.br
|
||||
/usr/share/doc/emailrelay/NEWS
|
||||
|
@ -1,37 +1,54 @@
|
||||
|
||||
|
||||
div.two-column-content
|
||||
{
|
||||
margin-left: 220px ;
|
||||
padding: 40px ;
|
||||
}
|
||||
|
||||
div.two-column-menu
|
||||
{
|
||||
color: inherit ;
|
||||
background-color: #eee ;
|
||||
|
||||
position: absolute ;
|
||||
top: 100px ;
|
||||
left: 20px ;
|
||||
padding: 10px ;
|
||||
|
||||
border-style: solid ;
|
||||
border-width: 1px ;
|
||||
border-color: #999 ;
|
||||
|
||||
width: 230px ; /* IE5 */
|
||||
voice-family: "\"}\"" ; /* IE5 trick */
|
||||
voice-family: inherit ;
|
||||
width: 190px ; /* STD */
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
font-family: verdana, arial, helvetica, sans-serif ;
|
||||
|
||||
color: #000 ;
|
||||
background-color: #fff ;
|
||||
|
||||
margin: 0px ;
|
||||
padding: 0px ;
|
||||
}
|
||||
|
||||
div.two-column-header
|
||||
{
|
||||
background-color: #eee ;
|
||||
|
||||
border-bottom: 1px #999 solid ;
|
||||
height: 100px ;
|
||||
width: 100% ;
|
||||
}
|
||||
|
||||
h1
|
||||
{
|
||||
text-align: center ;
|
||||
color: #09c ;
|
||||
}
|
||||
|
||||
div.two-column-header h1
|
||||
{
|
||||
margin: 0px ;
|
||||
}
|
||||
|
||||
div.two-column-content
|
||||
{
|
||||
margin-left: 210px ; /* menu width + 40px */
|
||||
padding: 40px ;
|
||||
}
|
||||
|
||||
div.two-column-menu
|
||||
{
|
||||
background-color: #eee ;
|
||||
|
||||
float: left ;
|
||||
width: 180px ;
|
||||
margin-left: 30px ;
|
||||
margin-top: 30px ;
|
||||
margin-bottom: 10px ;
|
||||
|
||||
border-style: solid ;
|
||||
border-width: 1px ;
|
||||
border-color: #999 ;
|
||||
}
|
||||
|
||||
div.div-main
|
||||
@ -42,7 +59,6 @@ div.div-main
|
||||
|
||||
div.div-toc
|
||||
{
|
||||
color: inherit ;
|
||||
background-color: #eee ;
|
||||
}
|
||||
|
||||
@ -58,8 +74,6 @@ p.p-toc
|
||||
div.div-pre
|
||||
{
|
||||
margin-left: 3% ;
|
||||
/* font-size: smaller ; */ /* smaller is unreadable on ie5 */
|
||||
color: inherit ;
|
||||
background-color: #eee ;
|
||||
padding: 0.5em ;
|
||||
border: none ;
|
||||
@ -69,7 +83,6 @@ h1
|
||||
{
|
||||
text-align: center ;
|
||||
color: #09c ;
|
||||
background-color: inherit ;
|
||||
}
|
||||
|
||||
img
|
||||
@ -80,7 +93,6 @@ img
|
||||
h2
|
||||
{
|
||||
color: #09c ;
|
||||
background-color: inherit ;
|
||||
}
|
||||
|
||||
p
|
||||
@ -89,11 +101,31 @@ p
|
||||
text-align: justify ;
|
||||
}
|
||||
|
||||
h3.h3-toc
|
||||
{
|
||||
display: block ;
|
||||
margin: 0px ;
|
||||
padding: 0px ;
|
||||
width: 100% ;
|
||||
border-bottom: 1px #999 solid ;
|
||||
text-decoration: none ;
|
||||
}
|
||||
|
||||
p.p-toc
|
||||
{
|
||||
padding-top: 0px ;
|
||||
padding-bottom: 0px ;
|
||||
padding-left: 15px ;
|
||||
margin: 0px ;
|
||||
border-bottom: 1px #999 solid ;
|
||||
}
|
||||
|
||||
a.a-toc
|
||||
{
|
||||
color: #09c ;
|
||||
background-color: inherit ;
|
||||
text-decoration: none ;
|
||||
padding: 0px ;
|
||||
margin: 0px ;
|
||||
}
|
||||
|
||||
a.a-toc:hover
|
||||
@ -105,7 +137,6 @@ a.a-toc:hover
|
||||
a.a-toc-expander
|
||||
{
|
||||
color: #09c ;
|
||||
background-color: inherit ;
|
||||
text-decoration: none ;
|
||||
font-size: smaller ;
|
||||
}
|
||||
@ -130,13 +161,11 @@ a.a-href
|
||||
a.a-href:link
|
||||
{
|
||||
color: #09c ;
|
||||
background-color: inherit ;
|
||||
}
|
||||
|
||||
a.a-href:visited
|
||||
{
|
||||
color: #07a ;
|
||||
background-color: inherit ;
|
||||
}
|
||||
|
||||
a.a-href:hover
|
||||
@ -145,16 +174,6 @@ a.a-href:hover
|
||||
background-color: #eee ;
|
||||
}
|
||||
|
||||
div.two-column-header
|
||||
{
|
||||
color: inherit ;
|
||||
background-color: #eee ;
|
||||
|
||||
border-style: solid ;
|
||||
border-color: #999 ;
|
||||
border-width: 1px 0px ; /* top/bottom left/right */
|
||||
}
|
||||
|
||||
em.quote
|
||||
{
|
||||
font-weight: bold ;
|
||||
|
@ -21,4 +21,4 @@
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!-- Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
|
||||
<!-- Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved. -->
|
||||
|
@ -32,7 +32,7 @@ where <switch> is:
|
||||
Runs as a server: equivalent to "--log --close-stderr --postmaster".
|
||||
|
||||
# --client-auth (-C)
|
||||
Enables authentication with remote server, using the given secrets file.
|
||||
Enables smtp authentication with remote server, using the given secrets file.
|
||||
|
||||
# --client-filter (-Y)
|
||||
Specifies an external program to process messages when they are forwarded.
|
||||
@ -44,16 +44,13 @@ where <switch> is:
|
||||
Sets the timeout (in seconds) when connecting to a remote server (default is 40).
|
||||
|
||||
# --debug (-g)
|
||||
Generates debug-level logging (if compiled-in).
|
||||
Generates debug-level logging if compiled-in.
|
||||
|
||||
# --domain (-D)
|
||||
Sets an override for the host's fully qualified domain name.
|
||||
|
||||
# --dont-listen (-X)
|
||||
Disables listening for smtp connections (usually used with --admin).
|
||||
|
||||
# --dont-serve (-x)
|
||||
Disables acting as a server (usually used with --forward).
|
||||
Disables acting as a server on any port (part of --as-client and usually used with --forward).
|
||||
|
||||
# --filter (-z)
|
||||
Specifies an external program to process messages as they are stored.
|
||||
@ -82,6 +79,9 @@ where <switch> is:
|
||||
# --no-daemon (-t)
|
||||
Does not detach from the terminal.
|
||||
|
||||
# --no-smtp (-X)
|
||||
Disables listening for smtp connections (usually used with --admin or --pop).
|
||||
|
||||
# --no-syslog (-n)
|
||||
Disables syslog output.
|
||||
|
||||
@ -91,6 +91,21 @@ where <switch> is:
|
||||
# --poll (-O)
|
||||
Enables polling with the specified period (requires --forward-to).
|
||||
|
||||
# --pop (-B)
|
||||
Enables the pop server if compiled-in.
|
||||
|
||||
# --pop-auth (-F)
|
||||
Defines the pop server secrets file (default is "/etc/emailrelay.auth").
|
||||
|
||||
# --pop-by-name (-J)
|
||||
Modifies the pop spool directory according to the user name (requires --pop).
|
||||
|
||||
# --pop-no-delete (-G)
|
||||
Disables message deletion via pop (requires --pop).
|
||||
|
||||
# --pop-port (-E)
|
||||
Specifies the pop listening port number (requires --pop).
|
||||
|
||||
# --port (-p)
|
||||
Specifies the smtp listening port number.
|
||||
|
||||
@ -139,7 +154,8 @@ behaviour is:
|
||||
Adding the "--as-server" switch makes sure that logging is enabled and that the
|
||||
standard error stream is closed.
|
||||
|
||||
To forward spooled messages the "--as-client" switch is provided to run the program
|
||||
To forward spooled messages the "--as-client" switch is provided to run the
|
||||
program
|
||||
* in foreground, exiting when all spooled mail has been processed
|
||||
* taking spooled mail from "/usr/local/var/spool/emailrelay" or "/var/spool/emailrelay"
|
||||
* without listening on any port
|
||||
@ -179,26 +195,27 @@ SMTP issues
|
||||
|
||||
# Local delivery:
|
||||
|
||||
In server mode (ie. with "--postmaster") recipient addresses like "postmaster",
|
||||
"postmaster@localhost" and "postmaster@fqdn" (where "fqdn" is the host's fully
|
||||
qualified domain name) are treated as the local postmaster, resulting in local
|
||||
delivery rather than mail forwarding. Recipient addresses other than "postmaster"
|
||||
addresses with no "at" sign (@) or ending in "@localhost" will be rejected at the
|
||||
time the message is submitted by the client.
|
||||
In server mode (ie. with "--postmaster") recipient addresses like
|
||||
"postmaster", "postmaster@localhost" and "postmaster@fqdn" (where "fqdn" is
|
||||
the host's fully qualified domain name) are treated as the local postmaster,
|
||||
resulting in local delivery rather than mail forwarding. Recipient addresses
|
||||
other than "postmaster" addresses with no "at" sign (@) or ending in
|
||||
"@localhost" will be rejected at the time the message is submitted by the
|
||||
client.
|
||||
|
||||
Delivery of mail to a local "postmaster" is a feature of E-MailRelay which is
|
||||
provided for completeness and for comformance to the SMTP specification. But
|
||||
note that the E-MailRelay daemon does not actually deliver mail to the postmaster
|
||||
mailbox. All it does is create an envelope and content file in the spool
|
||||
directory with a ".local" suffix. Some external system, such as a shell
|
||||
script run from cron calling "procmail", should be used to process the
|
||||
note that the E-MailRelay daemon does not actually deliver mail to the
|
||||
postmaster mailbox. All it does is create an envelope and content file in
|
||||
the spool directory with a ".local" suffix. Some external system, such as a
|
||||
shell script run from cron calling "procmail", should be used to process the
|
||||
".local" files. An example script is provided.
|
||||
|
||||
# Timeouts:
|
||||
|
||||
A simple client-side timeout is implemented which will abort the transaction
|
||||
if the server fails to respond to any of the client's SMTP commands within the
|
||||
given time period.
|
||||
if the server fails to respond to any of the client's SMTP commands within
|
||||
the given time period.
|
||||
|
||||
# Message loops:
|
||||
|
||||
@ -222,9 +239,9 @@ simple command-line interface which is compatible with "telnet":
|
||||
E-MailRelay> quit
|
||||
|
||||
The "flush" command is used to get the E-MailRelay server to forward spooled
|
||||
mail to the next SMTP server, as an alternative to running "emailrelay --as-client"
|
||||
as a separate process. In proxy mode it is a way of getting the proxy
|
||||
server to scan the spool-directory for new messages.
|
||||
mail to the next SMTP server, as an alternative to running
|
||||
"emailrelay --as-client" as a separate process. In proxy mode it is a way of
|
||||
getting the proxy server to scan the spool-directory for new messages.
|
||||
|
||||
The utility program "emailrelay-poke" can be used to issue the "flush"
|
||||
command to an E-MailRelay server. For example:
|
||||
@ -245,27 +262,27 @@ Mail processing
|
||||
The "--filter" command-line switch allows you to specify a mail pre-processor
|
||||
program which operates on mail messages as they pass through the E-MailRelay
|
||||
system. The mail pre-processor program is run as soon as the mail message has
|
||||
been stored in the spool directory, with the full path of the content file added
|
||||
onto the end of the given command line.
|
||||
been stored in the spool directory, with the full path of the content file
|
||||
added onto the end of the given command line.
|
||||
|
||||
For example, the following command will start a proxy server on port 10025 which
|
||||
processes mail using the specified filter program, and then forwards the mail on
|
||||
to the system's default MTA (on port 25):
|
||||
For example, the following command will start a proxy server on port 10025
|
||||
which processes mail using the specified filter program, and then forwards the
|
||||
mail on to the system's default MTA (on port 25):
|
||||
|
||||
emailrelay --as-proxy localhost:smtp --port 10025 --no-syslog \
|
||||
--filter $HOME/.emailrelay/filter \
|
||||
--spool-dir $HOME/.emailrelay/spool
|
||||
|
||||
The pre-processor program should terminate with an exit code of zero to indicate
|
||||
success, or a value between 1 and 99 to indicate failure. Exit codes between
|
||||
100 and 107 are reserved for special processing: 100 is used to cancel all
|
||||
further processing of the message, and 103 has the effect of immediately expiring
|
||||
any "--poll" timer.
|
||||
The pre-processor program should terminate with an exit code of zero to
|
||||
indicate success, or a value between 1 and 99 to indicate failure. Exit codes
|
||||
between 100 and 107 are reserved for special processing: 100 is used to cancel
|
||||
all further processing of the message, and 103 has the effect of immediately
|
||||
expiring any "--poll" timer.
|
||||
|
||||
If the pre-processor program terminates with a non-zero exit code then the first
|
||||
few thousand characters of the standard output stream are searched for a line
|
||||
starting with "<<" followed by ">>". The text inbetween is taken as a failure
|
||||
reason, and passed back to the SMTP client.
|
||||
If the pre-processor program terminates with a non-zero exit code then the
|
||||
first few thousand characters of the standard output stream are searched for a
|
||||
line starting with "<<" followed by ">>". The text inbetween is taken as a
|
||||
failure reason, and passed back to the SMTP client.
|
||||
|
||||
The pre-processor program can edit any part of the message's envelope file or
|
||||
content file: E-MailRelay remembers nothing about the message while the
|
||||
@ -297,11 +314,11 @@ the sendmail command-line interface rather than SMTP):
|
||||
exit 0
|
||||
|
||||
The first thing this script does is convert the path of the content file which
|
||||
it is given, into the corresponding envelope file. It then extracts the client's
|
||||
IP address out of the envelope file using "awk". If this matches the fixed
|
||||
address then it pipes the message content into sendmail, deletes the message and
|
||||
exits with a value of 100. The exit value of 100 tells E-MailRelay to forget the
|
||||
message, and not to complain about the files disappearing.
|
||||
it is given, into the corresponding envelope file. It then extracts the
|
||||
client's IP address out of the envelope file using "awk". If this matches the
|
||||
fixed address then it pipes the message content into sendmail, deletes the
|
||||
message and exits with a value of 100. The exit value of 100 tells E-MailRelay
|
||||
to forget the message, and not to complain about the files disappearing.
|
||||
|
||||
For Windows this example can be rewritten in JavaScript:
|
||||
|
||||
@ -324,17 +341,17 @@ For Windows this example can be rewritten in JavaScript:
|
||||
}
|
||||
WScript.Quit( 0 ) ;
|
||||
|
||||
Windows pre-processor programs written in JavaScript can be run using "cscript",
|
||||
with an E-MailRelay "--filter" switch something like this:
|
||||
Windows pre-processor programs written in JavaScript can be run using
|
||||
"cscript", with an E-MailRelay "--filter" switch something like this:
|
||||
|
||||
--filter "c:/winnt/system32/cscript.exe //nologo c:/program\ files/emailrelay/filter.js"
|
||||
|
||||
Note how the space character in the path is escaped with a backslash.
|
||||
|
||||
As an example of more complex processing there is a "--filter" script included in
|
||||
the distribution ("emailrelay-process.sh") that does rot-13 masking of messages.
|
||||
This script also does some simple MIME encoding, so that the masked message
|
||||
appears as an attachment within a plaintext bearer message.
|
||||
As an example of more complex processing there is a "--filter" script included
|
||||
in the distribution ("emailrelay-process.sh") that does rot-13 masking of
|
||||
messages. This script also does some simple MIME encoding, so that the masked
|
||||
message appears as an attachment within a plaintext bearer message.
|
||||
|
||||
E-MailRelay also has a "--client-filter" switch that enables pre-processing of
|
||||
messages just before they are forwarded, rather then after they are stored. The
|
||||
@ -353,56 +370,97 @@ Bear in mind the following points when writing "--filter" programs:
|
||||
It is also possible to run a separate server process to pre-process messages by
|
||||
using the "--scanner" switch, which has the advantage of not blocking the main
|
||||
E-MailRelay process during message pre-processing. The "--scanner" switch is
|
||||
used to specify the IP address and port that the scanner server is listening on.
|
||||
E-MailRelay connects to this address and then uses a simple line-based dialog as
|
||||
each e-mail message is received. E-MailRelay sends the full path of the message
|
||||
content file, and the scanner is expected to respond with "ok" if the message is
|
||||
to be accepted, or an error message. No source code is provided for a scanner
|
||||
process in this release, but *Python's* [http://python.org] support for threads
|
||||
and sockets would make it a good choice of language.
|
||||
used to specify the IP address and port that the scanner server is listening
|
||||
on. E-MailRelay connects to this address and then uses a simple line-based
|
||||
dialog as each e-mail message is received. E-MailRelay sends the full path of
|
||||
the message content file, and the scanner is expected to respond with "ok" if
|
||||
the message is to be accepted, or an error message. No source code is provided
|
||||
for a scanner process in this release, but *Python's* [http://python.org]
|
||||
support for threads and sockets would make it a good choice of language.
|
||||
|
||||
Address verification
|
||||
--------------------
|
||||
In proxy mode all addresses supplied to the SMTP commands "RCPT" and "VRFY" are
|
||||
accepted by E-MailRelay as valid. But in server mode (or more accurately when
|
||||
"--postmater" is in effect) addresses are only accepted if they contain an at
|
||||
sign ("@") or if they are some sort of local "postmaster" address: "postmaster",
|
||||
"postmaster@localhost" or "postmaster@<fqdn>".
|
||||
In server mode (or more accurately when "--postmater" is in effect) addresses
|
||||
for incoming e-mails received in "RCPT" or "VRFY" commands are accepted as valid
|
||||
if they contain an at sign ("@") or if they are some sort of local "postmaster"
|
||||
address: "postmaster", "postmaster@localhost" or "postmaster@<fqdn>". Other
|
||||
addresses without an at sign are rejected.
|
||||
|
||||
However, this behaviour can be modified by using an external verifier program,
|
||||
specified with the "--verifier" command-line switch.
|
||||
In proxy mode (more accurately without "--postmaster") all addresses are
|
||||
accepted as valid, whatever they look like.
|
||||
|
||||
This is normally what you want for a proxy or store-and-forward MTA because the
|
||||
delivery address can only be fully verified once the message gets to the last
|
||||
machine in the chain and the message is finally delivered into a mailbox.
|
||||
|
||||
However, the default behaviour can be modified by using an external verifier
|
||||
program, specified with the "--verifier" command-line switch, so that you get
|
||||
to choose which addresses are accepted as valid and which are rejected.
|
||||
|
||||
The external verifier program is passed a command-line containing: (1) the full
|
||||
address, (2) the user-name part of the address in upper-case, (3) the host-name
|
||||
part in upper-case, (4) the local host's fully qualified domain name, (5) the
|
||||
current "MAIL" command's "FROM:" address or the empty string for the "VRFY"
|
||||
command, (6) the IP address of the client connection, (7) the authentication
|
||||
mechanism used by the client ("NONE" if trusted), and (8) either the
|
||||
authentication name or the fourth field from authentication secrets file if a
|
||||
trusted IP address:
|
||||
part in upper-case, (4) the local host's fully qualified domain name in
|
||||
upper-case, (5) the current "MAIL" command's "FROM:" address or the empty string
|
||||
for the "VRFY" command, (6) the IP address of the client connection, (7) the
|
||||
authentication mechanism used by the client ("NONE" if trusted), and (8) either
|
||||
the authentication name or the fourth field from authentication secrets file if
|
||||
a trusted IP address:
|
||||
|
||||
myverifier me@myhost.mydomain ME MYHOST.MYDOMAIN MYHOST.MYDOMAIN bob@other.net 192.168.0.1 LOGIN bob
|
||||
|
||||
For valid local mailbox addresses the verifier is expected to write two lines to
|
||||
the standard output -- the full name associated with the mailbox, and the
|
||||
canonical mailbox name -- and then exit with a value of zero. For valid non-local
|
||||
addresses the first line of output should be empty, the second line should be
|
||||
copied from the first command-line argument, and the exit value should be one.
|
||||
For valid non-local addresses the first line of output is ignored, the second
|
||||
line should be copied from the first command-line argument, and the exit
|
||||
value should be one.
|
||||
|
||||
#!/bin/sh
|
||||
# address verifier -- accept all (252)
|
||||
echo ""
|
||||
echo $1
|
||||
exit 1
|
||||
|
||||
For valid local addresses, where messages are to be delivered to a local
|
||||
mailbox, the verifier is expected to write two lines to the standard output --
|
||||
the full name associated with the mailbox, and the canonical mailbox name -- and
|
||||
then exit with a value of zero.
|
||||
|
||||
#!/bin/sh
|
||||
# address verifier -- accept as local (250)
|
||||
echo Local Postmaster '<postmaster@localhost>'
|
||||
echo postmaster
|
||||
exit 0
|
||||
|
||||
For invalid addresses the exit value should be greater than one, and anything
|
||||
written to the standard output is taken as the failure reason. (Only the few
|
||||
few thousand characters are read from the verifier's standard output stream; any
|
||||
more is thrown away.) If the exit code is 100 then the connection is aborted
|
||||
immediately.
|
||||
more is thrown away.)
|
||||
|
||||
In this simple example script all addresses are accepted as long as they contain
|
||||
#!/bin/sh
|
||||
# address verifier -- reject as invalid (550)
|
||||
echo invalid address: $1
|
||||
exit 2
|
||||
|
||||
To indicate a temporary failure this can be changed to an exit code of 3.
|
||||
|
||||
#!/bin/sh
|
||||
# address verifier -- reject as temporarily invalid (450)
|
||||
echo address unavailable: $1
|
||||
exit 3
|
||||
|
||||
If the exit code is 100 then the connection is aborted immediately.
|
||||
|
||||
#!/bin/sh
|
||||
# address verifier -- abort
|
||||
exit 100
|
||||
|
||||
In this more complete example all addresses are accepted as long as they contain
|
||||
an at sign:
|
||||
|
||||
#!/bin/sh
|
||||
# verifier.sh
|
||||
# address verifier -- accept only if containing an at sign
|
||||
address="$1"
|
||||
expr "${address}" : ".*@" > /dev/null || exit 2
|
||||
echo ""
|
||||
echo "${address}"
|
||||
echo "${address}" # again
|
||||
exit 1 # accept
|
||||
|
||||
As another example, this verifier script accepts all recipient addresses by
|
||||
@ -410,11 +468,12 @@ default, but rejects remote addresses if the client has bypassed authentication
|
||||
by connecting on a trusted IP address:
|
||||
|
||||
#!/bin/sh
|
||||
# verifier.sh
|
||||
# address verifier
|
||||
address="$1"
|
||||
host="$3"
|
||||
local_domain="$4"
|
||||
auth_mechanism="$7"
|
||||
if test -z "${auth_mechanism}" ; then auth_mechanism="NONE" ; fi
|
||||
if test "${auth_mechanism}" = "NONE" -a "${host}" != "${local_domain}"
|
||||
then
|
||||
echo "cannot relay without authentication"
|
||||
@ -431,7 +490,7 @@ or in JavaScript:
|
||||
var host = WScript.Arguments(2) ;
|
||||
var local_domain = WScript.Arguments(3) ;
|
||||
var auth_mechanism = WScript.Arguments(6) ;
|
||||
if( auth_mechanism == "NONE" && host != local_domain )
|
||||
if( ( auth_mechanism == "NONE" || auth_mechanism == "" ) && host != local_domain )
|
||||
{
|
||||
WScript.Echo( "cannot relay without authentication" ) ;
|
||||
WScript.Quit( 2 ) ;
|
||||
@ -451,13 +510,15 @@ following precautions are taken:
|
||||
|
||||
# effective userid
|
||||
|
||||
Suid privileges are revoked at start-up, switching the effective userid/groupid
|
||||
to be the real userid/groupid values. If started as "root" then the effective
|
||||
userid/groupid are taken from the "daemon" user. Special privileges are only
|
||||
reclaimed when needed to bind sockets and do file i/o. Normally this means
|
||||
temporarily switching the userid and groupid back to what they were at start-up.
|
||||
However, when writing spool files only the effective userid is changed, not the
|
||||
groupid.
|
||||
Suid privileges are revoked at start-up, switching the effective
|
||||
userid/groupid to be the real userid/groupid values. If started as "root"
|
||||
then the effective userid/groupid are switched at start-up to those of user
|
||||
"daemon". Special privileges are only reclaimed when needed to bind sockets
|
||||
and do file i/o. Normally this means temporarily switching the userid and
|
||||
groupid back to what they were at start-up. However, when writing spool files
|
||||
after being started as "root" only the effective userid is changed, not the
|
||||
groupid, so that new files have group ownership corresponding to the
|
||||
"daemon" user.
|
||||
|
||||
# execution environment
|
||||
|
||||
@ -467,32 +528,72 @@ following precautions are taken:
|
||||
|
||||
# configuration
|
||||
|
||||
The mail pre-processor filename has to be configured using a full path, so there
|
||||
is no dependence on the current working directory or the PATH environment variable.
|
||||
The mail pre-processor filename has to be configured using a full path, so
|
||||
there is no dependence on the current working directory or the PATH
|
||||
environment variable.
|
||||
|
||||
Some other points are:
|
||||
# umask
|
||||
|
||||
The program runs for most of the time with a "umask" of 177, switching to 117
|
||||
when creating spool files.
|
||||
|
||||
# buffer overflow
|
||||
|
||||
Strings are dynamically allocated, so buffer overflow/truncation issues are
|
||||
avoided.
|
||||
|
||||
# remote clients
|
||||
|
||||
By default connections to the SMTP and administrative ports will be rejected
|
||||
if they come from remote machines.
|
||||
|
||||
# remote configuration
|
||||
|
||||
No configuration parameters can be changed through the administrative
|
||||
interface.
|
||||
|
||||
# use of exec() and system()
|
||||
|
||||
No exec(), system() or popen() calls are used other than execve() to spawn the
|
||||
mail pre-processor and/or address verifier.
|
||||
|
||||
# file permissions
|
||||
|
||||
After a normal installation the spool directory is has ownership of
|
||||
"root.daemon" with permissions of "-rwxrwxr-x". Messages files are created
|
||||
with permissions of "-rw-rw----". This allows normal users to list messages
|
||||
files but not read them.
|
||||
|
||||
The "emailrelay-submit" program is given group ownership of "daemon" with its
|
||||
group set-user-id flag set. This allows it to create message files in the
|
||||
spool directory, and the files created end up owned by the submitter but with
|
||||
group ownership of "daemon".
|
||||
|
||||
Security issues which relate to the SMTP protocol itself are beyond the scope of
|
||||
this document, but RFC2821 makes the following observation: "SMTP mail is
|
||||
inherently insecure in that it is feasible for even [..] casual users to [..]
|
||||
create messages that will trick a [..] recipient into believing that they came
|
||||
from somewhere else. [..] Real [..] security lies [..] in end-to-end methods [..]
|
||||
such as those which use digital signatures."
|
||||
from somewhere else. [..] Real [..] security lies [..] in end-to-end methods
|
||||
[..] such as those which use digital signatures."
|
||||
|
||||
The "Authentication" section below also relates to security.
|
||||
|
||||
Some other points are:
|
||||
* The program runs for most of the time with a "umask" of 177, switching to 117 when creating spool files.
|
||||
* Strings are dynamically allocated, so buffer overflow/truncation issues are avoided.
|
||||
* By default connections to the SMTP and administrative ports will be rejected if they come from remote machines.
|
||||
* No configuration parameters can be changed through the administrative interface.
|
||||
* No exec(), system() or popen() calls are used other than execve() to spawn the mail pre-processor and/or address verifier.
|
||||
* The submit utility is installed as set-group-id with group ownership of "daemon".
|
||||
|
||||
Authentication
|
||||
--------------
|
||||
E-MailRelay supports the ESMTP "AUTH" extension, as defined in RFC2554, on both
|
||||
the server-side and client-side. The only authentication mechanisms currently
|
||||
provided are the non-standard but widely used "LOGIN" mechanism, which uses
|
||||
plaintext passwords, and the "CRAM-MD5" mechanism, as defined in RFC2195.
|
||||
the server-side and client-side.
|
||||
|
||||
The authentication mechanisms currently supported are:
|
||||
# "LOGIN"
|
||||
|
||||
Passwords are stored in clear-text, sent over the network in clear-text, and
|
||||
are replayable. This is a widely used mechanism, but officially obsolete.
|
||||
|
||||
# "CRAM-MD5" mechanism
|
||||
|
||||
Passwords are not stored in clear-text, not sent over the network, and are
|
||||
not replayable. Defined in RFC2195.
|
||||
|
||||
Authentication is enabled with the "--client-auth" and "--server-auth"
|
||||
command-line switches. The switch parameter is the name of a "secrets" file,
|
||||
@ -510,10 +611,10 @@ Lines have four white-space delimited fields:
|
||||
* "userid"
|
||||
* "secret"
|
||||
|
||||
The "mechanism" field must be "LOGIN" or "CRAM-MD5" (case-insensitive); the
|
||||
"client-or-server" field must be "client" or "server"; the "userid" field is
|
||||
The "mechanism" field must be "LOGIN", "APOP" or "CRAM-MD5" (case-insensitive);
|
||||
the "client-or-server" field must be "client" or "server"; the "userid" field is
|
||||
xtext-encoded user identifier; and the "secret" field is the xtext-encoded
|
||||
"LOGIN" password or "CRAM-MD5" key.
|
||||
"LOGIN" password, or the "CRAM-MD5" key.
|
||||
|
||||
The "xtext" encoding scheme is defined properly in RFC1891, but basically it
|
||||
says that non alphanumeric characters should be represented in hexadecimal as
|
||||
@ -553,10 +654,10 @@ A "CRAM-MD5" version would look like this:
|
||||
CRAM-MD5 server user1 4059553961.2316091643.3282746241.1444639637.3735501773.3404060330.2760590371.1201092398
|
||||
CRAM-MD5 server user2 2798539199.3144534242.3784876256.2879973305.2327113479.216533878.2436460291.2361831919
|
||||
|
||||
When using the LOGIN mechanism you have to store plaintext passwords in a file
|
||||
and then send them unencypted over a network. This is a bad thing. You should at
|
||||
least make sure that the secrets file has tight permissions, and that the
|
||||
passwords in it are not also used for anything important.
|
||||
When using the "LOGIN" you have to store plaintext passwords in a file. This is
|
||||
a bad thing. You should at least make sure that the secrets file has tight
|
||||
permissions, and that the passwords in it are not also used for anything
|
||||
important.
|
||||
|
||||
On the server side authentication is advertised by E-MailRealy in the response
|
||||
to the SMTP "EHLO" command if the "--server-auth" command-line switch is used.
|
||||
@ -571,8 +672,9 @@ the third field, and an arbitrary keyword in the fourth field. The keyword
|
||||
is passed to any external address verifier program specified by the "--verifier"
|
||||
command-line switch.
|
||||
|
||||
For example this secrets file allows any client connecting from the 192.168.0.0/24
|
||||
domain to connect without authentication desipte the "--server-auth" switch:
|
||||
For example this secrets file allows any client connecting from the
|
||||
192.168.0.0/24 domain to connect without authentication desipte the
|
||||
"--server-auth" switch:
|
||||
|
||||
#
|
||||
# emailrelay secrets file
|
||||
@ -582,22 +684,64 @@ domain to connect without authentication desipte the "--server-auth" switch:
|
||||
LOGIN server user2 e+3Dmc2
|
||||
|
||||
On the client side authentication is performed when E-MailRelay has connected to
|
||||
a server which supports the AUTH extension with the LOGIN or CRAM-MD5 mechanism.
|
||||
If client authentication is enabled (with the "--client-auth" switch) but the
|
||||
server does not support the AUTH extension, or does not support the LOGIN or
|
||||
CRAM-MD5 mechanism, then E-MailRelay will fail the first message and terminate
|
||||
with an error message.
|
||||
a server which implements the AUTH extension with one of the supported
|
||||
mechanisms. If client authentication is enabled (with the "--client-auth"
|
||||
switch) but the server does not support the AUTH extension, or does not support
|
||||
the LOGIN or CRAM-MD5 mechanism, then E-MailRelay will fail the first message
|
||||
and terminate with an error message.
|
||||
|
||||
Note that some ISPs require separate POP/IMAP authentication before SMTP access
|
||||
from a particular IP address is allowed. This type of POP-before-SMTP
|
||||
authentication can be done outside the E-MailRelay system by POP/IMAP utilities
|
||||
such as "fetchmail".
|
||||
|
||||
Pop server
|
||||
----------
|
||||
If E-MailRelay has been built with POP3 support then the "--help --verbose"
|
||||
output will show several new command-line switches:
|
||||
# --pop
|
||||
|
||||
Enables the POP3 server.
|
||||
|
||||
# --pop-port <port>
|
||||
|
||||
Changes the POP3 listening port from its default of 110.
|
||||
|
||||
# --pop-auth <path>
|
||||
|
||||
Changes the authentication secrets file. The default is typically
|
||||
"/etc/emailrelay.auth".
|
||||
|
||||
The format of the authentication secrets file is the same as for
|
||||
"--server-auth" and the same file can be used for both SMTP and POP3
|
||||
authentication.
|
||||
|
||||
"APOP server" entries are used for "APOP" authentication, "LOGIN server"
|
||||
entries are used for "USER/PASS" authentication, and "CRAM-MD5" entries are
|
||||
used for "AUTH" authentication.
|
||||
|
||||
Note that the basic POP3 protocol defines only "APOP" and "USER/PASS"
|
||||
authentication, so some POP3 client programs may not be able to cope with
|
||||
CRAM-MD5 authentication using the POP3 "AUTH" extension.
|
||||
|
||||
# --pop-by-name
|
||||
|
||||
Modifies the spool directory according to the client authentication name.
|
||||
The client name is used as a sub-directory off the standard spool directory.
|
||||
So, for example, if a client authenticates as "bob" then the POP3 server
|
||||
will serve messages from the "/var/spool/emailrelay/bob" directory.
|
||||
|
||||
# --pop-no-delete
|
||||
|
||||
Disables message deletion. The POP3 DELE command will appear to succeed, but
|
||||
no files will be deleted from the spool directory.
|
||||
|
||||
Files and directories
|
||||
---------------------
|
||||
Following a normal build from source, a "make install" puts files in the
|
||||
following locations:
|
||||
* /usr/local/etc/emailrelay.conf
|
||||
* /usr/local/etc/emailrelay.conf.template
|
||||
* /usr/local/libexec/emailrelay
|
||||
* /usr/local/libexec/emailrelay-deliver.sh
|
||||
* /usr/local/libexec/emailrelay-notify.sh
|
||||
@ -606,6 +750,7 @@ following locations:
|
||||
* /usr/local/libexec/emailrelay-resubmit.js
|
||||
* /usr/local/libexec/emailrelay-resubmit.sh
|
||||
* /usr/local/libexec/emailrelay-runperl.js
|
||||
* /usr/local/libexec/emailrelay-submit.sh
|
||||
* /usr/local/man/man1/emailrelay.1.gz
|
||||
* /usr/local/man/man1/emailrelay-passwd.1.gz
|
||||
* /usr/local/man/man1/emailrelay-poke.1.gz
|
||||
@ -640,8 +785,9 @@ To force FHS compliance you can use the "--enable-fhs" switch when running
|
||||
"configure", as is done for the RPMs. This results in the following file
|
||||
locations:
|
||||
* /etc/emailrelay.conf
|
||||
* /etc/emailrelay.conf.template
|
||||
* /etc/init.d/emailrelay
|
||||
* /usr/lib/emailrelay/emailrelay-poke
|
||||
* /usr/lib/emailrelay-poke
|
||||
* /usr/sbin/emailrelay
|
||||
* /usr/sbin/emailrelay-passwd
|
||||
* /usr/sbin/emailrelay-submit
|
||||
@ -655,6 +801,7 @@ locations:
|
||||
* /usr/share/doc/emailrelay/examples/emailrelay-notify.sh
|
||||
* /usr/share/doc/emailrelay/examples/emailrelay-process.sh
|
||||
* /usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
|
||||
* /usr/share/doc/emailrelay/examples/emailrelay-submit.sh
|
||||
* /usr/share/doc/emailrelay/index.html
|
||||
* /usr/share/doc/emailrelay/NEWS
|
||||
* /usr/share/doc/emailrelay/*.png
|
||||
@ -673,17 +820,17 @@ locations:
|
||||
* /var/spool/emailrelay/emailrelay.*.content
|
||||
* /var/spool/emailrelay/emailrelay.*.envelope
|
||||
|
||||
For finer control of the directory structure the following variables
|
||||
can be specified on the "configure" command-line (but note that the
|
||||
"--enable-fhs" will override them):
|
||||
* e_sbindir
|
||||
* e_libexecdir
|
||||
* e_docdir
|
||||
* e_sysconfdir
|
||||
* e_initdir
|
||||
* e_spooldir
|
||||
* e_man1dir
|
||||
* e_examplesdir
|
||||
For finer control of the directory structure the following can be specified on
|
||||
the "configure" command-line (but note that the "--enable-fhs" will override
|
||||
them):
|
||||
* --libexecdir=<dir>
|
||||
* --mandir=<dir>
|
||||
* --sbindir=<dir>
|
||||
* --sysconfdir=<dir>
|
||||
* e_docdir=<dir>
|
||||
* e_examplesdir=<dir>
|
||||
* e_initdir=<dir>
|
||||
* e_spooldir=<dir>
|
||||
|
||||
For example, running "./configure --prefix=/usr e_spooldir=/tmp/spool" will
|
||||
create the GNU-style directory structure under "/usr" rather than "/usr/local",
|
||||
@ -695,17 +842,10 @@ comes from "configure", via the makefiles. So after running "configure" with a
|
||||
different spool directory do a "make clean" in at least "src/main" and "bin".
|
||||
|
||||
Even though the "--enable-fhs" switch overrides all other directory specifiers
|
||||
during the build process, it is still possible to change the installation
|
||||
root directory using "make install DESTDIR=<root>" or "DESTDIR=<root> make -e install".
|
||||
However this will not affect the default spool directory path built into the
|
||||
scripts and executables; the spool directory path will have to be explicitly
|
||||
defined at run-time.
|
||||
|
||||
For example, building with "configure --enable-fhs ; make ; make install DESTDIR=/export"
|
||||
would create a spool directory "/export/var/spool/emailrelay", but the server
|
||||
run as "/export/usr/sbin/emailrelay --as-server" would expect a spool directory of
|
||||
"/var/spool/emailrelay". The fix is to add "--spool-dir /export/var/spool/emailrelay"
|
||||
to the emailrelay command-line.
|
||||
during the build process, it is still possible to change the installation root
|
||||
directory using "make install DESTDIR=<root>" or "DESTDIR=<root> make -e install".
|
||||
However, this will not affect the default directory paths built into the scripts
|
||||
and executables, so they will have to be explicitly defined at run-time.
|
||||
|
||||
The "emailrelay" start/stop script in "init.d" creates a pid file in "/var/run"
|
||||
if the directory exists, or in "/tmp" otherwise.
|
||||
@ -713,4 +853,4 @@ if the directory exists, or in "/tmp" otherwise.
|
||||
|
||||
|
||||
|
||||
Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
|
@ -3,8 +3,9 @@ E-MailRelay User Guide
|
||||
|
||||
What is it?
|
||||
-----------
|
||||
E-MailRelay is a simple store-and-forward message transfer agent and proxy server.
|
||||
It runs on Unix-like operating systems (including Linux), and on Windows.
|
||||
E-MailRelay is a simple store-and-forward message transfer agent and proxy
|
||||
server. It runs on Unix-like operating systems (including Linux), and on
|
||||
Windows.
|
||||
|
||||
When used as proxy server the E-MailRelay program ("emailrelay") runs in the
|
||||
background and accepts e-mail from front-ends (KMail, Outlook etc.) or from
|
||||
@ -20,17 +21,14 @@ waits for incoming mail and stores anything it receives in a spool directory.
|
||||
As a forwarding agent E-MailRelay pulls messages out of the spool directory
|
||||
and passes them on to a remote server -- perhaps your ISP mail server.
|
||||
|
||||
E-MailRelay can also run as a POP3 server so that e-mail front-end programs
|
||||
can read the spooled messages.
|
||||
|
||||
What it's not
|
||||
-------------
|
||||
E-MailRelay is not a routing MTA. It forwards e-mail to a pre-configured SMTP
|
||||
server, regardless of any message addressing or DNS redirects.
|
||||
|
||||
E-MailRelay does not do POP3 or IMAP protocols. Many ISPs accept outgoing e-mail
|
||||
using SMTP, but deliver mail to you using POP3 or IMAP. In this case E-MailRelay
|
||||
does not get involved in processing incoming e-mail messages; it only operates
|
||||
on outgoing messages. Incoming e-mail messages will probably be retrieved from
|
||||
your ISP direcly by your e-mail front-end program.
|
||||
|
||||
E-MailRelay is not a delivery agent. Some programs like "fetchmail" send
|
||||
locally-addressed e-mail to the local SMTP server in order to deliver them to
|
||||
local mailboxes. E-MailRelay will not normally do this.
|
||||
@ -44,8 +42,10 @@ E-MailRelay is designed to be policy-free, so that you can implement your own
|
||||
policies for message retries, bounces, local mailbox delivery, spam filtering
|
||||
etc. through external scripts.
|
||||
|
||||
It has no dependencies on third-party libraries or run-time environments, so it
|
||||
is easy to build and install.
|
||||
It has no dependencies on third-party libraries or run-time environments so it
|
||||
is easy to build and install, and the single-threaded, event-driven design with
|
||||
non-blocking i/o may provide better performance and resource usage than some of
|
||||
the alternatives.
|
||||
|
||||
Typical applications of E-MailRelay include:
|
||||
* spam filtering and virus checking incoming mail
|
||||
@ -82,10 +82,14 @@ And then to forward the spooled mail to "smarthost" run somthing like this:
|
||||
|
||||
emailrelay --as-client smarthost:smtp --spool-dir $HOME/tmp
|
||||
|
||||
You can also have an E-MailRelay storage daemon forward spooled e-mails
|
||||
periodically by using the "--poll" switch.
|
||||
To run E-MailRelay as a POP server without SMTP you can use a command like this:
|
||||
|
||||
By default E-MailRelay will reject connections from remote machines. To
|
||||
emailrelay --pop --no-smtp --log --close-stderr
|
||||
|
||||
The "emailrelay-submit" utility can be used to put messages straight into the
|
||||
spool directory.
|
||||
|
||||
By default E-MailRelay will always reject connections from remote machines. To
|
||||
allow connections from anywhere use the "--remote-clients" switch.
|
||||
|
||||
For more information on the command-line options refer to the reference guide
|
||||
@ -107,13 +111,13 @@ links into the boot system: "ksysv" (KDE), "redhat-config-services", "insserv"
|
||||
If you do not have a suitable configuration tool you can set up the links
|
||||
manually as described below.
|
||||
|
||||
The "System-V" boot system has a base directory "/etc/init.d" (or "/sbin/init.d")
|
||||
containing a start/stop script for each daemon process, and then symbolic links
|
||||
in the "rc<N>.d" subdirectories control which scripts are run when entering or
|
||||
leaving a particular run-level (<N>). The links point back into the start/stop
|
||||
script in the parent directory, using a "S" prefix for the starting link, and a
|
||||
"K" prefix for the stopping link. The numeric part of the link name determines
|
||||
the order in which the links are called.
|
||||
The "System-V" boot system has a base directory "/etc/init.d" (or
|
||||
"/sbin/init.d") containing a start/stop script for each daemon process, and then
|
||||
symbolic links in the "rc<N>.d" subdirectories control which scripts are run
|
||||
when entering or leaving a particular run-level (<N>). The links point back into
|
||||
the start/stop script in the parent directory, using a "S" prefix for the
|
||||
starting link, and a "K" prefix for the stopping link. The numeric part of the
|
||||
link name determines the order in which the links are called.
|
||||
|
||||
So the goal is to set up symbolic links to the "emailrelay" start/stop script
|
||||
(not the binary) which "make install" should have put in "/etc/init.d" or
|
||||
@ -227,8 +231,8 @@ from all other mail programs), add a line like this to "/etc/syslog.conf":
|
||||
|
||||
mail.info: /var/log/mail.log
|
||||
|
||||
You may have to restart the "syslogd" daemon, or send it a "SIGHUP" signal, in order
|
||||
to have this change take effect.
|
||||
You may have to restart the "syslogd" daemon, or send it a "SIGHUP" signal, in
|
||||
order to have this change take effect.
|
||||
|
||||
For less verbose logging change "mail.info" to "mail.warning".
|
||||
|
||||
@ -258,9 +262,9 @@ purposes you might get away without having any header/body structure at all, but
|
||||
to do things properly you should have at least a "To:" line, a "From:" line and
|
||||
a "Subject:" line in the header.
|
||||
|
||||
At the end of the message text type a "." on a line of its own. At that point the
|
||||
message should get dispatched, and eventually end up in your in-box in the usual
|
||||
way (assuming you put your own address in the "RCPT TO" command).
|
||||
At the end of the message text type a "." on a line of its own. At that point
|
||||
the message should get dispatched, and eventually end up in your in-box in the
|
||||
usual way (assuming you put your own address in the "RCPT TO" command).
|
||||
|
||||
The following is an example SMTP dialogue, with ">>" and "<<" marks added to
|
||||
show what was typed and what was received:
|
||||
@ -308,12 +312,6 @@ stream ("stderr"). To get the server to log onto stderr, replace the
|
||||
"--as-server" command-line switch with "--log --no-syslog". Refer to the
|
||||
reference guide for more information.
|
||||
|
||||
On Windows things are a bit more difficult because there is no syslog equivalent
|
||||
on Win9x, and the standard error stream often gets lost. Starting E-MailRelay
|
||||
from cygwin/bash on Win98 keeps stderr open (albeit with dreadful performance),
|
||||
whereas the standard command prompt does not. If necessary the environment
|
||||
variable "GLOGOUTPUT_FILE" can be defined as the name of a log file.
|
||||
|
||||
Preventing open mail relay
|
||||
--------------------------
|
||||
If you are running E-MailRelay as a server with a permanent connection to the
|
||||
@ -329,20 +327,45 @@ mechanism of "NONE". Refer to the reference guide for more information.
|
||||
Taking it one stage further, you may want to allow clients to connect from any
|
||||
IP address without authentication, but only allow them to send mail to local
|
||||
users. You can do this by requiring authentication with the "--server-auth"
|
||||
switch but then exempt all clients from authentication with a "NONE server *.*.*.* x"
|
||||
line in the secrets file. To complete the solution you must have an address
|
||||
verifier script ("--verifier") which rejects remote addresses if the client has
|
||||
not authenticated. Again, refer to the reference guide for further details.
|
||||
switch but then exempt all clients from authentication with a
|
||||
"NONE server *.*.*.* x" line in the secrets file. To complete the solution
|
||||
you must have an address verifier script ("--verifier") which rejects remote
|
||||
addresses if the client has not authenticated. Again, refer to the reference
|
||||
guide for further details.
|
||||
|
||||
Running as a POP server
|
||||
-----------------------
|
||||
E-MailRelay can run as a POP server so that e-mail front-end programs can
|
||||
retrieve messages from the spool directory directly (although it is not a good
|
||||
idea to run E-MailRelay as a POP server if also forwarding messages by SMTP).
|
||||
|
||||
To allow POP access to spooled messages use a command-line something like this:
|
||||
|
||||
emailrelay --as-server --pop --pop-auth /etc/emailrelay.auth
|
||||
|
||||
You will need to create the authentication secrets file ("/etc/emailrelay.auth"
|
||||
in this example) containing usernames and passwords. A simple example would look
|
||||
like this:
|
||||
|
||||
APOP server user1 password1
|
||||
APOP server user2 password2
|
||||
|
||||
If you need to serve up messages to more than one user consider using the
|
||||
"--pop-by-name" option with a "--filter" script that moves messages into the
|
||||
appropriate subdirectory based on the "To:" address.
|
||||
|
||||
Refer to the reference guide for more information.
|
||||
|
||||
Usage patterns
|
||||
--------------
|
||||
The simplest ways of using E-MailRelay are as a proxy or as a store-and-forward
|
||||
MTA, but other configurations are possible. For example, you could use the
|
||||
E-MailRelay server to do message storing, but use something else to do the
|
||||
forwarding. Or you could implement simple routing by having a "--filter" program
|
||||
that moves message files into the spool directory of another E-MailRelay
|
||||
process. Or you could have multiple forwarding E-MailRelay processes running off
|
||||
the same spool directory, but trigger them at different times of the day.
|
||||
The simplest ways of using E-MailRelay for SMTP are as a proxy or as a
|
||||
store-and-forward MTA, but other configurations are possible. For example, you
|
||||
could use the E-MailRelay server to do message storing, but use something else
|
||||
to do the forwarding. Or you could implement simple routing by having a
|
||||
"--filter" program that moves message files into the spool directory of another
|
||||
E-MailRelay process. Or you could have multiple forwarding E-MailRelay processes
|
||||
running off the same spool directory, but trigger them at different times of the
|
||||
day.
|
||||
|
||||
Remember that messages can be introduced directly into the E-MailRelay spool
|
||||
directory using the "emailrelay-submit" utility, and they can be moved out again
|
||||
@ -351,7 +374,7 @@ extension. Your "--filter" program can edit messages in any way you want, and it
|
||||
can even remove the current message from the spool directory as long as it lets
|
||||
E-MailRelay know by terminating with an exit code of 100.
|
||||
|
||||
Another important technique is to run E-MailRelay as a server, but use the
|
||||
Another important technique is to run E-MailRelay as an SMTP server, but use the
|
||||
"--poll" switch so that the server process will also do periodic forwarding.
|
||||
With a short "--poll" period this behaves rather like a proxy, but the
|
||||
submitting client program does not have to wait for the message to be delivered
|
||||
@ -362,6 +385,23 @@ immediately. If you don't like the idea of polling the spool directory, you can
|
||||
use a "--filter" program to force the "--poll" timer to expire as soon as a new
|
||||
message is received by exiting with a value of 103.
|
||||
|
||||
When using E-MailRelay as a POP server the "--pop-by-name" feature can be used
|
||||
to serve up different spooled messages according to the username that the client
|
||||
authenticated with: each user's messages are taken from a sub-directory of the
|
||||
main spool directory. This means that you have to decide how to move or copy the
|
||||
messages into those sub-directories. If messages are coming in over SMTP then
|
||||
you could install an SMTP "--filter" script to move each new message into the
|
||||
relevant sub-directory based on the message addressing. Or if you are submitting
|
||||
messages directly into the main spool directory using the "emailrelay-submit"
|
||||
utility then you could use the "--verbose" switch to get the filename for the
|
||||
new message and then move, copy or link it into the users' sub-directories as
|
||||
a second step. Hard links (if supported by your filesystem) can be a neat way to
|
||||
distribute content files into multiple subdirectories because you do not use any
|
||||
more disk space for the copies and the storage is reclaimed automatically once
|
||||
the last copy is deleted. To avoid race conditions always copy or link the
|
||||
content file into the sub-directory first and then make a copy of the envelope
|
||||
file.
|
||||
|
||||
For more ideas check out the "--client-filter", "--poll" and "--scanner"
|
||||
switches, and don't overlook the administration interface ("--admin") which you
|
||||
can use to receive notification of message arrival or force message forwarding
|
||||
@ -416,8 +456,8 @@ Try an E-MailRelay command line like this:
|
||||
|
||||
emailrelay --as-server --filter "c:/winnt/system32/cscript.exe //nologo c:/program\ files/emailrelay/emailrelay-runperl.js"
|
||||
|
||||
But note that you may have to add explicit paths if perl or spamassassin are not
|
||||
on your path.
|
||||
But note that you may have to add explicit paths if perl or spamassassin are
|
||||
not on your path.
|
||||
|
||||
If you have a problem with long SpamAssassin processing times causing the
|
||||
submitting program to time-out then you should try moving the spam processing
|
||||
@ -439,7 +479,7 @@ To avoid having to run the "--as-client" forwarding processes repeatedly (eg.
|
||||
from "cron") you can start a long-lived forwarding process that polls the spool
|
||||
directory itself, like this:
|
||||
|
||||
emailrelay --log --close-stderr --dont-listen --poll 30 --forward-to smarthost:smtp ...
|
||||
emailrelay --log --close-stderr --no-smtp --poll 30 --forward-to smarthost:smtp ...
|
||||
|
||||
You could then try running several forwarding processes in parallel in order to
|
||||
maximise throughput.
|
||||
@ -447,4 +487,4 @@ maximise throughput.
|
||||
|
||||
|
||||
|
||||
Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
|
@ -3,10 +3,11 @@ E-MailRelay Windows installation
|
||||
|
||||
Introduction
|
||||
------------
|
||||
E-MailRelay was originally developed on Linux and so most of the documentation
|
||||
relates to Unix-like operating systems rather than Microsoft Windows. This
|
||||
document provides some help on installing and setting up E-MailRelay as a
|
||||
store-and-forward MTA on Windows 98.
|
||||
E-MailRelay has been developed on Linux and the documentation relates to
|
||||
Unix-like operating systems rather than Microsoft Windows. This document
|
||||
was written from the perspective of setting up E-MailRelay as a
|
||||
store-and-forward MTA on Windows 98 and it may or may not be relevant to more
|
||||
up-to-date versions of Windows.
|
||||
|
||||
Quick start
|
||||
------------
|
||||
@ -94,12 +95,11 @@ server for outgoing mail you should tell it to use "localhost" or "127.0.0.1".
|
||||
|
||||
Uninstall
|
||||
---------
|
||||
If you have ever registered the executable as a COM component, then deregister it
|
||||
using the "-unregserver" command-line switch. Then just delete the files under
|
||||
"Program Files\emailrelay" and "<windir>\spool\emailrelay", and remove any
|
||||
taskbar, desktop or "Start->Programs->StartUp" shortcuts.
|
||||
To uninstall just delete the files under "Program Files\emailrelay" and
|
||||
"<windir>\spool\emailrelay", and remove any taskbar, desktop or
|
||||
"Start->Programs->StartUp" shortcuts.
|
||||
|
||||
|
||||
|
||||
|
||||
Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>. All rights reserved.
|
||||
|
@ -1,11 +1,11 @@
|
||||
Summary: Simple e-mail message transfer agent and proxy using SMTP
|
||||
Name: emailrelay
|
||||
Version: 1.3.3
|
||||
Version: 1.4
|
||||
Release: 1
|
||||
License: GPL
|
||||
Group: System Environment/Daemons
|
||||
URL: http://emailrelay.sourceforge.net/
|
||||
Source: http://kent.dl.sourceforge.net/sourceforge/emailrelay/emailrelay-src-1.3.3.tar.gz
|
||||
Source: http://kent.dl.sourceforge.net/sourceforge/emailrelay/emailrelay-src-1.4.tar.gz
|
||||
BuildRoot: /tmp/emailrelay-install
|
||||
|
||||
%description
|
||||
@ -20,6 +20,8 @@ Because of its functional simplicity E-MailRelay is easy to configure, typically
|
||||
only requiring the address of the target SMTP server to be put on the command
|
||||
line.
|
||||
|
||||
E-MailRelay can also run as a POP3 server.
|
||||
|
||||
C++ source code is available for Linux, FreeBSD, MacOS X etc, and Windows.
|
||||
Distribution is under the GNU General Public License.
|
||||
|
||||
@ -45,8 +47,9 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
|
||||
%files
|
||||
|
||||
%config /etc/emailrelay.conf
|
||||
/etc/emailrelay.conf.template
|
||||
/etc/init.d/emailrelay
|
||||
/usr/lib/emailrelay/emailrelay-poke
|
||||
/usr/lib/emailrelay-poke
|
||||
/usr/sbin/emailrelay
|
||||
/usr/sbin/emailrelay-passwd
|
||||
/usr/sbin/emailrelay-submit
|
||||
@ -60,6 +63,7 @@ test "$RPM_BUILD_ROOT" = "/" || rm -rf "$RPM_BUILD_ROOT"
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-notify.sh
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-process.sh
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-resubmit.sh
|
||||
/usr/share/doc/emailrelay/examples/emailrelay-submit.sh
|
||||
/usr/share/doc/emailrelay/index.html
|
||||
/usr/share/doc/emailrelay/NEWS
|
||||
/usr/share/doc/emailrelay/*.png
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
@ -17,5 +17,7 @@
|
||||
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
##
|
||||
#
|
||||
EXTRA_DIST = emailrelay.conf
|
||||
e_sysconf_DATA = emailrelay.conf
|
||||
EXTRA_DIST = emailrelay.conf.template
|
||||
sysconf_DATA = emailrelay.conf.template
|
||||
install-data-hook:
|
||||
if test -f "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; then : ; else cp "$(DESTDIR)$(sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; fi
|
||||
|
@ -46,9 +46,9 @@ CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__installdirs = "$(DESTDIR)$(e_sysconfdir)"
|
||||
e_sysconfDATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(e_sysconf_DATA)
|
||||
am__installdirs = "$(DESTDIR)$(sysconfdir)"
|
||||
sysconfDATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(sysconf_DATA)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
@ -83,10 +83,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -97,6 +101,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -119,11 +124,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -144,12 +145,12 @@ target_alias = @target_alias@
|
||||
|
||||
#
|
||||
#
|
||||
EXTRA_DIST = emailrelay.conf
|
||||
e_sysconf_DATA = emailrelay.conf
|
||||
EXTRA_DIST = emailrelay.conf.template
|
||||
sysconf_DATA = emailrelay.conf.template
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -174,27 +175,27 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
install-e_sysconfDATA: $(e_sysconf_DATA)
|
||||
install-sysconfDATA: $(sysconf_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(e_sysconfdir)" || $(mkdir_p) "$(DESTDIR)$(e_sysconfdir)"
|
||||
@list='$(e_sysconf_DATA)'; for p in $$list; do \
|
||||
test -z "$(sysconfdir)" || $(mkdir_p) "$(DESTDIR)$(sysconfdir)"
|
||||
@list='$(sysconf_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " $(e_sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(e_sysconfdir)/$$f'"; \
|
||||
$(e_sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(e_sysconfdir)/$$f"; \
|
||||
echo " $(sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \
|
||||
$(sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-e_sysconfDATA:
|
||||
uninstall-sysconfDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(e_sysconf_DATA)'; for p in $$list; do \
|
||||
@list='$(sysconf_DATA)'; for p in $$list; do \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " rm -f '$(DESTDIR)$(e_sysconfdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(e_sysconfdir)/$$f"; \
|
||||
echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
@ -234,7 +235,7 @@ check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(DATA)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(e_sysconfdir)"; do \
|
||||
for dir in "$(DESTDIR)$(sysconfdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
@ -279,9 +280,11 @@ info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-e_sysconfDATA
|
||||
install-data-am:
|
||||
@$(NORMAL_INSTALL)
|
||||
$(MAKE) $(AM_MAKEFLAGS) install-data-hook
|
||||
|
||||
install-exec-am:
|
||||
install-exec-am: install-sysconfDATA
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
@ -305,18 +308,19 @@ ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-e_sysconfDATA uninstall-info-am
|
||||
uninstall-am: uninstall-info-am uninstall-sysconfDATA
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am \
|
||||
install-e_sysconfDATA install-exec install-exec-am \
|
||||
install-info install-info-am install-man install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
|
||||
pdf-am ps ps-am uninstall uninstall-am uninstall-e_sysconfDATA \
|
||||
uninstall-info-am
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip install-sysconfDATA installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
|
||||
uninstall-am uninstall-info-am uninstall-sysconfDATA
|
||||
|
||||
install-data-hook:
|
||||
if test -f "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; then : ; else cp "$(DESTDIR)$(sysconfdir)/emailrelay.conf.template" "$(DESTDIR)$(sysconfdir)/emailrelay.conf" ; fi
|
||||
# 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:
|
||||
|
@ -1,11 +1,11 @@
|
||||
#
|
||||
# emailrelay.conf
|
||||
#
|
||||
# This is a configuration file for emailrelay (http://emailrelay.sf.net).
|
||||
# It is used by the emailrelay init.d script when it starts up an emailrelay
|
||||
# This is a configuration file for E-MailRelay (http://emailrelay.sf.net).
|
||||
# It is used by the emailrelay "init.d" script when it starts up an emailrelay
|
||||
# server.
|
||||
#
|
||||
# The init.d script constructs an emailrelay command-line by starting
|
||||
# The "init.d" script constructs an emailrelay command-line by starting
|
||||
# with "--as-server --pid-file ..." and then contatenating uncommented lines
|
||||
# from this file, prefixing each with "--".
|
||||
#
|
||||
@ -15,32 +15,40 @@
|
||||
|
||||
# Name: remote-clients
|
||||
# Format: remote-clients
|
||||
# Description: Allows remote clients to connect.
|
||||
# Description: Allows remote clients to connect. By default only local
|
||||
# clients can connect to the server and connections from remote clients
|
||||
# are rejected.
|
||||
#
|
||||
#remote-clients
|
||||
|
||||
# Name: spool-dir
|
||||
# Format: spool-dir <dir>
|
||||
# Description: Specifies the spool directory. The default is compiled into the
|
||||
# program, but it is typically /var/spool/emailrelay.
|
||||
# program, but it is typically "/var/spool/emailrelay".
|
||||
#
|
||||
#spool-dir /var/spool/emailrelay
|
||||
|
||||
# Name: interface
|
||||
# Format: interface <ip-address>
|
||||
# Description: Specifies an interface to listen on.
|
||||
# Description: Specifies an interface to listen on. The default is to listen
|
||||
# on all interfaces (INADDR_ANY). Using a specific interface can make it harder
|
||||
# for clients on other sub-networks to connect, so improving security.
|
||||
#
|
||||
#interface 192.168.0.10
|
||||
|
||||
# Name: filter
|
||||
# Format: filter <program>
|
||||
# Description: Defines a mail processor program which is run as each message is stored.
|
||||
# The program or script is given the name of each message file on the command-line,
|
||||
# giving it the opportunity to edit, copy or delete it.
|
||||
#
|
||||
#filter /usr/local/bin/emailrelay-filter
|
||||
|
||||
# Name: server-auth
|
||||
# Format: server-auth <file>
|
||||
# Description: Enables authentication of remote clients, using the given secrets file.
|
||||
# Description: Enables authentication of remote SMTP clients, using the given secrets file.
|
||||
# The secrets file contains usernames and passwords, either in plain-text or as MD5
|
||||
# digests.
|
||||
#
|
||||
#server-auth /etc/emailrelay.auth
|
||||
|
||||
@ -53,6 +61,8 @@
|
||||
# Name: client-auth
|
||||
# Format: client-auth <file>
|
||||
# Description: Enables authentication with the remote server, using the given secrets file.
|
||||
# The secrets file contains the username and password that E-MailRelay uses to connect
|
||||
# to the remove SMTP server.
|
||||
#
|
||||
#client-auth /etc/emailrelay.auth
|
||||
|
||||
@ -134,3 +144,35 @@
|
||||
#
|
||||
#verifier /usr/local/bin/emailrelay-verifier
|
||||
|
||||
# Name: pop
|
||||
# Format: pop
|
||||
# Description: Enables the pop server if enabled at build-time: use "./configure --enable-pop".
|
||||
#
|
||||
#pop
|
||||
|
||||
# Name: pop-port
|
||||
# Format: pop-port <port-number>
|
||||
# Description: Specifies the POP3 listening port number.
|
||||
#
|
||||
#pop-port 110
|
||||
|
||||
# Name: pop-auth
|
||||
# Name: pop-auth
|
||||
# Format: pop-auth <file>
|
||||
# Description: Specifies the pop server's authentication secrets file.
|
||||
#
|
||||
#pop-auth /etc/emailrelay.auth
|
||||
|
||||
# Name: pop-no-delete
|
||||
# Format: pop-no-delete
|
||||
# Description: Prevents the pop server from deleting messages.
|
||||
#
|
||||
#pop-no-delete
|
||||
|
||||
# Name: pop-by-name
|
||||
# Format: pop-by-name
|
||||
# Description: Serves messages from a user-specific subdirectory of the main spool directory.
|
||||
#
|
||||
#pop-by-name
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
|
@ -88,10 +88,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -102,6 +106,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -124,11 +129,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -153,7 +154,7 @@ SUBDIRS = gcc2.95 msvc6.0 sunpro5
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -178,9 +179,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
|
@ -82,10 +82,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -96,6 +100,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -118,11 +123,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -144,7 +145,7 @@ EXTRA_DIST = iostream limits sstream xlocale
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -169,9 +170,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
|
@ -82,10 +82,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -96,6 +100,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -118,11 +123,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -144,7 +145,7 @@ EXTRA_DIST = cstdio cstdlib cstring ctime cmath cstddef
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -169,9 +170,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
|
@ -79,10 +79,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -93,6 +97,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -115,11 +120,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -144,7 +145,7 @@ EXTRA_DIST = xar
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -169,9 +170,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
# Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
@ -17,5 +17,5 @@
|
||||
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
##
|
||||
#
|
||||
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.xcode/root.pbxuser emailrelay.xcode/root.mode1 emailrelay.xcode/project.pbxproj
|
||||
SUBDIRS = glib gnet gsmtp main win32
|
||||
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.dsw
|
||||
SUBDIRS = glib gnet gsmtp gpop main win32
|
||||
|
@ -88,10 +88,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -102,6 +106,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -124,11 +129,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -149,12 +150,12 @@ target_alias = @target_alias@
|
||||
|
||||
#
|
||||
#
|
||||
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.xcode/root.pbxuser emailrelay.xcode/root.mode1 emailrelay.xcode/project.pbxproj
|
||||
SUBDIRS = glib gnet gsmtp main win32
|
||||
EXTRA_DIST = mingw.mak mingw-common.mak emailrelay.dsw
|
||||
SUBDIRS = glib gnet gsmtp gpop main win32
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -179,9 +180,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
uninstall-info-am:
|
||||
|
||||
@ -302,7 +303,6 @@ distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/emailrelay.xcode
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
|
86
src/emailrelay.dsw
Normal file
86
src/emailrelay.dsw
Normal file
@ -0,0 +1,86 @@
|
||||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "common"=".\main\common.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "emailrelay"=".\main\emailrelay.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name common
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "passwd"=".\main\passwd.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name common
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "poke"=".\main\poke.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "submit"=".\main\submit.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
Begin Project Dependency
|
||||
Project_Dep_Name common
|
||||
End Project Dependency
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,494 +0,0 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
08FB7793FE84155DC02AAC07 = {
|
||||
activeBuildStyle = 014CEA460018CE2711CA2923;
|
||||
activeExecutable = EEE595460892D775004821BA;
|
||||
activeTarget = EEE595440892D775004821BA;
|
||||
addToTargets = (
|
||||
);
|
||||
codeSenseManager = EE95C3C30892C55A0013D546;
|
||||
executables = (
|
||||
EE95C2030892C4C80013D546,
|
||||
EE95C3F40892C9620013D546,
|
||||
EE95C3FD0892C9920013D546,
|
||||
EEE595460892D775004821BA,
|
||||
);
|
||||
perUserDictionary = {
|
||||
PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
20,
|
||||
358.8799,
|
||||
201.2085,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXErrorsWarningsDataSource_TypeID,
|
||||
PBXErrorsWarningsDataSource_MessageID,
|
||||
PBXErrorsWarningsDataSource_LocationID,
|
||||
);
|
||||
};
|
||||
PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
22,
|
||||
364.7974,
|
||||
193.5835,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXExecutablesDataSource_ActiveFlagID,
|
||||
PBXExecutablesDataSource_NameID,
|
||||
PBXExecutablesDataSource_CommentsID,
|
||||
);
|
||||
};
|
||||
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
20,
|
||||
352,
|
||||
20,
|
||||
66,
|
||||
43,
|
||||
43,
|
||||
20,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXFileDataSource_FiletypeID,
|
||||
PBXFileDataSource_Filename_ColumnID,
|
||||
PBXFileDataSource_Built_ColumnID,
|
||||
PBXFileDataSource_ObjectSize_ColumnID,
|
||||
PBXFileDataSource_Errors_ColumnID,
|
||||
PBXFileDataSource_Warnings_ColumnID,
|
||||
PBXFileDataSource_Target_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
|
||||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
|
||||
PBXFileTableDataSourceColumnWidthsKey = (
|
||||
20,
|
||||
302,
|
||||
68,
|
||||
20,
|
||||
68,
|
||||
43,
|
||||
43,
|
||||
);
|
||||
PBXFileTableDataSourceColumnsKey = (
|
||||
PBXFileDataSource_FiletypeID,
|
||||
PBXFileDataSource_Filename_ColumnID,
|
||||
PBXTargetDataSource_PrimaryAttribute,
|
||||
PBXFileDataSource_Built_ColumnID,
|
||||
PBXFileDataSource_ObjectSize_ColumnID,
|
||||
PBXFileDataSource_Errors_ColumnID,
|
||||
PBXFileDataSource_Warnings_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 143840430;
|
||||
PBXPrepackagedSmartGroups_v2 = (
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
activationKey = OldTargetSmartGroup;
|
||||
clz = PBXTargetSmartGroup;
|
||||
description = "Displays all targets of the project.";
|
||||
globalID = 1C37FABC04509CD000000102;
|
||||
name = Targets;
|
||||
preferences = {
|
||||
image = Targets;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXTargetSmartGroup2;
|
||||
description = "Displays all targets of the project as well as nested build phases.";
|
||||
globalID = 1C37FBAC04509CD000000102;
|
||||
name = Targets;
|
||||
preferences = {
|
||||
image = Targets;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXExecutablesSmartGroup;
|
||||
description = "Displays all executables of the project.";
|
||||
globalID = 1C37FAAC04509CD000000102;
|
||||
name = Executables;
|
||||
preferences = {
|
||||
image = Executable;
|
||||
};
|
||||
},
|
||||
{
|
||||
" PBXTransientLocationAtTop " = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXErrorsWarningsSmartGroup;
|
||||
description = "Displays files with errors or warnings.";
|
||||
globalID = 1C08E77C0454961000C914BD;
|
||||
name = "Errors and Warnings";
|
||||
preferences = {
|
||||
fnmatch = "";
|
||||
image = WarningsErrors;
|
||||
recursive = 1;
|
||||
regex = "";
|
||||
root = "<PROJECT>";
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXFilenameSmartGroup;
|
||||
description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
|
||||
globalID = 1CC0EA4004350EF90044410B;
|
||||
name = "Implementation Files";
|
||||
preferences = {
|
||||
canSave = 1;
|
||||
fnmatch = "";
|
||||
image = SmartFolder;
|
||||
isLeaf = 0;
|
||||
recursive = 1;
|
||||
regex = "?*\\.[mcMC]";
|
||||
root = "<PROJECT>";
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXFilenameSmartGroup;
|
||||
description = "This group displays Interface Builder NIB Files.";
|
||||
globalID = 1CC0EA4004350EF90041110B;
|
||||
name = "NIB Files";
|
||||
preferences = {
|
||||
canSave = 1;
|
||||
fnmatch = "*.nib";
|
||||
image = SmartFolder;
|
||||
isLeaf = 0;
|
||||
recursive = 1;
|
||||
regex = "";
|
||||
root = "<PROJECT>";
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = no;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXFindSmartGroup;
|
||||
description = "Displays Find Results.";
|
||||
globalID = 1C37FABC05509CD000000102;
|
||||
name = "Find Results";
|
||||
preferences = {
|
||||
image = spyglass;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = no;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXBookmarksSmartGroup;
|
||||
description = "Displays Project Bookmarks.";
|
||||
globalID = 1C37FABC05539CD112110102;
|
||||
name = Bookmarks;
|
||||
preferences = {
|
||||
image = Bookmarks;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = XCSCMSmartGroup;
|
||||
description = "Displays files with interesting SCM status.";
|
||||
globalID = E2644B35053B69B200211256;
|
||||
name = SCM;
|
||||
preferences = {
|
||||
image = PBXRepository;
|
||||
isLeaf = 0;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXSymbolsSmartGroup;
|
||||
description = "Displays all symbols for the project.";
|
||||
globalID = 1C37FABC04509CD000100104;
|
||||
name = "Project Symbols";
|
||||
preferences = {
|
||||
image = ProjectSymbols;
|
||||
isLeaf = 1;
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXFilenameSmartGroup;
|
||||
description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
|
||||
globalID = PBXTemplateMarker;
|
||||
name = "Simple Filter SmartGroup";
|
||||
preferences = {
|
||||
canSave = 1;
|
||||
fnmatch = "*.nib";
|
||||
image = SmartFolder;
|
||||
isLeaf = 0;
|
||||
recursive = 1;
|
||||
regex = "";
|
||||
root = "<PROJECT>";
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
absolutePathToBundle = "";
|
||||
clz = PBXFilenameSmartGroup;
|
||||
description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter.";
|
||||
globalID = PBXTemplateMarker;
|
||||
name = "Simple Regular Expression SmartGroup";
|
||||
preferences = {
|
||||
canSave = 1;
|
||||
fnmatch = "";
|
||||
image = SmartFolder;
|
||||
isLeaf = 0;
|
||||
recursive = 1;
|
||||
regex = "?*\\.[mcMC]";
|
||||
root = "<PROJECT>";
|
||||
};
|
||||
},
|
||||
{
|
||||
PBXTransientLocationAtTop = bottom;
|
||||
clz = XDDesignSmartGroup;
|
||||
description = "Displays Xdesign models";
|
||||
globalID = 2E4A936305E6979E00701470;
|
||||
name = Design;
|
||||
preferences = {
|
||||
image = Design;
|
||||
isLeaf = 0;
|
||||
};
|
||||
},
|
||||
);
|
||||
PBXWorkspaceStateSaveDate = 143840430;
|
||||
};
|
||||
perUserProjectItems = {
|
||||
EE95C4CD0892D4880013D546 = EE95C4CD0892D4880013D546;
|
||||
EEE5954E0892D8A3004821BA = EEE5954E0892D8A3004821BA;
|
||||
};
|
||||
sourceControlManager = EE95C3C20892C55A0013D546;
|
||||
userBuildSettings = {
|
||||
};
|
||||
};
|
||||
8DD76F620486A84900D96B5E = {
|
||||
activeExec = 0;
|
||||
executables = (
|
||||
EE95C2030892C4C80013D546,
|
||||
);
|
||||
};
|
||||
C6859E8B029090EE04C91782 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 1119}}";
|
||||
sepNavSelRange = "{0, 0}";
|
||||
sepNavVisRect = "{{0, 0}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{38, 162}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C2030892C4C80013D546 = {
|
||||
activeArgIndex = 2147483647;
|
||||
activeArgIndices = (
|
||||
);
|
||||
argumentStrings = (
|
||||
);
|
||||
configStateDict = {
|
||||
};
|
||||
cppStopOnCatchEnabled = 0;
|
||||
cppStopOnThrowEnabled = 0;
|
||||
customDataFormattersEnabled = 1;
|
||||
debuggerPlugin = GDBDebugging;
|
||||
disassemblyDisplayState = 0;
|
||||
enableDebugStr = 1;
|
||||
environmentEntries = (
|
||||
);
|
||||
isa = PBXExecutable;
|
||||
libgmallocEnabled = 0;
|
||||
name = emailrelay;
|
||||
shlibInfoDictList = (
|
||||
);
|
||||
sourceDirectories = (
|
||||
);
|
||||
};
|
||||
EE95C2060892C4E50013D546 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 3093}}";
|
||||
sepNavSelRange = "{0, 0}";
|
||||
sepNavVisRect = "{{0, 2665}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{15, 183}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C2190892C4E50013D546 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {821, 2827}}";
|
||||
sepNavSelRange = "{1608, 38}";
|
||||
sepNavVisRect = "{{0, 2632}, {821, 90}}";
|
||||
sepNavWindowFrame = "{{107, 99}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C22A0892C4E50013D546 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 2925}}";
|
||||
sepNavSelRange = "{0, 0}";
|
||||
sepNavVisRect = "{{0, 0}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{38, 162}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C2C10892C50F0013D546 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 559}}";
|
||||
sepNavSelRange = "{0, 0}";
|
||||
sepNavVisRect = "{{0, 131}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{107, 99}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C3C20892C55A0013D546 = {
|
||||
fallbackIsa = XCSourceControlManager;
|
||||
isSCMEnabled = 0;
|
||||
isa = PBXSourceControlManager;
|
||||
scmConfiguration = {
|
||||
};
|
||||
scmType = "";
|
||||
};
|
||||
EE95C3C30892C55A0013D546 = {
|
||||
indexTemplatePath = "";
|
||||
isa = PBXCodeSenseManager;
|
||||
usesDefaults = 1;
|
||||
wantsCodeCompletion = 1;
|
||||
wantsCodeCompletionAutoSuggestions = 0;
|
||||
wantsCodeCompletionCaseSensitivity = 1;
|
||||
wantsCodeCompletionListAlways = 1;
|
||||
wantsCodeCompletionOnlyMatchingItems = 1;
|
||||
wantsCodeCompletionParametersIncluded = 1;
|
||||
wantsCodeCompletionPlaceholdersInserted = 1;
|
||||
wantsCodeCompletionTabCompletes = 1;
|
||||
wantsIndex = 1;
|
||||
};
|
||||
EE95C3F20892C9620013D546 = {
|
||||
activeExec = 0;
|
||||
executables = (
|
||||
EE95C3F40892C9620013D546,
|
||||
);
|
||||
};
|
||||
EE95C3F40892C9620013D546 = {
|
||||
activeArgIndex = 2147483647;
|
||||
activeArgIndices = (
|
||||
);
|
||||
argumentStrings = (
|
||||
);
|
||||
configStateDict = {
|
||||
};
|
||||
cppStopOnCatchEnabled = 0;
|
||||
cppStopOnThrowEnabled = 0;
|
||||
customDataFormattersEnabled = 1;
|
||||
debuggerPlugin = GDBDebugging;
|
||||
disassemblyDisplayState = 0;
|
||||
enableDebugStr = 1;
|
||||
environmentEntries = (
|
||||
);
|
||||
isa = PBXExecutable;
|
||||
libgmallocEnabled = 0;
|
||||
name = "emailrelay-passwd";
|
||||
shlibInfoDictList = (
|
||||
);
|
||||
sourceDirectories = (
|
||||
);
|
||||
};
|
||||
EE95C3FB0892C9920013D546 = {
|
||||
activeExec = 0;
|
||||
executables = (
|
||||
EE95C3FD0892C9920013D546,
|
||||
);
|
||||
};
|
||||
EE95C3FD0892C9920013D546 = {
|
||||
activeArgIndex = 2147483647;
|
||||
activeArgIndices = (
|
||||
);
|
||||
argumentStrings = (
|
||||
);
|
||||
configStateDict = {
|
||||
};
|
||||
cppStopOnCatchEnabled = 0;
|
||||
cppStopOnThrowEnabled = 0;
|
||||
customDataFormattersEnabled = 1;
|
||||
debuggerPlugin = GDBDebugging;
|
||||
disassemblyDisplayState = 0;
|
||||
enableDebugStr = 1;
|
||||
environmentEntries = (
|
||||
);
|
||||
isa = PBXExecutable;
|
||||
libgmallocEnabled = 0;
|
||||
name = "emailrelay-submit";
|
||||
shlibInfoDictList = (
|
||||
);
|
||||
sourceDirectories = (
|
||||
);
|
||||
};
|
||||
EE95C4C70892D4370013D546 = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 1021}}";
|
||||
sepNavSelRange = "{0, 0}";
|
||||
sepNavVisRect = "{{0, 399}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{61, 141}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EE95C4CD0892D4880013D546 = {
|
||||
fRef = EE95C2190892C4E50013D546;
|
||||
isa = PBXTextBookmark;
|
||||
name = "\t\t#error invalid compilation switches\n";
|
||||
rLen = 38;
|
||||
rLoc = 1608;
|
||||
rType = 0;
|
||||
vrLen = 128;
|
||||
vrLoc = 4592;
|
||||
};
|
||||
EEE5953F0892D762004821BA = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {711, 3079}}";
|
||||
sepNavSelRange = "{795, 0}";
|
||||
sepNavVisRect = "{{0, 231}, {711, 428}}";
|
||||
sepNavWindowFrame = "{{15, 183}, {750, 558}}";
|
||||
};
|
||||
};
|
||||
EEE595440892D775004821BA = {
|
||||
activeExec = 0;
|
||||
executables = (
|
||||
EEE595460892D775004821BA,
|
||||
);
|
||||
};
|
||||
EEE595460892D775004821BA = {
|
||||
activeArgIndex = 2147483647;
|
||||
activeArgIndices = (
|
||||
);
|
||||
argumentStrings = (
|
||||
);
|
||||
configStateDict = {
|
||||
};
|
||||
cppStopOnCatchEnabled = 0;
|
||||
cppStopOnThrowEnabled = 0;
|
||||
customDataFormattersEnabled = 1;
|
||||
debuggerPlugin = GDBDebugging;
|
||||
disassemblyDisplayState = 0;
|
||||
enableDebugStr = 1;
|
||||
environmentEntries = (
|
||||
);
|
||||
isa = PBXExecutable;
|
||||
libgmallocEnabled = 0;
|
||||
name = "emailrelay-poke";
|
||||
shlibInfoDictList = (
|
||||
);
|
||||
sourceDirectories = (
|
||||
);
|
||||
};
|
||||
EEE5954E0892D8A3004821BA = {
|
||||
fRef = EE95C2190892C4E50013D546;
|
||||
isa = PBXTextBookmark;
|
||||
name = "\t\t#error invalid compilation switches\n";
|
||||
rLen = 38;
|
||||
rLoc = 1608;
|
||||
rType = 0;
|
||||
vrLen = 128;
|
||||
vrLoc = 4592;
|
||||
};
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
## Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
## Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or
|
||||
## modify it under the terms of the GNU General Public License
|
||||
@ -94,5 +94,7 @@ libglib_a_SOURCES = \
|
||||
gstr.h \
|
||||
gstrings.h \
|
||||
gtime.cpp \
|
||||
gtime.h
|
||||
gtime.h \
|
||||
gxtext.cpp \
|
||||
gxtext.h
|
||||
|
||||
|
@ -60,7 +60,7 @@ am_libglib_a_OBJECTS = md5.$(OBJEXT) garg.$(OBJEXT) \
|
||||
glogoutput.$(OBJEXT) glogoutput_unix.$(OBJEXT) \
|
||||
gmd5_native.$(OBJEXT) gpath.$(OBJEXT) gpidfile.$(OBJEXT) \
|
||||
gprocess_unix.$(OBJEXT) groot.$(OBJEXT) gslot.$(OBJEXT) \
|
||||
gstr.$(OBJEXT) gtime.$(OBJEXT)
|
||||
gstr.$(OBJEXT) gtime.$(OBJEXT) gxtext.$(OBJEXT)
|
||||
libglib_a_OBJECTS = $(am_libglib_a_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
@ -82,7 +82,8 @@ am__depfiles_maybe = depfiles
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/gpidfile.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/gprocess_unix.Po ./$(DEPDIR)/groot.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/gslot.Po ./$(DEPDIR)/gstr.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/gtime.Po ./$(DEPDIR)/md5.Po
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/gtime.Po ./$(DEPDIR)/gxtext.Po \
|
||||
@AMDEP_TRUE@ ./$(DEPDIR)/md5.Po
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
@ -130,10 +131,14 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
IP = @IP@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKE = @MAKE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
@ -144,6 +149,7 @@ PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
POPLIB = @POPLIB@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
@ -166,11 +172,7 @@ datadir = @datadir@
|
||||
e_docdir = @e_docdir@
|
||||
e_examplesdir = @e_examplesdir@
|
||||
e_initdir = @e_initdir@
|
||||
e_libexecdir = @e_libexecdir@
|
||||
e_man1dir = @e_man1dir@
|
||||
e_sbindir = @e_sbindir@
|
||||
e_spooldir = @e_spooldir@
|
||||
e_sysconfdir = @e_sysconfdir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
includedir = @includedir@
|
||||
@ -269,13 +271,15 @@ libglib_a_SOURCES = \
|
||||
gstr.h \
|
||||
gstrings.h \
|
||||
gtime.cpp \
|
||||
gtime.h
|
||||
gtime.h \
|
||||
gxtext.cpp \
|
||||
gxtext.h
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .cpp .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
@ -300,9 +304,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
@ -345,6 +349,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gslot.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstr.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtime.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gxtext.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
|
||||
|
||||
.cpp.o:
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -42,6 +42,10 @@ class G::Cleanup
|
||||
public:
|
||||
G_EXCEPTION( Error , "cleanup error" ) ;
|
||||
|
||||
static void init() ;
|
||||
// An optional early-initialisation function.
|
||||
// May be called more than once.
|
||||
|
||||
static void add( void (*fn)(const char*) , const char * arg ) ;
|
||||
// Adds the given handler to the list which
|
||||
// are to be called when the process
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -48,6 +48,7 @@ public:
|
||||
static void add( void (*fn)(const char*) , const char * ) ;
|
||||
static void installDefault( int ) ;
|
||||
static void callHandlers() ;
|
||||
static void ignore( int ) ;
|
||||
|
||||
private:
|
||||
static void init() ;
|
||||
@ -72,6 +73,11 @@ G::CleanupImp::Link * G::CleanupImp::m_tail = NULL ;
|
||||
|
||||
// ===
|
||||
|
||||
void G::Cleanup::init()
|
||||
{
|
||||
CleanupImp::ignore( SIGPIPE ) ;
|
||||
}
|
||||
|
||||
void G::Cleanup::add( void (*fn)(const char*) , const char * arg )
|
||||
{
|
||||
if( arg != NULL )
|
||||
@ -82,10 +88,13 @@ void G::Cleanup::add( void (*fn)(const char*) , const char * arg )
|
||||
|
||||
void G::CleanupImp::init()
|
||||
{
|
||||
// install our meta-handler for signals that normally terminate the process,
|
||||
// except for sigpipe which we ignore
|
||||
//
|
||||
ignore( SIGPIPE ) ;
|
||||
installHandler( SIGTERM ) ;
|
||||
installHandler( SIGINT ) ;
|
||||
installHandler( SIGHUP ) ;
|
||||
installHandler( SIGPIPE ) ;
|
||||
installHandler( SIGQUIT ) ;
|
||||
//installHandler( SIGUSR1 ) ;
|
||||
//installHandler( SIGUSR2 ) ;
|
||||
@ -129,6 +138,7 @@ bool G::CleanupImp::ignored( int signum )
|
||||
|
||||
void G::CleanupImp::install( int signum , Handler fn )
|
||||
{
|
||||
// install the given handler, or the system default if null
|
||||
static struct sigaction zero_action ;
|
||||
struct sigaction action( zero_action ) ;
|
||||
action.sa_handler = fn ? fn : SIG_DFL ;
|
||||
@ -136,6 +146,16 @@ void G::CleanupImp::install( int signum , Handler fn )
|
||||
throw Error( "sigaction" ) ;
|
||||
}
|
||||
|
||||
void G::CleanupImp::ignore( int signum )
|
||||
{
|
||||
static struct sigaction zero_action ;
|
||||
struct sigaction action( zero_action ) ;
|
||||
action.sa_handler = SIG_IGN ;
|
||||
if( ::sigaction( signum , &action , NULL ) )
|
||||
throw Error( "sigaction" ) ;
|
||||
}
|
||||
|
||||
|
||||
void G::CleanupImp::callHandlers()
|
||||
{
|
||||
G::Root claim_root ;
|
||||
@ -148,6 +168,7 @@ void G::CleanupImp::callHandlers()
|
||||
extern "C"
|
||||
void gcleanup_unix_handler_( int signum )
|
||||
{
|
||||
// call the registered handler(s) and then do the system default action
|
||||
try
|
||||
{
|
||||
G::CleanupImp::callHandlers() ;
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -24,6 +24,11 @@
|
||||
#include "gdef.h"
|
||||
#include "gcleanup.h"
|
||||
|
||||
void G::Cleanup::init()
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
|
||||
void G::Cleanup::add( void (*)(const char*) , const char * )
|
||||
{
|
||||
// not implemented
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -62,20 +62,24 @@ public:
|
||||
// Virtual destructor.
|
||||
|
||||
bool valid( bool for_creating_files = false ) const ;
|
||||
// Returns true if the object
|
||||
// represents a valid directory.
|
||||
// Returns true if the object represents a valid
|
||||
// directory.
|
||||
//
|
||||
// Does additional checks if the
|
||||
// 'for-creating-files' parameter
|
||||
// is true. But note that the
|
||||
// answer is not definitive --
|
||||
// file creation may fail, even
|
||||
// if valid() returns true.
|
||||
// Does additional checks if the 'for-creating-files'
|
||||
// parameter is true. But note that the answer is not
|
||||
// definitive -- file creation may fail, even if
|
||||
// valid() returns true. For a more accurate test
|
||||
// use writeable().
|
||||
|
||||
bool writeable( std::string probe_filename = tmp() ) const ;
|
||||
// Tries to create and then delete an empty test file
|
||||
// in the directory. Returns true on success.
|
||||
// Precondition: valid()
|
||||
|
||||
Path path() const ;
|
||||
// Returns the directory's path.
|
||||
|
||||
Directory( const Directory &other ) ;
|
||||
Directory( const Directory & other ) ;
|
||||
// Copy constructor.
|
||||
|
||||
Directory &operator=( const Directory & ) ;
|
||||
@ -85,6 +89,12 @@ public:
|
||||
// Returns a root directory object. For DOSy file
|
||||
// systems this will not contain a drive part.
|
||||
|
||||
static std::string tmp() ;
|
||||
// A convenience function for constructing a
|
||||
// filename for writeable(). This is factored out
|
||||
// so that client code can minimise the time spent
|
||||
// with a privileged effective userid.
|
||||
|
||||
private:
|
||||
Path m_path ;
|
||||
} ;
|
||||
@ -97,7 +107,7 @@ private:
|
||||
class G::DirectoryIterator
|
||||
{
|
||||
public:
|
||||
explicit DirectoryIterator( const Directory &dir , const std::string & wc = std::string() ) ;
|
||||
explicit DirectoryIterator( const Directory & dir , const std::string & wc = std::string() ) ;
|
||||
// Constructor taking a directory reference
|
||||
// and an optional wildcard specification.
|
||||
|
||||
@ -132,7 +142,7 @@ private:
|
||||
void operator=( const DirectoryIterator & ) ;
|
||||
|
||||
private:
|
||||
DirectoryIteratorImp *m_imp ;
|
||||
DirectoryIteratorImp * m_imp ;
|
||||
} ;
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -23,13 +23,18 @@
|
||||
|
||||
#include "gdef.h"
|
||||
#include "gdirectory.h"
|
||||
#include "gprocess.h"
|
||||
#include "gdatetime.h"
|
||||
#include "gfs.h"
|
||||
#include "gfile.h"
|
||||
#include "gdebug.h"
|
||||
#include "glog.h"
|
||||
#include <sstream>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
#include <glob.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
namespace G
|
||||
{
|
||||
@ -42,32 +47,53 @@ bool G::Directory::valid( bool for_creation ) const
|
||||
struct stat statbuf ;
|
||||
if( ::stat( m_path.pathCstr() , &statbuf ) )
|
||||
{
|
||||
rc = false ;
|
||||
rc = false ; // doesnt exist
|
||||
}
|
||||
else if( !(statbuf.st_mode & S_IFDIR) )
|
||||
{
|
||||
rc = false ;
|
||||
rc = false ; // not a directory
|
||||
}
|
||||
else
|
||||
{
|
||||
DIR * p = ::opendir( m_path.pathCstr() ) ;
|
||||
if( p == NULL )
|
||||
rc = false ;
|
||||
rc = false ; // cant open directory for reading
|
||||
else
|
||||
::closedir( p ) ;
|
||||
}
|
||||
|
||||
if( rc && for_creation )
|
||||
{
|
||||
// (see also GNU/Linux ::euidaccess())
|
||||
// (not definitive -- see also GNU/Linux ::euidaccess())
|
||||
if( 0 != ::access( m_path.pathCstr() , W_OK ) )
|
||||
rc = false ;
|
||||
}
|
||||
|
||||
G_DEBUG( "G::Directory::valid: \"" << m_path.str() << "\" is " << (rc?"":"not ") << "a valid directory for " << (for_creation?"writing":"reading") ) ;
|
||||
return rc ;
|
||||
}
|
||||
|
||||
std::string G::Directory::tmp()
|
||||
{
|
||||
std::ostringstream ss ;
|
||||
ss << "." << DateTime::now() << "." << Process::Id() << ".tmp" ;
|
||||
return ss.str() ;
|
||||
}
|
||||
|
||||
bool G::Directory::writeable( std::string tmp_filename ) const
|
||||
{
|
||||
G::Path test_file( m_path ) ;
|
||||
if( tmp_filename.empty() ) tmp_filename = tmp() ;
|
||||
test_file.pathAppend( tmp_filename ) ;
|
||||
|
||||
int fd = ::open( test_file.str().c_str() , O_WRONLY | O_CREAT | O_EXCL , S_IRWXU ) ;
|
||||
if( fd == -1 )
|
||||
{
|
||||
return false ;
|
||||
}
|
||||
::close( fd ) ;
|
||||
bool ok = 0 == ::unlink( test_file.str().c_str() ) ;
|
||||
return ok ;
|
||||
}
|
||||
|
||||
// ===
|
||||
|
||||
// Class: G::DirectoryIteratorImp
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -45,6 +45,16 @@ bool G::Directory::valid( bool for_creation ) const
|
||||
return ( attributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 ;
|
||||
}
|
||||
|
||||
std::string G::Directory::tmp()
|
||||
{
|
||||
return std::string() ;
|
||||
}
|
||||
|
||||
bool G::Directory::writeable( std::string ) const
|
||||
{
|
||||
return true ; // not implemented
|
||||
}
|
||||
|
||||
// ===
|
||||
|
||||
// Class: G::DirectoryIteratorImp
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -65,7 +65,7 @@ void G::Exception::append( const std::string & more )
|
||||
|
||||
void G::Exception::append( std::ostream & stream )
|
||||
{
|
||||
std::stringstream * ss = dynamic_cast<std::stringstream*>(&stream) ;
|
||||
std::ostringstream * ss = dynamic_cast<std::ostringstream*>(&stream) ;
|
||||
if( ss != NULL )
|
||||
{
|
||||
append( ss->str() ) ;
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
@ -71,14 +71,14 @@ public:
|
||||
// Inserts a separator as needed.
|
||||
|
||||
void append( std::ostream & s ) ;
|
||||
// Appends the contents of the given std::stringstream
|
||||
// Appends the contents of the given std::ostringstream
|
||||
// (sic) to the what string. Does nothing if the
|
||||
// dynamic type of 's' is not a std::stringstream.
|
||||
// dynamic type of 's' is not a std::ostringstream.
|
||||
// Inserts a separator as needed.
|
||||
//
|
||||
// This method allows a derived-class exception
|
||||
// to be constructed and thrown on one
|
||||
// line using iostream formatting.
|
||||
// to be constructed and thrown on one line using
|
||||
// iostream formatting.
|
||||
// Eg. throw Error( std::ostringstream() << a << b ) ;
|
||||
} ;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (C) 2001-2005 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
// Copyright (C) 2001-2006 Graeme Walker <graeme_walker@users.sourceforge.net>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user