function util_mkdtemp($suffix = '', $prefix = 'tmp') {
$tempdir = sys_get_temp_dir();
for ($i=0; $i<5; $i++) {
- $id = strtr(base64_encode(openssl_random_pseudo_bytes(6)), '+/', '-_');
+ $id = strtr(base64_encode(util_randbytes(6)), '+/', '-_');
$path = "{$tempdir}/{$prefix}{$id}{$suffix}";
if (mkdir($path, 0700)) {
return $path;
if ($userinfo === False) {
return False;
}
- if (posix_setegid($userinfo['gid']) && posix_seteuid($userinfo['uid'])) {
+ if (posix_setegid($userinfo['gid']) &&
+ ($saved_euid != 0 || posix_initgroups($username, $userinfo['gid'])) &&
+ posix_seteuid($userinfo['uid'])) {
$function($params);
}
posix_setegid($saved_egid);
posix_seteuid($saved_euid);
+ if ($saved_euid == 0)
+ posix_initgroups("root", 0);
}
// Local Variables:
$root = $params['root'];
$repodir = $root . '/users/' . $user_name . '.git' ;
- system("su - $user_name -c 'chgrp $unix_group $repodir'");
+ chgrp($repodir, $unix_group);
if ($project->enableAnonSCM()) {
chmod ($repodir, 02755);
} else {