Handle hostnames with upper-case letters
[webmin.git] / majordomo / delete_list.cgi
1 #!/usr/local/bin/perl
2 # delete_list.cgi
3 # Delete a mailing list, after asking the user if he is sure
4
5 require './majordomo-lib.pl';
6 &ReadParse();
7 $name = $in{'name'};
8 ($namere = $name) =~ s/\./\\./g;
9 %access = &get_module_acl();
10 &can_edit_list(\%access, $name) || &error($text{'delete_ecannot'});
11
12 # find aliases and files
13 $conf = &get_config();
14 $aliases_files = &get_aliases_file();
15 &foreign_call($aliases_module, "lock_alias_files", $aliases_files)
16         if ($in{'confirm'});
17 @aliases = &foreign_call($aliases_module, "list_aliases", $aliases_files);
18 foreach $a (@aliases) {
19         if ($a->{'name'} eq $name && $a->{'value'} =~ /-digestify/i) {
20                 &error($text{'delete_edigest'});
21                 }
22         if ($a->{'name'} =~ /-digestify$/i && $a->{'value'} =~ /\s$namere\s/i) {
23                 $digestify = $a;
24                 }
25         if ($a->{'name'} eq $name) {
26                 foreach $v (@{$a->{'values'}}) {
27                         $real_list = $1
28                                 if ($v =~ /^\|\S*wrapper\s+resend.*\s(\S+)$/);
29                         }
30                 }
31         }
32 @daliases = grep { $_->{'name'} =~ /^$namere$/i ||
33                   $_->{'name'} eq $real_list ||
34                   $_->{'name'} =~ /^$namere-(list|owner|approval|outgoing|request|archive)$/i ||
35                   $_->{'name'} =~ /owner-$namere-outgoing$/i ||
36                   $_->{'name'} =~ /$namere-outgoing-(list|owner|approval)$/i ||
37                   $_ eq $digestify ||
38                   $_->{'name'} =~ /^owner-$namere$/i } @aliases;
39 $ldir = &perl_var_replace(&find_value("listdir", $conf), $conf);
40 opendir(LDIR, $ldir);
41 while($f = readdir(LDIR)) {
42         if ($f eq $name || $f =~ /^$namere\./) {
43                 push(@files, "$ldir/$f");
44                 }
45         }
46 closedir(LDIR);
47
48 if ($in{'confirm'}) {
49         # do the deletion
50         foreach $f (@files) { &lock_file($f); }
51         foreach $f (@files) {
52                 system("rm -rf \"$f\"");
53                 }
54         foreach $f (@files) { &unlock_file($f); }
55         @daliases = sort { $b->{'line'} <=> $a->{'line'} } @daliases;
56         foreach $a (@daliases) {
57                 &foreign_call($aliases_module, "delete_alias", $a,
58                               $aliases_file, $a ne $daliases[$#daliases]);
59                 }
60
61         if ($digestify) {
62                 # delete the digestify alias from the 'parent' list
63                 foreach $a (@aliases) {
64                         $idx = &indexof($digestify->{'name'},@{$a->{'values'}});
65                         if ($idx >= 0) {
66                                 splice(@{$a->{'values'}}, $idx, 1);
67                                 &foreign_call($aliases_module,
68                                               "modify_alias", $a, $a);
69                                 }
70                         }
71                 }
72         &foreign_call($aliases_module, "unlock_alias_files", $aliases_files);
73
74         # remove from ACLs
75         &read_acl(undef, \%wusers);
76         foreach $u (keys %wusers) {
77                 %uaccess = &get_module_acl($u);
78                 $uaccess{'lists'} = join(' ', grep { $_ ne $name }
79                                               split(/\s+/, $uaccess{'lists'}));
80                 &save_module_acl(\%uaccess, $u) if ($uaccess{'lists'} ne '*');
81                 }
82         &webmin_log("delete", "list", $name);
83         &redirect("");
84         }
85 else {
86         # ask the user if he is sure
87         &ui_print_header(undef, $text{'delete_title'}, "");
88         print "<form action=delete_list.cgi>\n";
89         print "<input type=hidden name=name value=\"$name\">\n";
90         print "<input type=hidden name=confirm value=1>\n";
91         print "<b>",&text('delete_rusure', "<tt>".&html_escape($name)."</tt>"),
92               "</b><br>\n";
93         print "<ul>\n";
94         foreach $f (@files) {
95                 print "<tt>",&html_escape($f),"</tt><br>\n";
96                 }
97         print "</ul>\n";
98         print "<b>$text{'delete_aliases'}</b><br>\n";
99         print "<ul>\n";
100         foreach $a (@daliases) {
101                 print "<tt>",&html_escape("$a->{'name'}: $a->{'value'}"),
102                       "</tt><br>\n";
103                 }
104         print "</ul>\n";
105         print "<center><input type=submit ",
106               "value='$text{'delete_ok'}'></center>\n";
107         print "</form>\n";
108         &ui_print_footer("edit_list.cgi?name=$name", $text{'edit_return'});
109         }
110