From 55aa3f5eb153f5e46a5d795bc3fd40fa3f35646b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 18 Oct 2007 16:42:30 -0400 Subject: [PATCH 1/1] don't abs_path($ENV{MR_CONFIG}) mrconfig files can be symlinks to files in other directories. But the directory the file is is significant, as it's the directory paths in the file are relative to. abs_path follows the symlink, so take care not to use it. --- mr | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mr b/mr index 44ff395..53f7a06 100755 --- a/mr +++ b/mr @@ -272,7 +272,7 @@ my %alias; Getopt::Long::Configure("no_permute"); my $result=GetOptions( "d|directory=s" => sub { $directory=abs_path($_[1]) }, - "c|config=s" => sub { $ENV{MR_CONFIG}=abs_path($_[1]) }, + "c|config=s" => \$ENV{MR_CONFIG}, "v|verbose" => \$verbose, "s|stats" => \$stats, "n|no-recurse" => \$no_recurse, @@ -283,6 +283,13 @@ if (! $result || @ARGV < 1) { } +# Make sure MR_CONFIG is an absolute path, but don't use abs_path since +# the config file might be a symlink to elsewhere, and the directory it's +# in is significant. +if ($ENV{MR_CONFIG} !~ /^\//) { + $ENV{MR_CONFIG}=getcwd()."/".$ENV{MR_CONFIG}; +} + loadconfig(\*DATA); loadconfig($ENV{MR_CONFIG}); #use Data::Dumper; @@ -325,6 +332,8 @@ elsif ($action eq 'config') { if ($section=~/^\//) { # try to convert to a path relative to the config file my ($dir)=$ENV{MR_CONFIG}=~/^(.*\/)[^\/]+$/; + $dir=abs_path($dir); + $dir.="/" unless $dir=~/\/$/; if ($section=~/^\Q$dir\E(.*)/) { $section=$1; } -- 2.39.5