#!/usr/bin/perl sub fetchalias { my($f) = shift; my(@ret); open(F, "<$f") || die "open"; while() { chomp; next unless (! /bounce-no-mailbox/); if(/^&(.*)$/) { push(@ret, $1); } elsif(/^\|.*vdelivermail \'\' (.*)$/) { push(@ret, $1); } else { print STDERR "fetchalias: unhandled alias entry for $f: $_ \n"; } } close(F); return (@ret); } sub spew_aliases { my($base, $dom) = @_; my($dir); $dir = $base."/".$dom; opendir(D, $dir) || die "opendir"; foreach $d (readdir(D)) { next unless ($d ne "." && $d ne ".."); next unless ($d =~ /\.qmail-(.*)$/); $lhs = $d; $lhs =~ s/\.qmail-//; @alias = fetchalias($dir."/".$d); next unless ($#alias != -1); print "dn: alias=$lhs,dc=$dom,o=top\n"; print "objectClass: alias\n"; print "objectClass: dcObject\n"; print "alias: $lhs\n"; print "dc: $dom\n"; foreach $a (@alias) { print "aliasedObjectName: $a\n"; } print "\n"; } closedir(D); } opendir(D, $ARGV[0]) || die "opendir"; foreach $d (readdir(D)) { next unless ($d ne "." && $d ne ".."); spew_aliases($ARGV[0], $d); } closedir(D);