|
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.
|