X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/b30cacdf8da07f40af03f1b26021d8ec4d8b8b4c..bb5cf4a0940b8fd2750c6175adb15382b84c71e2:/IkiWiki/Wrapper.pm?ds=sidebyside

diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index 84b4b5a2f..4c99cdaa0 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -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};
+	my $envsize=$#envsave;
 	my $envsave="";
 	foreach my $var (@envsave) {
 		$envsave.=<<"EOF";
@@ -59,6 +60,18 @@ sub gen_wrapper () {
 		addenv("$var", s);
 EOF
 	}
+	if (ref $config{ENV} eq 'HASH') {
+		foreach my $key (keys %{$config{ENV}}) {
+			my $val=$config{ENV}{$key};
+			utf8::encode($val) if utf8::is_utf8($val);
+			$val =~ s/([^A-Za-z0-9])/sprintf '""\\x%02x""', ord($1)/ge;
+			$envsize += 1;
+			$envsave.=<<"EOF";
+	addenv("$key", "$val");
+EOF
+		}
+		delete $config{ENV};
+	}
 	
 	my @wrapper_hooks;
 	run_hooks(genwrapper => sub { push @wrapper_hooks, shift->() });
@@ -171,7 +184,7 @@ EOF
 #include <sys/file.h>
 
 extern char **environ;
-char *newenviron[$#envsave+7];
+char *newenviron[$envsize+7];
 int i=0;
 
 void addenv(char *var, char *val) {
@@ -182,7 +195,7 @@ void addenv(char *var, char *val) {
 	newenviron[i++]=s;
 }
 
-set_cgilock_fd (int lockfd) {
+void set_cgilock_fd (int lockfd) {
 	char *fd_s=malloc(8);
 	sprintf(fd_s, "%i", lockfd);
 	setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);