mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 05:52:36 +02:00
util/nvmutil: use x, not ?, for random characters
A user reported that '?' causes an error on zsh. See: https://codeberg.org/libreboot/lbmk/issues/261 For example: ./mk inject libreboot-XXXXXX.tar.xz setmac ??:??:??:??:??:?? The user got: zsh: no matches found: ??:??:??:??:??:?? The mitigation here is to double-quote, e.g.: ./mk inject libreboot-XXXXXX.tar.xz setmac "??:??:??:??:??:??" However, a lot of people won't do that. Therefore, I will retain the current behaviour but support x/X for randomness. Now lbmk uses x by default, instead. I will now update the documentation, accordingly. Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+1
-1
@@ -328,7 +328,7 @@ inject()
|
|||||||
eval "`setvars "" nukemode new_mac xchanged`"
|
eval "`setvars "" nukemode new_mac xchanged`"
|
||||||
|
|
||||||
archive="$1";
|
archive="$1";
|
||||||
new_mac="??:??:??:??:??:??"
|
new_mac="xx:xx:xx:xx:xx:xx"
|
||||||
|
|
||||||
[ $# -gt 1 ] && case "$2" in
|
[ $# -gt 1 ] && case "$2" in
|
||||||
nuke)
|
nuke)
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ size_t partsize, gbe[2];
|
|||||||
uint8_t nvmPartChanged[2] = {0, 0}, do_read[2] = {1, 1};
|
uint8_t nvmPartChanged[2] = {0, 0}, do_read[2] = {1, 1};
|
||||||
int flags, rfd, fd, part;
|
int flags, rfd, fd, part;
|
||||||
|
|
||||||
const char *strMac = NULL, *strRMac = "??:??:??:??:??:??", *filename = NULL;
|
const char *strMac = NULL, *strRMac = "xx:xx:xx:xx:xx:xx", *filename = NULL;
|
||||||
|
|
||||||
typedef struct op {
|
typedef struct op {
|
||||||
char *str;
|
char *str;
|
||||||
@@ -278,8 +278,11 @@ parseMacString(const char *strMac, uint16_t *mac)
|
|||||||
err(errno = EINVAL, "Invalid character '%c'",
|
err(errno = EINVAL, "Invalid character '%c'",
|
||||||
strMac[i + nib]);
|
strMac[i + nib]);
|
||||||
|
|
||||||
|
/* If random, ensure that local/unicast bits are set */
|
||||||
if ((byte == 0) && (nib == 1))
|
if ((byte == 0) && (nib == 1))
|
||||||
if (strMac[i + nib] == '?') /* ?=random */
|
if ((strMac[i + nib] == '?') ||
|
||||||
|
(strMac[i + nib] == 'x') ||
|
||||||
|
(strMac[i + nib] == 'X')) /* random */
|
||||||
h = (h & 0xE) | 2; /* local, unicast */
|
h = (h & 0xE) | 2; /* local, unicast */
|
||||||
|
|
||||||
mac[byte >> 1] |= ((uint16_t ) h)
|
mac[byte >> 1] |= ((uint16_t ) h)
|
||||||
@@ -302,7 +305,10 @@ hextonum(char ch)
|
|||||||
return ch - 'A' + 10;
|
return ch - 'A' + 10;
|
||||||
else if ((ch >= 'a') && (ch <= 'f'))
|
else if ((ch >= 'a') && (ch <= 'f'))
|
||||||
return ch - 'a' + 10;
|
return ch - 'a' + 10;
|
||||||
return (ch == '?') ? rhex() : 16;
|
else if ((ch == '?') || (ch == 'x') || (ch == 'X'))
|
||||||
|
return rhex(); /* random hex value */
|
||||||
|
else
|
||||||
|
return 16; /* error: invalid character */
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
|
|||||||
Reference in New Issue
Block a user