4 # useradmin_create_user(&details)
5 # Create a new webmin user in the group
6 sub useradmin_create_user
8 return if (!$config{'sync_create'});
9 my $group = &get_group($config{'sync_group'});
11 my $clash = &get_user($_[0]->{'user'}) || &get_group($_[0]->{'user'});
13 return if ($_[0]->{'user'} !~ /^[A-z0-9\-\_\.]+$/);
14 my $user = { 'name' => $_[0]->{'user'},
15 'pass' => $config{'sync_unix'} ? 'x' : $_[0]->{'pass'},
17 'modules' => $group->{'modules'} };
19 push(@{$group->{'members'}}, $user->{'name'});
20 &modify_group($group->{'name'}, $group);
22 foreach my $m (@{$group->{'modules'}}, "") {
24 unlink("$config_directory/$m/$user->{'name'}.acl");
25 if (&read_file("$config_directory/$m/$group->{'name'}.gacl",
27 &write_file("$config_directory/$m/$user->{'name'}.acl",
34 # useradmin_delete_user(&details)
35 # Delete this webmin user if in sync
36 sub useradmin_delete_user
38 return if (!$config{'sync_delete'});
39 my $u = &get_user($_[0]->{'user'});
41 &delete_user($u->{'name'});
44 foreach $g (&list_groups()) {
45 my @mems = @{$g->{'members'}};
46 my $i = &indexof($_[0]->{'user'}, @mems);
49 $g->{'members'} = \@mems;
50 &modify_group($g->{'name'}, $g);
55 # useradmin_modify_user(&details)
56 # Update this users password if in sync
57 sub useradmin_modify_user
59 return if ($_[0]->{'passmode'} == 4 && $_[0]->{'olduser'} eq $_[0]->{'user'});
60 my $u = &get_user($_[0]->{'olduser'});
61 if ($u && $u->{'sync'}) {
62 if ($_[0]->{'user'} ne $_[0]->{'olduser'}) {
63 # New name might clash (or be invalid)
64 my $clash = &get_user($_[0]->{'user'}) ||
65 &get_group($_[0]->{'user'});
67 return if ($_[0]->{'user'} !~ /^[A-z0-9\-\_\.]+$/);
69 $u->{'name'} = $_[0]->{'user'};
70 if ($u->{'pass'} ne 'x') {
71 $u->{'pass'} = $_[0]->{'passmode'} == 3 ?
72 &encrypt_password($_[0]->{'plainpass'}) :
75 &modify_user($_[0]->{'olduser'}, $u);
80 if ($_[0]->{'user'} ne $_[0]->{'olduser'}) {
81 # Check other users' acl module acls
82 foreach my $u (&list_users()) {
83 my %uaccess = &get_module_acl($u->{'name'});
84 my @au = split(/\s+/, $uaccess{'users'});
85 my $idx = &indexof($_[0]->{'olduser'}, @au);
87 $au[$idx] = $_[0]->{'user'};
88 $uaccess{'users'} = join(" ", @au);
89 &save_module_acl(\%uaccess, $u->{'name'});
93 # Rename the user in his group
94 foreach my $g (&list_groups()) {
95 my @mems = @{$g->{'members'}};
96 my $i = &indexof($_[0]->{'olduser'}, @mems);
98 $mems[$i] = $_[0]->{'user'};
99 $g->{'members'} = \@mems;
100 &modify_group($g->{'name'}, $g);