X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/4db40b4e59c1e735e4176f3e82b825e895306c4c..1d1767192c80548755655cfe1ce8e503b392c7c1:/IkiWiki/Wrapper.pm?ds=sidebyside diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 6687cace2..6dc25403e 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -1,17 +1,17 @@ #!/usr/bin/perl +package IkiWiki; + use warnings; use strict; -use Cwd q{abs_path}; +use File::Spec; use Data::Dumper; use IkiWiki; -package IkiWiki; - sub gen_wrapper () { #{{{ - $config{srcdir}=abs_path($config{srcdir}); - $config{destdir}=abs_path($config{destdir}); - my $this=abs_path($0); + $config{srcdir}=File::Spec->rel2abs($config{srcdir}); + $config{destdir}=File::Spec->rel2abs($config{destdir}); + my $this=File::Spec->rel2abs($0); if (! -x $this) { error(sprintf(gettext("%s doesn't seem to be executable"), $this)); } @@ -36,22 +36,6 @@ sub gen_wrapper () { #{{{ addenv("$var", s); EOF } - if ($config{rcs} eq "svn" && $config{notify}) { - # Support running directly as hooks/post-commit by passing - # $2 in REV in the environment. - $envsave.=<<"EOF" - if (argc == 3) - addenv("REV", argv[2]); - else if ((s=getenv("REV"))) - addenv("REV", s); -EOF - } - if ($config{rcs} eq "tla" && $config{notify}) { - $envsave.=<<"EOF" - if ((s=getenv("ARCH_VERSION"))) - addenv("ARCH_VERSION", s); -EOF - } $Data::Dumper::Indent=0; # no newlines my $configstring=Data::Dumper->Dump([\%config], ['*config']); @@ -91,8 +75,14 @@ $envsave newenviron[i]=NULL; environ=newenviron; - if (setregid(getegid(), -1) != 0 || setreuid(geteuid(), -1) != 0) { - perror("failed to drop real uid/gid"); + if (setregid(getegid(), -1) != 0 && + setregid(getegid(), -1) != 0) { + perror("failed to drop real gid"); + exit(1); + } + if (setreuid(geteuid(), -1) != 0 && + setreuid(geteuid(), -1) != 0) { + perror("failed to drop real uid"); exit(1); } @@ -102,7 +92,9 @@ $envsave } EOF close OUT; - if (system("gcc", "$wrapper.c", "-o", "$wrapper.new") != 0) { + + my $cc=exists $ENV{CC} ? possibly_foolish_untaint($ENV{CC}) : 'cc'; + if (system($cc, "$wrapper.c", "-o", "$wrapper.new") != 0) { #translators: The parameter is a C filename. error(sprintf(gettext("failed to compile %s"), "$wrapper.c")); }