aboutsummaryrefslogtreecommitdiff
path: root/nix/nix-daemon
diff options
context:
space:
mode:
Diffstat (limited to 'nix/nix-daemon')
-rw-r--r--nix/nix-daemon/nix-daemon.cc31
1 files changed, 20 insertions, 11 deletions
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 10159db62e..35c284f7e1 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -441,8 +441,8 @@ static void performOp(bool trusted, unsigned int clientVersion,
startWork();
TunnelSource source(from);
- /* Unlike Nix, always require a signature, even for "trusted"
- users. */
+ /* Unlike Nix, always require a signature, even for "trusted"
+ users. */
Paths paths = store->importPaths(true, source);
stopWork();
writeStrings(paths, to);
@@ -451,8 +451,17 @@ static void performOp(bool trusted, unsigned int clientVersion,
case wopBuildPaths: {
PathSet drvs = readStorePaths<PathSet>(from);
+ BuildMode mode = bmNormal;
+ if (GET_PROTOCOL_MINOR(clientVersion) >= 15) {
+ mode = (BuildMode)readInt(from);
+
+ /* Repairing is not atomic, so disallowed for "untrusted"
+ clients. */
+ if (mode == bmRepair && !trusted)
+ throw Error("repairing is not supported when building through the Nix daemon");
+ }
startWork();
- store->buildPaths(drvs);
+ store->buildPaths(drvs, mode);
stopWork();
writeInt(1, to);
break;
@@ -538,8 +547,8 @@ static void performOp(bool trusted, unsigned int clientVersion,
settings.keepGoing = readInt(from) != 0;
settings.set("build-fallback", readInt(from) ? "true" : "false");
verbosity = (Verbosity) readInt(from);
- settings.set("build-max-jobs", int2String(readInt(from)));
- settings.set("build-max-silent-time", int2String(readInt(from)));
+ settings.set("build-max-jobs", std::to_string(readInt(from)));
+ settings.set("build-max-silent-time", std::to_string(readInt(from)));
if (GET_PROTOCOL_MINOR(clientVersion) >= 2)
settings.useBuildHook = readInt(from) != 0;
if (GET_PROTOCOL_MINOR(clientVersion) >= 4) {
@@ -548,7 +557,7 @@ static void performOp(bool trusted, unsigned int clientVersion,
settings.printBuildTrace = readInt(from) != 0;
}
if (GET_PROTOCOL_MINOR(clientVersion) >= 6)
- settings.set("build-cores", int2String(readInt(from)));
+ settings.set("build-cores", std::to_string(readInt(from)));
if (GET_PROTOCOL_MINOR(clientVersion) >= 10)
settings.set("build-use-substitutes", readInt(from) ? "true" : "false");
if (GET_PROTOCOL_MINOR(clientVersion) >= 12) {
@@ -556,7 +565,7 @@ static void performOp(bool trusted, unsigned int clientVersion,
for (unsigned int i = 0; i < n; i++) {
string name = readString(from);
string value = readString(from);
- if (name == "build-timeout" || name == "use-ssh-substituter")
+ if (name == "build-timeout" || name == "build-repeat" || name == "use-ssh-substituter")
settings.set(name, value);
else
settings.set(trusted ? name : "untrusted-" + name, value);
@@ -819,7 +828,7 @@ static void daemonLoop()
/* Handle socket-based activation by systemd. */
if (getEnv("LISTEN_FDS") != "") {
- if (getEnv("LISTEN_PID") != int2String(getpid()) || getEnv("LISTEN_FDS") != "1")
+ if (getEnv("LISTEN_PID") != std::to_string(getpid()) || getEnv("LISTEN_FDS") != "1")
throw Error("unexpected systemd environment variables");
fdSocket = SD_LISTEN_FDS_START;
}
@@ -906,10 +915,10 @@ static void daemonLoop()
clientPid = cred.pid;
struct passwd * pw = getpwuid(cred.uid);
- string user = pw ? pw->pw_name : int2String(cred.uid);
+ string user = pw ? pw->pw_name : std::to_string(cred.uid);
struct group * gr = getgrgid(cred.gid);
- string group = gr ? gr->gr_name : int2String(cred.gid);
+ string group = gr ? gr->gr_name : std::to_string(cred.gid);
Strings trustedUsers = settings.get("trusted-users", Strings({"root"}));
Strings allowedUsers = settings.get("allowed-users", Strings({"*"}));
@@ -937,7 +946,7 @@ static void daemonLoop()
/* For debugging, stuff the pid into argv[1]. */
if (clientPid != -1 && argvSaved[1]) {
- string processName = int2String(clientPid);
+ string processName = std::to_string(clientPid);
strncpy(argvSaved[1], processName.c_str(), strlen(argvSaved[1]));
}