]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
Installing ikiwiki on a shared-hosting server, there may be no access to
authorLafayette Chamber Singers Webmaster <webmaster@lafayettechambersingers.org>
Sun, 14 Sep 2014 16:12:09 +0000 (12:12 -0400)
committerLafayette Chamber Singers Webmaster <webmaster@lafayettechambersingers.org>
Sun, 14 Sep 2014 16:12:09 +0000 (12:12 -0400)
install prerequisite Perl modules in the systemwide locations. They may
have to be installed under the home directory, such as by using local::lib
(which is how the cPanel Perl-module installer works, on systems that use it).

For that to work, the local::lib-defined value for PERL5LIB must be in
the environment when Perl starts up. The former way %config{ENV} was handled
was too late, depending on the Perl code to unpack it from the storable and
put it into the environment.

Easy solution is to build the wrapper to repopulate the environment based on
%config{ENV} before ever exec'ing Perl (and then remove it from the storable
as there is nothing more that the Perl code will need to do with it).

IkiWiki/Wrapper.pm

index b46bc6aa9794abdca46f68c8dc753e88daf7019b..ffbaf99086cfc80d93140acca579812c56c21300 100644 (file)
@@ -52,6 +52,7 @@ sub gen_wrapper () {
                       HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS
                       HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT
                       REDIRECT_URL} if $config{cgi};
                       HTTP_COOKIE REMOTE_USER HTTPS REDIRECT_STATUS
                       HTTP_HOST SERVER_PORT HTTPS HTTP_ACCEPT
                       REDIRECT_URL} if $config{cgi};
+       my $envsize=$#envsave;
        my $envsave="";
        foreach my $var (@envsave) {
                $envsave.=<<"EOF";
        my $envsave="";
        foreach my $var (@envsave) {
                $envsave.=<<"EOF";
@@ -59,6 +60,17 @@ sub gen_wrapper () {
                addenv("$var", s);
 EOF
        }
                addenv("$var", s);
 EOF
        }
+       if (ref $config{ENV} eq 'HASH') {
+               foreach my $key (keys %{$config{ENV}}) {
+                       my $val=$config{ENV}{$key};
+                       $val =~ s/([\\"])/\\$1/g;
+                       $envsize += 1;
+                       $envsave.=<<"EOF";
+       addenv("$key", "$val");
+EOF
+               }
+               delete $config{ENV};
+       }
        
        my @wrapper_hooks;
        run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
        
        my @wrapper_hooks;
        run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
@@ -171,7 +183,7 @@ EOF
 #include <sys/file.h>
 
 extern char **environ;
 #include <sys/file.h>
 
 extern char **environ;
-char *newenviron[$#envsave+7];
+char *newenviron[$envsize+7];
 int i=0;
 
 void addenv(char *var, char *val) {
 int i=0;
 
 void addenv(char *var, char *val) {