mirror of
https://github.com/openwrt/packages.git
synced 2025-12-21 19:14:30 +04:00
ipmitool: do not require IANA PEN registry
Upstream backport Signed-off-by: Oliver Sedlbauer <osedlbauer@tdt.de>
This commit is contained in:
committed by
Robert Marko
parent
733425e1da
commit
8e8101438a
@@ -0,0 +1,103 @@
|
|||||||
|
From 26b088193a55624df4cbe2a0d33c7bba5bca108d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vincent Fazio <vfazio@gmail.com>
|
||||||
|
Date: Sat, 7 Jan 2023 21:02:48 -0600
|
||||||
|
Subject: [PATCH] Do not require the IANA PEN registry file
|
||||||
|
|
||||||
|
Previously, ipmitool would fail to run if the local copy of the IANA PEN
|
||||||
|
registry could not be parsed.
|
||||||
|
|
||||||
|
When the registry is not available the manufacturer will be "Unknown" but
|
||||||
|
ipmitool will otherwise function so should not be considered fatal.
|
||||||
|
|
||||||
|
Also, fix an issue with improperly handling the `oem_info_list_load`
|
||||||
|
return value. Previously, in `ipmi_oem_info_init`, if `oem_info_list_load`
|
||||||
|
returned a negative value due to the registry file not existing, an
|
||||||
|
improper count would cause `oem_info_init_from_list` to aallocate a list
|
||||||
|
that didn't encompass the full header/tail list.
|
||||||
|
|
||||||
|
IANA PEN registry open failed: No such file or directory
|
||||||
|
Allocating 3 entries
|
||||||
|
[ 1] 16777214 | A Debug Assisting Company, Ltd.
|
||||||
|
[ 0] 1048575 | Unspecified
|
||||||
|
|
||||||
|
Now, use a signed int and ensure a valid count of loaded OEMs is used.
|
||||||
|
|
||||||
|
Signed-off-by: Vincent Fazio <vfazio@gmail.com>
|
||||||
|
---
|
||||||
|
include/ipmitool/ipmi_strings.h | 2 +-
|
||||||
|
lib/ipmi_main.c | 5 +----
|
||||||
|
lib/ipmi_strings.c | 19 +++++--------------
|
||||||
|
3 files changed, 7 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
--- a/include/ipmitool/ipmi_strings.h
|
||||||
|
+++ b/include/ipmitool/ipmi_strings.h
|
||||||
|
@@ -55,7 +55,7 @@ extern const struct valstr ipmi_integrit
|
||||||
|
extern const struct valstr ipmi_encryption_algorithms[];
|
||||||
|
extern const struct valstr ipmi_user_enable_status_vals[];
|
||||||
|
extern const struct valstr *ipmi_oem_info;
|
||||||
|
-int ipmi_oem_info_init();
|
||||||
|
+void ipmi_oem_info_init();
|
||||||
|
void ipmi_oem_info_free();
|
||||||
|
|
||||||
|
extern const struct valstr picmg_frucontrol_vals[];
|
||||||
|
--- a/lib/ipmi_main.c
|
||||||
|
+++ b/lib/ipmi_main.c
|
||||||
|
@@ -853,10 +853,7 @@ ipmi_main(int argc, char ** argv,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* load the IANA PEN registry */
|
||||||
|
- if (ipmi_oem_info_init()) {
|
||||||
|
- lprintf(LOG_ERR, "Failed to initialize the OEM info dictionary");
|
||||||
|
- goto out_free;
|
||||||
|
- }
|
||||||
|
+ ipmi_oem_info_init();
|
||||||
|
|
||||||
|
/* run OEM setup if found */
|
||||||
|
if (oemtype &&
|
||||||
|
--- a/lib/ipmi_strings.c
|
||||||
|
+++ b/lib/ipmi_strings.c
|
||||||
|
@@ -1719,39 +1719,30 @@ out:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int ipmi_oem_info_init()
|
||||||
|
+void ipmi_oem_info_init()
|
||||||
|
{
|
||||||
|
oem_valstr_list_t terminator = { { -1, NULL}, NULL }; /* Terminator */
|
||||||
|
oem_valstr_list_t *oemlist = &terminator;
|
||||||
|
bool free_strings = true;
|
||||||
|
- size_t count;
|
||||||
|
- int rc = -4;
|
||||||
|
+ int count;
|
||||||
|
|
||||||
|
lprintf(LOG_INFO, "Loading IANA PEN Registry...");
|
||||||
|
|
||||||
|
if (ipmi_oem_info) {
|
||||||
|
lprintf(LOG_INFO, "IANA PEN Registry is already loaded");
|
||||||
|
- rc = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!(count = oem_info_list_load(&oemlist))) {
|
||||||
|
- /*
|
||||||
|
- * We can't identify OEMs without a loaded registry.
|
||||||
|
- * Set the pointer to dummy and return.
|
||||||
|
- */
|
||||||
|
- ipmi_oem_info = ipmi_oem_info_dummy;
|
||||||
|
- goto out;
|
||||||
|
+ if ((count = oem_info_list_load(&oemlist)) < 1) {
|
||||||
|
+ lprintf(LOG_WARN, "Failed to load entries from IANA PEN Registry");
|
||||||
|
+ count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* In the array was allocated, don't free the strings at cleanup */
|
||||||
|
free_strings = !oem_info_init_from_list(oemlist, count);
|
||||||
|
|
||||||
|
- rc = IPMI_CC_OK;
|
||||||
|
-
|
||||||
|
out:
|
||||||
|
oem_info_list_free(&oemlist, free_strings);
|
||||||
|
- return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ipmi_oem_info_free()
|
||||||
Reference in New Issue
Block a user