summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Amelkin <alexander@amelkin.msk.ru>2020-07-28 19:38:03 +0300
committerAlexander Amelkin <alexander@amelkin.msk.ru>2020-08-05 12:13:12 +0300
commit60487f1a0e3cc280c185af012cef33b9badf1016 (patch)
tree81d225a922a73d0f6a31241c8de82052bfe376cc
parentaee377beadba6df6309fe572cf671543b22950d5 (diff)
downloadipmitool-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.c5
-rw-r--r--lib/ipmi_raw.c13
-rw-r--r--lib/ipmi_sol.c7
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.",