[webmin-devel] using modify_user to change user details

Todd Kennedy <[email protected]> Mon, 02 Jun 2008 15:11:58 -0400
Newsgroups gmane.comp.web.webmin.devel
Message-ID <[email protected]>
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.



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
-
Forwarded by the Webmin development list at [email protected]
To remove yourself from this list, go to
http://lists.sourceforge.net/lists/listinfo/webadmin-devel