From 9512c1786385bf0cd66269bfa1474695d45024e2 Mon Sep 17 00:00:00 2001 From: aledvink Date: Tue, 8 Apr 2014 13:08:24 +0200 Subject: [PATCH] Resolves: #1028163 --- ipmitool-1.8.13-envarg.patch | 795 +++++++++++++++++++++++++++++++++++ ipmitool.spec | 8 +- 2 files changed, 802 insertions(+), 1 deletion(-) create mode 100644 ipmitool-1.8.13-envarg.patch 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 1.8.13-4 +- Support for environment variable short options. + * Tue Nov 5 2013 Ales Ledvinka 1.8.13-3 - Cleanup of dual bridge option.