--- ./lib/uuid/gen_uuid.c.orig 2012-03-18 19:18:33.000000000 +0100 +++ ./lib/uuid/gen_uuid.c 2012-04-01 17:15:49.000000000 +0200 @@ -91,6 +91,7 @@ #ifdef HAVE_SYS_RESOURCE_H #include #endif +#include #include "uuidP.h" #include "uuidd.h" @@ -297,6 +298,28 @@ } } close(sd); +#else + struct ifaddrs *ifaddrsp, *ifaddrp; + unsigned char *a; + + if (getifaddrs(&ifaddrsp) < 0) + return -1; + for (ifaddrp = ifaddrsp; ifaddrp != NULL; ifaddrp = ifaddrp->ifa_next) + { + if (ifaddrp->ifa_addr == NULL) + continue; + if (ifaddrp->ifa_addr->sa_family != AF_LINK) + continue; + a = LLADDR((struct sockaddr_dl *)ifaddrp->ifa_addr); + if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5]) + continue; + if (node_id) { + memcpy(node_id, a, 6); + freeifaddrs(ifaddrsp); + return 1; + } + } + freeifaddrs(ifaddrsp); #endif return 0; }