[ipmitool] Resolves: #1028163
aledvink
aledvink at fedoraproject.org
Tue Apr 8 11:10:11 UTC 2014
commit 9512c1786385bf0cd66269bfa1474695d45024e2
Author: aledvink <aledvink at host.al>
Date: Tue Apr 8 13:08:24 2014 +0200
Resolves: #1028163
ipmitool-1.8.13-envarg.patch | 795 ++++++++++++++++++++++++++++++++++++++++++
ipmitool.spec | 8 +-
2 files changed, 802 insertions(+), 1 deletions(-)
---
diff --git a/ipmitool-1.8.13-envarg.patch b/ipmitool-1.8.13-envarg.patch
new file mode 100644
index 0000000..0262556
--- /dev/null
+++ b/ipmitool-1.8.13-envarg.patch
@@ -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 */
diff --git a/ipmitool.spec b/ipmitool.spec
index 866022a..fce55f8 100644
--- a/ipmitool.spec
+++ b/ipmitool.spec
@@ -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 at redhat.com> 1.8.13-4
+- Support for environment variable short options.
+
* Tue Nov 5 2013 Ales Ledvinka <aledvink at redhat.com> 1.8.13-3
- Cleanup of dual bridge option.
More information about the scm-commits
mailing list