From fb436fec2ca98879769e4ac20d905ed9e717815b Mon Sep 17 00:00:00 2001 From: "martin f. krafft" Date: Tue, 9 Sep 2014 06:39:54 +0200 Subject: [PATCH] chdir() to config directory before including Make mr try to chdir() to the dirname() of any .mrconfig files it's supposed to load. If the chdir() is successful, then the filename is truncated to basename(). If the chdir() is unsuccessful, then processing happens as before. Signed-off-by: martin f. krafft --- mr | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/mr b/mr index 18e8761..b7cd3cb 100755 --- a/mr +++ b/mr @@ -563,6 +563,7 @@ use warnings; use strict; use Getopt::Long; use Cwd qw(getcwd abs_path); +use File::Basename; # things that can happen when mr runs a command use constant { @@ -1278,6 +1279,7 @@ sub loadconfig { my @toload; my $in; + my $absf=abs_path($f); my $trusted; if (ref $f eq 'GLOB') { $dir=""; @@ -1285,7 +1287,6 @@ sub loadconfig { $trusted=1; } else { - my $absf=abs_path($f); if ($loaded{$absf}) { return; } @@ -1301,7 +1302,11 @@ sub loadconfig { } $dir=abs_path($dir)."/"; - + + if (chdir($dir)) { + $f=basename($f); + } + if (! exists $configfiles{$dir}) { $configfiles{$dir}=$f; } @@ -1323,7 +1328,12 @@ sub loadconfig { return; } - print "mr: loading config $f\n" if $verbose; + if ($f =~ /\//) { + print "mr: loading config $f\n" if $verbose; + } else { + print "mr: loading config $f (from ".getcwd().")\n" if $verbose; + } + open($in, "<", $f) || die "mr: open $f: $!\n"; } my @lines=<$in>; @@ -1367,7 +1377,7 @@ sub loadconfig { "this can allow arbitrary code execution!)\n"; } else { - die "mr: $msg in untrusted $f line $lineno\n". + die "mr: $msg in untrusted $absf line $lineno\n". "(To trust this file, list it in ~/.mrtrust.)\n"; } }; -- 2.39.2