annotate miscellany/audit/mh.pl @ 0:bce86c4163a3

Initial revision
author kono
date Mon, 18 Apr 2005 23:46:02 +0900
parents
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
bce86c4163a3 Initial revision
kono
parents:
diff changeset
3 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
4 # Subroutine mh_profile
bce86c4163a3 Initial revision
kono
parents:
diff changeset
5 # Parse the user's .mh_profile and get arguments and settings
bce86c4163a3 Initial revision
kono
parents:
diff changeset
6 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
7 sub mh_profile {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
8 local($PROFILE);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
9
bce86c4163a3 Initial revision
kono
parents:
diff changeset
10 ($PROFILE = $ENV{"MH"}) || ($PROFILE = $ENV{"HOME"} . "/.mh_profile");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
11
bce86c4163a3 Initial revision
kono
parents:
diff changeset
12 open PROFILE || "$0: can't read mh_profile $PROFILE: $!\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
13
bce86c4163a3 Initial revision
kono
parents:
diff changeset
14 while (<PROFILE>) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
15 next if /^#/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
16 next unless ($key, $value) = /([^:\s]+):\s*(.+)/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
17 $key =~ tr/A-Z/a-z/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
18 $MH{$key} = $value;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
19 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
20 close PROFILE;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
21
bce86c4163a3 Initial revision
kono
parents:
diff changeset
22 $MH{'path'} = $ENV{'HOME'} . '/' . $MH{'path'};
bce86c4163a3 Initial revision
kono
parents:
diff changeset
23 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
24
bce86c4163a3 Initial revision
kono
parents:
diff changeset
25
bce86c4163a3 Initial revision
kono
parents:
diff changeset
26 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
27 # Subroutine rcvstore
bce86c4163a3 Initial revision
kono
parents:
diff changeset
28 # Convenience routine for MH users. Pipes incoming
bce86c4163a3 Initial revision
kono
parents:
diff changeset
29 # mail message to rcvstore. Expects one argument - the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
30 # name of the folder to rcvstore into.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
31 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
32 sub rcvstore {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
33 local($folder) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
34
bce86c4163a3 Initial revision
kono
parents:
diff changeset
35 &openpipe("/usr/local/bin/mh/lib/rcvstore +$folder -create");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
36 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
37
bce86c4163a3 Initial revision
kono
parents:
diff changeset
38
bce86c4163a3 Initial revision
kono
parents:
diff changeset
39 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
40 # Subroutine rcvdist
bce86c4163a3 Initial revision
kono
parents:
diff changeset
41 # Convenience routine for MH users. Pipes incoming
bce86c4163a3 Initial revision
kono
parents:
diff changeset
42 # mail message to rcvdist. Expects one argument - the
bce86c4163a3 Initial revision
kono
parents:
diff changeset
43 # list of users to distribute the mail message to
bce86c4163a3 Initial revision
kono
parents:
diff changeset
44 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
45 sub rcvdist {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
46 local($recips) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
47
bce86c4163a3 Initial revision
kono
parents:
diff changeset
48 &openpipe("/usr/local/bin/mh/lib/rcvdist $recips");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
49 }
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 # Subroutine rcvtty
bce86c4163a3 Initial revision
kono
parents:
diff changeset
54 # Convenience routine for MH users. Pipes incoming
bce86c4163a3 Initial revision
kono
parents:
diff changeset
55 # mail message to rcvtty. This is MH's version of biff.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
56 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
57 sub rcvtty {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
58
bce86c4163a3 Initial revision
kono
parents:
diff changeset
59 &openpipe("/usr/local/bin/mh/lib/rcvtty");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
60 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
61
bce86c4163a3 Initial revision
kono
parents:
diff changeset
62
bce86c4163a3 Initial revision
kono
parents:
diff changeset
63 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
64 # Subroutine ali
bce86c4163a3 Initial revision
kono
parents:
diff changeset
65 # Expand an MH alias into a list of names usable by
bce86c4163a3 Initial revision
kono
parents:
diff changeset
66 # rcvdist
bce86c4163a3 Initial revision
kono
parents:
diff changeset
67 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
68 sub ali {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
69 local($alias) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
70 local($recips);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
71 local(@list) = ();
bce86c4163a3 Initial revision
kono
parents:
diff changeset
72
bce86c4163a3 Initial revision
kono
parents:
diff changeset
73 $recips = `/usr/local/bin/mh/ali $alias`;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
74 chop $recips;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
75 return(@list) if ($alias eq $recips);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
76
bce86c4163a3 Initial revision
kono
parents:
diff changeset
77 @list = split(/,/, $recips);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
78 return(@list);
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 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
83 # Subroutine refile_from
bce86c4163a3 Initial revision
kono
parents:
diff changeset
84 # Refile a message into a folder by organization and
bce86c4163a3 Initial revision
kono
parents:
diff changeset
85 # sender name. The top-level folder is an argument
bce86c4163a3 Initial revision
kono
parents:
diff changeset
86 # the user can specify.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
87 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
88 sub refile_from {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
89 local($toplevel) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
90
bce86c4163a3 Initial revision
kono
parents:
diff changeset
91 return if (length($from) <= 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
92 return if ($from eq $user);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
93
bce86c4163a3 Initial revision
kono
parents:
diff changeset
94 $toplevel = "log" if ($toplevel eq '');
bce86c4163a3 Initial revision
kono
parents:
diff changeset
95 &rcvstore("$toplevel/$organization/$from");
bce86c4163a3 Initial revision
kono
parents:
diff changeset
96 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
97
bce86c4163a3 Initial revision
kono
parents:
diff changeset
98 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
99 # Subroutine make_mhpath
bce86c4163a3 Initial revision
kono
parents:
diff changeset
100 # Make a directory path recursively.
bce86c4163a3 Initial revision
kono
parents:
diff changeset
101 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
102 sub make_mhpath {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
103 local($dir) = @_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
104 local($i);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
105 local($mode) = 0755;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
106
bce86c4163a3 Initial revision
kono
parents:
diff changeset
107 $mode = oct($MH{'folder-protect'}) if (defined $MH{'folder-protect'});
bce86c4163a3 Initial revision
kono
parents:
diff changeset
108
bce86c4163a3 Initial revision
kono
parents:
diff changeset
109 $_ = $dir;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
110 s#^/.*#/# || s#^[^/].*#.#;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
111 $start = $_;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
112 foreach $i (split('/', $dir)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
113 $start = $start . '/' . $i;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
114 next if (-d $start);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
115 mkdir($start, $mode) || return(1);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
116 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
117
bce86c4163a3 Initial revision
kono
parents:
diff changeset
118 return(0);
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 mh_parse
bce86c4163a3 Initial revision
kono
parents:
diff changeset
124 # Parse the command line options
bce86c4163a3 Initial revision
kono
parents:
diff changeset
125 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
126 sub mh_parse {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
127 local(@argdesc) = @SW;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
128 local($wantarg);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
129
bce86c4163a3 Initial revision
kono
parents:
diff changeset
130 while (($#ARGV >= 0) && ($ARGV[0] !~ /^-.+/)) { # must be a message list
bce86c4163a3 Initial revision
kono
parents:
diff changeset
131 push(@MSGS, shift @ARGV);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
132 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
133
bce86c4163a3 Initial revision
kono
parents:
diff changeset
134 grep(s/(\W)/\\$1/g, @argdesc);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
135
bce86c4163a3 Initial revision
kono
parents:
diff changeset
136 @ARGV = (split(' ', $MH{$program}), @ARGV) if defined($MH{$program});
bce86c4163a3 Initial revision
kono
parents:
diff changeset
137
bce86c4163a3 Initial revision
kono
parents:
diff changeset
138 return if ($#ARGV < 0);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
139
bce86c4163a3 Initial revision
kono
parents:
diff changeset
140 while ($ARGV[0] =~ /^-.+/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
141
bce86c4163a3 Initial revision
kono
parents:
diff changeset
142 $ARGV = shift @ARGV;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
143
bce86c4163a3 Initial revision
kono
parents:
diff changeset
144 unless (@matches = grep(/$ARGV/, @argdesc)) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
145 print "$program: unknown option: $ARGV\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
146 exit 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
147 &usage;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
148 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
149
bce86c4163a3 Initial revision
kono
parents:
diff changeset
150 for (@matches) { s/\\(\W)/$1/g; }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
151
bce86c4163a3 Initial revision
kono
parents:
diff changeset
152 if ($#matches > $[) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
153 print "$program: ambiguous switch $ARGV matches:\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
154 for (@matches) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
155 print "\ ", $_, "\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
156 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
157 exit 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
158 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
159
bce86c4163a3 Initial revision
kono
parents:
diff changeset
160 ($switch,$wantarg) = $matches[$[] =~ /^-(\S+)\s*(\S*)/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
161
bce86c4163a3 Initial revision
kono
parents:
diff changeset
162 $SW{$switch} = $wantarg ? shift @ARGV : 1;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
163 if ($SW{$switch} =~ /^(['"]).*$/ && $SW{$switch} !~ /^(['"]).*\1$/) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
164 do {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
165 $SW{$switch} .= ' ' . (shift @ARGV);
bce86c4163a3 Initial revision
kono
parents:
diff changeset
166 } until $#ARGV < 0 || $SW{$switch} =~ /^(['"]).*\1$/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
167 $SW{$switch} =~ s/^(['"])(.*)\1$/$2/;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
168 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
169 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
170 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
171
bce86c4163a3 Initial revision
kono
parents:
diff changeset
172
bce86c4163a3 Initial revision
kono
parents:
diff changeset
173 # =====
bce86c4163a3 Initial revision
kono
parents:
diff changeset
174 # Subroutine print_switches
bce86c4163a3 Initial revision
kono
parents:
diff changeset
175 # print the valid command line switches
bce86c4163a3 Initial revision
kono
parents:
diff changeset
176 #
bce86c4163a3 Initial revision
kono
parents:
diff changeset
177 sub print_switches {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
178 local(@argdesc) = @SW;
bce86c4163a3 Initial revision
kono
parents:
diff changeset
179
bce86c4163a3 Initial revision
kono
parents:
diff changeset
180 print " switches are:\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
181 for (sort @SW) {
bce86c4163a3 Initial revision
kono
parents:
diff changeset
182 print " $_\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
183 };
bce86c4163a3 Initial revision
kono
parents:
diff changeset
184 print "\n";
bce86c4163a3 Initial revision
kono
parents:
diff changeset
185 }
bce86c4163a3 Initial revision
kono
parents:
diff changeset
186
bce86c4163a3 Initial revision
kono
parents:
diff changeset
187
bce86c4163a3 Initial revision
kono
parents:
diff changeset
188 1;