From: Jamie C. <jca...@we...> - 2008-06-02 21:04:10
|
Hi Todd, Make sure that in your code, you aren't calling modify_user with an empty user hash. It looks like that is the case, as this would cause an 'empty' line like that to be inserted into /etc/passwd. I'd have to see all your code to comment further though.. - Jamie On 02/Jun/2008 12:11 Todd Kennedy wrote .. > Hello, > > I am new to webmin module development and am trying to extend the "Users > & Groups" module for internal purposes. What I have done is create a > "Recycle User" button on the selected users "Edit Users" page that > basically mimics the functionality of the delete_user.cgi (without > actually deleting the user) but also extends it by showing me a list of > currently selected user processes running. Once I press the "Recycle > user and home directory button" it goes off and first terminates those > running processes then removes the users home directory then I need to > reset the users password back to some default. I am about 90% of the way > there but seem to be caught up on the saving of the modified password. I > am using the modify_user function. Whats actually happening is that it's > leaving an incomplete line in the /etc/password and shadow file looking > something like this: > > svctag:*LK*:6445:::::: > nobody:*LK*:6445:::::: > noaccess:*LK*:6445:::::: > nobody4:*LK*:6445:::::: > :::::::: > > This last line should be the entry that I recycled but it's just a bunch > of empty GECOS fields. So it seems to me that it's rewriting the line > but is doing it with empty values. > > So I think I am missing something somewhere but am unsure what other > functions possibly I need to call in order for it to write out the > password file. I'm assuming the modify_user function takes care of that, no? > > > This does seem like a strange thing to do but would fit nicely into > managing test accounts for may lab machines. When the lab reservation > expires the admin can recycle the user with a press of the button and > set it back to some default settings. > > Here's the snippet of code that is suppose to be resetting the password > and saving it. > > %recycleuser = %{$ulist[$in{'num'}]}; > $pass = &encrypt_password($config{'recycle_passwd'}); > $recycleuser{'pass'} = $pass; > > # Update user details > &modify_user(\%recycleuser, \%user); > > # Run the pre-change command > $merr = &making_changes(); > &error(&text('usave_emaking', "<tt>$merr</tt>")) if (defined($merr)); > &unlock_user_files(); > &made_changes(); > > So as the code runs the following is displayed in the borwser, The has > info is there for debugging purposes. > > Deleting from other modules .. > .. done > Killing user processes > .. done > > Deleting home directory .. > .. done > > Creating Home Directory > .. done > > new encrypted passwd=TN4xb4vuWbxc6 > > Contents of recycleuser Hash prior to change > > num => 20 > > inactive => > > max => > > warn => > > user => testuser > > shell => /bin/sh > > home => /export/home/testuser > > real => > > line => 20 > > pass => NNwEdL/U3qYwU > > sline => 20 > > uid => 1000 > > change => 14032 > > min => > > expire => > > gid => 10 > > > Contents of User hash after replacing $pass but before saving > > num => 20 > > inactive => > > max => > > warn => > > user => testuser > > shell => /bin/sh > > home => /export/home/testuser > > real => > > line => 20 > > pass => TN4xb4vuWbxc6 > > sline => 20 > > uid => 1000 > > change => 14032 > > min => > > expire => > > gid => 10 > > > Reread the %ulist has for the user "Still has the old password" > > num => 20 > > inactive => > > max => > > warn => > > user => testuser > > shell => /bin/sh > > home => /export/home/testuser > > real => > > line => 20 > > pass => NNwEdL/U3qYwU > > sline => 20 > > uid => 1000 > > change => 14032 > > min => > > expire => > > gid => 10 > > > Any help on this would be much appriciated. |