You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
2.1 KiB

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);