3 # Create, update or delete a postgres group
5 require './postgresql-lib.pl';
7 $access{'users'} || &error($text{'group_ecannot'});
8 &error_setup($text{'group_err'});
11 # just delete the group
12 if (&get_postgresql_version() >= 8.0) {
13 &execute_sql_logged($config{'basedb'}, "drop group $in{'oldname'}");
16 &execute_sql_logged($config{'basedb'}, "delete from pg_group where grosysid = $in{'gid'}");
18 &webmin_log("delete", "group", $in{'name'});
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'});
26 $s->{'data'}->[0]->[0] && &error($text{'group_etaken'});
29 $s->{'data'}->[0]->[0] && $s->{'data'}->[0]->[1] != $in{'gid'} && &error($text{'group_etaken'});
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];
39 @mems = split(/\r?\n/, $in{'mems'});
41 $first = shift(@mems);
42 &execute_sql_logged($config{'basedb'}, "create group $in{'name'} sysid $in{'gid'} user ".$umap{$first});
44 &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} add user ".join(" , ", map { $umap{$_} } @mems));
48 if ($in{'name'} ne $in{'oldname'}) {
50 &execute_sql_logged($config{'basedb'}, "alter group $in{'oldname'} rename to $in{'name'}");
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));
58 &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} add user ".join(" , ", map { $umap{$_} } @mems));
63 # Can update group table directly
64 $mems = &join_array(split(/\0/, $in{'mems'}));
66 &execute_sql_logged($config{'basedb'}, "insert into pg_group values ('$in{'name'}', '$in{'gid'}', '$mems')");
69 &execute_sql_logged($config{'basedb'}, "update pg_group set groname = '$in{'name'}', grolist = '$mems' where grosysid = $in{'gid'}");
72 &webmin_log($in{'new'} ? "create" : "modify", "group", $in{'name'});
74 &redirect("list_groups.cgi");