]> pere.pagekite.me Git - homepage.git/blob - linux/aliases2html
Nytt bokforslag.
[homepage.git] / linux / aliases2html
1 #!/store/bin/perl
2 #
3 # Name: aliases2html
4 # Author: Petter Reinholdtsen <pere@td.org.uit.no>
5 # Date: 1997-05-07
6 # Changed: 1998-08-20
7 # Version: 1.2
8 #
9 # Creates an html overview of the aliases file.
10 #
11 # 1998-08-20 v1.2 Added comment about where this program was found
12 # 1997-08-20 v1.1 added NIS-support using module Net::NIS
13 # 1997-05-09 v1.0 released
14
15 use Getopt::Std;
16
17 getopts("f:nv");
18
19 if ($opt_n) {
20 print STDERR "Reading aliases from NIS\n" if ($opt_v);
21 eval 'use Net::NIS::Table;';
22 die $@ if ($@);
23 $map = Net::NIS::Table->new("mail.aliases");
24 $aliases = $map->list();
25 for $alias (keys %{$aliases}) {
26 chop($$aliases{$alias}) if ($$aliases{$alias} =~ m/\0$/);
27 if ("\@\0" ne $alias) {
28 @e = split(/\s*,\s*/, $$aliases{$alias});
29 chop($alias) if ($alias =~ m/\0$/);
30 $aliases{$alias} = [@e];
31 }
32 }
33 } else {
34 if ($opt_f) {
35 print "Reading aliases from $opt_f\n" if ($opt_v);
36 %aliases = &parseAliases($opt_f);
37 } else {
38 %aliases = &parseAliases;
39 }
40 }
41
42
43 &expandAliases();
44
45 $date = localtime();
46
47 print <<EOF;
48 <HTML>
49 <HEAD><TITLE>Aliases</TITLE></HEAD>
50 <!-- Generated by $0 -->
51 <BODY>
52 <H1>Aliases</H1>
53 Updated $date
54 <TABLE>
55 <TR><TD valign="top"><UL>
56 EOF
57
58 for $alias (sort keys %aliases) {
59 print "<LI><A HREF=\"\#$alias\">$alias</A>\n";
60 }
61 print "</UL></TD><TD>\n";
62
63 for $alias (sort keys %aliases) {
64 print "<A NAME=\"$alias\"><H2>$alias</H2>\n<UL>\n";
65 for $entry (sort @{$aliases{$alias}}) {
66 $entry = expandEntry($entry);
67 print "<LI>$entry\n";
68 }
69 print "</UL></A>\n";
70 }
71 print <<EOF;
72 </TD></TR></TABLE></BODY></HTML>
73 EOF
74
75 exit 0;
76 ##
77 # Expand all aliases to final receivers
78 sub expandAliases {
79 local($expanded) = 1;
80 while ($expanded) {
81 my($alias);
82 $expanded = 0;
83 for $alias (keys %aliases) {
84 local(@e) = ();
85 for $entry (@{$aliases{$alias}}) {
86 if ($aliases{$entry}) {
87 push(@e, @{$aliases{$entry}});
88 $expanded = 1;
89 } elsif ($entry =~ /^:include:(.*)$/) {
90 push(@e, getIncEntries($1));
91 } else {
92 push(@e, $entry);
93 }
94 }
95 $aliases{$alias} = [@e];
96 }
97 }
98 }
99
100 ##
101 # Read and expand aliases from alias-file
102 sub parseAliases {
103 if (! @_ ) {
104 local($aliases) = "/etc/aliases";
105 } else {
106 local($aliases) = @_;
107 }
108
109 # Read alias-file
110 local(%a);
111 open(ALIASES, "<$aliases") || die "Unable to open $aliases for reading";
112 while (<ALIASES>) {
113 chomp;
114 next if (/^\#/);
115 next if (/^\s*$/);
116 local($alias, $content) = m/^\s*([^:]+):\s*(.*)$/;
117 local(@content) = split(/\s*,\s*/, $content);
118 local(@entries);
119 undef @entries;
120 while (@content) {
121 local($entry) = pop @content;
122 push(@entries, $entry);
123 }
124 $a{$alias} = [@entries];
125 }
126 close(ALIASES);
127
128 return %a;
129 }
130
131 ##
132 # Look up username in passwd
133 sub expandEntry {
134 local($entry) = @_;
135 ($name,$passwd,$uid,$gid,
136 $quota,$comment,$gcos,$dir,$shell) = getpwnam($entry);
137 $gcos =~ s/,.*$//;
138 return "$gcos &lt;$entry&gt;";
139 }
140
141 ##
142 # Expand alias include files
143 sub getIncEntries {
144 local($filename) = @_;
145 local(@entries);
146 if ( !open(INCFILE, "<$filename") ) {
147 warn "Unable to open $filename for reading";
148 push(@entries, "[file $filename]");
149 return @entries;
150 }
151 while (<INCFILE>) {
152 chomp;
153 next if (/^\#/);
154 next if (/^\s*$/);
155 push(@entries, $_);
156 }
157 close(INCFILE);
158 return @entries;
159 }