summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/contrib/buildvirtuser
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
commit167a83e7b8733416154f871e39e86ba77eb1554d (patch)
tree4f725bdbff499cf7343d2eaeec15f8a0f0926140 /contrib/sendmail/contrib/buildvirtuser
parentf84ac9120cb7d9f087e5dcb863c4bf25ba2985e6 (diff)
downloadFreeBSD-src-167a83e7b8733416154f871e39e86ba77eb1554d.zip
FreeBSD-src-167a83e7b8733416154f871e39e86ba77eb1554d.tar.gz
Import sendmail 8.11.2
Diffstat (limited to 'contrib/sendmail/contrib/buildvirtuser')
-rwxr-xr-xcontrib/sendmail/contrib/buildvirtuser167
1 files changed, 167 insertions, 0 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;
OpenPOWER on IntegriCloud