Merge branch 'rpm'
Conflicts: .gitignore
This commit is contained in:
commit
38e4449d4d
8
.gitignore
vendored
8
.gitignore
vendored
@ -2,9 +2,15 @@
|
|||||||
/config/
|
/config/
|
||||||
/pm_to_blib
|
/pm_to_blib
|
||||||
/blib/
|
/blib/
|
||||||
Makefile
|
|
||||||
|
# only ignore top-level Makefile; we need the one in packaging/rpm!
|
||||||
|
/Makefile
|
||||||
Makefile.[a-z]*
|
Makefile.[a-z]*
|
||||||
|
|
||||||
|
# ignore file produced by rpm build process
|
||||||
|
/packaging/rpm/qpsmtpd.spec
|
||||||
|
packaging/rpm/build/
|
||||||
|
|
||||||
*~
|
*~
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
152
packaging/rpm/Makefile
Normal file
152
packaging/rpm/Makefile
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
# -- generic Makefile for building RPM-based packages out of source
|
||||||
|
# code control systems (git, cvs, svn)
|
||||||
|
|
||||||
|
SCM_TYPE := git
|
||||||
|
SCM_PATH := ../../
|
||||||
|
#CVSROOT := $(shell cat 2>/dev/null src/CVS/Root)
|
||||||
|
#SVN_PATH := $(shell svn info ${SCM_PATH} 2>/dev/null | awk '/^URL:/{print $$2}')
|
||||||
|
#SVN_REV := $(shell svn info ${SVN_PATH} 2>/dev/null | awk '/^Last Changed Rev:/{print $$4}')
|
||||||
|
|
||||||
|
PACKAGE := $(shell cat PACKAGE)
|
||||||
|
VERSION := $(shell cat VERSION)
|
||||||
|
RELEASE := $(shell cat RELEASE)
|
||||||
|
BASE_VER := ${VERSION}-${RELEASE}
|
||||||
|
CURRENT_PACKAGE := $(PACKAGE)-$(BASE_VER)
|
||||||
|
TARBALL := $(CURRENT_PACKAGE).tar
|
||||||
|
|
||||||
|
DIRNAME := $(shell echo $${PWD})
|
||||||
|
DIRBASE := $(shell basename $${PWD})
|
||||||
|
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
.PHONY: clean mrclean distclean prepclean all default
|
||||||
|
.PHONY: rpm rpmdist buildrpm buildrpmdist
|
||||||
|
.PHONY: buildtarball buildtargz
|
||||||
|
.PHONY: builddir distdir prepbuildtarball
|
||||||
|
.PHONY: cvs-export git-export svn-export test-export
|
||||||
|
.PHONY: cvs-clean git-clean svn-clean test-clean
|
||||||
|
.PHONY: update
|
||||||
|
|
||||||
|
default: rpmdist
|
||||||
|
|
||||||
|
# -- the "rpmdist" target will build out of the SCM, but will
|
||||||
|
# use the user's default build settings (which in many cases
|
||||||
|
# is exposed as an RPM repository)
|
||||||
|
#
|
||||||
|
#rpmdist: buildrpmdist distclean
|
||||||
|
rpmdist: buildrpmdist
|
||||||
|
|
||||||
|
buildrpmdist: buildtargz
|
||||||
|
@rpmbuild \
|
||||||
|
--define "_package ${PACKAGE}" \
|
||||||
|
--define "_version ${VERSION}" \
|
||||||
|
--define "_release ${RELEASE}" \
|
||||||
|
-ta ./build/$(TARBALL).gz
|
||||||
|
|
||||||
|
# -- the "rpm" target will build out of the SCM, but will leave
|
||||||
|
# the resulting package in the relative ./build/ directory
|
||||||
|
#
|
||||||
|
rpm: buildrpm $(SCM_TYPE)-clean
|
||||||
|
|
||||||
|
buildrpm: buildtargz
|
||||||
|
@echo ${PACKAGE} ${VERSION} ${RELEASE}
|
||||||
|
@rpmbuild \
|
||||||
|
--define "_rpmdir ./build/" \
|
||||||
|
--define "_sourcedir ./build/" \
|
||||||
|
--define "_srcrpmdir ./build/" \
|
||||||
|
--define "_package ${PACKAGE}" \
|
||||||
|
--define "_version ${VERSION}" \
|
||||||
|
--define "_release ${RELEASE}" \
|
||||||
|
-ta ./build/$(TARBALL).gz
|
||||||
|
|
||||||
|
buildtarball: prepbuildtarball
|
||||||
|
@tar \
|
||||||
|
--create \
|
||||||
|
--directory ./build/ \
|
||||||
|
--file ./build/$(TARBALL) \
|
||||||
|
${CURRENT_PACKAGE}
|
||||||
|
|
||||||
|
buildtargz: buildtarball
|
||||||
|
@gzip -c < ./build/$(TARBALL) > ./build/$(TARBALL).gz
|
||||||
|
|
||||||
|
prepbuildtarball: $(SCM_TYPE)-export
|
||||||
|
${MAKE} update \
|
||||||
|
&& cp ${PACKAGE}.spec ./build/${CURRENT_PACKAGE} \
|
||||||
|
&& cp files/* ./build/
|
||||||
|
|
||||||
|
test-clean:
|
||||||
|
@cd .. \
|
||||||
|
&& rm "$(CURRENT_PACKAGE)"
|
||||||
|
|
||||||
|
test-export: builddir
|
||||||
|
@cd .. \
|
||||||
|
&& ln -snvf $(DIRBASE) $(CURRENT_PACKAGE) \
|
||||||
|
&& tar \
|
||||||
|
--create \
|
||||||
|
--dereference \
|
||||||
|
--to-stdout \
|
||||||
|
--exclude "*.git*" \
|
||||||
|
--exclude "*.svn*" \
|
||||||
|
--exclude "*/CVS/*" \
|
||||||
|
--exclude "$(CURRENT_PACKAGE)/build/*" \
|
||||||
|
$(CURRENT_PACKAGE) \
|
||||||
|
| tar \
|
||||||
|
--extract \
|
||||||
|
--directory $(CURRENT_PACKAGE)/build/ \
|
||||||
|
--file -
|
||||||
|
|
||||||
|
git-export: builddir prepclean
|
||||||
|
(cd $(SCM_PATH) ; git archive --format=tar --prefix=$(CURRENT_PACKAGE)/ HEAD) \
|
||||||
|
| tar \
|
||||||
|
--extract \
|
||||||
|
--directory ./build/ \
|
||||||
|
--file -
|
||||||
|
|
||||||
|
git-clean:
|
||||||
|
@:
|
||||||
|
|
||||||
|
cvs-export: builddir prepclean
|
||||||
|
@cd ./build/ \
|
||||||
|
&& echo CURRENT_PACKAGE: ${CURRENT_PACKAGE} \
|
||||||
|
&& echo CVSROOT: ${CVSROOT} \
|
||||||
|
&& CVSROOT=${CVSROOT} cvs export -r HEAD -d$(CURRENT_PACKAGE) ${PACKAGE}
|
||||||
|
|
||||||
|
cvs-clean:
|
||||||
|
@:
|
||||||
|
|
||||||
|
svn-export: builddir prepclean
|
||||||
|
@cd ./build/ \
|
||||||
|
&& svn export $(SVN_PATH) $(CURRENT_PACKAGE)
|
||||||
|
|
||||||
|
svn-clean:
|
||||||
|
@:
|
||||||
|
|
||||||
|
builddir:
|
||||||
|
@mkdir -p ./build
|
||||||
|
|
||||||
|
distdir:
|
||||||
|
@mkdir -p ./dist
|
||||||
|
|
||||||
|
prepclean:
|
||||||
|
@rm -rf ./build/$(CURRENT_PACKAGE)*
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -rf ./build/* ./dist/* 2>/dev/null || :
|
||||||
|
|
||||||
|
mrclean: clean
|
||||||
|
|
||||||
|
distclean: clean $(SCM_TYPE)-clean
|
||||||
|
@rmdir ./build/ ./dist/ 2>/dev/null || :
|
||||||
|
|
||||||
|
# -- recursive Makefile calls (during build phase)
|
||||||
|
#
|
||||||
|
update: $(PACKAGE).spec VERSION RELEASE
|
||||||
|
|
||||||
|
$(PACKAGE).spec: VERSION RELEASE $(PACKAGE).spec.in
|
||||||
|
@sed \
|
||||||
|
-e "s|@PACKAGE@|$(PACKAGE)|" \
|
||||||
|
-e "s|@VERSION@|$(VERSION)|" \
|
||||||
|
-e "s|@RELEASE@|$(RELEASE)|" \
|
||||||
|
< $(PACKAGE).spec.in > $@
|
||||||
|
|
||||||
|
# -- end of Makefile
|
1
packaging/rpm/PACKAGE
Normal file
1
packaging/rpm/PACKAGE
Normal file
@ -0,0 +1 @@
|
|||||||
|
qpsmtpd
|
1
packaging/rpm/RELEASE
Normal file
1
packaging/rpm/RELEASE
Normal file
@ -0,0 +1 @@
|
|||||||
|
0.1
|
1
packaging/rpm/VERSION
Normal file
1
packaging/rpm/VERSION
Normal file
@ -0,0 +1 @@
|
|||||||
|
0.82
|
10
packaging/rpm/files/README.selinux
Normal file
10
packaging/rpm/files/README.selinux
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
If you run qpsmtpd-apache on a box with SELinux enabled, you'll need to
|
||||||
|
allow apache to listen to your SMTP port, typically port 25.
|
||||||
|
|
||||||
|
The following command allows apache to listen on port 25:
|
||||||
|
|
||||||
|
semanage port -m -t http_port_t -p tcp 25
|
||||||
|
|
||||||
|
Use the -d option to remove this permission:
|
||||||
|
|
||||||
|
semanage port -d -t http_port_t -p tcp 25
|
3
packaging/rpm/files/in.qpsmtpd
Executable file
3
packaging/rpm/files/in.qpsmtpd
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
export QPSMTPD_CONFIG=/etc/qpsmtpd
|
||||||
|
exec /usr/bin/qpsmtpd 2> /dev/null
|
122
packaging/rpm/files/qpsmtpd-forkserver.rc
Executable file
122
packaging/rpm/files/qpsmtpd-forkserver.rc
Executable file
@ -0,0 +1,122 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
#
|
||||||
|
# qpsmtpd-forkserver Start/Stop the qpsmtpd forking server
|
||||||
|
#
|
||||||
|
# chkconfig: 2345 90 60
|
||||||
|
# description: qpsmtpd is a flexible smtpd daemon written in Perl. \
|
||||||
|
# Apart from the core SMTP features, all functionality is \
|
||||||
|
# implemented in small "extension plugins" using the easy \
|
||||||
|
# to use object oriented plugin API.
|
||||||
|
# processname: qpsmtpd-forkserver
|
||||||
|
# config: /etc/qpsmtpd
|
||||||
|
# pidfile: /var/run/qpsmtpd-forkserver.pid
|
||||||
|
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/init.d/functions
|
||||||
|
. /etc/sysconfig/qpsmtpd-forkserver
|
||||||
|
|
||||||
|
RETVAL=0
|
||||||
|
|
||||||
|
# See how we were called.
|
||||||
|
|
||||||
|
prog="qpsmtpd-forkserver"
|
||||||
|
|
||||||
|
start() {
|
||||||
|
# cleanup environment a bit.
|
||||||
|
unset PERL_UNICODE
|
||||||
|
unset LANG
|
||||||
|
unset LC_TIME
|
||||||
|
unset LC_ALL
|
||||||
|
unset BASH_ENV
|
||||||
|
unset ENV
|
||||||
|
unset CDPATH
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
echo -n $"Starting $prog: "
|
||||||
|
trap "" 1
|
||||||
|
daemon $prog --detach $QPSMTPD_OPTIONS
|
||||||
|
RETVAL=$?
|
||||||
|
echo
|
||||||
|
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n $"Stopping $prog: "
|
||||||
|
killproc $prog
|
||||||
|
RETVAL=$?
|
||||||
|
echo
|
||||||
|
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
# functions status() uses pidof, which doesn't work with (?) scripts
|
||||||
|
qpstatus() {
|
||||||
|
local base=${1##*/}
|
||||||
|
local pid
|
||||||
|
|
||||||
|
# Test syntax.
|
||||||
|
if [ "$#" = 0 ] ; then
|
||||||
|
echo $"Usage: status {program}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Use "/var/run/*.pid" file for pid
|
||||||
|
if [ -f /var/run/${base}.pid ] ; then
|
||||||
|
read pid < /var/run/${base}.pid
|
||||||
|
if [ -n "$pid" ]; then
|
||||||
|
/bin/ps -p $pid >/dev/null
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo $"${base} (pid $pid) is running..."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo $"${base} dead but pid file exists"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# See if /var/lock/subsys/${base} exists
|
||||||
|
if [ -f /var/lock/subsys/${base} ]; then
|
||||||
|
echo $"${base} dead but subsys locked"
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
echo $"${base} is stopped"
|
||||||
|
return 3
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
restart
|
||||||
|
;;
|
||||||
|
reload)
|
||||||
|
reload
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
qpstatus qpsmtpd-forkserver
|
||||||
|
;;
|
||||||
|
condrestart)
|
||||||
|
[ -f /var/lock/subsys/$prog ] && restart || :
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $?
|
3
packaging/rpm/files/qpsmtpd-forkserver.sysconfig
Normal file
3
packaging/rpm/files/qpsmtpd-forkserver.sysconfig
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
QPSMTPD_OPTIONS="-p 25 -l 127.0.0.1 --pid-file /var/run/qpsmtpd-forkserver.pid"
|
||||||
|
export QPSMTPD_CONFIG=/etc/qpsmtpd
|
||||||
|
export HOME=~smtpd
|
184
packaging/rpm/files/qpsmtpd-plugin-file_connection
Normal file
184
packaging/rpm/files/qpsmtpd-plugin-file_connection
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
# $Id: file 478 2005-07-19 07:40:16Z aqua $
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
file_connection - Simple per session log-to-file logging for qpsmtpd
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
The 'file_connection' logging plugin for qpsmtpd records qpsmtpd log messages into a
|
||||||
|
file (or a named pipe, if you prefer.)
|
||||||
|
|
||||||
|
The file is reopened for each connection. To facilitate automatic
|
||||||
|
logfile switching the filename can contain strftime conversion
|
||||||
|
specifiers, which are expanded immediately before opening the file. This
|
||||||
|
ensures that a single connection is never split across logfiles.
|
||||||
|
|
||||||
|
The list of supported conversion specifiers depends on the strftime
|
||||||
|
implementation of your C library. See strftime(3) for details.
|
||||||
|
Additionally, %i exands to a (hopefully) unique session-id.
|
||||||
|
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
To enable the logging plugin, add a line of this form to the qpsmtpd plugins
|
||||||
|
configuration file:
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
logging/file_connection [loglevel I<level>] I<path>
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
logging/file_connection loglevel LOGINFO /var/log/qpsmtpd/%Y-%m-%d
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
Multiple instances of the plugin can be configured by appending :I<N> for any
|
||||||
|
integer(s) I<N>, to log to multiple files simultaneously, e.g. to log critical
|
||||||
|
errors and normally verbose logs elsewhere.
|
||||||
|
|
||||||
|
The following optional configuration setting can be supplied:
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item loglevel I<loglevel>
|
||||||
|
|
||||||
|
The internal log level below which messages will be logged. The I<loglevel>
|
||||||
|
given should be chosen from this list. Priorities count downward (for example,
|
||||||
|
if LOGWARN were selected, LOGERROR, LOGCRIT and LOGEMERG messages would be
|
||||||
|
logged as well):
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item B<LOGDEBUG>
|
||||||
|
|
||||||
|
=item B<LOGINFO>
|
||||||
|
|
||||||
|
=item B<LOGNOTICE>
|
||||||
|
|
||||||
|
=item B<LOGWARN>
|
||||||
|
|
||||||
|
=item B<LOGERROR>
|
||||||
|
|
||||||
|
=item B<LOGCRIT>
|
||||||
|
|
||||||
|
=item B<LOGALERT>
|
||||||
|
|
||||||
|
=item B<LOGEMERG>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
The chosen I<path> should be writable by the user running qpsmtpd; it will be
|
||||||
|
created it did not already exist, and appended to otherwise.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Peter J. Holzer <hjp@hjp.at>, based on a plugin by
|
||||||
|
Devin Carraway <qpsmtpd@devin.com>
|
||||||
|
|
||||||
|
=head1 LICENSE
|
||||||
|
|
||||||
|
Copyright (c) 2005, Devin Carraway.
|
||||||
|
|
||||||
|
This plugin is licensed under the same terms as the qpsmtpd package itself.
|
||||||
|
Please see the LICENSE file included with qpsmtpd for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use IO::File;
|
||||||
|
#use Sys::Hostname;
|
||||||
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
sub register {
|
||||||
|
my ($self, $qp, @args) = @_;
|
||||||
|
my %args;
|
||||||
|
|
||||||
|
$self->{_loglevel} = LOGWARN;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
last if !@args;
|
||||||
|
if (lc $args[0] eq 'loglevel') {
|
||||||
|
shift @args;
|
||||||
|
my $ll = shift @args;
|
||||||
|
if (!defined $ll) {
|
||||||
|
warn "Malformed arguments to logging/file_connection plugin";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($ll =~ /^(\d+)$/) {
|
||||||
|
$self->{_loglevel} = $1;
|
||||||
|
}
|
||||||
|
elsif ($ll =~ /^(LOG\w+)$/) {
|
||||||
|
$self->{_loglevel} = log_level($1);
|
||||||
|
defined $self->{_loglevel} or $self->{_loglevel} = LOGWARN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { last }
|
||||||
|
}
|
||||||
|
|
||||||
|
unless (@args && $args[0]) {
|
||||||
|
warn "Malformed arguments to syslog plugin";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$self->{_logfile} = join(' ', @args);
|
||||||
|
$self->{_log_session_id_prefix} = sprintf("%08x%04x", time(), $$);
|
||||||
|
$self->{_log_session_id_counter} = 0;
|
||||||
|
|
||||||
|
$self->register_hook('logging', 'write_log');
|
||||||
|
$self->register_hook('pre-connection', 'open_log');
|
||||||
|
$self->open_log($qp);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub open_log {
|
||||||
|
my ($self, $qp) = @_;
|
||||||
|
my $output = $self->{_logfile};
|
||||||
|
$self->{_log_session_id} =
|
||||||
|
$self->{_log_session_id_prefix} . "." .
|
||||||
|
++$self->{_log_session_id_counter};
|
||||||
|
|
||||||
|
$output =~ s/%i/$self->{_log_session_id}/;
|
||||||
|
$output = strftime($output, localtime);
|
||||||
|
#print STDERR "open_log: output=$output, uid=$>\n";
|
||||||
|
if ($output =~ /^\s*\|(.*)/) {
|
||||||
|
unless ($self->{_f} = new IO::File "|$1") {
|
||||||
|
warn "Error opening log output to command $1: $!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} elsif ($output =~ /^(.*)/) { # detaint
|
||||||
|
unless ($self->{_f} = new IO::File ">>$1") {
|
||||||
|
warn "Error opening log output to path $1: $!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$self->{_f}->autoflush(1);
|
||||||
|
|
||||||
|
return DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub write_log {
|
||||||
|
my ($self, $txn, $trace, $hook, $plugin, @log) = @_;
|
||||||
|
|
||||||
|
return DECLINED if $trace > $self->{_loglevel};
|
||||||
|
return DECLINED if defined $plugin and $plugin eq $self->plugin_name;
|
||||||
|
$self->open_log unless($self->{_f});
|
||||||
|
|
||||||
|
my $f = $self->{_f};
|
||||||
|
print STDERR "no open file\n" unless (defined $f);
|
||||||
|
print $f join(" ",
|
||||||
|
strftime("%Y-%m-%dT%H:%M:%S%z", localtime), $self->{_log_session_id},
|
||||||
|
(defined $plugin ? " $plugin plugin:" :
|
||||||
|
defined $hook ? " running plugin ($hook):" : ""),
|
||||||
|
@log), "\n";
|
||||||
|
return DECLINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
# vi: tabstop=4 shiftwidth=4 expandtab:
|
||||||
|
|
19
packaging/rpm/files/qpsmtpd-xinetd
Normal file
19
packaging/rpm/files/qpsmtpd-xinetd
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# default: on
|
||||||
|
# description: The telnet server serves telnet sessions; it uses \
|
||||||
|
# unencrypted username/password pairs for authentication.
|
||||||
|
service smtp
|
||||||
|
{
|
||||||
|
flags = REUSE
|
||||||
|
socket_type = stream
|
||||||
|
wait = no
|
||||||
|
user = smtpd
|
||||||
|
groups = yes
|
||||||
|
server = /usr/sbin/in.qpsmtpd
|
||||||
|
log_on_failure += USERID
|
||||||
|
disable = yes
|
||||||
|
rlimit_as = 128M
|
||||||
|
instances = 40
|
||||||
|
per_source = 10
|
||||||
|
cps = 50 10
|
||||||
|
}
|
||||||
|
|
16
packaging/rpm/files/qpsmtpd.conf
Normal file
16
packaging/rpm/files/qpsmtpd.conf
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Listen 0.0.0.0:25 smtp
|
||||||
|
AcceptFilter smtp none
|
||||||
|
## "smtp" and the AcceptFilter are required for Linux, FreeBSD
|
||||||
|
## with apache >= 2.1.5, for others it doesn't hurt. See also
|
||||||
|
## http://httpd.apache.org/docs/2.2/mod/core.html#acceptfilter
|
||||||
|
## and http://httpd.apache.org/docs/2.2/mod/mpm_common.html#listen
|
||||||
|
|
||||||
|
<Perl>
|
||||||
|
use Apache::Qpsmtpd;
|
||||||
|
$ENV{QPSMTPD_CONFIG} = "/etc/qpsmtpd";
|
||||||
|
</Perl>
|
||||||
|
|
||||||
|
<VirtualHost _default_:25>
|
||||||
|
PerlModule Apache::Qpsmtpd
|
||||||
|
PerlProcessConnectionHandler Apache::Qpsmtpd
|
||||||
|
</VirtualHost>
|
335
packaging/rpm/qpsmtpd.spec.in
Normal file
335
packaging/rpm/qpsmtpd.spec.in
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
Name: %{_package}
|
||||||
|
Version: %{_version}
|
||||||
|
Release: %{_release}
|
||||||
|
|
||||||
|
Summary: qpsmtpd + qpsmtpd-apache + qpsmtpd-async
|
||||||
|
License: MIT
|
||||||
|
Group: System Environment/Daemons
|
||||||
|
URL: http://smtpd.develooper.com/
|
||||||
|
BuildRoot: %{_builddir}/%{name}-%{version}-%{release}-root
|
||||||
|
BuildRequires: perl >= 0:5.00503
|
||||||
|
BuildArchitectures: noarch
|
||||||
|
Requires: perl(Mail::Header), perl(Net::DNS) perl(Net::IP) perl(IPC::Shareable)
|
||||||
|
Requires(pre): coreutils, shadow-utils, perl
|
||||||
|
|
||||||
|
Source0: %{name}-%{version}-%{release}.tar.gz
|
||||||
|
Source1: qpsmtpd-forkserver.rc
|
||||||
|
Source2: qpsmtpd-forkserver.sysconfig
|
||||||
|
Source3: qpsmtpd-plugin-file_connection
|
||||||
|
Source4: qpsmtpd-xinetd
|
||||||
|
Source5: in.qpsmtpd
|
||||||
|
Source6: qpsmtpd.conf
|
||||||
|
Source7: README.selinux
|
||||||
|
|
||||||
|
%description
|
||||||
|
qpsmtpd is a flexible smtpd daemon written in Perl. Apart from the core
|
||||||
|
SMTP features, all functionality is implemented in small "extension
|
||||||
|
plugins" using the easy to use object oriented plugin API.
|
||||||
|
|
||||||
|
qpsmtpd was originally written as a drop-in qmail-smtpd replacement, but
|
||||||
|
now it also includes a smtp forward and a postfix "backend".
|
||||||
|
|
||||||
|
%package apache
|
||||||
|
Requires: perl(mod_perl2)
|
||||||
|
Summary: mod_perl-2 connection handler for qpsmtpd
|
||||||
|
Group: System Environment/Daemons
|
||||||
|
|
||||||
|
%package async
|
||||||
|
Summary: qpsmtpd using async I/O in a single process
|
||||||
|
Group: System Environment/Daemons
|
||||||
|
|
||||||
|
%description apache
|
||||||
|
|
||||||
|
This module implements a mod_perl/apache 2.0 connection handler
|
||||||
|
that turns Apache into an SMTP server using Qpsmtpd.
|
||||||
|
|
||||||
|
%description async
|
||||||
|
This package contains the Qpsmtpd::PollServer module, which allows
|
||||||
|
qpsmtd to handle many connections in a single process and the
|
||||||
|
qpsmpd-async which uses it.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}-%{version}-%{release}
|
||||||
|
|
||||||
|
%build
|
||||||
|
CFLAGS="$RPM_OPT_FLAGS" perl Makefile.PL INSTALLSITELIB=%{_prefix}/lib/perl5/site_perl
|
||||||
|
make
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
%install
|
||||||
|
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
eval `perl '-V:installarchlib'`
|
||||||
|
mkdir -p $RPM_BUILD_ROOT/$installarchlib
|
||||||
|
if grep -q DESTDIR Makefile
|
||||||
|
then
|
||||||
|
make DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
find blib/lib -name '*.pm.*' -exec rm -f {} \;
|
||||||
|
make DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
|
||||||
|
else
|
||||||
|
make PREFIX=$RPM_BUILD_ROOT/usr
|
||||||
|
find blib/lib -name '*.pm.*' -exec rm -f {} \;
|
||||||
|
make PREFIX=$RPM_BUILD_ROOT/usr install
|
||||||
|
fi
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/%{name}
|
||||||
|
rm -f ${RPM_BUILD_ROOT}%{_datadir}/%{name}/plugins/*.*
|
||||||
|
cp -r plugins ${RPM_BUILD_ROOT}%{_datadir}/%{name}/plugins
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}
|
||||||
|
rm -f ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/*.*
|
||||||
|
cp -r config.sample/* ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/
|
||||||
|
echo %{_datadir}/%{name}/plugins > ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/plugin_dirs
|
||||||
|
echo %{_localstatedir}/spool/qpsmtpd > ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/spool_dir
|
||||||
|
echo logging/file_connection loglevel LOGINFO %{_localstatedir}/log/qpsmtpd/%Y-%m-%d > ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/logging
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_initrddir}
|
||||||
|
cp %{SOURCE1} ${RPM_BUILD_ROOT}%{_initrddir}/qpsmtpd-forkserver
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
|
||||||
|
cp %{SOURCE2} ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/qpsmtpd-forkserver
|
||||||
|
cp %{SOURCE3} ${RPM_BUILD_ROOT}%{_datadir}/%{name}/plugins/logging/file_connection
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/spool/qpsmtpd
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/log/qpsmtpd
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/xinetd.d
|
||||||
|
cp %{SOURCE4} ${RPM_BUILD_ROOT}%{_sysconfdir}/xinetd.d/smtp
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_sbindir}
|
||||||
|
cp %{SOURCE5} ${RPM_BUILD_ROOT}%{_sbindir}/in.smtp
|
||||||
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d
|
||||||
|
cp %{SOURCE6} ${RPM_BUILD_ROOT}%{_sysconfdir}/httpd/conf.d
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}-apache-%{version}
|
||||||
|
cp %{SOURCE7} $RPM_BUILD_ROOT%{_docdir}/%{name}-apache-%{version}
|
||||||
|
|
||||||
|
[ -x /usr/lib/rpm/brp-compress ] && /usr/lib/rpm/brp-compress
|
||||||
|
|
||||||
|
find ${RPM_BUILD_ROOT}%{_prefix} \( -name perllocal.pod -o -name .packlist \) -exec rm {} \;
|
||||||
|
find ${RPM_BUILD_ROOT}%{_prefix} -type f -print | \
|
||||||
|
sed "s@^$RPM_BUILD_ROOT@@g" | \
|
||||||
|
grep -v [Aa]sync | \
|
||||||
|
grep -v packaging | \
|
||||||
|
grep -v README.selinux | \
|
||||||
|
grep -v /Apache | \
|
||||||
|
grep -v /Danga | \
|
||||||
|
grep -v Qpsmtpd/ConfigServer.pm | \
|
||||||
|
grep -v Qpsmtpd/PollServer.pm > %{name}-%{version}-%{release}-filelist
|
||||||
|
if [ "$(cat %{name}-%{version}-%{release}-filelist)X" = "X" ] ; then
|
||||||
|
echo "ERROR: EMPTY FILE LIST"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
%files -f %{name}-%{version}-%{release}-filelist
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%doc CREDITS Changes LICENSE README README.plugins STATUS
|
||||||
|
%{_initrddir}/qpsmtpd-forkserver
|
||||||
|
%config(noreplace) %{_sysconfdir}/qpsmtpd/*
|
||||||
|
%config(noreplace) %{_sysconfdir}/xinetd.d/smtp
|
||||||
|
%config(noreplace) %{_sysconfdir}/sysconfig/qpsmtpd-forkserver
|
||||||
|
%attr(2750,qpsmtpd,clamav) %dir %{_localstatedir}/spool/qpsmtpd
|
||||||
|
%attr(0750,smtpd,smtpd) %dir %{_localstatedir}/log/qpsmtpd
|
||||||
|
|
||||||
|
%files apache
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Apache/Qpsmtpd.pm
|
||||||
|
%{_mandir}/man3/Apache::Qpsmtpd.3pm.gz
|
||||||
|
%config(noreplace) %{_sysconfdir}/httpd/conf.d/*
|
||||||
|
%doc %{_docdir}/%{name}-apache-%{version}/README.selinux
|
||||||
|
|
||||||
|
%files async
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%{_bindir}/qpsmtpd-async
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Danga/Client.pm
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Danga/TimeoutSocket.pm
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Qpsmtpd/ConfigServer.pm
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Qpsmtpd/Plugin/Async/DNSBLBase.pm
|
||||||
|
%{_prefix}/lib/perl5/site_perl/Qpsmtpd/PollServer.pm
|
||||||
|
%{_mandir}/man1/qpsmtpd-async.1.gz
|
||||||
|
%{_datadir}/%{name}/plugins/async/*
|
||||||
|
|
||||||
|
%pre
|
||||||
|
if ! id smtpd >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
# need to create smtpd user.
|
||||||
|
if perl -e 'exit ! defined(getgrnam("postdrop"))'
|
||||||
|
then
|
||||||
|
# if postfix is installed, we will probably use
|
||||||
|
# queue/postfix, which will need this:
|
||||||
|
supp="-G postdrop"
|
||||||
|
fi
|
||||||
|
useradd -r -m $supp smtpd
|
||||||
|
fi
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Sun Jul 12 2009 <rpmbuild@robinbowes.com> 0.82-0.1
|
||||||
|
- Update to latest release
|
||||||
|
- don't add qpsmtpd to start-up by default
|
||||||
|
- add apache config file to qpsmtpd-apache package
|
||||||
|
- remove all patches
|
||||||
|
- use rpm macros for dirs
|
||||||
|
- use a filelist for main package instead of a long list of files
|
||||||
|
|
||||||
|
* Tue Jul 15 2008 <rpmbuild@robinbowes.com> 0.43-0.7
|
||||||
|
- Removed SelectServer.pm from .spec file
|
||||||
|
|
||||||
|
* Tue Mar 18 2008 <rpmbuild@robinbowes.com> 0.43-0.6
|
||||||
|
- moved config files back to /etc/qpsmtpd following some changes
|
||||||
|
to the qpsmtpd src
|
||||||
|
|
||||||
|
* Tue Mar 18 2008 <rpmbuild@robinbowes.com> 0.43-0.5
|
||||||
|
- moved config files to /etc/qpsmtpd/config
|
||||||
|
|
||||||
|
* Tue Mar 18 2008 <rpmbuild@robinbowes.com> 0.43-0.4
|
||||||
|
- Moved qpsmtpd-async to /usr/bin
|
||||||
|
- Added qpsmtpd-async man page to async package
|
||||||
|
- Added async smtproute plugin to async package
|
||||||
|
|
||||||
|
* Wed Mar 12 2008 <rpmbuild@robinbowes.com> 0.43-0.3
|
||||||
|
- Makefile.PL now updated in svn, so remove hack
|
||||||
|
|
||||||
|
* Wed Mar 12 2008 <rpmbuild@robinbowes.com> 0.43-0.2
|
||||||
|
- Added qpsmtpd-prefork to qpsmtpd RPM, inc. hack to work round
|
||||||
|
deficiency in Makefile.PL
|
||||||
|
|
||||||
|
* Mon Mar 10 2008 <rpmbuild@robinbowes.com> 0.43-0.1
|
||||||
|
- Updated to work with Makefile to build from svn
|
||||||
|
|
||||||
|
* Wed Sep 12 2007 <rpmbuild@robinbowes.com> 0.40-2.0
|
||||||
|
- Updated to build trunk-r790
|
||||||
|
|
||||||
|
* Tue Jun 12 2007 <hjp@hjp.at> 0.40-1.0
|
||||||
|
- updated to 0.40 - no code change.
|
||||||
|
|
||||||
|
* Thu Jun 07 2007 <hjp@hjp.at> 0.40-0.2
|
||||||
|
- unset environment variables which are normally tainted in perl.
|
||||||
|
- updated to 0.40rc1
|
||||||
|
- added dependency on Net::IP (needed by some plugins)
|
||||||
|
|
||||||
|
* Sat May 05 2007 <hjp@hjp.at> 0.33-0.5
|
||||||
|
- moved environment cleanup into start() function, otherwise
|
||||||
|
LANG just gets reinitialized.
|
||||||
|
|
||||||
|
* Sat May 05 2007 <hjp@hjp.at> 0.33-0.4
|
||||||
|
- split qpsmtpd-async into a separate package to avoid dependency
|
||||||
|
on ParaDNS.
|
||||||
|
|
||||||
|
* Sat May 05 2007 <hjp@hjp.at> 0.33-0.3
|
||||||
|
- also unset LANG, LC_ALL and LC_TIME in startup script to prevent
|
||||||
|
locale specific Received headers (bug reported by Dominik Meyer)
|
||||||
|
|
||||||
|
* Sun Feb 25 2007 <hjp@hjp.at> 0.33-0.2
|
||||||
|
- 0.3x branch has been merged back to trunk.
|
||||||
|
Got current snapshot (r715) from trunk.
|
||||||
|
|
||||||
|
* Sun Feb 25 2007 <hjp@hjp.at> 0.33-0.1
|
||||||
|
- Start forkserver via "daemon" (Gavin Carr)
|
||||||
|
- Fixed 'service qpsmtpd-forkserver status' (Gavin Carr)
|
||||||
|
- Changed policy for config files to noreplace (Gavin Carr)
|
||||||
|
|
||||||
|
* Sun Nov 05 2006 <hjp@hjp.at> 0.33-0.0
|
||||||
|
- Upgraded to current snapshot from 0.3x branch (which should become
|
||||||
|
0.33 soon-ish)
|
||||||
|
- included xinetd-support again.
|
||||||
|
|
||||||
|
* Sat Mar 18 2006 <hjp@hjp.at> 0.32-2
|
||||||
|
- fix dnsbl to check whether answer fits query.
|
||||||
|
- randomize Net::DNS ids for qpsmtpd-forkserver child processes.
|
||||||
|
|
||||||
|
* Wed Mar 08 2006 <hjp@hjp.at> 0.32-1
|
||||||
|
- New upstream 0.32
|
||||||
|
- rc-file unsets PERL_UNICODE (bug #38397)
|
||||||
|
|
||||||
|
* Sat Jan 28 2006 <hjp@hjp.at> 0.31.1-3
|
||||||
|
- Use ${SOURCE*} macros to refer to source files
|
||||||
|
- Avoid invoking rpm and other cleanup in pre section
|
||||||
|
- Invoke chkconfig in post.
|
||||||
|
- (Thanks to Josko Plazonic for the reporting these problems and
|
||||||
|
suggesting fixes)
|
||||||
|
|
||||||
|
* Tue Nov 30 2005 <hjp@hjp.at> 0.31.1-2
|
||||||
|
- Revision 170 of plugins/loggin/file_connection:
|
||||||
|
Return DECLINED from open_log.
|
||||||
|
Open log in write_log if it isn't already open.
|
||||||
|
|
||||||
|
* Tue Nov 29 2005 <hjp@hjp.at> 0.31.1-1
|
||||||
|
- Commented out queue plugins from sample config
|
||||||
|
- Added dependencies
|
||||||
|
- Create smtpd user if it doesn't exist
|
||||||
|
- Added /var/log/qpsmtpd and /var/spool/qpsmtpd
|
||||||
|
|
||||||
|
* Sat Nov 26 2005 <hjp@hjp.at>
|
||||||
|
- Added file_connection plugin
|
||||||
|
- Startup file for qpsmtpd-forkserver now uses --detach and assumes that
|
||||||
|
a suitable logging module is configured (file_connection by default)
|
||||||
|
|
||||||
|
* Wed Nov 23 2005 <hjp@hjp.at>
|
||||||
|
- Forkserver drops privileges before loading plugins now.
|
||||||
|
|
||||||
|
* Sun Nov 20 2005 <hjp@hjp.at>
|
||||||
|
- New upstream 0.31.1
|
||||||
|
|
||||||
|
* Mon Nov 14 2005 <hjp@hjp.at> 0.31-8
|
||||||
|
- New upstream 0.31rc3.
|
||||||
|
- pre-connection patch slightly simplified since upstream fixed one of
|
||||||
|
the bugs.
|
||||||
|
|
||||||
|
* Tue Aug 23 2005 <hjp@hjp.at>
|
||||||
|
- forced INSTALLSITELIB=/usr/lib/perl5/site_perl as suggested by
|
||||||
|
Charlie Brady.
|
||||||
|
|
||||||
|
* Sat Aug 20 2005 <hjp@hjp.at> 0.31-7
|
||||||
|
- RC2 from upstream.
|
||||||
|
- Removed patches which aren't applied from spec file.
|
||||||
|
|
||||||
|
* Fri Jul 22 2005 <hjp@hjp.at> 0.31-6
|
||||||
|
- New upstream snapshot from 0.31 branch: svn revision 509.
|
||||||
|
|
||||||
|
* Sun Jul 17 2005 <hjp@hjp.at> 0.31-5
|
||||||
|
- include only /etc/init.d/qpsmtpd-forkserver, not /etc/init.d
|
||||||
|
it conflicts with old initscripts packages.
|
||||||
|
|
||||||
|
* Sun Jul 17 2005 <hjp@hjp.at> 0.31-4
|
||||||
|
- removed tabs from forkserver
|
||||||
|
|
||||||
|
* Sun Jul 17 2005 <hjp@hjp.at> 0.31-3
|
||||||
|
- added startup script for forkserver
|
||||||
|
- changed BuildArchitectures to noarch.
|
||||||
|
|
||||||
|
* Sat Jul 16 2005 <hjp@hjp.at> 0.31-2
|
||||||
|
- pre-connection hook is now actually called, not just defined.
|
||||||
|
|
||||||
|
* Fri Jul 15 2005 <hjp@hjp.at> 0.31-1
|
||||||
|
- merged with 0.31. Most of my patches are now in the official release.
|
||||||
|
- merged Gavin's per-user-config patch with my dirs patch, since the
|
||||||
|
latter needs a way to turn off logging.
|
||||||
|
- added /etc/qpsmtpd/plugin_dir to package.
|
||||||
|
|
||||||
|
* Mon Jun 13 2005 <hjp@hjp.at> 0.29-6
|
||||||
|
- fixed removal of patch backup files
|
||||||
|
- fixed option --pid-file
|
||||||
|
|
||||||
|
* Sun Jun 12 2005 <hjp@hjp.at>
|
||||||
|
- avoid installing patch backup files
|
||||||
|
- split Apache::Qpsmtpd into separate package to avoid dependency hell.
|
||||||
|
- fixed URL
|
||||||
|
- changed group to Daemons.
|
||||||
|
- Fixed installation for newer versions of ExtUtils::MakeMaker
|
||||||
|
|
||||||
|
* Wed Jun 1 2005 <hjp@hjp.at> 0.29-5
|
||||||
|
- Really don't reap children in signal handler.
|
||||||
|
|
||||||
|
* Tue May 31 2005 <hjp@hjp.at> 0.29-4
|
||||||
|
- Return 421 for DENYSOFT_DISCONNECT
|
||||||
|
- Don't reap children in signal handler.
|
||||||
|
|
||||||
|
* Thu May 19 2005 <hjp@hjp.at> 0.29-3
|
||||||
|
- removed code to accept paths without <>.
|
||||||
|
|
||||||
|
* Thu May 19 2005 <hjp@hjp.at> 0.29-2
|
||||||
|
- added QPSMTPD_CONFIG env variable and plugin_dir config.
|
||||||
|
- added supplemental groups and support for pid file
|
||||||
|
- added shared_connect hook
|
||||||
|
- changed log level for SMTP dialog from DEBUG to INFO
|
||||||
|
|
||||||
|
* Thu Apr 21 2005 hjp@hjp.at
|
||||||
|
- added plugins, /etc and docs.
|
||||||
|
|
||||||
|
* Mon Apr 18 2005 hjp@hjp.at
|
||||||
|
- Specfile autogenerated
|
||||||
|
|
Loading…
Reference in New Issue
Block a user