diff --git a/libenv/unix_iface.c b/libenv/unix_iface.c index 65e359921..905e13c84 100644 --- a/libenv/unix_iface.c +++ b/libenv/unix_iface.c @@ -147,7 +147,7 @@ static void GetMacAddress(EvalContext *ctx, ARG_UNUSED int fd, struct ifreq *ifr return; } -# if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR) +# if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_HWADDR) && !defined(__TERMUX__) char hw_mac[CF_MAXVARSIZE]; if ((ioctl(fd, SIOCGIFHWADDR, ifr) == -1)) @@ -173,9 +173,8 @@ static void GetMacAddress(EvalContext *ctx, ARG_UNUSED int fd, struct ifreq *ifr # elif defined(HAVE_GETIFADDRS) && !defined(__sun) char hw_mac[CF_MAXVARSIZE]; - char *m; struct ifaddrs *ifaddr, *ifa; - struct sockaddr_dl *sdl; + struct sockaddr_ll *sdl; if (getifaddrs(&ifaddr) == -1) { @@ -190,18 +189,16 @@ static void GetMacAddress(EvalContext *ctx, ARG_UNUSED int fd, struct ifreq *ifr { if ( strcmp(ifa->ifa_name, ifp->ifr_name) == 0) { - if (ifa->ifa_addr->sa_family == AF_LINK) + if (ifa->ifa_addr->sa_family == AF_PACKET) { - sdl = (struct sockaddr_dl *)ifa->ifa_addr; - m = (char *) LLADDR(sdl); - + sdl = (struct sockaddr_ll*)ifa->ifa_addr; snprintf(hw_mac, sizeof(hw_mac), "%.2x:%.2x:%.2x:%.2x:%.2x:%.2x", - (unsigned char) m[0], - (unsigned char) m[1], - (unsigned char) m[2], - (unsigned char) m[3], - (unsigned char) m[4], - (unsigned char) m[5]); + sdl->sll_addr[0], + sdl->sll_addr[1], + sdl->sll_addr[2], + sdl->sll_addr[3], + sdl->sll_addr[4], + sdl->sll_addr[5]); EvalContextVariablePutSpecial(ctx, SPECIAL_SCOPE_SYS, name, hw_mac, CF_DATA_TYPE_STRING, "source=agent"); RlistAppend(hardware, hw_mac, RVAL_TYPE_SCALAR);