diff options
author | Alexander Amelkin <alexander@amelkin.msk.ru> | 2020-07-28 19:38:03 +0300 |
---|---|---|
committer | Alexander Amelkin <alexander@amelkin.msk.ru> | 2020-08-05 12:13:12 +0300 |
commit | 60487f1a0e3cc280c185af012cef33b9badf1016 (patch) | |
tree | 81d225a922a73d0f6a31241c8de82052bfe376cc | |
parent | aee377beadba6df6309fe572cf671543b22950d5 (diff) | |
download | ipmitool-bugfix/223-chassis-bootdev-options.tar.gz |
Refix 6e037d6bfbbb93b349c8ca331ebde03a837f76bfbugfix/223-chassis-bootdev-options
Restore using strncmp() for "options=" and similar
substrings.
Resolves ipmitool/ipmitool#223
Signed-off-by: Alexander Amelkin <alexander@amelkin.msk.ru>
-rw-r--r-- | lib/ipmi_chassis.c | 5 | ||||
-rw-r--r-- | lib/ipmi_raw.c | 13 | ||||
-rw-r--r-- | lib/ipmi_sol.c | 7 |
3 files changed, 16 insertions, 9 deletions
diff --git a/lib/ipmi_chassis.c b/lib/ipmi_chassis.c index 9bccd95..e8170e2 100644 --- a/lib/ipmi_chassis.c +++ b/lib/ipmi_chassis.c @@ -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); } } diff --git a/lib/ipmi_raw.c b/lib/ipmi_raw.c index 4f79436..a8a42a0 100644 --- a/lib/ipmi_raw.c +++ b/lib/ipmi_raw.c @@ -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; } } diff --git a/lib/ipmi_sol.c b/lib/ipmi_sol.c index aaa0ad6..8e7285c 100644 --- a/lib/ipmi_sol.c +++ b/lib/ipmi_sol.c @@ -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.", |