forked from lix-project/lix
SSHStore / LegacySSHStore: Show a better error message if the remote is "nologin"
Instead of error: serialised integer 7161674624452356180 is too large for type 'j' we now get error: 'nix-store --serve' protocol mismatch from 'sshtest@localhost', got 'This account is currently not available.' Fixes https://github.com/NixOS/nixpkgs/issues/37287.
This commit is contained in:
parent
60642aa5e2
commit
994348e9e0
|
@ -82,9 +82,18 @@ struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Stor
|
||||||
conn->to << SERVE_MAGIC_1 << SERVE_PROTOCOL_VERSION;
|
conn->to << SERVE_MAGIC_1 << SERVE_PROTOCOL_VERSION;
|
||||||
conn->to.flush();
|
conn->to.flush();
|
||||||
|
|
||||||
unsigned int magic = readInt(conn->from);
|
StringSink saved;
|
||||||
|
try {
|
||||||
|
TeeSource tee(conn->from, saved);
|
||||||
|
unsigned int magic = readInt(tee);
|
||||||
if (magic != SERVE_MAGIC_2)
|
if (magic != SERVE_MAGIC_2)
|
||||||
throw Error("protocol mismatch with 'nix-store --serve' on '%s'", host);
|
throw Error("'nix-store --serve' protocol mismatch from '%s'", host);
|
||||||
|
} catch (SerialisationError & e) {
|
||||||
|
conn->sshConn->in.close();
|
||||||
|
auto msg = conn->from.drain();
|
||||||
|
throw Error("'nix-store --serve' protocol mismatch from '%s', got '%s'",
|
||||||
|
host, chomp(*saved.s + msg));
|
||||||
|
}
|
||||||
conn->remoteVersion = readInt(conn->from);
|
conn->remoteVersion = readInt(conn->from);
|
||||||
if (GET_PROTOCOL_MAJOR(conn->remoteVersion) != 0x200)
|
if (GET_PROTOCOL_MAJOR(conn->remoteVersion) != 0x200)
|
||||||
throw Error("unsupported 'nix-store --serve' protocol version on '%s'", host);
|
throw Error("unsupported 'nix-store --serve' protocol version on '%s'", host);
|
||||||
|
|
|
@ -162,8 +162,16 @@ void RemoteStore::initConnection(Connection & conn)
|
||||||
try {
|
try {
|
||||||
conn.to << WORKER_MAGIC_1;
|
conn.to << WORKER_MAGIC_1;
|
||||||
conn.to.flush();
|
conn.to.flush();
|
||||||
unsigned int magic = readInt(conn.from);
|
StringSink saved;
|
||||||
if (magic != WORKER_MAGIC_2) throw Error("protocol mismatch");
|
try {
|
||||||
|
TeeSource tee(conn.from, saved);
|
||||||
|
unsigned int magic = readInt(tee);
|
||||||
|
if (magic != WORKER_MAGIC_2)
|
||||||
|
throw Error("protocol mismatch");
|
||||||
|
} catch (SerialisationError & e) {
|
||||||
|
auto msg = conn.from.drain();
|
||||||
|
throw Error("protocol mismatch, got '%s'", chomp(*saved.s + msg));
|
||||||
|
}
|
||||||
|
|
||||||
conn.from >> conn.daemonVersion;
|
conn.from >> conn.daemonVersion;
|
||||||
if (GET_PROTOCOL_MAJOR(conn.daemonVersion) != GET_PROTOCOL_MAJOR(PROTOCOL_VERSION))
|
if (GET_PROTOCOL_MAJOR(conn.daemonVersion) != GET_PROTOCOL_MAJOR(PROTOCOL_VERSION))
|
||||||
|
|
Loading…
Reference in a new issue