Package: passwd Version: 4.0.14-4 Severity: important Tags: patch When testing new LTSP on unstable, I came across this problem. When reconfiguring passwd, the script fail because roots password is '!', and this value has special meaning to the test shell primitive. The code need to be rewritten to cope with this.
I see this problem both in version 4.0.14-4 (etch) and 4.0.14-7 (sid). Here is a demonstration, first creating a etch chroot, then disabling the root account and finally reconfiguring passwd. # debootstrap etch /opt/ltsp/test http://ftp.skolelinux.no/debian [...] # chroot /opt/ltsp/test passwd -l root # chroot /opt/ltsp/test dpkg-reconfigure -fnoninteractive -pcritical passwd Shadow passwords are now on. /var/lib/dpkg/info/passwd.config: line 41: [: too many arguments /var/lib/dpkg/info/passwd.config: line 41: [: too many arguments # echo $? 30 # As you can see, with a disabled root account dpkg-reconfigure fail with exit code 30. Here is a draft patch solving the issue. It make sure -n is used in front of the lone string, and insert 'x' in front of the comparison values to make sure '!' is not alone as an argument to [. I'm not sure if this is the best way to solve this. For example, why is the grep operation repeated so many times? Perhaps it is better to extract it once, and then use 'case' to select what to do? --- /opt/ltsp/test/var/lib/dpkg/info/passwd.config 2006-01-27 21:36:03.000000000 +0100 +++ /opt/ltsp/i386/var/lib/dpkg/info/passwd.config 2006-03-04 16:45:03.000000000 +0100 @@ -38,13 +38,18 @@ fi if [ -e /etc/shadow ] && \ - [ "`grep ^root: /etc/shadow | cut -d : -f 2`" -a \ - "`grep ^root: /etc/shadow | cut -d : -f 2`" != '*' ]; then + [ -n "`grep ^root: /etc/shadow | cut -d : -f 2`" -a \ + "x`grep ^root: /etc/shadow | cut -d : -f 2`" != 'x*' ]; then return 0 fi - if [ "`grep ^root: /etc/passwd | cut -d : -f 2`" ] && \ - [ "`grep ^root: /etc/passwd | cut -d : -f 2`" != 'x' ]; then + if [ -n "`grep ^root: /etc/passwd | cut -d : -f 2`" ] && \ + [ "x`grep ^root: /etc/passwd | cut -d : -f 2`" != 'xx' ]; then + return 0 + fi + + if [ -n "`grep ^root: /etc/passwd | cut -d : -f 2`" ] && \ + [ "x`grep ^root: /etc/passwd | cut -d : -f 2`" != 'x!' ]; then return 0 fi -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

