summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/git.pm2
-rw-r--r--IkiWiki/Receive.pm29
-rw-r--r--IkiWiki/Wrapper.pm4
3 files changed, 25 insertions, 10 deletions
diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index 84df56181..5bef92856 100644
--- a/IkiWiki/Plugin/git.pm
+++ b/IkiWiki/Plugin/git.pm
@@ -46,7 +46,7 @@ sub checkconfig () { #{{{
push @{$config{wrappers}}, {
test_receive => 1,
wrapper => $config{git_test_receive_wrapper},
- wrappermode => "0755",
+ wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"),
};
}
} #}}}
diff --git a/IkiWiki/Receive.pm b/IkiWiki/Receive.pm
index 9a672abc9..451a3fe8e 100644
--- a/IkiWiki/Receive.pm
+++ b/IkiWiki/Receive.pm
@@ -7,7 +7,8 @@ use strict;
use IkiWiki;
sub getuser () { #{{{
- my $user=(getpwuid($<))[0];
+ # CALLER_UID is set by the suid wrapper, to the original uid
+ my $user=(getpwuid(exists $ENV{CALLER_UID} ? $ENV{CALLER_UID} : $<))[0];
if (! defined $user) {
error("cannot determine username for $<");
}
@@ -23,19 +24,31 @@ sub trusted () { #{{{
sub test () { #{{{
exit 0 if trusted();
+ IkiWiki::lockwiki();
+ IkiWiki::loadindex();
+
# Dummy up a cgi environment to use when calling check_canedit
# and friends.
eval q{use CGI};
error($@) if $@;
my $cgi=CGI->new;
+ $ENV{REMOTE_ADDR}='unknown' unless exists $ENV{REMOTE_ADDR};
+
+ # And dummy up a session object.
require IkiWiki::CGI;
my $session=IkiWiki::cgi_getsession($cgi);
$session->param("name", getuser());
- $ENV{REMOTE_ADDR}='unknown' unless exists $ENV{REMOTE_ADDR};
-
- IkiWiki::lockwiki();
- IkiWiki::loadindex();
-
+ # Make sure whatever user was authed is in the
+ # userinfo db.
+ require IkiWiki::UserInfo;
+ if (! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
+ IkiWiki::userinfo_setall($session->param("name"), {
+ email => "",
+ password => "",
+ regdate => time,
+ }) || error("failed adding user");
+ }
+
my %newfiles;
foreach my $change (IkiWiki::rcs_receive()) {
@@ -59,8 +72,8 @@ sub test () { #{{{
$change->{action} eq 'add') {
if (defined $page) {
if (IkiWiki->can("check_canedit")) {
- IkiWiki::check_canedit($page, $cgi, $session);
- next;
+ IkiWiki::check_canedit($page, $cgi, $session);
+ next;
}
}
else {
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index 187314d16..0a2b8d4f8 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -55,7 +55,7 @@ EOF
#include <string.h>
extern char **environ;
-char *newenviron[$#envsave+5];
+char *newenviron[$#envsave+6];
int i=0;
addenv(char *var, char *val) {
@@ -72,6 +72,8 @@ int main (int argc, char **argv) {
$envsave
newenviron[i++]="HOME=$ENV{HOME}";
newenviron[i++]="WRAPPED_OPTIONS=$configstring";
+ asprintf(&s, "CALLER_UID=%i", getuid());
+ newenviron[i++]=s;
newenviron[i]=NULL;
environ=newenviron;