simplify cgi to treat zero as special uid/gid

This commit is contained in:
0xEAB 2022-05-15 02:33:27 +02:00
parent 641d823ddd
commit f8099360fb
1 changed files with 11 additions and 10 deletions

21
cgi.d
View File

@ -476,7 +476,6 @@ import std.base64;
static import std.algorithm; static import std.algorithm;
import std.datetime; import std.datetime;
import std.range; import std.range;
import std.typecons : Nullable;
import std.process; import std.process;
@ -3529,19 +3528,21 @@ struct RequestServer {
} }
} }
/// /// user (uid) to drop privileges to
Nullable!uid_t privilegesDropToUid; /// 0 … do nothing
/// uid_t privilegesDropToUid = 0;
Nullable!gid_t privilegesDropToGid; /// group (gid) to drop privileges to
/// 0 … do nothing
gid_t privilegesDropToGid = 0;
private void dropPrivileges() { private void dropPrivileges() {
version(Posix) { version(Posix) {
import core.sys.posix.unistd; import core.sys.posix.unistd;
if (!privilegesDropToGid.isNull && setgid(privilegesDropToGid.get) != 0) if (privilegesDropToGid != 0 && setgid(privilegesDropToGid) != 0)
throw new Exception("Dropping privileges via setgid() failed."); throw new Exception("Dropping privileges via setgid() failed.");
if (!privilegesDropToUid.isNull && setuid(privilegesDropToUid.get) != 0) if (privilegesDropToUid != 0 && setuid(privilegesDropToUid) != 0)
throw new Exception("Dropping privileges via setuid() failed."); throw new Exception("Dropping privileges via setuid() failed.");
} }
else { else {
@ -3549,9 +3550,9 @@ struct RequestServer {
//pragma(msg, "Dropping privileges is not implemented for this platform"); //pragma(msg, "Dropping privileges is not implemented for this platform");
} }
// done, set null // done, set zero
privilegesDropToGid.nullify(); privilegesDropToGid = 0;
privilegesDropToUid.nullify(); privilegesDropToUid = 0;
} }
/++ /++