Ok, I see again something strange here. Since your second field in /etc/shadow, after roy, is empty
AFAIK you should read:
passwd -a -S
roy NP 09/05/2012 0 99999 7 -1
NP stands for NoPassword, AFAIK. You read instead L (Locked), but a locked account should have its second field in /etc/password containing at least and invalid char, like !
or *
. :-o
However you can login without password, and this is consistent with an NP account (you couldn't login with a locked account).
With an NP account (empty password), roy cannot change its password, but surely root should be able to do it.
Let's try something.
I'm sure that your filesystem cannot be full, since you've been able to copy a file. So this isn't your problem.
From what you've already posted, I'm sure you don't have these files:
/etc/passwd.lock /etc/shadow.lock /etc/group.lock /etc/gshadow.lock
If they exist, they should be deleted and this should solve the problem, but if you don't have them...
Let's make an attempt rebooting this way:
1) # shutdown -r now
2) At boot time, press any key to have the grub2 menu showing up; at the grub2 menu select the kernel you usually boot (most probably the first of the list), but don't press ENTER, just press E (editing)
3) go at the end of the line beginning with "linux", press SPACE and then insert this string: init=/bin/bash
. Be careful: grub2 thinks you're using an English keyboard. With a different keyboard you should type something a bit different (with an italian keyboard I should type "init�-bin-bash") to get "init=/bin/bash" on screen
4) press CTRL+X to boot (I guess it's CTRL+X, follow on screen instructions)
5) now you're in the system and - this is the funny thing - you're root without even knowing root's password (you can save this trick for the future), and you do this:
# mount -o remount,rw /
# passwd roy
Now insert your new password, and then of course insert it again.
# sync; sync
# mount -o remount,ro /
# reboot -f
After the reboot, you're back in your standard system. Is it solved?
--
Bye