Handle hostnames with upper-case letters
[webmin.git] / postgresql / save_group.cgi
1 #!/usr/local/bin/perl
2 # save_group.cgi
3 # Create, update or delete a postgres group
4
5 require './postgresql-lib.pl';
6 &ReadParse();
7 $access{'users'} || &error($text{'group_ecannot'});
8 &error_setup($text{'group_err'});
9
10 if ($in{'delete'}) {
11         # just delete the group
12         if (&get_postgresql_version() >= 8.0) {
13                 &execute_sql_logged($config{'basedb'}, "drop group $in{'oldname'}");
14                 }
15         else {
16                 &execute_sql_logged($config{'basedb'}, "delete from pg_group where grosysid = $in{'gid'}");
17                 }
18         &webmin_log("delete", "group", $in{'name'});
19         }
20 else {
21         # parse inputs
22         $in{'name'} =~ /^\S+$/ || &error($text{'group_ename'});
23         $s = &execute_sql($config{'basedb'}, "select * from pg_group where groname = '$in{'name'}'");
24         $in{'gid'} =~ /^\d+$/ || &error($text{'group_egid'});
25         if ($in{'new'}) {
26                 $s->{'data'}->[0]->[0] && &error($text{'group_etaken'});
27                 }
28         else {
29                 $s->{'data'}->[0]->[0] && $s->{'data'}->[0]->[1] != $in{'gid'} && &error($text{'group_etaken'});
30                 }
31
32         # Actually create or update the group
33         if (&get_postgresql_version() >= 8.0) {
34                 # Need to use new create group or modify command
35                 $s = &execute_sql($config{'basedb'}, "select * from pg_shadow");
36                 foreach $u (@{$s->{'data'}}) {
37                         $umap{$u->[1]} = $u->[0];
38                         }
39                 @mems = split(/\r?\n/, $in{'mems'});
40                 if ($in{'new'}) {
41                         $first = shift(@mems);
42                         &execute_sql_logged($config{'basedb'}, "create group $in{'name'} sysid $in{'gid'} user ".$umap{$first});
43                         if (@mems) {
44                                 &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} add user ".join(" , ", map { $umap{$_} } @mems));
45                                 }
46                         }
47                 else {
48                         if ($in{'name'} ne $in{'oldname'}) {
49                                 # Rename first
50                                 &execute_sql_logged($config{'basedb'}, "alter group $in{'oldname'} rename to $in{'name'}");
51                                 }
52                         $s = &execute_sql($config{'basedb'}, "select * from pg_group where groname = '$in{'name'}'");
53                         @oldmems = &split_array($s->{'data'}->[0]->[2]);
54                         if (@oldmems && $oldmems[0] ne '') {
55                                 &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} drop user ".join(", ", map { $umap{$_} } @oldmems));
56                                 }
57                         if (@mems) {
58                                 &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} add user ".join(" , ", map { $umap{$_} } @mems));
59                                 }
60                         }
61                 }
62         else {
63                 # Can update group table directly
64                 $mems = &join_array(split(/\0/, $in{'mems'}));
65                 if ($in{'new'}) {
66                         &execute_sql_logged($config{'basedb'}, "insert into pg_group values ('$in{'name'}', '$in{'gid'}', '$mems')");
67                         }
68                 else {
69                         &execute_sql_logged($config{'basedb'}, "update pg_group set groname = '$in{'name'}', grolist = '$mems' where grosysid = $in{'gid'}");
70                         }
71                 }
72         &webmin_log($in{'new'} ? "create" : "modify", "group", $in{'name'});
73         }
74 &redirect("list_groups.cgi");
75