[Cluster-devel] cluster/fence/agents/ipmilan ipmilan.c
rmccabe at sourceware.org
rmccabe at sourceware.org
Mon Sep 24 21:56:43 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL4
Changes by: rmccabe at sourceware.org 2007-09-24 21:56:43
Modified files:
fence/agents/ipmilan: ipmilan.c
Log message:
Backport the agent from RHEL5.1 to fix bz205638
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/ipmilan/ipmilan.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.8&r2=1.1.2.9
--- cluster/fence/agents/ipmilan/ipmilan.c 2007/02/13 19:38:33 1.1.2.8
+++ cluster/fence/agents/ipmilan/ipmilan.c 2007/09/24 21:56:43 1.1.2.9
@@ -30,9 +30,9 @@
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
-#include <limits.h>
#include <string.h>
#include <errno.h>
+#include <limits.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <libintl.h>
@@ -92,6 +92,7 @@
pid_t i_pid;
int i_config;
int i_verbose;
+ int i_lanplus;
};
@@ -176,8 +177,13 @@
int x;
/* Store path */
- snprintf(cmd, sizeof(cmd), "%s -I lan -H %s", ipmi->i_ipmitool,
- ipmi->i_host);
+ if (ipmi->i_lanplus) {
+ snprintf(cmd, sizeof(cmd), "%s -I lanplus -H %s",
+ ipmi->i_ipmitool, ipmi->i_host);
+ } else {
+ snprintf(cmd, sizeof(cmd), "%s -I lan -H %s", ipmi->i_ipmitool,
+ ipmi->i_host);
+ }
if (ipmi->i_user) {
snprintf(arg, sizeof(arg), " -U %s", ipmi->i_user);
@@ -460,7 +466,7 @@
*/
static struct ipmi *
ipmi_init(struct ipmi *i, char *host, char *authtype,
- char *user, char *password, int verbose)
+ char *user, char *password, int lanplus, int verbose)
{
const char *p;
@@ -530,6 +536,7 @@
i->i_pid = -1;
i->i_id = IPMIID;
i->i_verbose = verbose;
+ i->i_lanplus = lanplus;
return i;
}
@@ -574,7 +581,7 @@
}
memset((void *)i, 0, sizeof(*i));
- ipmi_init(i, NULL, NULL, NULL, NULL, 0);
+ ipmi_init(i, NULL, NULL, NULL, NULL, 0, 0);
return i;
}
@@ -658,6 +665,7 @@
char *end = NULL;
struct ipmi *i;
size_t len;
+ int lanplus = 0;
if (!ISIPMI(s))
return S_OOPS;
@@ -672,6 +680,10 @@
if (user) {
*user = 0;
user++;
+ if (*user && *user == '+') {
+ lanplus = 1;
+ user++;
+ }
}
/* No separator or end of string reached */
@@ -703,7 +715,7 @@
user = NULL;
/* IPMI auth type not supported on RHEL3 */
- i = ipmi_init(i, host, NULL, user, passwd, 0);
+ i = ipmi_init(i, host, NULL, user, passwd, lanplus, 0);
if (!i)
return S_OOPS;
i->i_config = 1;
@@ -809,7 +821,7 @@
char *pwd_script, size_t pwd_script_len,
char *user, size_t userlen,
char *op, size_t oplen,
- int *verbose)
+ int *lanplus, int *verbose)
{
char in[256];
int line = 0;
@@ -856,20 +868,21 @@
strncpy(passwd, val, pwlen);
else
passwd[0] = 0;
+
} else if (!strcasecmp(name, "passwd_script")) {
- if (val) {
+ 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")) {
+ } 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") ||
!strcasecmp(name, "operation") ||
!strcasecmp(name, "action")) {
@@ -877,11 +890,6 @@
strncpy(op, val, oplen);
else
op[0] = 0;
- } else {
- fprintf(stderr,
- "parse error: illegal name on line %d\n",
- line);
- return 1;
}
}
@@ -908,6 +916,7 @@
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");
@@ -921,6 +930,7 @@
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");
@@ -940,7 +950,8 @@
char passwd[64];
char user[64];
char op[64];
- char pwd_script[PATH_MAX];
+ char pwd_script[PATH_MAX] = { 0, };
+ int lanplus=0;
int verbose=0;
char *pname = basename(argv[0]);
struct ipmi *i;
@@ -948,7 +959,6 @@
memset(ip, 0, sizeof(ip));
memset(authtype, 0, sizeof(authtype));
memset(passwd, 0, sizeof(passwd));
- memset(pwd_script, 0, sizeof(pwd_script));
memset(user, 0, sizeof(user));
memset(op, 0, sizeof(op));
@@ -956,7 +966,7 @@
/*
Parse command line options if any were specified
*/
- while ((opt = getopt(argc, argv, "A:a:i:l:p:S:o:vV?hH")) != EOF) {
+ while ((opt = getopt(argc, argv, "A:a:i:l:p:S:Po:vV?hH")) != EOF) {
switch(opt) {
case 'A':
/* Auth type */
@@ -975,8 +985,10 @@
/* password */
strncpy(passwd, optarg, sizeof(passwd));
break;
+ case 'P':
+ lanplus = 1;
+ break;
case 'S':
- /* password script */
strncpy(pwd_script, optarg, sizeof(pwd_script));
pwd_script[sizeof(pwd_script) - 1] = '\0';
break;
@@ -1007,7 +1019,7 @@
passwd, sizeof(passwd),
pwd_script, sizeof(pwd_script),
user, sizeof(user),
- op, sizeof(op), &verbose) != 0)
+ op, sizeof(op), &lanplus, &verbose) != 0)
return 1;
}
@@ -1057,7 +1069,7 @@
/* Ok, set up the IPMI struct */
- i = ipmi_init(NULL, ip, authtype, user, passwd, verbose);
+ i = ipmi_init(NULL, ip, authtype, user, passwd, lanplus, verbose);
if (!i)
fail_exit("Failed to initialize\n");
More information about the Cluster-devel
mailing list