diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2001-01-21 22:17:06 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2001-01-21 22:17:06 +0000 |
commit | c5e098efbef941858129b84a112a036d572ba53c (patch) | |
tree | 277ca53e5c12bcf1d38feccf7fd364839dbf811a /contrib/sendmail/contrib | |
parent | f1e9c33a3410fd42927853cf01fb4279382f2bcf (diff) | |
parent | 167a83e7b8733416154f871e39e86ba77eb1554d (diff) | |
download | FreeBSD-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-x | contrib/sendmail/contrib/buildvirtuser | 167 | ||||
-rw-r--r-- | contrib/sendmail/contrib/domainmap.m4 | 18 | ||||
-rw-r--r-- | contrib/sendmail/contrib/qtool.8 | 6 | ||||
-rwxr-xr-x | contrib/sendmail/contrib/qtool.pl | 7 |
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"); } ## |