aboutsummaryrefslogtreecommitdiff
path: root/perl/lib/Nix/SSH.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl/lib/Nix/SSH.pm')
-rw-r--r--perl/lib/Nix/SSH.pm15
1 files changed, 11 insertions, 4 deletions
diff --git a/perl/lib/Nix/SSH.pm b/perl/lib/Nix/SSH.pm
index 9e0c10beb..95393d881 100644
--- a/perl/lib/Nix/SSH.pm
+++ b/perl/lib/Nix/SSH.pm
@@ -1,5 +1,6 @@
package Nix::SSH;
+use utf8;
use strict;
use File::Temp qw(tempdir);
use IPC::Open2;
@@ -89,10 +90,16 @@ sub connectToRemoteNix {
my $pid = open2($from, $to, "exec ssh -x -a $sshHost @globalSshOpts @{$sshOpts} nix-store --serve --write $extraFlags");
# Do the handshake.
- my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME
- my $clientVersion = 0x200;
- syswrite($to, pack("L<x4L<x4", $SERVE_MAGIC_1, $clientVersion)) or die;
- die "did not get valid handshake from remote host\n" if readInt($from) != 0x5452eecb;
+ my $magic;
+ eval {
+ my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME
+ my $clientVersion = 0x200;
+ syswrite($to, pack("L<x4L<x4", $SERVE_MAGIC_1, $clientVersion)) or die;
+ $magic = readInt($from);
+ };
+ die "unable to connect to ‘$sshHost’\n" if $@;
+ die "did not get valid handshake from remote host\n" if $magic != 0x5452eecb;
+
my $serverVersion = readInt($from);
die "unsupported server version\n" if $serverVersion < 0x200 || $serverVersion >= 0x300;