Package: busybox-cvs
Version: 20040101-1
Severity: grave

ln fails if the destination of the link does not exist relative to
the working directory.  It should be interpreted relative to the
directory in which the link will be created, not relative to the
working directory.

This breaks debian-installer.

Here is a test case:

 mkdir foo
 touch foo/bar
 ln -s bar foo/baz

A patch that fixes it is attached.

-- 
Matt Kraai                                         [EMAIL PROTECTED]
diff -ru busybox-cvs-20040101-old/coreutils/ln.c busybox-cvs-20040101/coreutils/ln.c
--- busybox-cvs-20040101-old/coreutils/ln.c     2004-01-07 14:52:51.000000000 -0800
+++ busybox-cvs-20040101/coreutils/ln.c 2004-01-07 15:35:36.000000000 -0800
@@ -62,6 +62,8 @@
        }
 
        do {
+               char *dest, *src_copy;
+
                src_name = NULL;
                src = last;
 
@@ -74,12 +76,16 @@
                        src_name = src;
                }
 
-               if (stat(*argv, &statbuf)) {
+               src_copy = bb_xstrdup(src);
+               dest = concat_path_file(dirname(src_copy), *argv);
+               if (stat(dest, &statbuf)) {
                        bb_perror_msg(*argv);
                        status = EXIT_FAILURE;
                        free(src_name);
                        continue;
                }
+               free(src_copy);
+               free(dest);
 
                if (flag & LN_FORCE) {
                        unlink(src);

Reply via email to