Removed /usr/local from CDPATH
[clearscm.git] / lib / Rexec.pm
index bf59072..2eecab8 100644 (file)
@@ -160,6 +160,20 @@ our @EXPORT = qw (
 
 my @lines;
 
+sub _debug ($) {
+  my ($msg) = @_;
+
+  my $logfile = "/tmp/rexex_debug.log";
+
+  open my $file, '>>', $logfile or croak "Unable to open $logfile for writing - $!";
+
+  print $file "DEBUG: $msg\n";
+
+  close $file;
+
+  return;
+} # _debug
+
 sub ssh {
   my ($self) = shift;
 
@@ -225,15 +239,22 @@ sub ssh {
 
   if ($logged_in) {
     # It's always hard to find the prompt. So let's make a distintive one
-    $self->{prompt} = '@@@';
+    $self->{prompt} = "\n@@@";
     $self->{handle} = $remote;
 
+    # OK this is real tricky. If we call execute with a command of PS1=@@@
+    # and we've changed our prompt to '@@@' then we'll see the '@@@' in the
+    # PS1=@@@ statement as the prompt! That'll screw us up so we instead say
+    # PS1=\@\@\@. The shell then removes the extra backslashes for us and sets
+    # the prompt to just "@@@" for us. We catch that as our prompt and now we
+    # have a unique prompt that we can easily recognize.
     if ($self->{shellstyle} eq 'sh') {
-      $self->execute ('PS1=@@@');
+      $self->execute ('PS1=\@\@\@');
     } else {
-      $self->execute ('set prompt=@@@');
+      $self->execute ('set prompt=\@\@\@');
     } # if
 
+    $self->{handle}->flush;
     return $remote;
   } elsif ($timedout) {
     carp "WARNING: $self->{host} is not responding to $self->{protocol} protocol";
@@ -313,10 +334,16 @@ sub rlogin {
     $self->{prompt} = '@@@';
     $self->{handle} = $remote;
 
+    # OK this is real tricky. If we call execute with a command of PS1=@@@
+    # and we've changed our prompt to '@@@' then we'll see the '@@@' in the
+    # PS1=@@@ statement as the prompt! That'll screw us up so we instead say
+    # PS1=\@\@\@. The shell then removes the extra backslashes for us and sets
+    # the prompt to just "@@@" for us. We catch that as our prompt and now we
+    # have a unique prompt that we can easily recognize.
     if ($self->{shellstyle} eq 'sh') {
-      $self->execute ('PS1=@@@');
+      $self->execute ('PS1=\@\@\@');
     } else {
-      $self->execute ('set prompt=@@@');
+      $self->execute ('set prompt=\@\@\@');
     } # if
 
     return $remote;
@@ -412,10 +439,16 @@ sub telnet {
     $self->{prompt} = '@@@';
     $self->{handle} = $remote;
 
+    # OK this is real tricky. If we call execute with a command of PS1=@@@
+    # and we've changed our prompt to '@@@' then we'll see the '@@@' in the
+    # PS1=@@@ statement as the prompt! That'll screw us up so we instead say
+    # PS1=\@\@\@. The shell then removes the extra backslashes for us and sets
+    # the prompt to just "@@@" for us. We catch that as our prompt and now we
+    # have a unique prompt that we can easily recognize.
     if ($self->{shellstyle} eq 'sh') {
-      $self->execute ('PS1=@@@');
+      $self->execute ('PS1=\@\@\@');
     } else {
-      $self->execute ('set prompt=@@@');
+      $self->execute ('set prompt=\@\@\@');
     } # if
 
     return $remote;
@@ -469,6 +502,10 @@ Returns:
   # Close any prior opened sessions
   $self->logoff if ($self->{handle});
 
+  # Check to see if this machines is known in DNS. If not then the chance is
+  # good that we will not be able to log in
+  return unless gethostbyname $self->{host};
+    
   my $remote;
 
   if ($self->{protocol}) {
@@ -536,7 +573,7 @@ Returns:
 } # logoff
 
 sub new {
-  my ($class) = shift;
+  my ($class, %parms) = @_;
 
 =pod
 
@@ -601,8 +638,6 @@ Returns:
 
 =cut
 
-  my %parms = @_;
-
   my $self = {};
 
   $self->{host}       = $parms{host}       ? $parms{host}       : 'localhost';
@@ -708,7 +743,7 @@ retained in the object. Use status method to retrieve it.
   # Hopefully we will not see the following in the output string
   my $errno_str = "ReXeCerRoNO=";
   my $start_str = "StaRT";
-
+  
   my $compound_cmd;
 
   # If cmd ends in a & then it makes no sense to compose a compound