Refix 6e037d6bfbbb93b349c8ca331ebde03a837f76bf

Restore using strncmp() for "options=" and similar
substrings.

Resolves ipmitool/ipmitool#223

Signed-off-by: Alexander Amelkin <alexander@amelkin.msk.ru>
This commit is contained in:
Alexander Amelkin 2020-07-28 19:38:03 +03:00 committed by Alexander Amelkin
parent aee377bead
commit 50d8c36edf
3 changed files with 16 additions and 9 deletions

View File

@ -1070,8 +1070,9 @@ get_bootparam_options(char *optstring,
{NULL} /* End marker */
}, *op;
const char *optkw = "options=";
if (strcmp(optstring, "options=")) {
if (strncmp(optstring, optkw, strlen(optkw))) {
lprintf(LOG_ERR, "No options= keyword found \"%s\"", optstring);
return -1;
}
@ -2087,7 +2088,7 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv)
/* Exclusive clear-cmos, no other flags */
optstr = "clear-cmos";
}
else if (!strcmp(argv[2], kw)) {
else if (!strncmp(argv[2], kw, strlen(kw))) {
optstr = argv[2] + strlen(kw);
}
}

View File

@ -190,6 +190,9 @@ static void rawi2c_usage(void)
lprintf(LOG_NOTICE, " chan=0 is default, bus= must be specified to use chan=");
}
#define BUS_KW "bus="
#define CHAN_KW "chan="
int
ipmi_rawi2c_main(struct ipmi_intf * intf, int argc, char ** argv)
{
@ -203,20 +206,20 @@ ipmi_rawi2c_main(struct ipmi_intf * intf, int argc, char ** argv)
int i = 0;
/* handle bus= argument */
if (argc > 2 && !strcmp(argv[0], "bus=")) {
if (argc > 2 && !strncmp(argv[0], BUS_KW, strlen(BUS_KW))) {
i = 1;
if (!strcmp(argv[0], "bus=public"))
if (!strcmp(argv[0], BUS_KW "public"))
bus = 0;
else if (sscanf(argv[0], "bus=%u", &rbus) == 1)
else if (sscanf(argv[0], BUS_KW "%u", &rbus) == 1)
bus = ((rbus & 7) << 1) | 1;
else
bus = 0;
/* handle channel= argument
* the bus= argument must be supplied first on command line */
if (argc > 3 && !strcmp(argv[1], "chan=")) {
if (argc > 3 && !strncmp(argv[1], CHAN_KW, strlen(CHAN_KW))) {
i = 2;
if (sscanf(argv[1], "chan=%u", &rbus) == 1)
if (sscanf(argv[1], CHAN_KW "%u", &rbus) == 1)
bus |= rbus << 4;
}
}

View File

@ -1908,6 +1908,9 @@ int
ipmi_sol_main(struct ipmi_intf * intf, int argc, char ** argv)
{
int retval = 0;
const char *instance_kw = "instance=";
size_t instance_len = strlen(instance_kw);
if (!argc || !strcmp(argv[0], "help")) {
/* Help */
print_sol_usage();
@ -1991,7 +1994,7 @@ ipmi_sol_main(struct ipmi_intf * intf, int argc, char ** argv)
_use_sol_for_keepalive = 1;
} else if (!strcmp(argv[i], "nokeepalive")) {
_disable_keepalive = 1;
} else if (!strcmp(argv[i], "instance=")) {
} else if (!strncmp(argv[i], instance_kw, instance_len)) {
if (str2uchar(argv[i] + 9, &instance) != 0) {
lprintf(LOG_ERR, "Given instance '%s' is invalid.", argv[i] + 9);
print_sol_usage();
@ -2008,7 +2011,7 @@ ipmi_sol_main(struct ipmi_intf * intf, int argc, char ** argv)
int i;
uint8_t instance = 1;
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "instance=")) {
if (!strncmp(argv[i], instance_kw, instance_len)) {
if (str2uchar(argv[i] + 9, &instance) != 0) {
lprintf(LOG_ERR,
"Given instance '%s' is invalid.",