[PATCH 10/11] Parse GUIDs in DHCP user events
Daniel M. Weeks
weeksd2 at rpi.edu
Fri Apr 17 04:00:42 AEST 2020
Use new, common functions to preprocess and transform hardware addresses
to strip any non-local address information.
Signed-off-by: Daniel M. Weeks <weeksd2 at rpi.edu>
---
discover/device-handler.c | 2 ++
discover/user-event.c | 25 +++++++++++++++----------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/discover/device-handler.c b/discover/device-handler.c
index 4dfe537..da65125 100644
--- a/discover/device-handler.c
+++ b/discover/device-handler.c
@@ -27,6 +27,7 @@
#include <netdb.h>
#include <arpa/inet.h>
+#include <util/util.h>
#include "device-handler.h"
#include "discover-server.h"
#include "devmapper.h"
@@ -1491,6 +1492,7 @@ static void process_url_cb(struct load_url_result *result, void *data)
}
mac = event_get_param(event, "mac");
+ mac = hwaddr_preprocess(mac, NULL);
char *url = talloc_asprintf(event, "file://%s", result->local);
event_set_param(event, "pxeconffile-local", url);
diff --git a/discover/user-event.c b/discover/user-event.c
index c1b1311..0263423 100644
--- a/discover/user-event.c
+++ b/discover/user-event.c
@@ -396,18 +396,20 @@ static int user_event_dhcp(struct user_event *uev, struct event *event)
{
struct device_handler *handler = uev->handler;
struct discover_device *dev;
+ const char *mac;
- uint8_t hwaddr[MAC_ADDR_SIZE];
+ uint8_t hwaddr[MAX_ADDR_SIZE];
+ size_t hwaddr_len;
- sscanf(event_get_param(event, "mac"),
- "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
- hwaddr, hwaddr + 1, hwaddr + 2,
- hwaddr + 3, hwaddr + 4, hwaddr + 5);
+ mac = event_get_param(event, "mac");
+ mac = hwaddr_preprocess(mac, &hwaddr_len);
+ if (hwaddr_from_pretty_str(mac, hwaddr_len, hwaddr, MAX_ADDR_SIZE) < 0)
+ return -1;
- system_info_set_interface_address(sizeof(hwaddr), hwaddr,
+ system_info_set_interface_address(hwaddr_len, hwaddr,
event_get_param(event, "ip"));
- dev = discover_device_create(handler, event_get_param(event, "mac"),
+ dev = discover_device_create(handler, mac,
event->device);
device_handler_dhcp(handler, dev, event);
@@ -420,10 +422,12 @@ static int user_event_add(struct user_event *uev, struct event *event)
struct device_handler *handler = uev->handler;
struct discover_context *ctx;
struct discover_device *dev;
+ const char *mac;
/* In case this is a network interface, try to refer to it by UUID */
- dev = discover_device_create(handler, event_get_param(event, "mac"),
- event->device);
+ mac = event_get_param(event, "mac");
+ mac = hwaddr_preprocess(mac, NULL);
+ dev = discover_device_create(handler, mac, event->device);
dev->device->id = talloc_strdup(dev, event->device);
ctx = device_handler_discover_context_create(handler, dev);
@@ -441,9 +445,10 @@ static int user_event_remove(struct user_event *uev, struct event *event)
struct device_handler *handler = uev->handler;
struct discover_device *dev;
const char *mac = event_get_param(event, "mac");
+ mac = hwaddr_preprocess(mac, NULL);
if (mac)
- dev = device_lookup_by_uuid(handler, event_get_param(event, "mac"));
+ dev = device_lookup_by_uuid(handler, mac);
else
dev = device_lookup_by_id(handler, event->device);
--
Daniel M. Weeks
--
Daniel M. Weeks
Lead HPC Developer
Center for Computational Innovations
Rensselaer Polytechnic Institute
Troy, NY 12180
518-276-4458
More information about the Petitboot
mailing list