fixed missing interface / scope_id copy.

This commit is contained in:
faraphel 2024-11-12 21:43:31 +01:00
parent b814b7cef3
commit 46919561ad
3 changed files with 5 additions and 3 deletions

View file

@ -10,7 +10,7 @@ set(CHRONYVARDIR "/var/lib/chrony")
set(DESTDIR "") set(DESTDIR "")
# Compiler and flags # 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") set(CMAKE_EXE_LINKER_FLAGS "-pie -Wl,-z,relro,-z,now")
# Targets # Targets

View file

@ -1785,6 +1785,7 @@ SCK_IPSockAddrToSockaddr(IPSockAddr *ip_sa, struct sockaddr *sa, int sa_length)
return 0; return 0;
memset(sa, 0, sizeof (struct sockaddr_in6)); memset(sa, 0, sizeof (struct sockaddr_in6));
sa->sa_family = AF_INET6; 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, memcpy(&((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr, ip_sa->ip_addr.addr.in6,
sizeof (((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr)); sizeof (((struct sockaddr_in6 *)sa)->sin6_addr.s6_addr));
((struct sockaddr_in6 *)sa)->sin6_port = htons(ip_sa->port); ((struct sockaddr_in6 *)sa)->sin6_port = htons(ip_sa->port);

5
util.c
View file

@ -305,7 +305,7 @@ UTI_IPToString(const IPAddr *addr)
break; break;
case IPADDR_INET6: case IPADDR_INET6:
ip6 = addr->addr.in6; ip6 = addr->addr.in6;
uint32_t interface = addr->interface; uint16_t interface = addr->interface;
#ifdef FEAT_IPV6 #ifdef FEAT_IPV6
// compose the IPv6 // compose the IPv6
inet_ntop(AF_INET6, ip6, result, BUFFER_LENGTH); inet_ntop(AF_INET6, ip6, result, BUFFER_LENGTH);
@ -497,6 +497,7 @@ UTI_IPHostToNetwork(const IPAddr *src, IPAddr *dest)
break; break;
case IPADDR_INET6: case IPADDR_INET6:
memcpy(dest->addr.in6, src->addr.in6, sizeof (dest->addr.in6)); memcpy(dest->addr.in6, src->addr.in6, sizeof (dest->addr.in6));
dest->interface = src->interface;
break; break;
case IPADDR_ID: case IPADDR_ID:
dest->addr.id = htonl(src->addr.id); dest->addr.id = htonl(src->addr.id);
@ -512,7 +513,7 @@ void
UTI_IPNetworkToHost(const IPAddr *src, IPAddr *dest) UTI_IPNetworkToHost(const IPAddr *src, IPAddr *dest)
{ {
dest->family = ntohs(src->family); dest->family = ntohs(src->family);
dest->interface = 0; dest->interface = src->interface;
switch (dest->family) { switch (dest->family) {
case IPADDR_INET4: case IPADDR_INET4: