annotate miscellany/audit/audit.pl @ 12:441a2190cfae

Lion fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 Apr 2012 13:10:49 +0900
parents bce86c4163a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
1 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
2 #
12
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
3 # $Revision: 1.1.1.1 $
441a2190cfae Lion fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
4 # $Date: 2005/04/18 14:46:04 $
0
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9 # Subroutine initialize
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 # Set up the environment for the user and parse the incoming
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11 # mail message.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13 sub initialize {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 local($passwd, $uid, $gid, $quota, $comment, $gcos);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 ($user, $passwd, $uid, $gid, $quota, $comment, $gcos, $home, $shell) =
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 getpwnam($ARGV[0]); shift @ARGV;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 $ENV{'USER'} = $user;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 $ENV{'HOME'} = $home;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21 $ENV{'SHELL'} = $shell;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 $ENV{'TERM'} = "vt100";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24 &parse_message(STDIN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 # Subroutine parse_message
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 # Parse a message into headers, body and special variables
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 sub parse_message {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 local(*INFILE) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 $/ = ''; # read input in paragraph mode
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 %headers = ( );
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37 @received = ( );
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38 undef($body);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 $header = <INFILE>;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 $* = 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 while (<INFILE>) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 s/^From />From /g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 $body = "" if !defined($body);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 $body .= $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 $/ = "\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 $* = 0;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
50
bce86c4163a3 Initial revision
kono
parents:
diff changeset
51
bce86c4163a3 Initial revision
kono
parents:
diff changeset
52 ;# -----
bce86c4163a3 Initial revision
kono
parents:
diff changeset
53 ;# $sender comes from the UNIX-style From line (From strike...)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 ;#
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 ($sender) = ($header =~ /^From\s+(\S+)/);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58 ;# -----
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 ;# fill out the headers associative array with fields from the mail
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 ;# header.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61 ;#
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62 $_ = $header;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 s/\n\s+//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 @lines = split('\n');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 for ( @lines ) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 /^([\w-]*):\s*(.*)/ && do {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 $mheader = $1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 $mheader =~ tr/A-Z/a-z/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 if (($mheader eq "cc" || $mheader eq "to") && $headers{$mheader}) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 $headers{$mheader} .= ", $2";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 } elsif ($mheader eq "received") {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72 push(@received, $2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 $headers{$mheader} = $2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 @received = reverse(@received);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
79
bce86c4163a3 Initial revision
kono
parents:
diff changeset
80
bce86c4163a3 Initial revision
kono
parents:
diff changeset
81 ;# -----
bce86c4163a3 Initial revision
kono
parents:
diff changeset
82 ;# for convenience, $subject is $headers{'subject'} and $precedence is
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 ;# $headers{'precedence'}
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 ;#
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 $subject = $headers{'subject'};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 $subject = "(No subject)" unless $subject;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 $subject =~ s/\s+$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 $precedence = $headers{'precedence'};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 ;# -----
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 ;# create arrays for who was on the To, Cc lines
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93 ;#
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 @cc = &expand($headers{'cc'});
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 @to = &expand($headers{'to'});
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 defined($headers{"apparently-to"}) && do {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97 $apparentlyto = $headers{"apparently-to"};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 push(@to, &expand($apparentlyto));
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 ;# -----
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 ;# $from comes from From: line. $address is their email address.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 ;# $organization is their site. for example, strike@pixel.convex.com
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 ;# yields an organization of convex.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 ;#
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106 $_ = $headers{'from'} ||
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 $headers{'resent-from'} ||
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108 $headers{'sender'} ||
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 $headers{'resent-sender'} ||
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 $headers{'return-path'} ||
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 $headers{'reply-to'};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 if ($_ eq "") {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 $friendly = $from = $address = $organization = "unknown";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 ($friendly, $address, $from, $organization) = &parse_email_address($_);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
119 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
120
bce86c4163a3 Initial revision
kono
parents:
diff changeset
121
bce86c4163a3 Initial revision
kono
parents:
diff changeset
122 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
123 # Subroutine parse_email_address
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 # Parse an email address into address, from, organization
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 # address is full Internet address, from is just the login
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 # name and organization is Internet hostname (without final domain)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 sub parse_email_address {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129 local($_) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 local($friendly, $address, $from, $organization);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 $organization = "local";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133 $friendly = "unknown";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135 # From: Disk Monitor Daemon (/usr/adm/bin/dfbitch) <daemon@hydra.convex.com>?
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137 s/^\s*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 s/\s*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139 if (/(.*)\s*<[^>]+>$|<[^>]+>\s*(.*)$/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 $friendly = $+;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141 $friendly =~ s/\"//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 } elsif (/\(([^\)]+)\)/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143 $friendly = $1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 s/.*<([^>]+)>.*/$1/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 s/\(.*\)//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 s/\s*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149 $address = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151 s/@.*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 s/%.*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 s/.*!//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 s/\s//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 $from = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 $_ = $address;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 tr/A-Z/a-z/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159 if (/!/ && /@/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 s/\s//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161 s/!.*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 $organization = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 } elsif (/!/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 s/\s//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 s/![A-Za-z0-9_@]*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 s/.*!//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 s/\..*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 $organization = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 } elsif (/@/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 s/.*@//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171 s/\s//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172 if (! /\./) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 $organization = "unknown";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 if (/\.(com|edu)$/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 s/\.[A-Za-z0-9_]*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 s/.*\.//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 } else {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179 s/\.[A-Za-z0-9_]*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 s/\.[A-Za-z0-9_]*$//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 s/.*\.//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 $organization = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187 return ($friendly, $address, $from, $organization);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
189
bce86c4163a3 Initial revision
kono
parents:
diff changeset
190
bce86c4163a3 Initial revision
kono
parents:
diff changeset
191 # ====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
192 # Subroutine vacation
bce86c4163a3 Initial revision
kono
parents:
diff changeset
193 # deliver a vacation message to the sender of this mail
bce86c4163a3 Initial revision
kono
parents:
diff changeset
194 # message.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
195 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
196 sub vacation {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
197 local($vacfile) = $ENV{'HOME'} . "/" . ".vacation.msg";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
198 local($msubject) = "\"Vacation mail for $ENV{'USER'} [Re: $subject]\" ";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
199 local($vacaudit, $astat, $mstat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
200 local(@ignores);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
201 local(@names);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
202
bce86c4163a3 Initial revision
kono
parents:
diff changeset
203 return if (length($from) <= 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
204 return if ($precedence =~ /(bulk|junk)/i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
205 return if ($from =~ /-REQUEST@/i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
206
bce86c4163a3 Initial revision
kono
parents:
diff changeset
207 @ignores = ('daemon', 'postmaster', 'mailer-daemon', 'mailer', 'root',);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
208 grep(do {return if ($_ eq $from);}, @ignores);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
209
bce86c4163a3 Initial revision
kono
parents:
diff changeset
210 if (-e $vacfile) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
211 ($vacaudit = $vacfile) =~ s/\.msg/\.log/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
212
bce86c4163a3 Initial revision
kono
parents:
diff changeset
213 $mstat = (stat($vacfile))[9];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
214 $astat = (stat($vacaudit))[9];
bce86c4163a3 Initial revision
kono
parents:
diff changeset
215 unlink($vacaudit) if ($mstat > $astat);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
216
bce86c4163a3 Initial revision
kono
parents:
diff changeset
217 if (-f $vacaudit) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
218 open(VACAUDIT, "< $vacaudit") && do {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
219 while (<VACAUDIT>) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
220 chop;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
221 return if ($_ eq $from);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
222 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
223 close(VACAUDIT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
224 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
225 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
226
bce86c4163a3 Initial revision
kono
parents:
diff changeset
227 open(MAIL,"| /usr/ucb/Mail -s $msubject $address") || return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
228 open(VACFILE, "< $vacfile") || return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
229 while (<VACFILE>) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
230 s/\$SUBJECT/$subject/g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
231 print MAIL $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
232 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
233 close(VACFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
234 close(MAIL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
235
bce86c4163a3 Initial revision
kono
parents:
diff changeset
236 open(VACAUDIT, ">> $vacaudit") || return;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
237 print VACAUDIT "$from\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
238 close(VACAUDIT);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
239 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
240 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
241
bce86c4163a3 Initial revision
kono
parents:
diff changeset
242
bce86c4163a3 Initial revision
kono
parents:
diff changeset
243 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
244 # Subroutine expand
bce86c4163a3 Initial revision
kono
parents:
diff changeset
245 # expand a line (To, Cc, etc.) into a list of addressees.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
246 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
247 sub expand {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
248 local($_) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
249 local(@fccs) = ( );
bce86c4163a3 Initial revision
kono
parents:
diff changeset
250
bce86c4163a3 Initial revision
kono
parents:
diff changeset
251 return(@fccs) if /^$/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
252
bce86c4163a3 Initial revision
kono
parents:
diff changeset
253 for (split(/\s*,\s*/)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
254 s/.*<([^>]+)>.*/$1/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
255 s/@.*//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
256 s/.*!//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
257 s/\(.*\)//;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
258 s/\s//g;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
259 push(@fccs,$_) unless $seen{$_}++;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
260 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
261
bce86c4163a3 Initial revision
kono
parents:
diff changeset
262 return(@fccs);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
263 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
264
bce86c4163a3 Initial revision
kono
parents:
diff changeset
265
bce86c4163a3 Initial revision
kono
parents:
diff changeset
266 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
267 # Subroutine deliver
bce86c4163a3 Initial revision
kono
parents:
diff changeset
268 # Deliver the incoming mail message to the user's mail drop
bce86c4163a3 Initial revision
kono
parents:
diff changeset
269 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
270 sub deliver {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
271
bce86c4163a3 Initial revision
kono
parents:
diff changeset
272 &deposit("/usr/spool/mail/$user");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
273 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
274
bce86c4163a3 Initial revision
kono
parents:
diff changeset
275
bce86c4163a3 Initial revision
kono
parents:
diff changeset
276 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
277 # Put the incoming mail into the specified mail drop (file)
bce86c4163a3 Initial revision
kono
parents:
diff changeset
278 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
279 sub deposit {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
280 local($drop) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
281 local($LOCK_EX) = 2;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
282 local($LOCK_UN) = 8;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
283
bce86c4163a3 Initial revision
kono
parents:
diff changeset
284 open(MAIL, ">> $drop") || die "open: $!\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
285 flock(MAIL, $LOCK_EX);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
286 seek(MAIL, 0, 2);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
287
bce86c4163a3 Initial revision
kono
parents:
diff changeset
288 print MAIL "$header";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
289 print MAIL "$body\n\n" if defined($body);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
290
bce86c4163a3 Initial revision
kono
parents:
diff changeset
291 flock(MAIL, $LOCK_UN);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
292 close(MAIL);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
293 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
294
bce86c4163a3 Initial revision
kono
parents:
diff changeset
295
bce86c4163a3 Initial revision
kono
parents:
diff changeset
296 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
297 # Subroutine file_from
bce86c4163a3 Initial revision
kono
parents:
diff changeset
298 # Add the mail message to another mail drop in a log directory.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
299 # The path of the mail drop is toplevel/organization/user
bce86c4163a3 Initial revision
kono
parents:
diff changeset
300 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
301 sub file_from {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
302 local($toplevel) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
303 local($dir);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
304
bce86c4163a3 Initial revision
kono
parents:
diff changeset
305 return if (length($from) <= 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
306 return if ($from eq $user);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
307
bce86c4163a3 Initial revision
kono
parents:
diff changeset
308 $toplevel = "log" if ($toplevel eq '');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
309
bce86c4163a3 Initial revision
kono
parents:
diff changeset
310 $dir = "$home/$toplevel";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
311 (!-d $dir) && mkdir($dir, 0700);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
312 $dir .= "/$organization";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
313 (!-d $dir) && mkdir($dir, 0700);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
314
bce86c4163a3 Initial revision
kono
parents:
diff changeset
315 &deposit("$dir/$from");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
316 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
317
bce86c4163a3 Initial revision
kono
parents:
diff changeset
318
bce86c4163a3 Initial revision
kono
parents:
diff changeset
319 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
320 # Subroutine openpipe
bce86c4163a3 Initial revision
kono
parents:
diff changeset
321 # Open a pipe to a command and write the mail message to it.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
322 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
323 sub openpipe{
bce86c4163a3 Initial revision
kono
parents:
diff changeset
324 local($command) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
325
bce86c4163a3 Initial revision
kono
parents:
diff changeset
326 open(CMD, "| $command") || die;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
327 print CMD "$header\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
328 print CMD "$body\n\n" if defined($body);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
329 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
330
bce86c4163a3 Initial revision
kono
parents:
diff changeset
331 1;