Mercurial > illumos > git > illumos-joyent
changeset 25234:75715aa4fe66
11911 Inconsistent case handling for properties in dladm
Reviewed by: Andrew Stormont <astormont@racktopsystems.com>
Reviewed by: Albert Lee <alee@racktopsystems.com>
Reviewed by: Paul Winder <paul@winder.uk.net>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Robert Mustacchi <rm@fingolfin.org>
author | Garrett D'Amore <garrett@damore.org> |
---|---|
date | Fri, 01 Nov 2019 12:39:34 -0700 |
parents | bf151a4cdf4e |
children | cb6c7dac98cb |
files | usr/src/lib/libdladm/common/linkprop.c |
diffstat | 1 files changed, 26 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/libdladm/common/linkprop.c Mon Apr 13 20:00:45 2020 +0300 +++ b/usr/src/lib/libdladm/common/linkprop.c Fri Nov 01 12:39:34 2019 -0700 @@ -1107,6 +1107,21 @@ } /* + * For well-known property names, normalize the case. We can also + * save the property name itself, so that we can just do a pointer + * equality test later and avoid an extra strcmp. + */ + if (prop_name != NULL) { + int i; + for (i = 0; i < DLADM_MAX_PROPS; i++) { + if (strcasecmp(prop_name, prop_table[i].pd_name) == 0) { + prop_name = prop_table[i].pd_name; + break; + } + } + } + + /* * Check for valid link property against the flags passed * and set the link property when active flag is passed. */ @@ -1136,7 +1151,7 @@ if (!(pdp->pd_flags & PD_AFTER_PERM)) continue; if (prop_name != NULL && - strcasecmp(prop_name, pdp->pd_name) != 0) + prop_name != pdp->pd_name) continue; status = pdp->pd_set(handle, pdp, linkid, NULL, 0, flags, 0); @@ -1216,9 +1231,12 @@ prop_val == NULL || val_cntp == NULL || *val_cntp == 0) return (DLADM_STATUS_BADARG); - for (i = 0; i < DLADM_MAX_PROPS; i++) - if (strcasecmp(prop_name, prop_table[i].pd_name) == 0) + for (i = 0; i < DLADM_MAX_PROPS; i++) { + if (strcasecmp(prop_name, prop_table[i].pd_name) == 0) { + prop_name = prop_table[i].pd_name; break; + } + } if (i == DLADM_MAX_PROPS) { if (prop_name[0] == '_') { @@ -1348,9 +1366,12 @@ ret_val == NULL || val_cntp == NULL || *val_cntp == 0) return (DLADM_STATUS_BADARG); - for (pdp = prop_table; pdp < prop_table + DLADM_MAX_PROPS; pdp++) - if (strcasecmp(prop_name, pdp->pd_name) == 0) + for (pdp = prop_table; pdp < prop_table + DLADM_MAX_PROPS; pdp++) { + if (strcasecmp(prop_name, pdp->pd_name) == 0) { + prop_name = pdp->pd_name; break; + } + } if (pdp == prop_table + DLADM_MAX_PROPS) return (DLADM_STATUS_NOTFOUND);