4 # useradmin_create_user(&details)
5 # Create a new samba user if sync is enabled
6 sub useradmin_create_user
9 if (&istrue("encrypt passwords") && ($config{'smb_passwd'} || $has_pdbedit) &&
10 $config{'sync_add'} && !&get_user($_[0]->{'user'})) {
11 # Add a user to smbpasswd
12 &lock_file($config{'smb_passwd'});
13 local $u = { 'name' => $_[0]->{'user'},
14 'uid' => $_[0]->{'uid'} };
15 if ($samba_version >= 2) {
17 push(@opts, "N") if ($_[0]->{'passmode'} == 0);
18 push(@opts, "D") if ($_[0]->{'passmode'} == 1);
19 $u->{'opts'} = \@opts;
22 $u->{'real'} = $_[0]->{'real'};
23 $u->{'home'} = $_[0]->{'home'};
24 $u->{'shell'} = $_[0]->{'shell'};
26 $u->{'pass1'} = $u->{'pass2'} = ("X" x 32);
27 if ($_[0]->{'passmode'} == 0) {
28 $u->{'pass1'} = "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX";
29 $u->{'pass2'} = $u->{'pass1'};
32 if ($_[0]->{'passmode'} == 3) {
33 &set_password($_[0]->{'user'}, $_[0]->{'plainpass'});
35 &unlock_file($config{'smb_passwd'});
39 # useradmin_delete_user(&details)
41 sub useradmin_delete_user
44 if (&istrue("encrypt passwords") && ($config{'smb_passwd'} || $has_pdbedit) &&
45 $config{'sync_delete'} && ($u = &get_user($_[0]->{'user'}))) {
47 &lock_file($config{'smb_passwd'});
49 &unlock_file($config{'smb_passwd'});
52 if ($config{'sync_delete_profile'}) {
53 # Delete his roaming profile, if any
54 if (&get_share("Profiles")) {
55 local $ppath = &getval("path");
57 local $upath = "$ppath/$_[0]->{'user'}";
59 &system_logged("rm -rf ".quotemeta($upath));
72 # useradmin_modify_user(&details)
74 sub useradmin_modify_user
77 if (&istrue("encrypt passwords") && ($config{'smb_passwd'} || $has_pdbedit) &&
78 $config{'sync_change'} && ($u = &get_user($_[0]->{'olduser'}))) {
80 &lock_file($config{'smb_passwd'});
81 $u->{'uid'} = $_[0]->{'uid'};
82 $u->{'name'} = $_[0]->{'user'};
84 local @opts = grep { !/[ND]/ } @{$u->{'opts'}};
85 push(@opts, "N") if ($_[0]->{'passmode'} == 0);
86 push(@opts, "D") if ($_[0]->{'passmode'} == 1);
87 $u->{'opts'} = \@opts;
90 $u->{'real'} = $_[0]->{'real'};
91 $u->{'home'} = $_[0]->{'home'};
92 $u->{'shell'} = $_[0]->{'shell'};
94 if ($_[0]->{'passmode'} == 0) {
95 $u->{'pass1'} = "NO PASSWORDXXXXXXXXXXXXXXXXXXXXX";
96 $u->{'pass2'} = $u->{'pass1'};
98 elsif ($_[0]->{'passmode'} == 1) {
99 $u->{'pass1'} = $u->{'pass2'} = ("X" x 32);
102 if ($_[0]->{'passmode'} == 3) {
103 &set_password($_[0]->{'user'}, $_[0]->{'plainpass'});
105 &unlock_file($config{'smb_passwd'});
108 if ($config{'sync_change_profile'}) {
109 # Rename his roaming profile, if any
110 if (&get_share("Profiles")) {
111 local $ppath = &getval("path");
113 local $upath = "$ppath/$_[0]->{'olduser'}";
114 local $newupath = "$ppath/$_[0]->{'user'}";
116 &rename_logged($upath, $newupath);
126 local @ulist = &list_users();
128 foreach $u (@ulist) {
129 return $u if ($u->{'name'} eq $_[0]);
135 # When running Samba 3.x, these functions update the Samba groups file to
138 # useradmin_create_group(&group)
139 sub useradmin_create_group
141 return if (!$config{'gsync_add'});
142 return if ($samba_version < 3 ||
143 (!$has_smbgroupedit && !$has_net));
144 local $clash = &get_group($_[0]->{'group'});
147 local $group = { 'name' => $_[0]->{'group'},
148 'unix' => $_[0]->{'group'},
149 'type' => $config{'gsync_type'} };
150 if ($group->{'type'} eq 'l') {
151 $group->{'priv'} = $config{'gsync_priv'};
153 &create_group($group);
156 # useradmin_delete_group(&group)
157 sub useradmin_delete_group
159 return if (!$config{'gsync_delete'});
160 return if ($samba_version < 3 ||
161 (!$has_smbgroupedit && !$has_net));
162 local $group = &get_group($_[0]->{'group'});
165 &delete_group($group);
168 # useradmin_modify_group(&group, &oldgroup)
169 sub useradmin_modify_group
171 return if (!$config{'gsync_change'});
172 return if ($_[0]->{'group'} eq $_[1]->{'group'});
173 return if ($samba_version < 3 ||
174 (!$has_smbgroupedit && !$has_net));
175 local $group = &get_group($_[1]->{'group'});
178 $group->{'name'} = $_[0]->{'group'};
179 &modify_group($group);
185 local @glist = &list_groups();
187 foreach $g (@glist) {
188 return $g if ($g->{'name'} eq $_[0]);