From 46919561adf6719328980ea0a3fe6c58a53fb1a1 Mon Sep 17 00:00:00 2001 From: faraphel Date: Tue, 12 Nov 2024 21:43:31 +0100 Subject: [PATCH] fixed missing interface / scope_id copy. --- CMakeLists.txt | 2 +- socket.c | 1 + util.c | 5 +++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 004e515..c2a0835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(CHRONYVARDIR "/var/lib/chrony") set(DESTDIR "") # Compiler and flags -set(CMAKE_C_FLAGS "-O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread") +set(CMAKE_C_FLAGS "-g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread") set(CMAKE_EXE_LINKER_FLAGS "-pie -Wl,-z,relro,-z,now") # Targets diff --git a/socket.c b/socket.c index 5b22db5..2e2889d 100644 --- a/socket.c +++ b/socket.c @@ -1785,6 +1785,7 @@ SCK_IPSockAddrToSockaddr(IPSockAddr *ip_sa, struct sockaddr *sa, int sa_length) return 0; memset(sa, 0, sizeof (struct sockaddr_in6)); sa->sa_family = AF_INET6; + ((struct sockaddr_in6 *)sa)->sin6_scope_id = ip_sa->ip_addr.interface; memcpy(&((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr, ip_sa->ip_addr.addr.in6, sizeof (((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr)); ((struct sockaddr_in6 *)sa)->sin6_port = htons(ip_sa->port); diff --git a/util.c b/util.c index c29a63f..da31526 100644 --- a/util.c +++ b/util.c @@ -305,7 +305,7 @@ UTI_IPToString(const IPAddr *addr) break; case IPADDR_INET6: ip6 = addr->addr.in6; - uint32_t interface = addr->interface; + uint16_t interface = addr->interface; #ifdef FEAT_IPV6 // compose the IPv6 inet_ntop(AF_INET6, ip6, result, BUFFER_LENGTH); @@ -497,6 +497,7 @@ UTI_IPHostToNetwork(const IPAddr *src, IPAddr *dest) break; case IPADDR_INET6: memcpy(dest->addr.in6, src->addr.in6, sizeof (dest->addr.in6)); + dest->interface = src->interface; break; case IPADDR_ID: dest->addr.id = htonl(src->addr.id); @@ -512,7 +513,7 @@ void UTI_IPNetworkToHost(const IPAddr *src, IPAddr *dest) { dest->family = ntohs(src->family); - dest->interface = 0; + dest->interface = src->interface; switch (dest->family) { case IPADDR_INET4: