blob: d3f5e507357b93b98b87acea91040c046b708537 [file] [log] [blame]
diff -rupN orig/uuid.c patched/uuid.c
--- orig/uuid.c 2008-03-07 11:49:59.000000000 +0100
+++ patched/uuid.c 2019-11-05 17:51:43.000000000 +0100
@@ -135,7 +135,7 @@ uuid_rc_t uuid_create(uuid_t **uuid)
/* resolve MAC address for insertion into node field of UUIDs */
if (!mac_address((unsigned char *)(obj->mac), sizeof(obj->mac))) {
memset(obj->mac, 0, sizeof(obj->mac));
- obj->mac[0] = BM_OCTET(1,0,0,0,0,0,0,0);
+ obj->mac[0] = IEEE_MAC_MCBIT;
}
/* initialize time attributes */
@@ -967,7 +967,7 @@ static uuid_rc_t uuid_make_v1(uuid_t *uu
* GENERATE NODE
*/
- if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & BM_OCTET(1,0,0,0,0,0,0,0))) {
+ if ((mode & UUID_MAKE_MC) || (uuid->mac[0] & IEEE_MAC_MCBIT)) {
/* generate random IEEE 802 local multicast MAC address */
if (prng_data(uuid->prng, (void *)&(uuid->obj.node), sizeof(uuid->obj.node)) != PRNG_RC_OK)
return UUID_RC_INT;
@@ -1214,4 +1214,3 @@ unsigned long uuid_version(void)
{
return (unsigned long)(_UUID_VERSION);
}
-
diff -rupN orig/uuid_mac.c patched/uuid_mac.c
--- orig/uuid_mac.c 2008-03-07 11:49:59.000000000 +0100
+++ patched/uuid_mac.c 2019-11-07 14:09:09.000000000 +0100
@@ -122,26 +122,40 @@ int mac_address(unsigned char *data_ptr,
}
#endif
-#if defined(HAVE_NET_IF_H) && defined(SIOCGIFHWADDR)
+#if defined(HAVE_NET_IF_H) && defined(SIOCGIFCONF) && defined(SIOCGIFHWADDR)
/* use SIOCGIFHWADDR ioctl(2) on Linux class platforms */
{
- struct ifreq ifr;
+ struct ifreq ifrs[16];
+ struct ifconf ifc;
struct sockaddr *sa;
int s;
- int i;
+ int i, j;
+ int empty;
if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
return FALSE;
- sprintf(ifr.ifr_name, "eth0");
- if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
+ ifc.ifc_len = sizeof(ifrs);
+ ifc.ifc_req = ifrs;
+ if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
close(s);
return FALSE;
}
- sa = (struct sockaddr *)&ifr.ifr_addr;
- for (i = 0; i < MAC_LEN; i++)
- data_ptr[i] = (unsigned char)(sa->sa_data[i] & 0xff);
+ for (i = 0; i < ifc.ifc_len / sizeof(ifrs[0]); i++) {
+ if (ioctl(s, SIOCGIFHWADDR, &ifrs[i]) < 0)
+ continue;
+ sa = (struct sockaddr *)&(ifrs[i].ifr_hwaddr);
+ empty = TRUE;
+ for (j = 0; j < MAC_LEN; j++) {
+ empty &= (sa->sa_data[j] & 0xff) == 0x00;
+ data_ptr[j] = (unsigned char)(sa->sa_data[j] & 0xff);
+ }
+ if (empty)
+ continue;
+ close(s);
+ return TRUE;
+ }
close(s);
- return TRUE;
+ return FALSE;
}
#endif
@@ -180,4 +194,3 @@ int mac_address(unsigned char *data_ptr,
return FALSE;
}
-