#!/store/bin/perl # # Name: aliases2html # Author: Petter Reinholdtsen # Date: 1997-05-07 # Changed: 1998-08-20 # Version: 1.2 # # Creates an html overview of the aliases file. # # 1998-08-20 v1.2 Added comment about where this program was found # 1997-08-20 v1.1 added NIS-support using module Net::NIS # 1997-05-09 v1.0 released use Getopt::Std; getopts("f:nv"); if ($opt_n) { print STDERR "Reading aliases from NIS\n" if ($opt_v); eval 'use Net::NIS::Table;'; die $@ if ($@); $map = Net::NIS::Table->new("mail.aliases"); $aliases = $map->list(); for $alias (keys %{$aliases}) { chop($$aliases{$alias}) if ($$aliases{$alias} =~ m/\0$/); if ("\@\0" ne $alias) { @e = split(/\s*,\s*/, $$aliases{$alias}); chop($alias) if ($alias =~ m/\0$/); $aliases{$alias} = [@e]; } } } else { if ($opt_f) { print "Reading aliases from $opt_f\n" if ($opt_v); %aliases = &parseAliases($opt_f); } else { %aliases = &parseAliases; } } &expandAliases(); $date = localtime(); print < Aliases

Aliases

Updated $date
    EOF for $alias (sort keys %aliases) { print "
  • $alias\n"; } print "
\n"; for $alias (sort keys %aliases) { print "

$alias

\n
    \n"; for $entry (sort @{$aliases{$alias}}) { $entry = expandEntry($entry); print "
  • $entry\n"; } print "
\n"; } print <
EOF exit 0; ## # Expand all aliases to final receivers sub expandAliases { local($expanded) = 1; while ($expanded) { my($alias); $expanded = 0; for $alias (keys %aliases) { local(@e) = (); for $entry (@{$aliases{$alias}}) { if ($aliases{$entry}) { push(@e, @{$aliases{$entry}}); $expanded = 1; } elsif ($entry =~ /^:include:(.*)$/) { push(@e, getIncEntries($1)); } else { push(@e, $entry); } } $aliases{$alias} = [@e]; } } } ## # Read and expand aliases from alias-file sub parseAliases { if (! @_ ) { local($aliases) = "/etc/aliases"; } else { local($aliases) = @_; } # Read alias-file local(%a); open(ALIASES, "<$aliases") || die "Unable to open $aliases for reading"; while () { chomp; next if (/^\#/); next if (/^\s*$/); local($alias, $content) = m/^\s*([^:]+):\s*(.*)$/; local(@content) = split(/\s*,\s*/, $content); local(@entries); undef @entries; while (@content) { local($entry) = pop @content; push(@entries, $entry); } $a{$alias} = [@entries]; } close(ALIASES); return %a; } ## # Look up username in passwd sub expandEntry { local($entry) = @_; ($name,$passwd,$uid,$gid, $quota,$comment,$gcos,$dir,$shell) = getpwnam($entry); $gcos =~ s/,.*$//; return "$gcos <$entry>"; } ## # Expand alias include files sub getIncEntries { local($filename) = @_; local(@entries); if ( !open(INCFILE, "<$filename") ) { warn "Unable to open $filename for reading"; push(@entries, "[file $filename]"); return @entries; } while () { chomp; next if (/^\#/); next if (/^\s*$/); push(@entries, $_); } close(INCFILE); return @entries; }