From patchwork Thu Apr 16 18:00:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Daniel M. Weeks" X-Patchwork-Id: 1271847 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4936fG6nDLz9sWf for ; Fri, 17 Apr 2020 04:08:22 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=rpi.edu Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 4936fG4cn7zDr8V for ; Fri, 17 Apr 2020 04:08:22 +1000 (AEST) X-Original-To: petitboot@lists.ozlabs.org Delivered-To: petitboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=rpi.edu (client-ip=128.113.2.230; helo=smtp10.server.rpi.edu; envelope-from=weeksd2@rpi.edu; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=rpi.edu Received: from smtp10.server.rpi.edu (smtp10.server.rpi.edu [128.113.2.230]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4936Tb5FxFzDrdD for ; Fri, 17 Apr 2020 04:00:50 +1000 (AEST) Received: from smtp-auth3.server.rpi.edu (route.canit.rpi.edu [128.113.2.233]) by smtp10.server.rpi.edu (8.14.4/8.14.4/Debian-8+deb8u2) with ESMTP id 03GI0iwA097130 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 16 Apr 2020 14:00:44 -0400 Received: from smtp-auth3.server.rpi.edu (localhost [127.0.0.1]) by smtp-auth3.server.rpi.edu (Postfix) with ESMTP id 2B113580D3 for ; Thu, 16 Apr 2020 14:00:44 -0400 (EDT) Received: from dev.danweeks.net (cpe-74-70-107-6.nycap.res.rr.com [74.70.107.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: weeksd2) by smtp-auth3.server.rpi.edu (Postfix) with ESMTPSA id 0CB78580D2 for ; Thu, 16 Apr 2020 14:00:44 -0400 (EDT) Date: Thu, 16 Apr 2020 14:00:42 -0400 From: "Daniel M. Weeks" To: petitboot@lists.ozlabs.org Subject: [PATCH 10/11] Parse GUIDs in DHCP user events Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Virus-Scanned: ClamAV using ClamSMTP X-Bayes-Prob: 0.0001 (Score 0, tokens from: outgoing, @@RPTN) X-Spam-Score: 0.00 () [Hold at 10.10] X-CanIt-Incident-Id: 032ru0IL1 X-CanIt-Geo: ip=74.70.107.6; country=US; region=New York; city=Troy; latitude=42.7273; longitude=-73.6696; http://maps.google.com/maps?q=42.7273,-73.6696&z=6 X-CanItPRO-Stream: outgoing X-Canit-Stats-ID: Bayes signature not available X-Scanned-By: CanIt (www . roaringpenguin . com) on 128.113.2.230 X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" Use new, common functions to preprocess and transform hardware addresses to strip any non-local address information. Signed-off-by: Daniel M. Weeks --- 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 #include +#include #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);