my $ret=<<"EOF";
{
int u=getuid();
+ /* 3 characters per byte is certainly enough */
+ char uid_string[sizeof(u) * 3 + 1];
EOF
$ret.="\t\tif ( ".
join("&&", map {
}
"u != $uid";
} @{$config{untrusted_committers}}).
- ") exit(0);\n";
+ ") {\n";
$ret.=<<"EOF";
- asprintf(&s, "CALLER_UID=%i", u);
- newenviron[i++]=s;
+ /* Trusted user.
+ * Consume all stdin before exiting, as git may
+ * otherwise be unhappy. */
+ char buf[256];
+ while (read(0, &buf, 256) != 0) {}
+ exit(0);
+ }
+ snprintf(uid_string, sizeof(uid_string), "%i", u);
+ addenv("CALLER_UID", uid_string);
}
EOF
return $ret;