[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#231015: libm.so: symlink should be relative



Joey,

This #231015 is critical bug - could you look at my last post (the
attached mail) ?  I clone this bug and reassign it to debhelper
if you think it's dh_link bug.

Bug Summary: dh_link does not work for relative symlinks, and I make a
patch for fixing this problem.

Regards,
-- gotom

At Mon, 15 Mar 2004 02:19:18 +0900,
GOTO Masanori wrote:
> 
> At Mon, 15 Mar 2004 00:53:25 +0900,
> GOTO Masanori wrote:
> > At Sun, 14 Mar 2004 12:31:37 +0900,
> > GOTO Masanori wrote:
> > > Joey, please look at this patch.  How to test in libc6-dev as following:
> > > 
> > > 	> ln -sf ../../lib/libm.so debian/libc6-dev/usr/lib/libm.so ; ls -l debian/libc6-dev/usr/lib/libm.so
> > > 	lrwxrwxrwx    1 gotom    gotom          17 2004-03-14 12:26 debian/libc6-dev/usr/lib/libm.so -> ../../lib/libm.so
> > > 	> dh_link.new -plibc6-dev ; ls -l debian/libc6-dev/usr/lib/libm.so
> > > 	lrwxrwxrwx    1 gotom    gotom          18 2004-03-14 12:26 debian/libc6-dev/usr/lib/libm.so -> /lib/libm-2.3.2.so
> > 
> > Umm, this patch has the bug.  The resolved symlink path should be
> > "/lib/libm.so"...
> 
> The problem is that if /lib/libm.so is existed, then this path keeps
> resolving to /lib/libm-2.3.2.so because readlink(2) resolves both
> . and .. and symlinks.  So we can't use abs_path() for this purpose.
> 
> I implement path expand routine which resolve . and .., but don't
> resolve symbolic links. 
> 
> This patch can handle to expand pathname even if the first character
> in $src component includes `..' or `.'.
> 
> 
> --- dh_link	2004-03-12 18:49:27.000000000 +0900
> +++ dh_link.new	2004-03-15 02:09:35.000000000 +0900
> @@ -78,6 +78,39 @@
>  
>  init();
>  
> +# expand_path expands all path "." and ".." component, but don't
> +# resolve symbolic links.
> +sub expand_path
> +{
> +	my $start = @_ ? shift : '.';
> +	my @pathname = split(m:/+:,$start);
> +
> +	my $entry;
> +	my @respath;
> +	foreach $entry (@pathname) {
> +		if ($entry eq '.' || $entry eq '') {
> +			# Do nothing
> +		} elsif ($entry eq '..') {
> +			if ($#respath == -1) {
> +				# Do nothing
> +			} else {
> +				pop @respath;
> +			}
> +		} else {
> +			push @respath, $entry;
> +		}
> +	}
> +
> +	# reconstruct full pathname
> +	my $result;
> +	foreach $entry (@respath) {
> +		$result .= '/' . $entry;
> +	}
> +
> +	return $result;
> +}
> +		
> +
>  foreach my $package (@{$dh{DOPACKAGES}}) {
>  	my $tmp=tmpdir($package);
>  	my $file=pkgfile($package,"links");
> @@ -128,6 +161,9 @@
>  		my $dest=pop @links;
>  		my $src=pop @links;
>  
> +		# Expand . and .. in src.
> +		$src=expand_path($src);
> +	
>  		# Relavatize src and dest.
>  		$src=~s:^/::;
>  		$dest=~s:^/::;
> 
> 
> 	> ln -sf ../../lib/libm.so debian/libc6-dev/usr/lib/libm.so ; ls -l debian/libc6-dev/usr/lib/libm.so
> 	lrwxrwxrwx    1 gotom    gotom          17 2004-03-15 02:11 debian/libc6-dev/usr/lib/libm.so -> ../../lib/libm.so
> 	> ./dh_link -plibc6-dev ; ls -l debian/libc6-dev/usr/lib/libm.so
> 	lrwxrwxrwx    1 gotom    gotom          12 2004-03-15 02:11 debian/libc6-dev/usr/lib/libm.so -> /lib/libm.so
> 
> I keep testing for another path examples.
> 
> Regards,
> -- gotom
> 



Reply to: