Package: adduser Version: 3.80 Severity: normal Tags: patch The presence of symlinks in /etc/skel sometimes breaks adduser as follows:
Adding user `test'... Adding new group `test' (1000). Adding new user `test' (1000) with group `test'. Creating home directory `/home/test'. Copying files from `/etc/skel' symlink: Bad file descriptor Cleaning up. Removing directory `/home/test' Removing user `test'. Removing group `test'. groupdel: group test does not exist adduser: `groupdel test` returned error code 6. Aborting. Unfortunately the only environment in which I've been able to reproduce this reliably is in the Ubuntu live CD installer, which isn't something I can expect you to be able to randomly test. :-( I don't know why it shows up in this environment but not in others. However, on looking at the code, the cause is clear: copy_to_dir() looks at $! after calling symlink() without checking symlink()'s return code first, and in the event that symlink() succeeds $! is essentially random. Here's a patch (against 3.80 since that's what we have in Ubuntu, but the surrounding code doesn't seem to have changed between that and 3.85). Changelog entry: "Only check $! after calling symlink() if symlink() fails.": diff -Nru /tmp/WwKkNgpSc2/adduser-3.80/adduser /tmp/eVp2gJwz5F/adduser-3.80ubuntu1/adduser --- /tmp/WwKkNgpSc2/adduser-3.80/adduser 2005-11-18 17:15:59.000000000 +0000 +++ /tmp/eVp2gJwz5F/adduser-3.80ubuntu1/adduser 2006-03-07 11:38:39.000000000 +0000 @@ -680,8 +680,7 @@ my $error=""; $)="$newg"; $>="$newu"; - symlink("$target", "$todir/$file"); - $error="$!"; + symlink("$target", "$todir/$file") or $error="$!"; $>="$curuid"; $)="$curgid"; if( "$error" ne "" ) { Thanks, -- Colin Watson [EMAIL PROTECTED] -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]