X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=lib%2FRexec.pm;h=2eecab803b2bb682d2775b27cfa25c0b31629713;hb=b9581bfa0e37aafedf42ccbb1c514b572aa0d8d3;hp=bf590724c1e553c8562840b386ef5aa63d02395a;hpb=28c190798ee099c17413fda88e320df4a0e3e78e;p=clearscm.git diff --git a/lib/Rexec.pm b/lib/Rexec.pm index bf59072..2eecab8 100644 --- a/lib/Rexec.pm +++ b/lib/Rexec.pm @@ -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