Resolves: #1028163
This commit is contained in:
parent
a2d429d0dc
commit
9512c17863
795
ipmitool-1.8.13-envarg.patch
Normal file
795
ipmitool-1.8.13-envarg.patch
Normal file
@ -0,0 +1,795 @@
|
||||
diff --git a/lib/ipmi_main.c b/lib/ipmi_main.c
|
||||
index 1885bb5..0e420f6 100644
|
||||
--- a/lib/ipmi_main.c
|
||||
+++ b/lib/ipmi_main.c
|
||||
@@ -388,401 +388,444 @@ ipmi_main(int argc, char ** argv,
|
||||
char sol_escape_char = SOL_ESCAPE_CHARACTER_DEFAULT;
|
||||
char * devfile = NULL;
|
||||
|
||||
+ int cnt = argc;
|
||||
+ char **arg = argv;
|
||||
+ int voptind;
|
||||
+ int argecnt = 0;
|
||||
+ char **arge = NULL;
|
||||
+ char **narge = NULL;
|
||||
+ char *argestr = NULL;
|
||||
+
|
||||
/* save program name */
|
||||
progname = strrchr(argv[0], '/');
|
||||
progname = ((progname == NULL) ? argv[0] : progname+1);
|
||||
signal(SIGINT, ipmi_catch_sigint);
|
||||
|
||||
- while ((argflag = getopt(argc, (char **)argv, OPTION_STRING)) != -1)
|
||||
+ do
|
||||
{
|
||||
- switch (argflag) {
|
||||
- case 'I':
|
||||
- if (intfname) {
|
||||
- free(intfname);
|
||||
- intfname = NULL;
|
||||
- }
|
||||
- intfname = strdup(optarg);
|
||||
- if (intfname == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- if (intflist != NULL) {
|
||||
- found = 0;
|
||||
- for (sup=intflist; sup->name != NULL; sup++) {
|
||||
- if (strncmp(sup->name, intfname, strlen(intfname)) == 0 &&
|
||||
- strncmp(sup->name, intfname, strlen(sup->name)) == 0 &&
|
||||
- sup->supported == 1)
|
||||
- found = 1;
|
||||
+ if (arge != NULL) {
|
||||
+ voptind = optind;
|
||||
+ cnt = argecnt;
|
||||
+ arg = arge;
|
||||
+ }
|
||||
+ while ((argflag = getopt(cnt, (char **)arg, OPTION_STRING)) != -1)
|
||||
+ {
|
||||
+ switch (argflag) {
|
||||
+ case 'I':
|
||||
+ if (intfname) {
|
||||
+ free(intfname);
|
||||
+ intfname = NULL;
|
||||
}
|
||||
- if (!found) {
|
||||
- lprintf(LOG_ERR, "Interface %s not supported", intfname);
|
||||
+ intfname = strdup(optarg);
|
||||
+ if (intfname == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
goto out_free;
|
||||
}
|
||||
- }
|
||||
- break;
|
||||
- case 'h':
|
||||
- ipmi_option_usage(progname, cmdlist, intflist);
|
||||
- rc = 0;
|
||||
- goto out_free;
|
||||
- break;
|
||||
- case 'V':
|
||||
- printf("%s version %s\n", progname, VERSION);
|
||||
- rc = 0;
|
||||
- goto out_free;
|
||||
- break;
|
||||
- case 'd':
|
||||
- if (str2int(optarg, &devnum) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-d'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- /* Check if device number is -gt 0; I couldn't find limit for
|
||||
- * kernels > 2.6, thus right side is unlimited.
|
||||
- */
|
||||
- if (devnum < 0) {
|
||||
- lprintf(LOG_ERR, "Device number %i is out of range.", devnum);
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'p':
|
||||
- if (str2int(optarg, &port) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-p'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- /* Check if port is -gt 0 && port is -lt 65535 */
|
||||
- if (port < 0 || port > 65535) {
|
||||
- lprintf(LOG_ERR, "Port number %i is out of range.", port);
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'C':
|
||||
- if (str2int(optarg, &cipher_suite_id) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-C'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- /* add check Cipher is -gt 0 */
|
||||
- if (cipher_suite_id < 0) {
|
||||
- lprintf(LOG_ERR, "Cipher suite ID %i is invalid.", cipher_suite_id);
|
||||
- rc = -1;
|
||||
+ if (intflist != NULL) {
|
||||
+ found = 0;
|
||||
+ for (sup=intflist; sup->name != NULL; sup++) {
|
||||
+ if (strncmp(sup->name, intfname, strlen(intfname)) == 0 &&
|
||||
+ strncmp(sup->name, intfname, strlen(sup->name)) == 0 &&
|
||||
+ sup->supported == 1)
|
||||
+ found = 1;
|
||||
+ }
|
||||
+ if (!found) {
|
||||
+ lprintf(LOG_ERR, "Interface %s not supported", intfname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'h':
|
||||
+ ipmi_option_usage(progname, cmdlist, intflist);
|
||||
+ rc = 0;
|
||||
goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'v':
|
||||
- verbose++;
|
||||
- break;
|
||||
- case 'c':
|
||||
- csv_output = 1;
|
||||
- break;
|
||||
- case 'H':
|
||||
- if (hostname) {
|
||||
- free(hostname);
|
||||
- hostname = NULL;
|
||||
- }
|
||||
- hostname = strdup(optarg);
|
||||
- if (hostname == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ break;
|
||||
+ case 'V':
|
||||
+ printf("%s version %s\n", progname, VERSION);
|
||||
+ rc = 0;
|
||||
goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'f':
|
||||
- if (password) {
|
||||
- free(password);
|
||||
- password = NULL;
|
||||
- }
|
||||
- password = ipmi_password_file_read(optarg);
|
||||
- if (password == NULL)
|
||||
- lprintf(LOG_ERR, "Unable to read password "
|
||||
- "from file %s", optarg);
|
||||
- break;
|
||||
- case 'a':
|
||||
-#ifdef HAVE_GETPASSPHRASE
|
||||
- tmp_pass = getpassphrase("Password: ");
|
||||
-#else
|
||||
- tmp_pass = getpass("Password: ");
|
||||
-#endif
|
||||
- if (tmp_pass != NULL) {
|
||||
+ break;
|
||||
+ case 'd':
|
||||
+ if (str2int(optarg, &devnum) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-d'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ /* Check if device number is -gt 0; I couldn't find limit for
|
||||
+ * kernels > 2.6, thus right side is unlimited.
|
||||
+ */
|
||||
+ if (devnum < 0) {
|
||||
+ lprintf(LOG_ERR, "Device number %i is out of range.", devnum);
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'p':
|
||||
+ if (str2int(optarg, &port) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-p'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ /* Check if port is -gt 0 && port is -lt 65535 */
|
||||
+ if (port < 0 || port > 65535) {
|
||||
+ lprintf(LOG_ERR, "Port number %i is out of range.", port);
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'C':
|
||||
+ if (str2int(optarg, &cipher_suite_id) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-C'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ /* add check Cipher is -gt 0 */
|
||||
+ if (cipher_suite_id < 0) {
|
||||
+ lprintf(LOG_ERR, "Cipher suite ID %i is invalid.", cipher_suite_id);
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'v':
|
||||
+ verbose++;
|
||||
+ break;
|
||||
+ case 'c':
|
||||
+ csv_output = 1;
|
||||
+ break;
|
||||
+ case 'H':
|
||||
+ if (hostname) {
|
||||
+ free(hostname);
|
||||
+ hostname = NULL;
|
||||
+ }
|
||||
+ hostname = strdup(optarg);
|
||||
+ if (hostname == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'f':
|
||||
if (password) {
|
||||
free(password);
|
||||
password = NULL;
|
||||
}
|
||||
- password = strdup(tmp_pass);
|
||||
- tmp_pass = NULL;
|
||||
- if (password == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
+ password = ipmi_password_file_read(optarg);
|
||||
+ if (password == NULL)
|
||||
+ lprintf(LOG_ERR, "Unable to read password "
|
||||
+ "from file %s", optarg);
|
||||
+ break;
|
||||
+ case 'a':
|
||||
+#ifdef HAVE_GETPASSPHRASE
|
||||
+ tmp_pass = getpassphrase("Password: ");
|
||||
+#else
|
||||
+ tmp_pass = getpass("Password: ");
|
||||
+#endif
|
||||
+ if (tmp_pass != NULL) {
|
||||
+ if (password) {
|
||||
+ free(password);
|
||||
+ password = NULL;
|
||||
+ }
|
||||
+ password = strdup(tmp_pass);
|
||||
+ tmp_pass = NULL;
|
||||
+ if (password == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
- break;
|
||||
- case 'k':
|
||||
- if (kgkey) {
|
||||
- free(kgkey);
|
||||
- kgkey = NULL;
|
||||
- }
|
||||
- kgkey = strdup(optarg);
|
||||
- if (kgkey == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'K':
|
||||
- if ((tmp_env = getenv("IPMI_KGKEY"))) {
|
||||
+ break;
|
||||
+ case 'k':
|
||||
if (kgkey) {
|
||||
free(kgkey);
|
||||
kgkey = NULL;
|
||||
}
|
||||
- kgkey = strdup(tmp_env);
|
||||
+ kgkey = strdup(optarg);
|
||||
if (kgkey == NULL) {
|
||||
lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
goto out_free;
|
||||
}
|
||||
- } else {
|
||||
- lprintf(LOG_WARN, "Unable to read kgkey from environment");
|
||||
- }
|
||||
- break;
|
||||
- case 'y':
|
||||
- if (kgkey) {
|
||||
- free(kgkey);
|
||||
- kgkey = NULL;
|
||||
- }
|
||||
- kgkey = ipmi_parse_hex(optarg);
|
||||
- if (kgkey == NULL) {
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'Y':
|
||||
-#ifdef HAVE_GETPASSPHRASE
|
||||
- tmp_pass = getpassphrase("Key: ");
|
||||
-#else
|
||||
- tmp_pass = getpass("Key: ");
|
||||
-#endif
|
||||
- if (tmp_pass != NULL) {
|
||||
+ break;
|
||||
+ case 'K':
|
||||
+ if ((tmp_env = getenv("IPMI_KGKEY"))) {
|
||||
+ if (kgkey) {
|
||||
+ free(kgkey);
|
||||
+ kgkey = NULL;
|
||||
+ }
|
||||
+ kgkey = strdup(tmp_env);
|
||||
+ if (kgkey == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ } else {
|
||||
+ lprintf(LOG_WARN, "Unable to read kgkey from environment");
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'y':
|
||||
if (kgkey) {
|
||||
free(kgkey);
|
||||
kgkey = NULL;
|
||||
}
|
||||
- kgkey = strdup(tmp_pass);
|
||||
- tmp_pass = NULL;
|
||||
+ kgkey = ipmi_parse_hex(optarg);
|
||||
if (kgkey == NULL) {
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'Y':
|
||||
+#ifdef HAVE_GETPASSPHRASE
|
||||
+ tmp_pass = getpassphrase("Key: ");
|
||||
+#else
|
||||
+ tmp_pass = getpass("Key: ");
|
||||
+#endif
|
||||
+ if (tmp_pass != NULL) {
|
||||
+ if (kgkey) {
|
||||
+ free(kgkey);
|
||||
+ kgkey = NULL;
|
||||
+ }
|
||||
+ kgkey = strdup(tmp_pass);
|
||||
+ tmp_pass = NULL;
|
||||
+ if (kgkey == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'U':
|
||||
+ if (username) {
|
||||
+ free(username);
|
||||
+ username = NULL;
|
||||
+ }
|
||||
+ if (strlen(optarg) > 16) {
|
||||
+ lprintf(LOG_ERR, "Username is too long (> 16 bytes)");
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ username = strdup(optarg);
|
||||
+ if (username == NULL) {
|
||||
lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
goto out_free;
|
||||
}
|
||||
- }
|
||||
- break;
|
||||
- case 'U':
|
||||
- if (username) {
|
||||
- free(username);
|
||||
- username = NULL;
|
||||
- }
|
||||
- if (strlen(optarg) > 16) {
|
||||
- lprintf(LOG_ERR, "Username is too long (> 16 bytes)");
|
||||
- goto out_free;
|
||||
- }
|
||||
- username = strdup(optarg);
|
||||
- if (username == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'S':
|
||||
- if (sdrcache) {
|
||||
- free(sdrcache);
|
||||
- sdrcache = NULL;
|
||||
- }
|
||||
- sdrcache = strdup(optarg);
|
||||
- if (sdrcache == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'D':
|
||||
- /* check for subsequent instance of -D */
|
||||
- if (devfile) {
|
||||
- /* free memory for previous string */
|
||||
- free(devfile);
|
||||
- }
|
||||
- devfile = strdup(optarg);
|
||||
- if (devfile == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
+ break;
|
||||
+ case 'S':
|
||||
+ if (sdrcache) {
|
||||
+ free(sdrcache);
|
||||
+ sdrcache = NULL;
|
||||
+ }
|
||||
+ sdrcache = strdup(optarg);
|
||||
+ if (sdrcache == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'D':
|
||||
+ /* check for subsequent instance of -D */
|
||||
+ if (devfile) {
|
||||
+ /* free memory for previous string */
|
||||
+ free(devfile);
|
||||
+ }
|
||||
+ devfile = strdup(optarg);
|
||||
+ if (devfile == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
#ifdef ENABLE_ALL_OPTIONS
|
||||
- case 'o':
|
||||
- if (oemtype) {
|
||||
- free(oemtype);
|
||||
- oemtype = NULL;
|
||||
- }
|
||||
- oemtype = strdup(optarg);
|
||||
- if (oemtype == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- if (strncmp(oemtype, "list", 4) == 0 ||
|
||||
- strncmp(oemtype, "help", 4) == 0) {
|
||||
- ipmi_oem_print();
|
||||
- rc = 0;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'g':
|
||||
- /* backwards compatible oem hack */
|
||||
- if (oemtype) {
|
||||
- free(oemtype);
|
||||
- oemtype = NULL;
|
||||
- }
|
||||
- oemtype = strdup("intelwv2");
|
||||
- break;
|
||||
- case 's':
|
||||
- /* backwards compatible oem hack */
|
||||
- if (oemtype) {
|
||||
- free(oemtype);
|
||||
- oemtype = NULL;
|
||||
- }
|
||||
- oemtype = strdup("supermicro");
|
||||
- break;
|
||||
- case 'P':
|
||||
- if (password) {
|
||||
- free(password);
|
||||
- password = NULL;
|
||||
- }
|
||||
- password = strdup(optarg);
|
||||
- if (password == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
-
|
||||
- /* Prevent password snooping with ps */
|
||||
- i = strlen(optarg);
|
||||
- memset(optarg, 'X', i);
|
||||
- break;
|
||||
- case 'E':
|
||||
- if ((tmp_env = getenv("IPMITOOL_PASSWORD"))) {
|
||||
- if (password) {
|
||||
- free(password);
|
||||
- password = NULL;
|
||||
+ case 'o':
|
||||
+ if (oemtype) {
|
||||
+ free(oemtype);
|
||||
+ oemtype = NULL;
|
||||
}
|
||||
- password = strdup(tmp_env);
|
||||
- if (password == NULL) {
|
||||
+ oemtype = strdup(optarg);
|
||||
+ if (oemtype == NULL) {
|
||||
lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
goto out_free;
|
||||
}
|
||||
- }
|
||||
- else if ((tmp_env = getenv("IPMI_PASSWORD"))) {
|
||||
+ if (strncmp(oemtype, "list", 4) == 0 ||
|
||||
+ strncmp(oemtype, "help", 4) == 0) {
|
||||
+ ipmi_oem_print();
|
||||
+ rc = 0;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'g':
|
||||
+ /* backwards compatible oem hack */
|
||||
+ if (oemtype) {
|
||||
+ free(oemtype);
|
||||
+ oemtype = NULL;
|
||||
+ }
|
||||
+ oemtype = strdup("intelwv2");
|
||||
+ break;
|
||||
+ case 's':
|
||||
+ /* backwards compatible oem hack */
|
||||
+ if (oemtype) {
|
||||
+ free(oemtype);
|
||||
+ oemtype = NULL;
|
||||
+ }
|
||||
+ oemtype = strdup("supermicro");
|
||||
+ break;
|
||||
+ case 'P':
|
||||
if (password) {
|
||||
free(password);
|
||||
password = NULL;
|
||||
}
|
||||
- password = strdup(tmp_env);
|
||||
+ password = strdup(optarg);
|
||||
if (password == NULL) {
|
||||
lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
goto out_free;
|
||||
}
|
||||
- }
|
||||
- else {
|
||||
- lprintf(LOG_WARN, "Unable to read password from environment");
|
||||
- }
|
||||
- break;
|
||||
- case 'L':
|
||||
- i = strlen(optarg);
|
||||
- if ((i > 0) && (optarg[i-1] == '+')) {
|
||||
- lookupbit = 0;
|
||||
- optarg[i-1] = 0;
|
||||
- }
|
||||
- privlvl = str2val(optarg, ipmi_privlvl_vals);
|
||||
- if (privlvl == 0xFF) {
|
||||
- lprintf(LOG_WARN, "Invalid privilege level %s", optarg);
|
||||
- }
|
||||
- break;
|
||||
- case 'A':
|
||||
- authtype = str2val(optarg, ipmi_authtype_session_vals);
|
||||
- break;
|
||||
- case 't':
|
||||
- if (str2uchar(optarg, &target_addr) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-t'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'b':
|
||||
- if (str2uchar(optarg, &target_channel) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-b'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'T':
|
||||
- if (str2uchar(optarg, &transit_addr) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-T'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'B':
|
||||
- if (str2uchar(optarg, &transit_channel) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-B'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'l':
|
||||
- if (str2uchar(optarg, &target_lun) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-l'.");
|
||||
- rc = 1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'm':
|
||||
- if (str2uchar(optarg, &arg_addr) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-m'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'e':
|
||||
- sol_escape_char = optarg[0];
|
||||
- break;
|
||||
- case 'O':
|
||||
- if (seloem) {
|
||||
- free(seloem);
|
||||
- seloem = NULL;
|
||||
- }
|
||||
- seloem = strdup(optarg);
|
||||
- if (seloem == NULL) {
|
||||
- lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- case 'z':
|
||||
- if (str2ushort(optarg, &my_long_packet_size) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-z'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
- }
|
||||
- break;
|
||||
- /* Retry and Timeout */
|
||||
- case 'R':
|
||||
- if (str2int(optarg, &retry) != 0 || retry < 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-R'.");
|
||||
- rc = -1;
|
||||
+
|
||||
+ /* Prevent password snooping with ps */
|
||||
+ i = strlen(optarg);
|
||||
+ memset(optarg, 'X', i);
|
||||
+ break;
|
||||
+ case 'E':
|
||||
+ if ((tmp_env = getenv("IPMITOOL_PASSWORD"))) {
|
||||
+ if (password) {
|
||||
+ free(password);
|
||||
+ password = NULL;
|
||||
+ }
|
||||
+ password = strdup(tmp_env);
|
||||
+ if (password == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ }
|
||||
+ else if ((tmp_env = getenv("IPMI_PASSWORD"))) {
|
||||
+ if (password) {
|
||||
+ free(password);
|
||||
+ password = NULL;
|
||||
+ }
|
||||
+ password = strdup(tmp_env);
|
||||
+ if (password == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ lprintf(LOG_WARN, "Unable to read password from environment");
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'L':
|
||||
+ i = strlen(optarg);
|
||||
+ if ((i > 0) && (optarg[i-1] == '+')) {
|
||||
+ lookupbit = 0;
|
||||
+ optarg[i-1] = 0;
|
||||
+ }
|
||||
+ privlvl = str2val(optarg, ipmi_privlvl_vals);
|
||||
+ if (privlvl == 0xFF) {
|
||||
+ lprintf(LOG_WARN, "Invalid privilege level %s", optarg);
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'A':
|
||||
+ authtype = str2val(optarg, ipmi_authtype_session_vals);
|
||||
+ break;
|
||||
+ case 't':
|
||||
+ if (str2uchar(optarg, &target_addr) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-t'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'b':
|
||||
+ if (str2uchar(optarg, &target_channel) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-b'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'T':
|
||||
+ if (str2uchar(optarg, &transit_addr) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-T'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'B':
|
||||
+ if (str2uchar(optarg, &transit_channel) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-B'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'l':
|
||||
+ if (str2uchar(optarg, &target_lun) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-l'.");
|
||||
+ rc = 1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'm':
|
||||
+ if (str2uchar(optarg, &arg_addr) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-m'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'e':
|
||||
+ sol_escape_char = optarg[0];
|
||||
+ break;
|
||||
+ case 'O':
|
||||
+ if (seloem) {
|
||||
+ free(seloem);
|
||||
+ seloem = NULL;
|
||||
+ }
|
||||
+ seloem = strdup(optarg);
|
||||
+ if (seloem == NULL) {
|
||||
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'z':
|
||||
+ if (str2ushort(optarg, &my_long_packet_size) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-z'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ /* Retry and Timeout */
|
||||
+ case 'R':
|
||||
+ if (str2int(optarg, &retry) != 0 || retry < 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-R'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'N':
|
||||
+ if (str2uint(optarg, &timeout) != 0) {
|
||||
+ lprintf(LOG_ERR, "Invalid parameter given or out of range for '-N'.");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+ break;
|
||||
+#endif
|
||||
+ default:
|
||||
+ ipmi_option_usage(progname, cmdlist, intflist);
|
||||
goto out_free;
|
||||
}
|
||||
- break;
|
||||
- case 'N':
|
||||
- if (str2uint(optarg, &timeout) != 0) {
|
||||
- lprintf(LOG_ERR, "Invalid parameter given or out of range for '-N'.");
|
||||
- rc = -1;
|
||||
- goto out_free;
|
||||
+ }
|
||||
+
|
||||
+ /* support additional arguments from environment */
|
||||
+ if (argecnt == 0) {
|
||||
+ argestr = getenv("IPMITOOL_ARGV");
|
||||
+ if (argestr != NULL) {
|
||||
+ argecnt = 0;
|
||||
+ arge = malloc(sizeof(char*)*(argecnt+2));
|
||||
+ arge[argecnt++] = "ipmitool-env";
|
||||
+ arge[argecnt] = NULL;
|
||||
+ while ((arge[argecnt] = strsep(&argestr, " ")) != NULL) {
|
||||
+ narge = realloc(arge, sizeof(char*)*(argecnt+2));
|
||||
+ if (narge == NULL) {
|
||||
+ free(arge);
|
||||
+ lprintf(LOG_ERR, "Problem while resizing options from environment.\n");
|
||||
+ rc = -1;
|
||||
+ goto out_free;
|
||||
+ } else {
|
||||
+ arge = narge;
|
||||
+ }
|
||||
+ arge[++argecnt] = NULL;
|
||||
+ }
|
||||
}
|
||||
- break;
|
||||
-#endif
|
||||
- default:
|
||||
- ipmi_option_usage(progname, cmdlist, intflist);
|
||||
- goto out_free;
|
||||
}
|
||||
+
|
||||
+ } while ((argecnt>1) && (arg != arge));
|
||||
+ if (NULL != arge) {
|
||||
+ optind = voptind;
|
||||
}
|
||||
|
||||
/* check for command before doing anything */
|
@ -1,7 +1,7 @@
|
||||
Name: ipmitool
|
||||
Summary: Utility for IPMI control
|
||||
Version: 1.8.13
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
License: BSD
|
||||
Group: System Environment/Base
|
||||
URL: http://ipmitool.sourceforge.net/
|
||||
@ -36,6 +36,8 @@ Patch4: cxoem-jb-cx6.patch
|
||||
#Patch6: ipmitool-1.8.12-fipsman.patch
|
||||
# pending https://sourceforge.net/p/ipmitool/bugs/280/
|
||||
Patch7: ipmitool-1.8.13-dualbridgedoc.patch
|
||||
# TODO
|
||||
Patch8: ipmitool-1.8.13-envarg.patch
|
||||
|
||||
%description
|
||||
This package contains a utility for interfacing with devices that support
|
||||
@ -91,6 +93,7 @@ for the host OS to use.
|
||||
#patch5 -p0 -b .fips
|
||||
#patch6 -p0 -b .fipsman
|
||||
%patch7 -p1 -b .dualbridgedoc
|
||||
%patch8 -p1 -b .argenv
|
||||
|
||||
for f in AUTHORS ChangeLog; do
|
||||
iconv -f iso-8859-1 -t utf8 < ${f} > ${f}.utf8
|
||||
@ -182,6 +185,9 @@ install -Dm 755 contrib/bmc-snmp-proxy %{buildroot}%{_libexecdir}/bmc-sn
|
||||
%{_libexecdir}/bmc-snmp-proxy
|
||||
|
||||
%changelog
|
||||
* Tue Apr 8 2014 Ales Ledvinka <aledvink@redhat.com> 1.8.13-4
|
||||
- Support for environment variable short options.
|
||||
|
||||
* Tue Nov 5 2013 Ales Ledvinka <aledvink@redhat.com> 1.8.13-3
|
||||
- Cleanup of dual bridge option.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user