aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Receive.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-10-26 14:03:18 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-10-26 14:03:18 -0400
commit7ddea03684df47c861c264216b83e7653d6784fd (patch)
treeebd9d227f25d9a2c07ee6ca4903c3131799fdeef /IkiWiki/Receive.pm
parentb7c9682b32b0b7e52f9df1f8b32713de8e702e1f (diff)
downloadikiwiki-7ddea03684df47c861c264216b83e7653d6784fd.tar
ikiwiki-7ddea03684df47c861c264216b83e7653d6784fd.tar.gz
move untrusted committer test into the wrapper
This saves around 1/4th second per trusted commit since ikiwiki doesn't need to start up.
Diffstat (limited to 'IkiWiki/Receive.pm')
-rw-r--r--IkiWiki/Receive.pm26
1 files changed, 25 insertions, 1 deletions
diff --git a/IkiWiki/Receive.pm b/IkiWiki/Receive.pm
index 451a3fe8e..72668d26a 100644
--- a/IkiWiki/Receive.pm
+++ b/IkiWiki/Receive.pm
@@ -7,7 +7,6 @@ use strict;
use IkiWiki;
sub getuser () { #{{{
- # 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 $<");
@@ -21,6 +20,31 @@ sub trusted () { #{{{
! grep { $_ eq $user } @{$config{untrusted_committers}};
} #}}}
+sub gen_wrapper () { #{{{
+ # Test for commits from untrusted committers in the wrapper, to
+ # avoid loading ikiwiki at all for trusted commits.
+
+ my $ret=<<"EOF";
+ {
+ int u=getuid();
+EOF
+ $ret.="\t\tif ( ".
+ join("&&", map {
+ my $uid=getpwnam($_);
+ if (! defined $uid) {
+ error(sprintf(gettext("cannot determine id of untrusted committer %s"), $_));
+ }
+ "u != $uid";
+ } @{$config{untrusted_committers}}).
+ ") exit(0);\n";
+ $ret.=<<"EOF";
+ asprintf(&s, "CALLER_UID=%i", u);
+ newenviron[i++]=s;
+ }
+EOF
+ return $ret;
+} #}}}
+
sub test () { #{{{
exit 0 if trusted();