first attempt at fixing ssh/sh escaping problem with perl_command - works but isn...
Tyler Riddle [Fri, 28 Sep 2012 21:59:53 +0000 (14:59 -0700)]
lib/Object/Remote/Connector/SSH.pm
lib/Object/Remote/Role/Connector/PerlInterpreter.pm

index bb0b869..fcfb445 100644 (file)
@@ -17,12 +17,24 @@ has ssh_command => (is => 'ro', default => sub { 'ssh' });
 #TODO properly integrate if this works
 BEGIN { $ENV{TERM} = 'dumb'; } 
 
+sub _escape_shell_arg { 
+    my ($self, $str) = (@_);
+    $str =~ s/((?:^|[^\\])(?:\\\\)*)'/$1\\'/g;
+    return "$str";
+}
+
+
 sub _build_ssh_perl_command {
   my ($self) = @_;
+  my $perl_command = join('', @{$self->perl_command});
+  
+  #TODO non-trivial to escape properly for ssh and shell
+  #this "works" but is not right, needs to be replaced
+  #after testing
   return [
     do { my $c = $self->ssh_command; ref($c) ? @$c : $c },
     @{$self->ssh_options}, $self->ssh_to,
-    @{$self->perl_command}
+    $self->_escape_shell_arg($perl_command),
   ];
 }
 
index afbf8bf..31e13e2 100644 (file)
@@ -34,8 +34,8 @@ has watchdog_timeout => ( is => 'ro', required => 1, default => sub { 0 } );
 #ulimit of ~500 megs of v-ram
 #TODO only works with ssh with quotes but only works locally
 #with out quotes
-#sub _build_perl_command { [ 'sh', '-c', '"ulimit -v 200000; nice -n 15 perl -"' ] }
-sub _build_perl_command { [ 'perl', '-' ] }
+sub _build_perl_command {[ 'sh -c "ulimit -v 200000; nice -n 15 perl -"' ] }
+#sub _build_perl_command { [ 'perl', '-' ] }
 #sub _build_perl_command { [ 'cat' ] }
 
 around connect => sub {
@@ -156,7 +156,7 @@ sub _setup_watchdog_reset {
     Dlog_trace { "Creating Watchdog management timer for connection id $_" } $conn->_id;
 
     $timer_id = Object::Remote->current_loop->watch_time(
-        every => $self->watchdog_timeout / 5,
+        every => $self->watchdog_timeout / 3,
         code => sub {
             unless(defined($conn)) {
                 log_trace { "Weak reference to connection in Watchdog was lost, terminating update timer $timer_id" };