The original used uuid_parse() but that function did not
work properly since the format of the machine-id is
not compatable with a real uuid.  This patch adds a new
machine_id_parse() routine to correctly convert the
character string of hex digits to a 16 byte binary string.
Signed-off-by: Gene Czarcinski <g...@czarc.net>
---
 src/dhcp-manager/nm-dhcp-client.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/dhcp-manager/nm-dhcp-client.c 
b/src/dhcp-manager/nm-dhcp-client.c
index 2cdd304..a74f2ad 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -20,6 +20,7 @@
 #include <config.h>
 #include <glib.h>
 #include <string.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <errno.h>
@@ -323,6 +324,32 @@ nm_dhcp_client_start_ip4 (NMDHCPClient *self,
        return priv->pid ? TRUE : FALSE;
 }
 
+/* uuid_parse does not work for machine-id, so we use our own converter */
+static int
+machine_id_parse (const char *in, uuid_t uu)
+{
+       const char *cp;
+       int i;
+       unsigned char buf[3];
+
+       if (strlen(in) != 32)
+               return -1;
+       for (i = 0, cp = in; i < 32; i++, cp++)
+       {
+               if (!isxdigit(*cp))
+                       return -1;
+       }
+       buf[2] = 0;
+       cp = in;
+       for (i = 0; i < 16; i++)
+       {
+               buf[0] = *cp++;
+               buf[1] = *cp++;
+               uu[i] = strtoul (buf, NULL, 16);
+       }
+       return 0;
+}
+
 static GByteArray *
 generate_duid_from_machine_id (void)
 {
@@ -348,7 +375,8 @@ generate_duid_from_machine_id (void)
        }
 
        contents = g_strstrip (contents);
-       ret = uuid_parse (contents, uuid);
+       nm_log_dbg (LOGD_DHCP6, "/etc/machine-id len= %d, value= '%s'", 
strlen(contents), contents);
+       ret = machine_id_parse (contents, uuid);
        g_free (contents);
 
        if (ret != 0) {
-- 
1.8.1.2

_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to