#!/opt/bin/perl5 # ######################################################################### # # # Program to extract certain users out of the sendmail alias file # # # ######################################################################### # # # Version 1.1 - Written 15.02.96 by Steffen Beyer # # # ######################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ######################################################################### # # Some internal variables: # $version = 'version 1.1'; # $self = $0; $self =~ s!^.*/!!; # $aliasfile = "/etc/aliases"; # # Process alias file: # unless(open(ALIASFILE, "<$aliasfile")) { die "$self: can't read '$aliasfile': $!\n"; } # $state = 0; # while () { if ($state == 0) { if (/^#E\s+USER\s+(\S+)\s+\((\S+)\)/) { $login = $1; $domain = $2; $state = 1; # print "<$login:$domain:"; } } elsif ($state == 1) { if (/^#[CM]\s+\S+;/) { $state = 2; } else { $state = 0; } } elsif ($state == 2) { if (/^#D\s+USER\s+\S+\s+\(\s*(.+?)\s*\)/) { $name = $1; $name =~ s/^\s*//; $name =~ s/\s*$//; $name =~ s/\s/ /g; $name =~ s/ +/ /g; $name =~ s/\s*\(.*\)\s*$//; $name =~ s/^Dr[\.\s]\s*/Dr. /; $name =~ s/(\S)\.(\S)/$1 $2/g; # print "$name>\n"; $name =~ m/\s*(\S+)\s*$/; $lastname = $1; $firstname = $`; $firstname =~ s/^\s*(Dr\.)?\s*//; $firstname =~ s/\s*$//; $firstname =~ tr/A-Z/a-z/; $lastname =~ tr/A-Z/a-z/; $user = "$firstname $lastname"; if ($duplicate{$user} ne '') { warn "Duplicate user '$user' ($duplicate{$user} $domain:$login)!\n"; } else { $exists{$lastname}++; $duplicate{$user} = "$domain:$login"; } $user = "$domain $lastname $firstname"; $usertable{$user} = "$login:$name:$firstname:$lastname"; } $state = 0; } else { } } # close(ALIASFILE); # $header = ''; # foreach $user (sort keys(%usertable)) { ($login,$name,$firstname,$lastname) = split(/:/,$usertable{$user}); ($domain) = split(/ /,$user); if ($header ne $domain) { $header = $domain; print "#\n"; print "# Domain: $domain\n"; print "#\n"; print "\n"; } if ($exists{$lastname} > 1) { warn "User '$name' ($domain:$login) has lastname occurring $exists{$lastname} times!\n"; } else { @parts = split('-', $lastname); foreach $part (@parts) { $part = ucfirst($part); } $Lastname = join('-', @parts); if (($login ne $lastname) || ($login ne $Lastname)) { print "mod.user $login\n"; if ($login ne $Lastname) { print "aka $Lastname\n"; } if ($login ne $lastname) { print "aka $lastname\n"; } print "\n"; } } } # # Done. #