From: martin f. krafft Date: Tue, 9 Sep 2014 04:39:54 +0000 (+0200) Subject: chdir() to config directory before including X-Git-Url: https://git.madduck.net/code/myrepos.git/commitdiff_plain/fb436fec2ca98879769e4ac20d905ed9e717815b?ds=sidebyside 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 --- 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"; } };