summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/contrib
diff options
context:
space:
mode:
authorgshapiro <gshapiro@FreeBSD.org>2001-01-21 22:17:06 +0000
committergshapiro <gshapiro@FreeBSD.org>2001-01-21 22:17:06 +0000
commitc5e098efbef941858129b84a112a036d572ba53c (patch)
tree277ca53e5c12bcf1d38feccf7fd364839dbf811a /contrib/sendmail/contrib
parentf1e9c33a3410fd42927853cf01fb4279382f2bcf (diff)
parent167a83e7b8733416154f871e39e86ba77eb1554d (diff)
downloadFreeBSD-src-c5e098efbef941858129b84a112a036d572ba53c.zip
FreeBSD-src-c5e098efbef941858129b84a112a036d572ba53c.tar.gz
This commit was generated by cvs2svn to compensate for changes in r71345,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/sendmail/contrib')
-rwxr-xr-xcontrib/sendmail/contrib/buildvirtuser167
-rw-r--r--contrib/sendmail/contrib/domainmap.m418
-rw-r--r--contrib/sendmail/contrib/qtool.86
-rwxr-xr-xcontrib/sendmail/contrib/qtool.pl7
4 files changed, 188 insertions, 10 deletions
diff --git a/contrib/sendmail/contrib/buildvirtuser b/contrib/sendmail/contrib/buildvirtuser
new file mode 100755
index 0000000..e544828
--- /dev/null
+++ b/contrib/sendmail/contrib/buildvirtuser
@@ -0,0 +1,167 @@
+#!/usr/bin/perl -w
+
+# Copyright (c) 1999-2000 Gregory Neil Shapiro. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. Neither the name of the author nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# $Id: buildvirtuser,v 1.1.2.1 2000/10/26 22:51:03 gshapiro Exp $
+
+=head1 NAME
+
+buildvirtuser - Build virtusertable support from a directory of files
+
+=head1 SYNOPSIS
+
+ buildvirtuser
+
+=head1 DESCRIPTION
+
+buildvirtuser will build /etc/mail/virtusertable.db and /etc/mail/virthosts
+based on the contents of the directory /etc/mail/virtusers/. That
+directory should contain one file per virtual domain with the filename
+matching the virtual domain name and the contents containing a list of
+usernames on the left and the actual address for that username on the
+right. An empty left column translates to the default for that domain.
+Blank lines and lines beginning with '#' are ignored.
+
+=head1 CONFIGURATION
+
+In order to function properly, sendmail must be configured to use these
+files with:
+
+ FEATURE(`virtusertable')dnl
+ VIRTUSER_DOMAIN_FILE(`/etc/mail/virthosts')dnl
+
+If a new domain is added (i.e., by adding a new file to
+/etc/mail/virtusers/), the sendmail daemon must be restarted for the change
+to take affect.
+
+=head1 EXAMPLES
+
+Here are some example files from the /etc/mail/virtusers/ directory:
+
+=head2 /etc/mail/virtusers/bsdunix.org:
+
+ # Services
+ MAILER-DAEMON gshapiro+MAILER-DAEMON.bsdunix.org@gshapiro.net
+ postmaster gshapiro+postmaster.bsdunix.org@gshapiro.net
+ webmaster gshapiro+webmaster.bsdunix.org@gshapiro.net
+
+ # Defaults
+ error:nouser No such user
+
+ # Users
+ gshapiro gshapiro+bsdunix.org@gshapiro.net
+ bob robert@smtp.org
+
+=head2 /etc/mail/virtusers/smtp.org:
+
+ # Defaults
+ gshapiro+smtp.org@gshapiro.net
+
+ # Users
+ john john@wookie.org
+ nancy n@milter.com
+
+=head1 AUTHOR
+
+Gregory Neil Shapiro E<lt>F<gshapiro@gshapiro.net>E<gt>
+
+=cut
+
+my $makemap = "/usr/sbin/makemap";
+my $dbtype = "hash";
+my $maildir = "/etc/mail";
+my $virthosts = "$maildir/virthosts";
+my $newvirthosts = "$maildir/virthosts.new";
+my $virts = "$maildir/virtusers";
+my $newvirt = "$maildir/virtusertable.new.db";
+my $virt = "$maildir/virtusertable.db";
+my %virt = ();
+my $newest = 0;
+
+opendir(VIRTS, $virts) || die "Could not open directory $virts: $!\n";
+my @virts = grep { -f "$virts/$_" } readdir(VIRTS);
+closedir(VIRTS) || die "Could not close directory $virts: $!\n";
+
+foreach $domain (@virts)
+{
+ open(DOMAIN, "$virts/$domain") || die "Could not open file $virts/$domain: $!\n";
+ my $line = 0;
+ my $mtime = (stat(DOMAIN))[9] || 0;
+ if ($mtime > $newest)
+ {
+ $newest = $mtime;
+ }
+LINE: while (<DOMAIN>)
+ {
+ chomp;
+ $line++;
+ next LINE if /^#/;
+ next LINE if /^$/;
+ if (m/^([^\t ]*)[\t ]+(.*)$/)
+ {
+ if (defined($1))
+ {
+ $key = "$1\@$domain";
+ }
+ else
+ {
+ $key = "\@$domain";
+ }
+ $value = $2;
+ }
+ else
+ {
+ die "Bogus line $line in $virts/$domain\n";
+ }
+ $virt{$key} = $value;
+ }
+ close(DOMAIN) || die "Could not close $virts/$domain: $!\n";
+}
+
+my $virtmtime = (stat($virt))[9] || 0;
+if ($virtmtime < $newest)
+{
+ print STDOUT "Rebuilding $virt\n";
+# logger -s -t ${prog} -p mail.info "Rebuilding ${basedir}/virtusertable"
+ open(MAKEMAP, "|$makemap $dbtype $newvirt") || die "Could not start makemap: $!\n";
+ foreach $key (keys %virt)
+ {
+ print MAKEMAP "$key\t\t$virt{$key}\n";
+ }
+ close(MAKEMAP) || die "Could not close makemap ($?): $!\n";
+ rename($newvirt, $virt) || die "Could not rename $newvirt to $virt: $!\n";
+
+ open(VIRTHOST, ">$newvirthosts") || die "Could not open file $newvirthosts: $!\n";
+ foreach $domain (sort @virts)
+ {
+ print VIRTHOST "$domain\n";
+ }
+ close(VIRTHOST) || die "Could not close $newvirthosts: $!\n";
+ rename($newvirthosts, $virthosts) || die "Could not rename $newvirthosts to $virthosts: $!\n";
+}
+exit 0;
diff --git a/contrib/sendmail/contrib/domainmap.m4 b/contrib/sendmail/contrib/domainmap.m4
index dd2fa94..fbaf62c 100644
--- a/contrib/sendmail/contrib/domainmap.m4
+++ b/contrib/sendmail/contrib/domainmap.m4
@@ -69,11 +69,19 @@ LOCAL_RULESETS
SDomainMapLookup
R $=L <@ $=w .> $@ $1 <@ $2 .> weed out local users, in case
# Cw contains a mapped domain
-R $+ <@ $+> $: $1 <@ $2 > < $2 > find domain
+ifdef(`DOMAINMAP_NO_REGEX',`dnl
+R $+ <@ $+> $: $1 <@ $2> <$2> find domain
R $+ <$+> <$+ . $+> $1 <$2> < $(dequote $3 "_" $4 $) >
# change "." to "_"
R $+ <$+> <$+ .> $: $1 <$2> < $(dequote "domain_" $3 $) >
# prepend "domain_"
+dnl',`dnl
+R $+ <@ $+> $: $1 <@ $2> <$2 :NOTDONE:> find domain
+R $+ <$+> <$+ . :NOTDONE:> $1 <$2> < $(domainmap_regex $3 $: $3 $) >
+# change "." and "-" to "_"
+R $+ <$+> <$+> $: $1 <$2> < $(dequote "domain_" $3 $) >
+# prepend "domain_"
+dnl')
R $+ <$+> <$+> $: $1 <$2> <$3> $1 find user name
R $+ <$+> <$+> $+ + $* $: $1 <$2> <$3> $4 handle user+detail syntax
R $+ <$+> <$+> $+ $: $1 <$2> $( $3 $4 $: <ERROR> $)
@@ -84,8 +92,12 @@ R $+ <@ $+> $* <TEMP> $* $#dsmtp $@ localhost $: $1 @ $2
R $+ + $* <$+> $+ @ $+ $: $1 + $2 <$3> $4 + $2 @ $5
# reset original user+detail
R $+ <$+> $+ $@ $>Recurse $3 recanonify
-define(`_DOMAIN_MAP_',`1')')
+
+ifdef(`DOMAINMAP_NO_REGEX',`',`dnl
+LOCAL_CONFIG
+K domainmap_regex regex -a.:NOTDONE: -s1,2 -d_ (.*)[-\.]([^-\.]*)$
+')define(`_DOMAIN_MAP_',`1')')
LOCAL_CONFIG
C{MappedDomain} _ARG_
-K `domain_'translit(_ARG_, `.', `_') _ARG2_ -T<TEMP>
+K `domain_'translit(_ARG_, `.-', `__') _ARG2_ -T<TEMP>
diff --git a/contrib/sendmail/contrib/qtool.8 b/contrib/sendmail/contrib/qtool.8
index 4d0f1c4..1106d07 100644
--- a/contrib/sendmail/contrib/qtool.8
+++ b/contrib/sendmail/contrib/qtool.8
@@ -6,11 +6,11 @@
.\" the sendmail distribution.
.\"
.\"
-.\" $Id: qtool.8,v 8.9 1999/08/26 00:04:10 cying Exp $
+.\" $Id: qtool.8,v 8.9.16.2 2000/12/15 19:50:41 gshapiro Exp $
.\"
-.TH QTOOL 8 "July 12, 1999"
+.TH QTOOL 8 "$Date: 2000/12/15 19:50:41 $"
.SH NAME
-.B qtool
+qtool
\- manipulate sendmail queues
.SH SYNOPSIS
.B qtool.pl
diff --git a/contrib/sendmail/contrib/qtool.pl b/contrib/sendmail/contrib/qtool.pl
index 102eb15..f4d36f3 100755
--- a/contrib/sendmail/contrib/qtool.pl
+++ b/contrib/sendmail/contrib/qtool.pl
@@ -3,7 +3,7 @@
## Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
## All rights reserved.
##
-## $Id: qtool.pl,v 8.15.16.2 2000/09/17 17:04:22 gshapiro Exp $
+## $Id: qtool.pl,v 8.15.16.4 2000/11/30 07:14:01 gshapiro Exp $
##
use strict;
use File::Basename;
@@ -133,13 +133,12 @@ while (@ARGV)
if ($result)
{
print("$result.\n");
+ exit;
}
}
if (keys(%sources) == 0)
{
- print("You must at least specify at least one source.\n");
- usage();
exit;
}
@@ -164,7 +163,7 @@ sub usage
print(" -b Bounce the messages specified by source.\n");
print(" -d Delete the messages specified by source.\n");
print(" -e [perl expression] Move only messages for which perl expression returns true.\n");
- print(" -s [seconds] Move only messages older than seconds.\n");
+ print(" -s [seconds] Move only messages whose qf file is older than seconds.\n");
}
##
OpenPOWER on IntegriCloud