[Cluster-devel] cluster/fence/agents baytech/fence_baytech.pl ...

rmccabe at sourceware.org rmccabe at sourceware.org
Wed Jun 27 15:38:22 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	rmccabe at sourceware.org	2007-06-27 15:38:19

Modified files:
	fence/agents/baytech: fence_baytech.pl 
	fence/agents/bladecenter: fence_bladecenter.pl 
	fence/agents/brocade: fence_brocade.pl 
	fence/agents/bullpap: fence_bullpap.pl 
	fence/agents/cpint: fence_cpint.pl 
	fence/agents/drac: fence_drac.pl 
	fence/agents/egenera: fence_egenera.pl 
	fence/agents/ibmblade: fence_ibmblade.pl 
	fence/agents/ipmilan: ipmilan.c 
	fence/agents/mcdata: fence_mcdata.pl 
	fence/agents/rackswitch: do_rack.c do_rack.h 
	fence/agents/rps10: rps10.c 
	fence/agents/rsa: fence_rsa.py 
	fence/agents/rsb: fence_rsb.py 
	fence/agents/sanbox2: fence_sanbox2.pl 
	fence/agents/vixel: fence_vixel.pl 
	fence/agents/vmware: fence_vmware.pl 
	fence/agents/wti: fence_wti.pl 
	fence/agents/xcat: fence_xcat.pl 
	fence/agents/xen: fence_xen.pl 
	fence/agents/zvm: fence_zvm.pl 

Log message:
	Fold in passwd_script support from HEAD

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/baytech/fence_baytech.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/bladecenter/fence_bladecenter.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/brocade/fence_brocade.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/bullpap/fence_bullpap.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/cpint/fence_cpint.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.16.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/drac/fence_drac.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.1&r2=1.8.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/egenera/fence_egenera.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/ibmblade/fence_ibmblade.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.14.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/ipmilan/ipmilan.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.2&r2=1.8.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/mcdata/fence_mcdata.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/rackswitch/do_rack.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.16.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/rackswitch/do_rack.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.16.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/rps10/rps10.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.16.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/rsa/fence_rsa.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/rsb/fence_rsb.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/sanbox2/fence_sanbox2.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3&r2=1.3.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/vixel/fence_vixel.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/vmware/fence_vmware.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/wti/fence_wti.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5.2.1&r2=1.5.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xcat/fence_xcat.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xen/fence_xen.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2&r2=1.2.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/zvm/fence_zvm.pl.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1&r2=1.1.16.1

--- cluster/fence/agents/baytech/fence_baytech.pl	2006/08/16 19:13:26	1.2
+++ cluster/fence/agents/baytech/fence_baytech.pl	2007/06/27 15:38:16	1.2.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -32,7 +32,7 @@
 
 #BEGIN_VERSION_GENERATION
 $FENCE_RELEASE_NAME="";
-$SISTINA_COPYRIGHT="";
+$REDHAT_COPYRIGHT="";
 $BUILD_DATE="";
 #END_VERSION_GENERATION
 
@@ -70,6 +70,7 @@
     print " -o string      action: On,Off,Status or Reboot (default)\n";
     print " -n string      outlet name\n";
     print " -p string      password\n";
+    print " -S path        script to run to retrieve password\n";
     print " -V             version\n";
 
     exit 0;
@@ -94,7 +95,7 @@
 sub version
 {
   print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-  print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+  print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 
   exit 0;
 }
@@ -104,7 +105,7 @@
 {
    $action = "Reboot";
    if (@ARGV > 0) {
-      getopts("n:l:p:o:a:VhD") || fail_usage ;
+      getopts("n:l:p:S:o:a:VhD") || fail_usage ;
 
       usage if defined $opt_h;
       version if defined $opt_V;
@@ -130,6 +131,13 @@
    $quiet=$opt_q if defined $opt_q;
    $user=$opt_l if defined $opt_l;
    $passwd=$opt_p if defined $opt_p;
+   if (defined $opt_S) {
+     $pwd_script_out = `$opt_S`;
+     chomp($pwd_script_out);
+     if ($pwd_script_out) {
+       $passwd=$pwd_script_out;
+     }
+   }
 
    if(defined $passwd && !defined $user)
    {
@@ -184,6 +192,10 @@
 	    $opt_p = $val;
 	} 
 
+    elsif ($name eq "passwd_script") {
+        $opt_S = $val;
+    }
+
 	elsif ($name eq "action" ) 
 	{
 	    $opt_o = $val;
--- cluster/fence/agents/bladecenter/fence_bladecenter.pl	2006/08/15 18:34:20	1.2
+++ cluster/fence/agents/bladecenter/fence_bladecenter.pl	2007/06/27 15:38:17	1.2.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -35,7 +35,7 @@
 
 #BEGIN_VERSION_GENERATION
 $FENCE_RELEASE_NAME="";
-$SISTINA_COPYRIGHT="";
+$REDHAT_COPYRIGHT="";
 $BUILD_DATE="";
 #END_VERSION_GENERATION
 
@@ -53,6 +53,7 @@
 	print "  -n <num>         blade number to operate on\n";
 	print "  -o <string>      Action:  on, off, reboot (default) or status\n";
 	print "  -p <string>      Password for login\n";
+	print "  -S <path>        Script to run to retrieve password\n";
 	print "  -q               quiet mode\n";
 	print "  -V               version\n";
 
@@ -78,7 +79,7 @@
 sub version
 {
 	print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-	print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+	print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 
 	exit 0;
 }
@@ -129,7 +130,10 @@
 		elsif ($name eq "passwd" ) 
 		{
 			$passwd = $val;
-		} 
+		}
+		elsif ($name eq "passwd_script" ) {
+			$passwd_script = $val;
+		}
 		elsif ($name eq "blade" ) 
 		{
 			$bladenum = $val;
@@ -199,7 +203,7 @@
 
 if (@ARGV > 0) 
 {
-	getopts("a:hl:n:o:p:qv:V") || fail_usage ;
+	getopts("a:hl:n:o:p:S:qv:V") || fail_usage ;
 
 	usage if defined $opt_h;
 	version if defined $opt_V;
@@ -212,12 +216,20 @@
 	$verbose  = $opt_v if defined $opt_v;
 	$quiet    = $opt_q if defined $opt_q;
 
+	if (defined $opt_S) {
+		$pwd_script_output = `$opt_S`;
+		chomp($pwd_script_output);
+		if ($pwd_script_output) {
+			$passwd = $pwd_script_output;
+		}
+	}
+
 	fail_usage "Unknown parameter." if (@ARGV > 0);
 
 	fail_usage "No '-a' flag specified." unless defined $host;
 	fail_usage "No '-n' flag specified." unless defined $bladenum;
 	fail_usage "No '-l' flag specified." unless defined $login;
-	fail_usage "No '-p' flag specified." unless defined $passwd;
+	fail_usage "No '-p' or '-S' flag specified." unless defined $passwd;
 	fail_usage "Unrecognised action '$action' for '-o' flag"
 		unless $action =~ /^(on|off|reboot|status)$/i;
 } 
@@ -228,9 +240,17 @@
 	fail "failed: no IP address" unless defined $host;
 	fail "failed: no blade number" unless defined $bladenum;
 	fail "failed: no login name" unless defined $login;
-	fail "failed: no password" unless defined $passwd;
 	fail "failed: unrecognised action: $action"
 		unless $action =~ /^(on|off|reboot|status)$/i;
+
+	if (defined $passwd_script) {
+		$pwd_script_output = `$passwd_script`;
+		chomp($pwd_script_output);
+		if ($pwd_script_output) {
+			$passwd = $pwd_script_output;
+		}
+	}
+	fail "failed: no password" unless defined $passwd;
 }
 
 # convert $action to lower case 
--- cluster/fence/agents/brocade/fence_brocade.pl	2006/08/16 19:02:23	1.3
+++ cluster/fence/agents/brocade/fence_brocade.pl	2007/06/27 15:38:17	1.3.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -46,6 +46,7 @@
     print "  -n <num>         Port number to operate on\n";
     print "  -o <string>      Action:  disable (default) or enable\n";
     print "  -p <string>      Password for login\n";
+    print "  -S <path>        Script to run to retrieve password\n";
     print "  -q               quiet mode\n";
     print "  -V               version\n";
 
@@ -78,17 +79,25 @@
 
 
 if (@ARGV > 0) {
-   getopts("a:hl:n:o:p:qV") || fail_usage ;
+   getopts("a:hl:n:o:p:S:qV") || fail_usage ;
 
    usage if defined $opt_h;
    version if defined $opt_V;
 
    fail_usage "Unknown parameter." if (@ARGV > 0);
 
+   if (defined $opt_S) {
+     $pwd_script_out = `$opt_S`;
+     chomp($pwd_script_out);
+     if ($pwd_script_out) {
+       $opt_p = $pwd_script_out;
+     }
+   }
+
    fail_usage "No '-a' flag specified." unless defined $opt_a;
    fail_usage "No '-n' flag specified." unless defined $opt_n;
    fail_usage "No '-l' flag specified." unless defined $opt_l;
-   fail_usage "No '-p' flag specified." unless defined $opt_p;
+   fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
    fail_usage "Unrecognised action '$opt_o' for '-o' flag"
       unless $opt_o =~ /^(disable|enable)$/i;
 
@@ -98,6 +107,15 @@
    fail "failed: no IP address" unless defined $opt_a;
    fail "failed: no plug number" unless defined $opt_n;
    fail "failed: no login name" unless defined $opt_l;
+
+   if (defined $opt_S) {
+     $pwd_script_out = `$opt_S`;
+     chomp($pwd_script_out);
+     if ($pwd_script_out) {
+       $opt_p = $pwd_script_out;
+     }
+   }
+
    fail "failed: no password" unless defined $opt_p;
    fail "failed: unrecognised action: $opt_o"
       unless $opt_o =~ /^(disable|enable)$/i;
@@ -226,6 +244,9 @@
 	{
             $opt_p = $val;
         } 
+	elsif ($name eq "passwd_script") {
+		$opt_S = $val;
+	}
 	elsif ($name eq "port" ) 
 	{
             $opt_n = $val;
--- cluster/fence/agents/bullpap/fence_bullpap.pl	2006/04/25 13:00:05	1.6
+++ cluster/fence/agents/bullpap/fence_bullpap.pl	2007/06/27 15:38:17	1.6.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -31,7 +31,7 @@
 
 #BEGIN_VERSION_GENERATION
 $FENCE_RELEASE_NAME="";
-$SISTINA_COPYRIGHT="";
+$REDHAT_COPYRIGHT="";
 $BUILD_DATE="";
 #END_VERSION_GENERATION
 
@@ -49,17 +49,19 @@
 	print "  -d <domain>      Domain to operate on\n";
 	print "  -o <string>      Action:  on, off, reboot (default) or status\n";
 	print "  -p <string>      Password for login\n";
+	print "  -S <path>        Script to run to retrieve password\n";
 	print "  -q               quiet mode\n";
 	print "  -V               version\n";
 	print "\n";
 	print "When run with no arguments, $pname takes arguments from ";
 	print "standard\ninput, one line per option.  They are as follows:\n";
 	print "\n";
-	print "  ipaddr=<ip>      Same as -a command line option\n";
-	print "  login=<name>     Same as -l command line option\n";
-	print "  domain=<domain>  Same as -d command line option\n";
-	print "  option=<string>  Same as -o command line option\n";
-	print "  passwd=<string>  Same as -p command line option\n\n";
+	print "  ipaddr=<ip>          Same as -a command line option\n";
+	print "  login=<name>         Same as -l command line option\n";
+	print "  domain=<domain>      Same as -d command line option\n";
+	print "  option=<string>      Same as -o command line option\n";
+	print "  passwd=<string>      Same as -p command line option\n";
+	print "  passwd_script=<path> Same as -S command line option\n\n";
 
 	exit 0;
 }
@@ -82,7 +84,7 @@
 sub version
 {
 	print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-	print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+	print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 
 	exit 0;
 }
@@ -138,6 +140,9 @@
 		{
 			$passwd = $val;
 		} 
+		elsif ($name eq "passwd_script" ) {
+			$passwd_script = $val;
+		}
 		elsif ($name eq "domain" ) 
 		{
 			$domain = $val;
@@ -221,7 +226,7 @@
 
 if (@ARGV > 0) 
 {
-	getopts("a:hl:d:o:p:qv:V") || fail_usage ;
+	getopts("a:hl:d:o:p:S:qv:V") || fail_usage ;
 
 	usage if defined $opt_h;
 	version if defined $opt_V;
@@ -234,12 +239,20 @@
 	$verbose  = $opt_v if defined $opt_v;
 	$quiet    = $opt_q if defined $opt_q;
 
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$passwd = $pwd_script_out;
+		}
+	}
+
 	fail_usage "Unknown parameter." if (@ARGV > 0);
 
 	fail_usage "No '-a' flag specified." unless defined $host;
 	fail_usage "No '-d' flag specified." unless defined $domain;
 	fail_usage "No '-l' flag specified." unless defined $login;
-	fail_usage "No '-p' flag specified." unless defined $passwd;
+	fail_usage "No '-p' or '-S' flag specified." unless defined $passwd;
 	fail_usage "Unrecognised action '$action' for '-o' flag"
 		unless $action =~ /^(on|off|reboot|status)$/i;
 } 
@@ -250,9 +263,17 @@
 	fail "failed: no IP address" unless defined $host;
 	fail "failed: no domain" unless defined $domain;
 	fail "failed: no login name" unless defined $login;
-	fail "failed: no password" unless defined $passwd;
 	fail "failed: unrecognized action: $action"
 		unless $action =~ /^(on|off|reboot|status)$/i;
+
+	if (defined $passwd_script) {
+		$pwd_script_out = `$passwd_script`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$passwd = $pwd_script_out;
+		}
+	}
+	fail "failed: no password" unless defined $passwd;
 }
 
 # convert $action to lower case 
--- cluster/fence/agents/cpint/fence_cpint.pl	2004/06/24 08:53:13	1.1
+++ cluster/fence/agents/cpint/fence_cpint.pl	2007/06/27 15:38:17	1.1.16.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
--- cluster/fence/agents/drac/fence_drac.pl	2007/05/10 19:42:24	1.8.2.1
+++ cluster/fence/agents/drac/fence_drac.pl	2007/06/27 15:38:17	1.8.2.2
@@ -3,7 +3,7 @@
 ###############################################################################
 ###############################################################################
 ##
-##  Copyright (C) 2006 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2006-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -79,15 +79,17 @@
 	print "  -m <modulename>  DRAC/MC module name\n";
 	print "  -o <string>      Action: reboot (default), off or on\n";
 	print "  -p <string>      Login password\n";
+	print "  -S <path>        Script to run to retrieve password\n";
 	print "  -q               quiet mode\n";
 	print "  -V               version\n";
 	print "\n";
 	print "CCS Options:\n";
-        print "  action = \"string\"      Action: reboot (default), off or on\n";
-        print "  debug  = \"debugfile\"   debugging output file\n";
+	print "  action = \"string\"      Action: reboot (default), off or on\n";
+	print "  debug  = \"debugfile\"   debugging output file\n";
 	print "  ipaddr = \"ip\"          IP address or hostname of DRAC\n";
 	print "  login  = \"name\"        Login name\n";
-        print "  passwd = \"string\"      Login password\n";
+	print "  passwd = \"string\"      Login password\n";
+	print "  passwd_script = \"path\" Script to run to retrieve password\n";
 
 	exit 0;
 }
@@ -125,7 +127,7 @@
 sub version
 {
 	print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-	print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+	print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 	exit 0;
 }
 
@@ -540,7 +542,11 @@
 		elsif ($name eq "passwd" ) 
 		{
 			$passwd = $val;
-		} 
+		}
+		elsif ($name eq "passwd_script" )
+		{
+			$passwd_script = $val;
+		}
 		elsif ($name eq "debug" ) 
 		{
 			$debug = $val;
@@ -572,7 +578,7 @@
 # Check parameters
 #
 if (@ARGV > 0) {
-	getopts("a:c:d:D:hl:m:o:p:qVv") || fail_usage ;
+	getopts("a:c:d:D:hl:m:o:p:S:qVv") || fail_usage ;
 	
 	usage if defined $opt_h;
 	version if defined $opt_V;
@@ -590,7 +596,15 @@
 
 	$modulename = $opt_m if defined $opt_m;
 
-	fail_usage "No '-p' flag specified." unless defined $opt_p;
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$opt_p = $pwd_script_out;
+		}
+	}
+
+	fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
 	$passwd = $opt_p;
 
 	$verbose = $opt_v if defined $opt_v;
@@ -610,9 +624,18 @@
 
 	fail "failed: no IP address" unless defined $address;
 	fail "failed: no login name" unless defined $login;
+
+	if (defined $passwd_script) {
+		$pwd_script_out = `$passwd_script`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$passwd = $pwd_script_out;
+		}
+	}
+
 	fail "failed: no password" unless defined $passwd;
 	fail "failed: unrecognised action: $action"
-	unless $action =~ /^(Off|On|Reboot|status)$/i;
+		unless $action =~ /^(Off|On|Reboot|status)$/i;
 } 
 
 
--- cluster/fence/agents/egenera/fence_egenera.pl	2006/08/16 19:14:50	1.2
+++ cluster/fence/agents/egenera/fence_egenera.pl	2007/06/27 15:38:17	1.2.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
--- cluster/fence/agents/ibmblade/fence_ibmblade.pl	2004/09/10 15:44:32	1.2
+++ cluster/fence/agents/ibmblade/fence_ibmblade.pl	2007/06/27 15:38:17	1.2.14.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
--- cluster/fence/agents/ipmilan/ipmilan.c	2007/01/29 20:33:03	1.8.2.2
+++ cluster/fence/agents/ipmilan/ipmilan.c	2007/06/27 15:38:17	1.8.2.3
@@ -8,7 +8,7 @@
  *
  *  http://ipmitool.sourceforge.net
  *
- * Copyright 2005 Red Hat, Inc.
+ * Copyright 2005-2007 Red Hat, Inc.
  *  author: Lon Hohberger <lhh at redhat.com>
  *
  * This library is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@
 #include <signal.h>
 #include <string.h>
 #include <errno.h>
+#include <limits.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <libintl.h>
@@ -664,6 +665,7 @@
 	char *end = NULL;
 	struct ipmi *i;
 	size_t len;
+	int lanplus = 0;
 
 	if (!ISIPMI(s))
 		return S_OOPS;
@@ -678,6 +680,10 @@
 	if (user) {
 		*user = 0;
 		user++;
+		if (*user && *user == '+') {
+			lanplus = 1;
+			user++;
+		}
 	}
 
 	/* No separator or end of string reached */
@@ -709,7 +715,7 @@
 		user = NULL;
 
 	/* IPMI auth type not supported on RHEL3 */
-	i = ipmi_init(i, host, NULL, user, passwd, 0, 0);
+	i = ipmi_init(i, host, NULL, user, passwd, lanplus, 0);
 	if (!i)
 		return S_OOPS;
 	i->i_config = 1;
@@ -765,7 +771,7 @@
 cleanup(char *line, size_t linelen)
 {
 	char *p;
-	int x;
+	size_t x;
 
 	/* Remove leading whitespace. */
 	p = line;
@@ -812,6 +818,7 @@
 get_options_stdin(char *ip, size_t iplen,
 		  char *authtype, size_t atlen,
 		  char *passwd, size_t pwlen,
+		  char *pwd_script, size_t pwd_script_len,
 		  char *user, size_t userlen,
 		  char *op, size_t oplen,
 		  int *lanplus, int *verbose)
@@ -862,14 +869,18 @@
 			else
 				passwd[0] = 0;
 
-		} else if (!strcasecmp(name, "user") ||
-			   !strcasecmp(name, "login")) {
+		} else if (!strcasecmp(name, "passwd_script")) {
+			if (val) {
+				strncpy(pwd_script, val, pwd_script_len);
+				pwd_script[pwd_script_len - 1] = '\0';
+			} else
+				pwd_script[0] = '\0';
+		} else if (!strcasecmp(name, "user") || !strcasecmp(name, "login")) {
 			/* username */
 			if (val)
 				strncpy(user, val, userlen);
 			else
 				user[0] = 0;
-
 		} else if (!strcasecmp(name, "lanplus")) {
 			(*lanplus) = 1;
 		} else if (!strcasecmp(name, "option") ||
@@ -905,6 +916,8 @@
 printf("   -i <ipaddr>    IPMI Lan IP to talk to (deprecated, use -i)\n");
 printf("   -p <password>  Password (if required) to control power on\n"
        "                  IPMI device\n");
+printf("   -P             Use Lanplus\n");
+printf("   -S <path>      Script to retrieve password (if required)\n");
 printf("   -l <login>     Username/Login (if required) to control power\n"
        "                  on IPMI device\n");
 printf("   -o <op>        Operation to perform.\n");
@@ -913,14 +926,16 @@
 printf("   -v             Verbose mode\n\n");
 printf("If no options are specified, the following options will be read\n");
 printf("from standard input (one per line):\n\n");
-printf("   auth=<auth>    Same as -A\n");
-printf("   ipaddr=<#>     Same as -a\n");
-printf("   passwd=<pass>  Same as -p\n");
-printf("   login=<login>  Same as -u\n");
-printf("   option=<op>    Same as -o\n");
-printf("   operation=<op> Same as -o\n");
-printf("   action=<op>    Same as -o\n");
-printf("   verbose        Same as -v\n\n");
+printf("   auth=<auth>           Same as -A\n");
+printf("   ipaddr=<#>            Same as -a\n");
+printf("   passwd=<pass>         Same as -p\n");
+printf("   passwd_script=<path>  Same as -S\n");
+printf("   lanplus               Same as -P\n");
+printf("   login=<login>         Same as -u\n");
+printf("   option=<op>           Same as -o\n");
+printf("   operation=<op>        Same as -o\n");
+printf("   action=<op>           Same as -o\n");
+printf("   verbose               Same as -v\n\n");
 	exit(1);
 }
 
@@ -935,6 +950,7 @@
 	char passwd[64];
 	char user[64];
 	char op[64];
+	char pwd_script[PATH_MAX] = { 0, };
 	int lanplus=0;
 	int verbose=0;
 	char *pname = basename(argv[0]);
@@ -950,7 +966,7 @@
 		/*
 		   Parse command line options if any were specified
 		 */
-		while ((opt = getopt(argc, argv, "A:a:i:l:p:Po:vV?hH")) != EOF) {
+		while ((opt = getopt(argc, argv, "A:a:i:l:p:S:Po:vV?hH")) != EOF) {
 			switch(opt) {
 			case 'A':
 				/* Auth type */
@@ -972,6 +988,10 @@
 			case 'P':
 				lanplus = 1;
 				break;
+			case 'S':
+				strncpy(pwd_script, optarg, sizeof(pwd_script));
+				pwd_script[sizeof(pwd_script) - 1] = '\0';
+				break;
 			case 'o':
 				/* Operation */
 				strncpy(op, optarg, sizeof(op));
@@ -997,11 +1017,33 @@
 		if (get_options_stdin(ip, sizeof(ip),
 				      authtype, sizeof(authtype),
 				      passwd, sizeof(passwd),
+					  pwd_script, sizeof(pwd_script),
 				      user, sizeof(user),
 				      op, sizeof(op), &lanplus, &verbose) != 0)
 			return 1;
 	}
 
+	if (pwd_script[0] != '\0') {
+		char pwd_buf[1024];
+		FILE *fp;
+		fp = popen(pwd_script, "r");
+		if (fp != NULL) {
+			ssize_t len = fread(pwd_buf, 1, sizeof(pwd_buf), fp);
+			if (len > 0) {
+				char *p;
+				p = strchr(pwd_buf, '\n');
+				if (p != NULL)
+					*p = '\0';
+				p = strchr(pwd_buf, '\r');
+				if (p != NULL)
+					*p = '\0';
+				strncpy(passwd, pwd_buf, sizeof(passwd));
+				passwd[sizeof(passwd) - 1] = '\0';
+			}
+			pclose(fp);
+		}
+	}
+
 	/*
 	   Validate the operating parameters
 	 */
--- cluster/fence/agents/mcdata/fence_mcdata.pl	2006/08/16 19:05:25	1.2
+++ cluster/fence/agents/mcdata/fence_mcdata.pl	2007/06/27 15:38:18	1.2.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -53,6 +53,7 @@
     print "  -n <num>         Port number to disable\n";
     print "  -o <string>      Action:  disable (default) or enable\n";
     print "  -p <string>      Password for login\n";
+    print "  -S <path>        Script to run to retrieve login password\n";
     print "  -q               quiet mode\n";
     print "  -V               version\n";
 
@@ -129,7 +130,11 @@
 	elsif ($name eq "passwd" ) 
 	{
             $opt_p = $val;
-        } 
+        }
+	elsif ($name eq "passwd_script" )
+	{
+		$opt_S = $val;
+	}
 	elsif ($name eq "port" ) 
 	{
             $opt_n = $val;
@@ -146,7 +151,7 @@
 # MAIN
 
 if (@ARGV > 0) {
-   getopts("a:hl:n:o:p:qV") || fail_usage ;
+   getopts("a:hl:n:o:p:S:qV") || fail_usage ;
 
    usage if defined $opt_h;
    version if defined $opt_V;
@@ -156,7 +161,16 @@
    fail_usage "No '-a' flag specified." unless defined $opt_a;
    fail_usage "No '-n' flag specified." unless defined $opt_n;
    fail_usage "No '-l' flag specified." unless defined $opt_l;
-   fail_usage "No '-p' flag specified." unless defined $opt_p;
+
+   if (defined $opt_S) {
+     $pwd_script_out = `$opt_S`;
+     chomp($pwd_script_out);
+     if ($pwd_script_out) {
+        $opt_p = $pwd_script_out;
+     }
+   }
+
+   fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
    fail_usage "Unrecognised action '$opt_o' for '-o' flag"
       unless $opt_o =~ /^(disable|enable)$/i;
 
@@ -166,6 +180,15 @@
    fail "failed: no IP address" unless defined $opt_a;
    fail "failed: no plug number" unless defined $opt_n;
    fail "failed: no login name" unless defined $opt_l;
+
+   if (defined $opt_S) {
+     $pwd_script_out = `$opt_S`;
+     chomp($pwd_script_out);
+     if ($pwd_script_out) {
+        $opt_p = $pwd_script_out;
+     }
+   }
+
    fail "failed: no password" unless defined $opt_p;
    fail "failed: unrecognised action: $opt_o"
       unless $opt_o =~ /^(disable|enable)$/i;
--- cluster/fence/agents/rackswitch/do_rack.c	2004/06/24 08:53:14	1.1
+++ cluster/fence/agents/rackswitch/do_rack.c	2007/06/27 15:38:18	1.1.16.1
@@ -2,7 +2,7 @@
 *******************************************************************************
 **
 **  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-**  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 **  
 **  This copyrighted material is made available to anyone wishing to use,
 **  modify, copy, or redistribute it subject to the terms and conditions
@@ -24,6 +24,7 @@
 char password[256];
 char arg[256];
 char name[256];
+char pwd_script[PATH_MAX] = { 0, };
 
 char readbuf[MAXBUF];
 char writebuf[MAXBUF];
@@ -159,6 +160,7 @@
 	 "  -n <dec num>     Physical plug number on RackSwitch\n"
 	 "  -l <string>      Username\n"
 	 "  -p <string>      Password\n"
+	 "  -S <path>        Script to retrieve password\n"
 	 "  -v               Verbose\n"
 	 "  -q               Quiet\n"
          "  -V               Version information\n", pname);
@@ -175,7 +177,7 @@
     /*
      * Command line input
      */
-    while ((c = getopt(argc, argv, "ha:n:l:p:vqVd")) != -1)
+    while ((c = getopt(argc, argv, "ha:n:l:p:S:vqVd")) != -1)
       {
 	switch(c)
 	  {
@@ -199,6 +201,11 @@
 	    strncpy(password,optarg,254);
 	    break;
 
+	  case 'S':
+		strncpy(pwd_script, optarg, sizeof(pwd_script));
+		pwd_script[sizeof(pwd_script) - 1] = '\0';
+		break;
+
 	  case 'v':
 	    verbose_flag = 1;
 	    break;
@@ -265,10 +272,37 @@
       
       if (!strcmp(arg, "password"))
         strcpy(password, value);
+
+	  if (!strcasecmp(arg, "passwd_script")) {
+		strncpy(pwd_script, optarg, sizeof(pwd_script));
+		pwd_script[sizeof(pwd_script) - 1] = '\0';
+	  }
     }
     errno = 0;
     
   }
+
+  if (pwd_script[0] != '\0') {
+	FILE *fp;
+	char pwd_buf[1024];
+
+	fp = popen(pwd_script, "r");
+	if (fp != NULL) {
+		ssize_t len = fread(pwd_buf, 1, sizeof(pwd_buf), fp);
+		if (len > 0) {
+			char *p;
+			p = strchr(pwd_buf, '\n');
+			if (p != NULL)
+				*p = '\0';
+			p = strchr(pwd_buf, '\r');
+			if (p != NULL)
+				*p = '\0';
+			strncpy(password, pwd_buf, sizeof(password));
+			password[sizeof(password) - 1] = '\0';
+		}
+		pclose(fp);
+	}
+  }
 }
 
 static void sig_alarm(int sig)
--- cluster/fence/agents/rackswitch/do_rack.h	2004/06/24 08:53:14	1.1
+++ cluster/fence/agents/rackswitch/do_rack.h	2007/06/27 15:38:18	1.1.16.1
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <ctype.h>
--- cluster/fence/agents/rps10/rps10.c	2004/11/16 19:39:35	1.2
+++ cluster/fence/agents/rps10/rps10.c	2007/06/27 15:38:18	1.2.16.1
@@ -1,5 +1,5 @@
 /*
-  Copyright Red Hat, Inc. 2002-2004
+  Copyright Red Hat, Inc. 2002-2007
 
   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
--- cluster/fence/agents/rsa/fence_rsa.py	2007/01/31 20:16:49	1.2.2.1
+++ cluster/fence/agents/rsa/fence_rsa.py	2007/06/27 15:38:18	1.2.2.2
@@ -32,17 +32,18 @@
 #END_VERSION_GENERATION
 
 def usage():
-  print "Usage:\n"
-  print "fence_rsa [options]\n"
-  print "Options:\n"
-  print "   -a <ipaddress>           ip or hostname of rsa II port\n"
-  print "   -h                       print out help\n"
-  print "   -l [login]               login name\n"
-  print "   -p [password]            password\n"
-  print "   -o [action]              Reboot (default), Off, On, or Status\n"
-  print "   -v Verbose               Verbose mode\n"
-  print "   -V                       Print Version, then exit\n"
-
+  print "Usage:"
+  print "fence_rsa [options]"
+  print "Options:"
+  print "   -a <ipaddress>           ip or hostname of rsa II port"
+  print "   -h                       print out help"
+  print "   -l [login]               login name"
+  print "   -p [password]            password"
+  print "   -S [path]                script to run to retrieve password"
+  print "   -o [action]              Reboot (default), Off, On, or Status"
+  print "   -v Verbose               Verbose mode"
+  print "   -V                       Print Version, then exit"
+  
   sys.exit (0)
 
 def version():
@@ -60,6 +61,7 @@
   address = ""
   login = ""
   passwd = ""
+  passwd_script = ""
   action = POWER_REBOOT   #default action
   verbose = False
 
@@ -80,7 +82,7 @@
 
   if len(sys.argv) > 1:
     try:
-      opts, args = getopt.getopt(sys.argv[1:], "a:hl:o:p:vV", ["help", "output="])
+      opts, args = getopt.getopt(sys.argv[1:], "a:hl:o:p:S:vV", ["help", "output="])
     except getopt.GetoptError:
       #print help info and quit
       usage()
@@ -94,11 +96,13 @@
         version()
       if o in ("-h", "--help"):
         usage()
-        sys.exit()
+        sys.exit(0)
       if o == "-l":
         login = a
       if o == "-p":
         passwd = a
+      if o == "-S":
+        passwd_script = a
       if o  == "-o":
         if a == "Off" or a == "OFF" or a == "off":
           action = POWER_OFF
@@ -110,35 +114,44 @@
           action = POWER_REBOOT
         else:
           usage()
-          sys.exit()
+          sys.exit(1)
       if o == "-a":
         address = a
-    if address == "" or login == "" or passwd == "":
+    if address == "" or login == "" or (passwd == "" and passwd_script == ""):
       usage()
-      sys.exit()
+      sys.exit(1)
 
   else: #Take args from stdin...
     params = {}
     #place params in dict
     for line in sys.stdin:
       val = line.split("=")
-      params[val[0]] = val[1]
-
+      if len(val) == 2:
+        params[val[0].strip()] = val[1].strip()
+    
     try:
       address = params["ipaddr"]
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing ipaddr param for fence_rsa...exiting")
+      sys.exit(1)
+    
     try:
       login = params["login"]
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing login param for fence_rsa...exiting")
-
+      sys.exit(1)
+    
     try:
-      passwd = params["passwd"]
+      if 'passwd' in params:
+        passwd = params["passwd"]
+      if 'passwd_script' in params:
+        passwd_script = params['passwd_script']
+      if passwd == "" and passwd_script == "":
+        raise "missing password"
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing passwd param for fence_rsa...exiting")
-
-
+      sys.exit(1)
+    
     try:
       a = params["option"]
       if a == "Off" or a == "OFF" or a == "off":
@@ -149,9 +162,67 @@
         action = POWER_REBOOT
     except KeyError, e:
       action = POWER_REBOOT
-
+    
     ####End of stdin section
-
+  
+  
+  # retrieve passwd from passwd_script (if specified)
+  passwd_scr = ''
+  if len(passwd_script):
+    try:
+      if not os.access(passwd_script, os.X_OK):
+        raise 'script not executable'
+      p = os.popen(passwd_script, 'r', 1024)
+      passwd_scr = p.readline().strip()
+      if p.close() != None:
+        raise 'script failed'
+    except:
+      sys.stderr.write('password-script "%s" failed\n' % passwd_script)
+      passwd_scr = ''
+  
+  if passwd == "" and passwd_scr == "":
+    sys.stderr.write('password not available, exiting...')
+    sys.exit(1)
+  elif passwd == passwd_scr:
+    pass
+  elif passwd and passwd_scr:
+    # execute self, with password_scr as passwd,
+    # if that fails, continue with "passwd" argument as password
+    if len(sys.argv) > 1:
+      comm = sys.argv[0]
+      skip_next = False
+      for w in sys.argv[1:]:
+        if skip_next:
+          skip_next = False
+        elif w in ['-p', '-S']:
+          skip_next = True
+        else:
+          comm += ' ' + w
+      comm += ' -p ' + passwd_scr
+      ret = os.system(comm)
+      if ret != -1 and os.WIFEXITED(ret) and os.WEXITSTATUS(ret) == 0:
+        # success
+        sys.exit(0)
+      else:
+        sys.stderr.write('Use of password from "passwd_script" failed, trying "passwd" argument\n')
+    else: # use stdin
+      p = os.popen(sys.argv[0], 'w', 1024)
+      for par in params:
+        if par not in ['passwd', 'passwd_script']:
+          p.write(par + '=' + params[par] + '\n')
+      p.write('passwd=' + passwd_scr + '\n')
+      p.flush()
+      if p.close() == None:
+        # success
+        sys.exit(0)
+      else:
+        sys.stderr.write('Use of password from "passwd_script" failed, trying "passwd" argument\n')
+  elif passwd_scr:
+    passwd = passwd_scr
+  # passwd all set
+  
+  
+  
   ##Time to open telnet session and log in. 
   try:
     sock = Telnet(address.strip())
--- cluster/fence/agents/rsb/fence_rsb.py	2006/04/19 19:39:01	1.1
+++ cluster/fence/agents/rsb/fence_rsb.py	2007/06/27 15:38:18	1.1.2.1
@@ -33,17 +33,18 @@
 #END_VERSION_GENERATION
 
 def usage():
-  print "Usage:\n"
-  print "fence_rsb [options]\n"
-  print "Options:\n"
-  print "   -a <ipaddress>           ip or hostname of rsb\n"
-  print "   -h                       print out help\n"
-  print "   -l [login]               login name\n"
-  print "   -n [telnet port]         telnet port\n"
-  print "   -p [password]            password\n"
-  print "   -o [action]              Reboot (default), Off, On, or Status\n"
-  print "   -v Verbose               Verbose mode\n"
-  print "   -V                       Print Version, then exit\n"
+  print "Usage:"
+  print "fence_rsb [options]"
+  print "Options:"
+  print "   -a <ipaddress>           ip or hostname of rsb"
+  print "   -h                       print out help"
+  print "   -l [login]               login name"
+  print "   -n [telnet port]         telnet port"
+  print "   -p [password]            password"
+  print "   -S [path]                script to run to retrieve password"
+  print "   -o [action]              Reboot (default), Off, On, or Status"
+  print "   -v Verbose               Verbose mode"
+  print "   -V                       Print Version, then exit"
 
   sys.exit (0)
 
@@ -64,6 +65,7 @@
   address = ""
   login = ""
   passwd = ""
+  passwd_script = ""
   action = POWER_REBOOT   #default action
   telnet_port = 3172
   verbose = False
@@ -93,7 +95,7 @@
 
   if len(sys.argv) > 1:
     try:
-      opts, args = getopt.getopt(sys.argv[1:], "a:hl:n:o:p:vV", ["help", "output="])
+      opts, args = getopt.getopt(sys.argv[1:], "a:hl:n:o:p:S:vV", ["help", "output="])
     except getopt.GetoptError:
       #print help info and quit
       usage()
@@ -106,13 +108,15 @@
         version()
       if o in ("-h", "--help"):
         usage()
-        sys.exit()
+        sys.exit(0)
       if o == "-l":
         login = a
       if o == "-n":
         telnet_port = a
       if o == "-p":
         passwd = a
+      if o == "-S":
+        passwd_script = a
       if o  == "-o":
         if a == "Off" or a == "OFF" or a == "off":
           action = POWER_OFF
@@ -124,34 +128,44 @@
           action = POWER_REBOOT
         else:
           usage()
-          sys.exit()
+          sys.exit(1)
       if o == "-a":
         address = a
-    if address == "" or login == "" or passwd == "":
+    if address == "" or login == "" or (passwd == "" and passwd_script == ""):
       usage()
-      sys.exit()
+      sys.exit(1)
 
   else: #Take args from stdin...
     params = {}
     #place params in dict
     for line in sys.stdin:
       val = line.split("=")
-      params[val[0]] = val[1]
+      if len(val) == 2:
+        params[val[0].strip()] = val[1].strip()
 
     try:
       address = params["ipaddr"]
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing ipaddr param for fence_rsb...exiting")
+      sys.exit(1)
+    
     try:
       login = params["login"]
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing login param for fence_rsb...exiting")
-
+      sys.exit(1)
+    
     try:
-      passwd = params["passwd"]
+      if 'passwd' in params:
+        passwd = params["passwd"]
+      if 'passwd_script' in params:
+        passwd_script = params['passwd_script']
+      if passwd == "" and passwd_script == "":
+        raise "missing password"
     except KeyError, e:
       os.write(standard_err, "FENCE: Missing passwd param for fence_rsb...exiting")
-
+      sys.exit(1)
+    
     try:
       telnet_port = params["telnet_port"]
     except KeyError, e:
@@ -169,7 +183,65 @@
       action = POWER_REBOOT
 
     ####End of stdin section
-
+  
+  
+  # retrieve passwd from passwd_script (if specified)
+  passwd_scr = ''
+  if len(passwd_script):
+    try:
+      if not os.access(passwd_script, os.X_OK):
+        raise 'script not executable'
+      p = os.popen(passwd_script, 'r', 1024)
+      passwd_scr = p.readline().strip()
+      if p.close() != None:
+        raise 'script failed'
+    except:
+      sys.stderr.write('password-script "%s" failed\n' % passwd_script)
+      passwd_scr = ''
+  
+  if passwd == "" and passwd_scr == "":
+    sys.stderr.write('password not available, exiting...')
+    sys.exit(1)
+  elif passwd == passwd_scr:
+    pass
+  elif passwd and passwd_scr:
+    # execute self, with password_scr as passwd,
+    # if that fails, continue with "passwd" argument as password
+    if len(sys.argv) > 1:
+      comm = sys.argv[0]
+      skip_next = False
+      for w in sys.argv[1:]:
+        if skip_next:
+          skip_next = False
+        elif w in ['-p', '-S']:
+          skip_next = True
+        else:
+          comm += ' ' + w
+      comm += ' -p ' + passwd_scr
+      ret = os.system(comm)
+      if ret != -1 and os.WIFEXITED(ret) and os.WEXITSTATUS(ret) == 0:
+        # success
+        sys.exit(0)
+      else:
+        sys.stderr.write('Use of password from "passwd_script" failed, trying "passwd" argument\n')
+    else: # use stdin
+      p = os.popen(sys.argv[0], 'w', 1024)
+      for par in params:
+        if par not in ['passwd', 'passwd_script']:
+          p.write(par + '=' + params[par] + '\n')
+      p.write('passwd=' + passwd_scr + '\n')
+      p.flush()
+      if p.close() == None:
+        # success
+        sys.exit(0)
+      else:
+        sys.stderr.write('Use of password from "passwd_script" failed, trying "passwd" argument\n')
+  elif passwd_scr:
+    passwd = passwd_scr
+  # passwd all set
+  
+  
+  
   try:
     telnet_port = int(telnet_port)
   except:
--- cluster/fence/agents/sanbox2/fence_sanbox2.pl	2006/08/16 19:06:05	1.3
+++ cluster/fence/agents/sanbox2/fence_sanbox2.pl	2007/06/27 15:38:18	1.3.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -46,6 +46,7 @@
     print "  -n <num>         Port number to disable\n";
     print "  -o <string>      Action:  disable (default) or enable\n";
     print "  -p <string>      Password for login\n";
+    print "  -S <path>        Script to run to retrieve login password\n";
     print "  -q               quiet mode\n";
     print "  -V               version\n";
 
@@ -78,7 +79,7 @@
 
 
 if (@ARGV > 0) {
-   getopts("a:hl:n:o:p:qV") || fail_usage ;
+   getopts("a:hl:n:o:p:S:qV") || fail_usage ;
 
    usage if defined $opt_h;
    version if defined $opt_V;
@@ -88,7 +89,16 @@
    fail_usage "No '-a' flag specified." unless defined $opt_a;
    fail_usage "No '-n' flag specified." unless defined $opt_n;
    fail_usage "No '-l' flag specified." unless defined $opt_l;
-   fail_usage "No '-p' flag specified." unless defined $opt_p;
+
+   if (defined $opt_S) {
+      $pwd_script_out = `$opt_S`;
+      chomp($pwd_script_out);
+      if ($pwd_script_out) {
+          $opt_p = $pwd_script_out;
+      }
+   }
+
+   fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
    fail_usage "Unrecognised action '$opt_o' for '-o' flag"
       unless $opt_o =~ /^(disable|enable)$/i;
 
@@ -98,6 +108,15 @@
    fail "failed: no IP address" unless defined $opt_a;
    fail "failed: no plug number" unless defined $opt_n;
    fail "failed: no login name" unless defined $opt_l;
+
+   if (defined $opt_S) {
+      $pwd_script_out = `$opt_S`;
+      chomp($pwd_script_out);
+      if ($pwd_script_out) {
+          $opt_p = $pwd_script_out;
+      }
+   }
+
    fail "failed: no password" unless defined $opt_p;
    fail "failed: unrecognised action: $opt_o"
       unless $opt_o =~ /^(disable|enable)$/i;
@@ -222,7 +241,11 @@
 	elsif ($name eq "passwd" ) 
 	{
             $opt_p = $val;
-        } 
+        }
+	elsif ($name eq "passwd_script" )
+	{
+		$opt_S = $val;
+	}
 	elsif ($name eq "port" ) 
 	{
             $opt_n = $val;
--- cluster/fence/agents/vixel/fence_vixel.pl	2006/08/16 19:06:43	1.2
+++ cluster/fence/agents/vixel/fence_vixel.pl	2007/06/27 15:38:18	1.2.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -40,6 +40,7 @@
     print "  -h               Usage\n";
     print "  -n <num>         Port number to disable\n";
     print "  -p <string>      Password for login\n";
+    print "  -S <path>        Script to run to retrieve login password\n";
     print "  -V               version\n\n";
 
     exit 0;
@@ -70,7 +71,7 @@
 }
 
 if (@ARGV > 0) {
-    getopts("a:hn:p:V") || fail_usage ;
+    getopts("a:hn:p:S:V") || fail_usage ;
 
     usage if defined $opt_h;
     version if defined $opt_V;
@@ -78,13 +79,31 @@
     fail_usage "Unknown parameter." if (@ARGV > 0);
 
     fail_usage "No '-a' flag specified." unless defined $opt_a;
-    fail_usage "No '-p' flag specified." unless defined $opt_p;
+
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$opt_p = $pwd_script_out;
+		}
+	}
+
+    fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
     fail_usage "No '-n' flag specified." unless defined $opt_n;
 
 } else {
     get_options_stdin();
 
     fail "failed: no IP address for the Vixel." unless defined $opt_a;
+
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$opt_p = $pwd_script_out;
+		}
+	}
+
     fail "failed: no password provided." unless defined $opt_p;
     fail "failed: no port number specified." unless defined $opt_n;
 }
@@ -130,7 +149,7 @@
 
 ($text, $match) = $t->waitfor('/\>/');
 if ($text !~ /[Oo][Kk]/) {
-  fail "failed: error from switch\n";
+	fail "failed: error from switch\n";
 }
 
 $t->print("exit");
@@ -141,57 +160,57 @@
 
 sub get_options_stdin
 {
-    my $opt;
-    my $line = 0;
-
-    while( defined($in = <>) )
-    {   
-        $_ = $in;
-	chomp;
-        
-        # strip leading and trailing whitespace
-        s/^\s*//;
-        s/\s*$//;
-
-        # skip comments
-        next if /^#/;
-
-        $line+=1;
-        $opt=$_;
-        next unless $opt;
-
-        ($name,$val)=split /\s*=\s*/, $opt;
-
-        if ( $name eq "" ) {
-           print("parse error: illegal name in option $line\n");
-           exit 2;
-        } 
-
-        # DO NOTHING -- this field is used by fenced
-	elsif ($name eq "agent" ) { }
-
-	# FIXME -- depricated.  use "port" instead.
-	elsif ($name eq "fm" ) {
-            (my $dummy,$opt_n) = split /\s+/,$val;
-	    print STDERR "Depricated \"fm\" entry detected.  refer to man page.\n";
-        } 
+	my $opt;
+	my $line = 0;
 
-	elsif ($name eq "ipaddr" ) 
+	while( defined($in = <>) )
 	{
-            $opt_a = $val;
-        } 
+		$_ = $in;
+		chomp;
 
-	elsif ($name eq "name" ) { }
-
-        elsif ($name eq "passwd" ) 
-	{
-            $opt_p = $val;
-        } 
-
-        elsif ($name eq "port" ) 
-	{
-            $opt_n = $val;
-        } 
-    }
+		# strip leading and trailing whitespace
+		s/^\s*//;
+		s/\s*$//;
+
+		# skip comments
+		next if /^#/;
+
+		$line+=1;
+		$opt=$_;
+		next unless $opt;
+
+		($name,$val)=split /\s*=\s*/, $opt;
+
+		if ( $name eq "" ) {
+			print("parse error: illegal name in option $line\n");
+			exit 2;
+		} 
+
+		# DO NOTHING -- this field is used by fenced
+		elsif ($name eq "agent" ) { }
+
+		# FIXME -- depricated.  use "port" instead.
+		elsif ($name eq "fm" ) {
+			(my $dummy,$opt_n) = split /\s+/,$val;
+			print STDERR "Depricated \"fm\" entry detected. Refer to man page.\n";
+		} 
+		elsif ($name eq "ipaddr" ) 
+		{
+			$opt_a = $val;
+		} 
+		elsif ($name eq "name" ) { }
+		elsif ($name eq "passwd" ) 
+		{
+			$opt_p = $val;
+		}
+		elsif ($name eq "passwd_script" )
+		{
+			$opt_S = $val;
+		} 
+		elsif ($name eq "port" ) 
+		{
+			$opt_n = $val;
+		} 
+	}
 }
 
--- cluster/fence/agents/vmware/fence_vmware.pl	2005/09/01 18:25:42	1.1
+++ cluster/fence/agents/vmware/fence_vmware.pl	2007/06/27 15:38:18	1.1.2.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -21,7 +21,7 @@
 use VMware::VmPerl::VM;
 use VMware::VmPerl::Server;
 use VMware::VmPerl::ConnectParams;
-use vars qw( $opt_L $opt_v $opt_V $opt_h $opt_T $opt_n $opt_o $opt_p $opt_P $opt_l $opt_a $opt_q $vm_product $vm_platform $vm_build $vm_version_major $vm_version_minor $vm_version_revision );
+use vars qw( $opt_L $opt_v $opt_V $opt_h $opt_T $opt_n $opt_o $opt_p $opt_P $opt_S $opt_l $opt_a $opt_q $vm_product $vm_platform $vm_build $vm_version_major $vm_version_minor $vm_version_revision );
 
 # Get the program name from $0 and strip directory names
 $_=$0;
@@ -62,6 +62,7 @@
 	print "  -h               usage\n";
 	print "  -l <name>        Login name\n";
 	print "  -p <string>      Login password\n";
+	print "  -S <path>        Script to run to retrieve login password\n";
 	print "  -n <name>        Name of VM to change \n";
 	print "  -o <string>      Action: Reboot (default), Off or On\n";
 	print "  -q               quiet mode\n";
@@ -99,7 +100,7 @@
 sub version
 {
 	print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-	print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+	print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 	exit 0;
 }
 
@@ -240,7 +241,11 @@
 		elsif ($name eq "passwd" ) 
 		{
 			$opt_p = $val;
-		} 
+		}
+		elsif ($name eq "passwd_script" )
+		{
+			$opt_S = $val;
+		}
 		elsif ($name eq "port" ) 
 		{
 			$opt_n = $val;
@@ -275,7 +280,7 @@
 ### MAIN #######################################################
 
 if (@ARGV > 0) {
-	getopts("a:hl:n:o:p:qTvVL") || fail_usage ;
+	getopts("a:hl:n:o:p:S:qTvVL") || fail_usage ;
 	
 	usage if defined $opt_h;
 	version if defined $opt_V;
@@ -285,9 +290,18 @@
 	fail_usage "No '-a' flag specified." unless defined $opt_a;
 	fail_usage "No '-n' flag specified." unless defined $opt_n or defined $opt_L;
 	fail_usage "No '-l' flag specified." unless defined $opt_l;
-	fail_usage "No '-p' flag specified." unless defined $opt_p;
-	fail_usage "Unrecognised action '$opt_o' for '-o' flag"
-	unless $opt_o =~ /^(Off|On|Reboot)$/i;
+
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$opt_p = $pwd_script_out;
+		}
+	}
+
+	fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
+	fail_usage "Unrecognized action '$opt_o' for '-o' flag"
+		unless $opt_o =~ /^(Off|On|Reboot)$/i;
 
 	($opt_a, $opt_P) = split(/:/, $opt_a);
 	fail_usage "No port number specified." unless defined $opt_P;
@@ -298,9 +312,18 @@
 	fail "failed: no IP address" unless defined $opt_a;
 	fail "failed: no vm name" unless defined $opt_n;
 	fail "failed: no login name" unless defined $opt_l;
+
+	if (defined $opt_S) {
+		$pwd_script_out = `$opt_S`;
+		chomp($pwd_script_out);
+		if ($pwd_script_out) {
+			$opt_p = $pwd_script_out;
+		}
+	}
+
 	fail "failed: no password" unless defined $opt_p;
-	fail "failed: unrecognised action: $opt_o"
-	unless $opt_o =~ /^(Off|On|Reboot)$/i;
+	fail "failed: unrecognized action: $opt_o"
+		unless $opt_o =~ /^(Off|On|Reboot)$/i;
 } 
 
 &login;
--- cluster/fence/agents/wti/fence_wti.pl	2007/01/31 20:20:48	1.5.2.1
+++ cluster/fence/agents/wti/fence_wti.pl	2007/06/27 15:38:19	1.5.2.2
@@ -43,6 +43,7 @@
     print "  -h               usage\n";
     print "  -n <num>         Physical plug number on NPS\n";
     print "  -p <string>      Password if NPS requires one\n";
+    print "  -S <path>        Script to run to retrieve login password\n";
     print "  -o <operation>   Operation to perform (on, off, reboot)\n";
     print "  -q               quiet mode\n";
     print "  -T               test reports state of plug (no power cycle)\n";
@@ -77,7 +78,7 @@
 
 $opt_o = "reboot";
 if (@ARGV > 0) {
-   getopts("a:hn:p:qTVo:") || fail_usage ;
+   getopts("a:hn:p:S:qTVo:") || fail_usage ;
 
    usage if defined $opt_h;
    version if defined $opt_V;
@@ -86,13 +87,31 @@
 
    fail_usage "No '-a' flag specified." unless defined $opt_a;
    fail_usage "No '-n' flag specified." unless defined $opt_n;
-   fail_usage "No '-p' flag specified." unless defined $opt_p;
+
+   if (defined $opt_S) {
+       $pwd_script_out = `$opt_S`;
+       chomp($pwd_script_out);
+       if ($pwd_script_out) {
+           $opt_p = $pwd_script_out;
+       }
+   }
+
+   fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
 
 } else {
    get_options_stdin();
 
    fail "failed: no IP address" unless defined $opt_a;
    fail "failed: no plug number" unless defined $opt_n;
+
+   if (defined $opt_S) {
+       $pwd_script_out = `$opt_S`;
+       chomp($pwd_script_out);
+       if ($pwd_script_out) {
+           $opt_p = $pwd_script_out;
+       }
+   }
+
    fail "failed: no password" unless defined $opt_p;
 }
 
@@ -338,6 +357,10 @@
         {
             $opt_p = $val;
         }
+		elsif ($name eq "passwd_script" )
+		{
+			$opt_S = $val;
+		}
         elsif ($name eq "port" )
         {
             $opt_n = $val;
--- cluster/fence/agents/xcat/fence_xcat.pl	2006/08/16 19:18:44	1.2
+++ cluster/fence/agents/xcat/fence_xcat.pl	2007/06/27 15:38:19	1.2.2.1
@@ -4,6 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##
 ###############################################################################
 ###############################################################################
--- cluster/fence/agents/xen/fence_xen.pl	2005/06/16 15:05:42	1.2
+++ cluster/fence/agents/xen/fence_xen.pl	2007/06/27 15:38:19	1.2.2.1
@@ -3,7 +3,7 @@
 ###############################################################################
 ###############################################################################
 ##
-##  Copyright (C) 2005 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2005-2007 Red Hat, Inc.  All rights reserved.
 ##
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -35,9 +35,9 @@
 # "#END_VERSION_GENERATION"  It is generated by the Makefile
 
 #BEGIN_VERSION_GENERATION
-$FENCE_RELEASE_NAME="DEVEL.1105353156";
-$REDHAT_COPYRIGHT=("Copyright (C) Red Hat, Inc.  2005  All rights reserved.");
-$BUILD_DATE="(built Mon Jan 10 10:35:41 GMT 2005)";
+$FENCE_RELEASE_NAME="";
+$REDHAT_COPYRIGHT="";
+$BUILD_DATE="";
 #END_VERSION_GENERATION
 
 sub usage
@@ -83,7 +83,7 @@
 sub version
 {
 	print "$pname $FENCE_RELEASE_NAME $BUILD_DATE\n";
-	print "$SISTINA_COPYRIGHT\n" if ( $SISTINA_COPYRIGHT );
+	print "$REDHAT_COPYRIGHT\n" if ( $REDHAT_COPYRIGHT );
 	exit 0;
 }
 
--- cluster/fence/agents/zvm/fence_zvm.pl	2004/06/24 08:53:17	1.1
+++ cluster/fence/agents/zvm/fence_zvm.pl	2007/06/27 15:38:19	1.1.16.1
@@ -4,7 +4,7 @@
 ###############################################################################
 ##
 ##  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
-##  Copyright (C) 2004 Red Hat, Inc.  All rights reserved.
+##  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
 ##  
 ##  This copyrighted material is made available to anyone wishing to use,
 ##  modify, copy, or redistribute it subject to the terms and conditions
@@ -45,7 +45,8 @@
     print "  -a <ip>          IP address or hostname of the physical s390\n";
     print "  -h               usage\n";
     print "  -u <string>      userid of the virtual machine to fence\n";
-    print "  -p <string>      Password\n"; 
+    print "  -p <string>      Password\n";
+    print "  -S <path>        Script to run to retrieve login password\n";
     print "  -q               quiet mode\n";
     print "  -r <devnum>      ipl device <devnum>\n";
     print "  -V               Version\n";
@@ -267,6 +268,10 @@
         {
             $opt_p = $val;
         }
+		elsif ($name eq "passwd_script" )
+		{
+			$opt_S = $val;
+		}
 	      elsif ($name eq "userid" )
         {
             $opt_u = $val;
@@ -281,14 +286,23 @@
 }
 
 if (@ARGV > 0){
-    getopts("a:hp:qr:u:V") || fail_usage;
+    getopts("a:hp:S:qr:u:V") || fail_usage;
     usage if defined $opt_h;
     version if defined $opt_V;
 
     fail_usage "Unkown parameter." if (@ARGV > 0);
 
     fail_usage "No '-a' flag specified." unless defined $opt_a;
-    fail_usage "No '-p' flag specified." unless defined $opt_p;
+
+    if (defined $opt_S) {
+        $pwd_script_out = `$opt_S`;
+        chomp($pwd_script_out);
+        if ($pwd_script_out) {
+            $opt_p = $pwd_script_out;
+        }
+    }
+
+    fail_usage "No '-p' or '-S' flag specified." unless defined $opt_p;
     fail_usage "No '-u' flag specified." unless defined $opt_u;
 
 } else {
@@ -296,6 +310,15 @@
 
     fail "no IP address" unless defined $opt_a;
     fail "no userid" unless defined $opt_u;
+
+    if (defined $opt_S) {
+        $pwd_script_out = `$opt_S`;
+        chomp($pwd_script_out);
+        if ($pwd_script_out) {
+            $opt_p = $pwd_script_out;
+        }
+    }
+
     fail "no password" unless defined $opt_p;
 }
 




More information about the Cluster-devel mailing list