diff options
author | Tom Gundersen <teg@jklm.no> | 2016-05-20 17:27:58 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2016-05-20 17:27:58 +0200 |
commit | 51e0b250779d28eaffff886b5a3cb208c6813a40 (patch) | |
tree | f3c6a9cae081c1d87a75f7144ecf2a26cb69297f /src/libsystemd-network/network-internal.c | |
parent | 4e282d11b7f4d08c85b8b80b055b3c92f6714ee1 (diff) | |
parent | 9ed8b06c9be4a5efae432d5cf4b1c47d03e6f107 (diff) |
Merge pull request #3235 from dkg/hwaddr-cleanup
minor improvements for dealing with MAC Addresses
Diffstat (limited to 'src/libsystemd-network/network-internal.c')
-rw-r--r-- | src/libsystemd-network/network-internal.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c index 2badcdff58..046b0f9393 100644 --- a/src/libsystemd-network/network-internal.c +++ b/src/libsystemd-network/network-internal.c @@ -27,6 +27,7 @@ #include "condition.h" #include "conf-parser.h" #include "dhcp-lease-internal.h" +#include "ether-addr-util.c" #include "hexdecoct.h" #include "log.h" #include "network-internal.h" @@ -272,6 +273,8 @@ int config_parse_hwaddr(const char *unit, void *userdata) { struct ether_addr **hwaddr = data; struct ether_addr *n; + const char *start; + size_t offset; int r; assert(filename); @@ -283,14 +286,10 @@ int config_parse_hwaddr(const char *unit, if (!n) return log_oom(); - r = sscanf(rvalue, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", - &n->ether_addr_octet[0], - &n->ether_addr_octet[1], - &n->ether_addr_octet[2], - &n->ether_addr_octet[3], - &n->ether_addr_octet[4], - &n->ether_addr_octet[5]); - if (r != 6) { + start = rvalue + strspn(rvalue, WHITESPACE); + r = ether_addr_from_string(start, n, &offset); + + if (r || (start[offset + strspn(start + offset, WHITESPACE)] != '\0')) { log_syntax(unit, LOG_ERR, filename, line, 0, "Not a valid MAC address, ignoring assignment: %s", rvalue); free(n); return 0; |