From mboxrd@z Thu Jan 1 00:00:00 1970 From: rmccabe@sourceware.org Date: 24 Sep 2007 21:56:43 -0000 Subject: [Cluster-devel] cluster/fence/agents/ipmilan ipmilan.c Message-ID: <20070924215643.6256.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 #include #include -#include #include #include +#include #include #include #include @@ -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 IPMI Lan IP to talk to (deprecated, use -i)\n"); printf(" -p Password (if required) to control power on\n" " IPMI device\n"); +printf(" -P Use Lanplus\n"); printf(" -S Script to retrieve password (if required)\n"); printf(" -l Username/Login (if required) to control power\n" " on IPMI device\n"); @@ -921,6 +930,7 @@ printf(" ipaddr=<#> Same as -a\n"); printf(" passwd= Same as -p\n"); printf(" passwd_script= Same as -S\n"); +printf(" lanplus Same as -P\n"); printf(" login= Same as -u\n"); printf(" option= Same as -o\n"); printf(" operation= 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");