X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/rsbs2/blobdiff_plain/3f4d6039fcf53e15e439597d6115b97ccd576457..038e519479ea5830d9d8bbd1fd426b07d3bb1961:/rsbs2.pl?ds=sidebyside
diff --git a/rsbs2.pl b/rsbs2.pl
index 6ce2321..69272ca 100755
--- a/rsbs2.pl
+++ b/rsbs2.pl
@@ -1,13 +1,13 @@
#!/usr/bin/perl -w
use LWP::UserAgent;
+use LWP::ConnCache;
use XML::Simple;
use Data::Dumper;
use MIME::Base64;
use Digest::MD5 qw(md5);
-my $ua = LWP::UserAgent->new;
-my $sid;
+my $ua = LWP::UserAgent->new(cookie_jar => {});
my $url;
my $poweronms=200;
my $poweroffms=5000;
@@ -132,7 +132,7 @@ sub _crc16 {
sub _hash {
my ($password, $challenge) = @_;
my @challenge_bytes = unpack 'c16', decode_base64($challenge);
- my @pwd_hash = unpack 'c16', md5($password);
+ my @pwd_hash = unpack 'c16', md5($password);
my @xor_bytes;
for my $i (0..15) {
$xor_bytes[$i] = $challenge_bytes[$i] ^ $pwd_hash[$i];
@@ -146,7 +146,6 @@ sub _hash {
sub _req {
my $xml = shift;
$request = HTTP::Request->new(POST => "${url}/cgi/bin");
- $request->header(Cookie => "sid=$sid");
$request->content_type('application/x-www-form-urlencoded');
$request->content(''.$xml.'');
$response = $ua->request($request);
@@ -185,7 +184,6 @@ sub _getprop {
sub logout {
print "Logout\n" if ($verbose);
my $request = HTTP::Request->new(GET => "${url}/cgi/logout");
- $request->header(Cookie => "sid=$sid");
my $response = $ua->request($request);
die("While trying to logout: " . $response->status_line . "\n") unless ($response->is_success);
@@ -221,8 +219,9 @@ sub serveraction {
my $pmode = 2;
- setprop("SERVER_HARD_RESET_VIA_IPMI", "FALSE");
- setprop("SERVER_POWER_CHANGE_VIA_IPMI", "FALSE");
+ #setprop("SERVER_HARD_RESET_VIA_IPMI", "FALSE");
+ #setprop("SERVER_POWER_CHANGE_VIA_IPMI", "FALSE");
+
#PM Mode
setprop("SERVER_POWER_ON_MODE", sprintf("0x%x", $pmode));
setprop("SERVER_POWER_OFF_MODE", sprintf("0x%x", $pmode));
@@ -237,23 +236,37 @@ sub serveraction {
}
sub powerup {
- print "powerup\n" if ($verbose);
- setprop("SERVER_POWER_ON_PULSE_MS", sprintf("0x%x", $poweronms));
- setprop("SERVER_POWER_OFF_PULSE_MS", "0x0");
- serveraction("powercycle");
+ if (_getprop("SERVER_POWER_CHANGE_VIA_IPMI")->{PROPLIST}->{PROP}->{VAL} eq "TRUE") {
+ print "powerup via IPMI\n" if ($verbose);
+ serveraction("powerup");
+ } else {
+ print "powerup via relay (hack)\n" if ($verbose);
+ setprop("SERVER_POWER_ON_PULSE_MS", sprintf("0x%x", $poweronms));
+ setprop("SERVER_POWER_OFF_PULSE_MS", "0x0");
+ serveraction("powercycle");
+ }
}
sub powerdown {
- print "powerdown\n" if ($verbose);
- setprop("SERVER_POWER_ON_PULSE_MS", "0x0");
- setprop("SERVER_POWER_OFF_PULSE_MS", sprintf("0x%x", $poweroffms));
- serveraction("powercycle");
+ if (_getprop("SERVER_POWER_CHANGE_VIA_IPMI")->{PROPLIST}->{PROP}->{VAL} eq "TRUE") {
+ print "powerdown via IPMI\n" if ($verbose);
+ serveraction("powerdown");
+ } else {
+ print "powerdown via relay (hack)\n" if ($verbose);
+ setprop("SERVER_POWER_ON_PULSE_MS", "0x0");
+ setprop("SERVER_POWER_OFF_PULSE_MS", sprintf("0x%x", $poweroffms));
+ serveraction("powercycle");
+ }
}
sub powercycle {
- print "powercycle\n" if ($verbose);
- setprop("SERVER_POWER_ON_PULSE_MS", sprintf("0x%x", $poweronms));
- setprop("SERVER_POWER_OFF_PULSE_MS", sprintf("0x%x", $poweroffms));
+ if (_getprop("SERVER_POWER_CHANGE_VIA_IPMI")->{PROPLIST}->{PROP}->{VAL} eq "TRUE") {
+ print "powercycle via IPMI\n" if ($verbose);
+ } else {
+ print "powercycle via relay\n" if ($verbose);
+ setprop("SERVER_POWER_ON_PULSE_MS", sprintf("0x%x", $poweronms));
+ setprop("SERVER_POWER_OFF_PULSE_MS", sprintf("0x%x", $poweroffms));
+ }
serveraction("powercycle");
}
@@ -387,7 +400,7 @@ sub get_sensors {
return;
}
- my $req = '0x1';
+ my $req = ''.$slist->{HANDLE}.'';
foreach my $s (@{$slist->{SENSORLIST}->{SENSOR}}) {
$req .= '';
}
@@ -479,7 +492,7 @@ sub status {
sub spawn_gui {
my $base = shift;
- open(APPLET,"|appletviewer /dev/stdin");
+ open(APPLET,"|appletviewer -J-Djava.security.policy=applet.policy /dev/stdin");
print APPLET 'RSB S2 User Interface';
print APPLET '';
print APPLET '