123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- 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>
- [vfazio: backport from upstream 26b088193a55624df4cbe2a0d33c7bba5bca108d]
- 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(-)
- diff --git a/include/ipmitool/ipmi_strings.h b/include/ipmitool/ipmi_strings.h
- index 17c37c6..d60179c 100644
- --- a/include/ipmitool/ipmi_strings.h
- +++ b/include/ipmitool/ipmi_strings.h
- @@ -55,7 +55,7 @@ extern const struct valstr ipmi_integrity_algorithms[];
- 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[];
- diff --git a/lib/ipmi_main.c b/lib/ipmi_main.c
- index a673a30..510bc2d 100644
- --- 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 &&
- diff --git a/lib/ipmi_strings.c b/lib/ipmi_strings.c
- index 26b359f..c8fc2d0 100644
- --- 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()
- --
- 2.25.1
|