Check for some required parameters in the 'dhcp' handler, and in the
'add' handler return an error if parse_user_event() fails rather than
charging ahead into a segfault.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
uint8_t hwaddr[MAC_ADDR_SIZE];
uint8_t hwaddr[MAC_ADDR_SIZE];
+ if (!event_get_param(event, "mac") || !event_get_param(event, "ip"))
+ return -1;
+
sscanf(event_get_param(event, "mac"),
"%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
hwaddr, hwaddr + 1, hwaddr + 2,
sscanf(event_get_param(event, "mac"),
"%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
hwaddr, hwaddr + 1, hwaddr + 2,
struct device_handler *handler = uev->handler;
struct discover_context *ctx;
struct discover_device *dev;
struct device_handler *handler = uev->handler;
struct discover_context *ctx;
struct discover_device *dev;
/* In case this is a network interface, try to refer to it by UUID */
dev = discover_device_create(handler, event_get_param(event, "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"),
dev->device->id = talloc_strdup(dev, event->device);
ctx = device_handler_discover_context_create(handler, dev);
dev->device->id = talloc_strdup(dev, event->device);
ctx = device_handler_discover_context_create(handler, dev);
- parse_user_event(ctx, event);
+ rc = parse_user_event(ctx, event);
+ if (rc) {
+ pb_log("parse_user_event returned %d\n", rc);
+ return rc;
+ }
device_handler_discover_context_commit(handler, ctx);
device_handler_discover_context_commit(handler, ctx);