From 7f265ce9981cd6a1e71bd676dadb3f8f508f1363 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 30 Aug 2017 09:44:35 +0100 Subject: tidy and proxy support for ILO2 --- INF/APC.pm | 4 ++++ INF/DSRx020.pm | 46 ++++++++++++++++++++++++++++--------- INF/ILO.pm | 9 ++++++-- INF/ILO2.pm | 71 ++++++++++++++++++++++++++++++++++++++++++++-------------- inf.pl | 8 ++++--- 5 files changed, 106 insertions(+), 32 deletions(-) diff --git a/INF/APC.pm b/INF/APC.pm index dc84f30..6d443b8 100644 --- a/INF/APC.pm +++ b/INF/APC.pm @@ -445,6 +445,10 @@ sub show_all($) { } +sub logout($) { + my $self = shift; +} + # my ( $mib, $snmp, $basename ) = @_; # # $baseoid=resolve($mib,$basename); diff --git a/INF/DSRx020.pm b/INF/DSRx020.pm index fad319c..cc87097 100644 --- a/INF/DSRx020.pm +++ b/INF/DSRx020.pm @@ -478,13 +478,31 @@ sub view($$) { #print join( ' ', ( "java", "-cp", $cp, "com.avocent.video.Stingray", @$args ) ), "\n"; - if ($self->{proxy_host}) { - system( "echo","java", "-DsocksProxyHost=".$self->{proxy_host},"-DsocksProxyPort=".$self->{proxy_port},"-cp", $cp, "com.avocent.video.Stingray", @$args ); - system( "java", "-DsocksProxyHost=".$self->{proxy_host},"-DsocksProxyPort=".$self->{proxy_port},"-cp", $cp, "com.avocent.video.Stingray", @$args ); + if ( $self->{proxy_host} ) { + system( + "echo", + "java", + "-DsocksProxyHost=" . $self->{proxy_host}, + "-DsocksProxyPort=" . $self->{proxy_port}, + "-cp", + $cp, + "com.avocent.video.Stingray", + @$args + ); + system( + "java", + "-DsocksProxyHost=" . $self->{proxy_host}, + "-DsocksProxyPort=" . $self->{proxy_port}, + "-cp", + $cp, + "com.avocent.video.Stingray", + @$args + ); - } else { - system( "java", "-cp", $cp, "com.avocent.video.Stingray", @$args ); - } + } + else { + system( "java", "-cp", $cp, "com.avocent.video.Stingray", @$args ); + } } @@ -603,6 +621,10 @@ sub name_set($$) { return 0; } +sub logout($) { + my $self = shift; +} + sub new ($;$) { my ( $class, $parm ) = @_; my $self; @@ -611,10 +633,14 @@ sub new ($;$) { $self->{host} = $parm->{host} || "127.0.0.1"; - if (defined $parm->{proxy_host}) { - $self->{ua}->proxy([qw(http https)] => "socks://".$parm->{proxy_host}.":".$parm->{proxy_port}); - $self->{proxy_host}= $parm->{proxy_host}; - $self->{proxy_port}= $parm->{proxy_port}; + if ( defined $parm->{proxy_host} ) { + + $self->{ua}->proxy( [qw(http https)] => "socks://" + . $parm->{proxy_host} . ":" + . $parm->{proxy_port} ); + + $self->{proxy_host} = $parm->{proxy_host}; + $self->{proxy_port} = $parm->{proxy_port}; } $self->{user} = $parm->{user} || "Admin"; diff --git a/INF/ILO.pm b/INF/ILO.pm index dd72570..bef70bc 100644 --- a/INF/ILO.pm +++ b/INF/ILO.pm @@ -206,7 +206,8 @@ sub view($) { $SIG{INT} = sub { kill 'INT', ( @{ $self->{to_kill} } ); die; }; $SIG{TERM} = sub { kill 'TERM', ( @{ $self->{to_kill} } ); die; }; - system( "appletviewer", + system( + "appletviewer", "-J-Djava.security.manager", "-J-Djava.security.policy=/usr/local/share/inf/ilo/mypolicy", "-J-Djavax.net.ssl.trustStore=/usr/local/share/inf/ilo/server.jks", @@ -338,6 +339,10 @@ sub port_id_get_by_number($$) { return "K0"; } +sub logout($) { + my $self = shift; +} + sub new ($;$) { my ( $class, $parm ) = @_; my $self; @@ -370,7 +375,7 @@ sub new ($;$) { port => $local_port, daemon_class => 'HTTP::Daemon::SSL', daemon_args => [ - LocalAddr => '127.0.0.1', + LocalAddr => '127.0.0.1', SSL_key_file => '/usr/local/share/inf/ilo/server.key', SSL_cert_file => '/usr/local/share/inf/ilo/server.crt', ], diff --git a/INF/ILO2.pm b/INF/ILO2.pm index aeff411..81e4746 100644 --- a/INF/ILO2.pm +++ b/INF/ILO2.pm @@ -40,29 +40,42 @@ sub read_file($) { return $guts; } -sub setup_port_proxy($$$) { - my ( $local_port, $remote_host, $remote_port ) = @_; +sub setup_port_proxy($$$$) { + my ( $self, $local_port, $remote_host, $remote_port ) = @_; my $child = fork(); - print STDERR "balance ", - join( - ' ', - ( - "balance", "-d", "-f", "127.0.0.1", $local_port, - $remote_host . ":" . $remote_port - ) - ), - "\n"; + my $cmd = [ + "balance", "-d", "-f", "-b", "127.0.0.1", $local_port, + $remote_host . ":" . $remote_port + ]; + + print STDERR "PROXY CMD: " . join( ' ', @$cmd ) . "\n"; if ( $child == 0 ) { - exec( "balance", "-d", "-f", "-b", "127.0.0.1", $local_port, - $remote_host . ":" . $remote_port ); + if ( defined $self->{proxy_host} ) { + my $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.cnf' ); + + select( ( select($tmp), $| = 1 )[0] ); + + print $tmp "server = 127.0.0.1\n"; + print $tmp "server_port = " . $self->{proxy_port} . "\n"; + print $tmp "local = 127.0.0.0/255.0.0.0\n"; + + $ENV{'LD_PRELOAD'} = 'libtsocks.so'; + $ENV{'TSOCKS_CONF_FILE'} = $tmp->filename; + + print "Filename is $tmp->filename\n"; + } + + exec(@$cmd); print STDERR "failed to start port proxy"; sleep(10000); } + sleep(4); + print "Setup proxy $local_port -> $remote_host:$remote_port\n"; return $child; @@ -106,6 +119,24 @@ sub proxy($$$) { } +sub logout($) { + my $self = shift; + + return unless defined $self->{stoken}; + + my $get = GET( $self->{ilo_url} . '/logout.htm' ); + + $get->header( 'cookie' => $self->{stoken} ); + + my $res = $self->{ua}->request($get); + + unless ( $res->is_success ) { + print STDERR "failed to logout"; + return -1; + } + +} + sub login($) { my $self = shift; @@ -223,7 +254,7 @@ sub view($) { my $local_port = int( rand(30000) ) + 30000; push @{ $self->{to_kill} }, - setup_port_proxy( $local_port, $self->{host}, $things->{info6} ); + $self->setup_port_proxy( $local_port, $self->{host}, $things->{info6} ); $things->{info6} = $local_port; $things->{consoleWidth} = 1024; @@ -276,8 +307,6 @@ sub view($) { $SIG{TERM} = sub { kill 'TERM', ( @{ $self->{to_kill} } ); die; }; system( - # "strace","-f","-o","t2","-s","8192", - # "/bin/appletviewer", "appletviewer", "-J-Djava.security.manager", "-J-Djava.security.policy=/usr/local/share/inf/ilo/mypolicy", @@ -324,7 +353,7 @@ sub media($) { my $local_port = int( rand(30000) ) + 30000; push @{ $self->{to_kill} }, - setup_port_proxy( $local_port, $self->{host}, $things->{info1v} ); + $self->setup_port_proxy( $local_port, $self->{host}, $things->{info1v} ); $things->{info1v} = $local_port; @@ -556,6 +585,14 @@ sub new ($;$) { verify_hostname => 0, ); + if ( defined $parm->{proxy_host} ) { + $self->{ua}->proxy( [qw(http https)] => "socks://" + . $parm->{proxy_host} . ":" + . $parm->{proxy_port} ); + $self->{proxy_host} = $parm->{proxy_host}; + $self->{proxy_port} = $parm->{proxy_port}; + } + my $local_port = int( rand(30000) ) + 30000; $self->{proxy_url} = 'https://127.0.0.1:' . $local_port; diff --git a/inf.pl b/inf.pl index fe9d4a1..6c6481d 100755 --- a/inf.pl +++ b/inf.pl @@ -12,15 +12,16 @@ sub view($$) { my ( $inf, $port ) = @_; $inf->view($port); + $inf->logout; exit(0); } - sub media($$) { my ( $inf, $port ) = @_; $inf->media($port); + $inf->logout; exit(0); } @@ -37,7 +38,6 @@ sub thing($$$$) { my $name = $inf->name_get(); my $port_name = $inf->port_name_get($port); - view( $inf, $port ) if $thing eq 'view'; media( $inf, $port ) if $thing eq 'media'; @@ -83,6 +83,7 @@ sub thing($$$$) { } else { print "Command failed\n"; + $inf->logout; exit(1); } @@ -104,6 +105,8 @@ sub thing($$$$) { and ( not( $s =~ /Pending/ ) ) and ( $s =~ /$looke/i ) ); + $inf->logout; + } sub thing_search($$$$) { @@ -116,7 +119,6 @@ sub thing_search($$$$) { my $n = $inf->port_count(); - for ( my $i = 1 ; $i <= $n ; ++$i ) { my $port = $inf->port_id_get_by_number($i); my $o = $inf->port_name_get($port); -- cgit v1.2.3