#!/usr/bin/env perl # # Script to populate a Qmail ~alias directory with entries from # an [SZ]mail{er} or sendmail-like aliases file # # $FreeBSD: head/mail/qmail/files/mkaliasdir 351447 2014-04-17 05:16:47Z bdrewery $ # # Dan Cross # require 'getopts.pl'; $ALIASES = "/etc/aliases"; die "$0 must be run as root!\n" if ($< != 0); do Getopts('vf:'); $verbose = 0 unless ($verbose = $opt_v); $aliases = $ALIASES unless ($aliases = $opt_f); if (($aliasdir = (getpwnam("alias"))[7]) eq "") { die "User alias does not exist, bailing!\n"; } if (($qmaildir = (getpwnam("qmaild"))[7]) eq "") { die "User qmaild does not exist, bailing!\n"; } $ME = "$qmaildir/control/me"; die "Error opening $ME: $!\n" unless open(ME, "$ME"); chop($me = ); close (ME); die "Error opening $aliases: $!\n" unless open(ALIASES, "$aliases"); while () { chop; $mode = ">"; s/#.*$//; ($target, $data) = split(/:/, $_, 2); $data =~ s/^\s+//; $data =~ s/\s+$//; next if (/^$/); if ($data =~ /^$/) { while (chop($data = )) { $data =~ s/^\s+//; $data =~ s/\s+$//; last if ($data !~ /^$/); } } $f = "$aliasdir/.qmail-$target"; @data = split(/\,/, $data); $datum = $data[0]; if ($datum =~ /^:include:/i) { $datum =~ s/^:include://i; $verbose && print "Symlinking $f to $datum...\n"; symlink($datum, $f); shift(@data); $f = $datum; $mode = ">>"; } open(ALIAS, "$mode$f") || die "Error creating $f: $!\n"; $verbose && print "Creating $f...\n"; foreach $datum (@data) { $datum =~ s/"$// if ($datum =~ s/^"// || $datum =~ s/^\|[ \t]*"/|/); if ($datum =~ /^[|\/]/) { print ALIAS $datum, "\n"; } else { $datum = "&" . $datum; $datum .= "\@$me" unless ($datum =~ /\@/); print ALIAS "$datum\n"; } $verbose && print "\tPopulating $f with $datum...\n"; } close(ALIAS); } close(ALIASES); exit 0;