diff options
Diffstat (limited to 'mail/qmail/files/mkaliasdir')
-rw-r--r-- | mail/qmail/files/mkaliasdir | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/mail/qmail/files/mkaliasdir b/mail/qmail/files/mkaliasdir new file mode 100644 index 000000000000..78bb69b80fd3 --- /dev/null +++ b/mail/qmail/files/mkaliasdir @@ -0,0 +1,109 @@ +#!/usr/bin/perl +# +# Script to populate a Qmail ~alias directory with entries from +# an [SZ]mail{er} or sendmail-like aliases file +# +# $Id: mkaliasdir,v 1.2 1997/02/22 07:47:18 tenser Exp $ +# +# Dan Cross <tenser@spitfire.ecsel.psu.edu> +# + +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("qalias"))[7]) eq "") +{ + die "User qalias 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 = <ME>); +close (ME); + +die "Error opening $aliases: $!\n" unless open(ALIASES, "$aliases"); + +while (<ALIASES>) +{ + chop; + + $mode = ">"; + + s/#.*$//; + + ($target, $data) = split(/:/, $_, 2); + + $data =~ s/^\s+//; + $data =~ s/\s+$//; + + next if (/^$/); + + if ($data =~ /^$/) + { + while (chop($data = <ALIASES>)) + { + $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; |