summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@lamia.panaceas.james.local>2017-08-30 09:44:35 +0100
committerroot <root@lamia.panaceas.james.local>2017-08-30 09:44:35 +0100
commit7f265ce9981cd6a1e71bd676dadb3f8f508f1363 (patch)
treec3988a650ac44b4a8e95a4b139116dff8405569b
parent2f5198c9c915eba865663623fecc7970730efc08 (diff)
downloadinf-7f265ce9981cd6a1e71bd676dadb3f8f508f1363.tar.gz
inf-7f265ce9981cd6a1e71bd676dadb3f8f508f1363.tar.bz2
inf-7f265ce9981cd6a1e71bd676dadb3f8f508f1363.zip
tidy and proxy support for ILO2
-rw-r--r--INF/APC.pm4
-rw-r--r--INF/DSRx020.pm46
-rw-r--r--INF/ILO.pm9
-rw-r--r--INF/ILO2.pm71
-rwxr-xr-xinf.pl8
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);