Handle hostnames with upper-case letters
[webmin.git] / sendmail / del_mailqs.cgi
1 #!/usr/local/bin/perl
2 # del_mailqs.cgi
3 # Delete some mail messages from the queue
4
5 require './sendmail-lib.pl';
6 require './boxes-lib.pl';
7 &ReadParse();
8 @files = split(/\0/, $in{'file'});
9
10 if ($in{'flush'}) {
11         # Flushing selected messages
12         @files || &error($text{'delq_enone'});
13         $access{'flushq'} || &error($text{'flushq_ecannot'});
14         &ui_print_unbuffered_header(undef, $text{'flushq_title'}, "");
15
16         # Split into quarantined and non-quarantined messages
17         local @mails = map { &mail_from_queue($_) } @files;
18         local @quar = grep { $_->{'quar'} } @mails;
19         local @nonquar = grep { !$_->{'quar'} } @mails;
20
21         foreach $ml (\@quar, \@nonquar) {
22                 next if (!@$ml);
23                 @files = map { $_->{'file'} } @$ml;
24                 $cmd = "$config{'sendmail_path'} -v -C$config{'sendmail_cf'}";
25                 if ($ml->[0]->{'quar'}) {
26                         $cmd .= " -qQ";
27                         }
28                 foreach $file (@files) {
29                         $file =~ s/^.*\///;
30                         $cmd .= " -qI$file";
31                         }
32                 if ($config{'mailq_order'}) {
33                         $cmd .= " -O QueueSortOrder=$config{'mailq_order'}";
34                         }
35                 print &text('flushq_desc2', scalar(@files)),"\n";
36                 print "<pre>";
37                 &foreign_require("proc", "proc-lib.pl");
38                 &foreign_call("proc", "safe_process_exec_logged", $cmd, 0, 0,
39                               STDOUT, undef, 1);
40                 print "</pre>\n";
41                 }
42         &webmin_log("flushq", undef, scalar(@files));
43         }
44 else {
45         # Deleting selected messages
46         &error_setup($text{'delq_err'});
47         $access{'mailq'} == 2 || &error($text{'delq_ecannot'});
48         @files || &error($text{'delq_enone'});
49         &ui_print_header(undef, $text{'delq_titles'}, "");
50
51         if ($in{'confirm'} || !$config{'delete_confirm'}) {
52                 # Do it!
53                 $count = 0;
54                 $conf = &get_sendmailcf();
55                 foreach $file (@files) {
56                         print &text('delq_file', "<tt>$file</tt>"),"&nbsp;&nbsp;&nbsp;\n";
57
58                         local $ok;
59                         foreach $mqueue (&mailq_dir($conf)) {
60                                 $ok++ if ($file =~ /^$mqueue\//);
61                                 }
62                         if (!$ok) {
63                                 print $text{'delq_efile'},"<br>\n";
64                                 next;
65                                 }
66
67                         if ($file =~ /\.\./) {
68                                 print $text{'delq_efile'},"<br>\n";
69                                 next;
70                                 }
71                         if (!-r $file) {
72                                 print $text{'delq_egone'},"<br>\n";
73                                 next;
74                                 }
75
76                         $mail = &mail_from_queue($file, "auto");
77                         if (!&can_view_qfile($mail)) {
78                                 print $text{'delq_ecannot'},"<br>\n";
79                                 next;
80                                 }
81
82                         if (-r $mail->{'lfile'} && !$in{'locked'}) {
83                                 print $text{'delq_elocked'},"<br>\n";
84                                 next;
85                                 }
86
87                         unlink($mail->{'file'}, $mail->{'dfile'}, $mail->{'lfile'});
88                         print $text{'delq_ok'},"<br>\n";
89                         $count++;
90                         }
91                 &webmin_log("delmailq", undef, undef, { 'count' => $count }) if ($count);
92                 }
93         else {
94                 # Ask for confirmation first
95                 print "<center>\n";
96                 print &ui_form_start("del_mailqs.cgi", "post");
97                 print &text('delq_rusure', scalar(@files)),"<p>\n";
98                 foreach $f (@files) {
99                         print &ui_hidden("file", $f),"\n";
100                         }
101                 print &ui_hidden("locked", $in{'locked'}),"\n";
102                 print &ui_form_end([ [ "confirm", $text{'delq_confirm'} ] ]);
103                 print "</center>\n";
104                 }
105         }
106 &ui_print_footer("list_mailq.cgi", $text{'mailq_return'});
107