Handle hostnames with upper-case letters
[webmin.git] / htaccess-htpasswd / save_group.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete a group
3
4 require './htaccess-lib.pl';
5 &ReadParse();
6 &error_setup($text{'gsave_err'});
7 @dirs = &list_directories();
8 ($dir) = grep { $_->[0] eq $in{'dir'} } @dirs;
9 &can_access_dir($dir->[0]) || &error($text{'dir_ecannot'});
10 &lock_file($dir->[1]);
11
12 &switch_user();
13 $groups = &list_groups($dir->[4]);
14 if (!$in{'new'}) {
15         $group = $groups->[$in{'idx'}];
16         $loggroup = $group->{'group'};
17         }
18 else {
19         $loggroup = $in{'group'};
20         }
21
22 if ($in{'delete'}) {
23         # Just delete this group
24         &delete_group($group);
25         }
26 else {
27         # Validate inputs
28         $in{'group'} || &error($text{'gsave_egroup1'});
29         $in{'group'} =~ /:/ && &error($text{'gsave_egroup2'});
30         $in{'group'} =~ /^\S+$/ || &error($text{'gsave_egroup2'});
31         if ($in{'new'} || $group->{'group'} ne $in{'group'}) {
32                 ($clash) = grep { $_->{'group'} eq $in{'group'} } @$groups;
33                 $clash && &error($text{'gsave_eclash'});
34                 }
35
36         # Actually save
37         $group->{'group'} = $in{'group'};
38         $group->{'enabled'} = $in{'enabled'};
39         $group->{'members'} = [ split(/\s+/, $in{'members'}) ];
40         if ($in{'new'}) {
41                 &create_group($group, $dir->[4]);
42                 }
43         else {
44                 &modify_group($group);
45                 }
46         }
47 &switch_back();
48
49 &unlock_file($dir->[1]);
50 &webmin_log($in{'delete'} ? "delete" : $in{'new'} ? "create" : "modify",
51             "group", $loggroup, $group);
52 &redirect("");
53