From: Witold Kręcicki Date: Tue, 15 Jan 2019 10:01:13 +0000 (+0100) Subject: add isc_sockaddr_fromsockaddr function X-Git-Tag: v9.15.6~21^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5f8374400702fa4bff92e6a65ce383a8522e9d1;p=thirdparty%2Fbind9.git add isc_sockaddr_fromsockaddr function This converts from struct sockaddr to isc_sockaddr_t --- diff --git a/lib/isc/include/isc/sockaddr.h b/lib/isc/include/isc/sockaddr.h index 478e77c7278..1588ba9645e 100644 --- a/lib/isc/include/isc/sockaddr.h +++ b/lib/isc/include/isc/sockaddr.h @@ -230,6 +230,10 @@ isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path); * \li ISC_R_SUCCESS */ +isc_result_t +isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa); + + #define ISC_SOCKADDR_FORMATSIZE \ sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:XXX.XXX.XXX.XXX%SSSSSSSSSS#YYYYY") /*%< diff --git a/lib/isc/include/isc/socket.h b/lib/isc/include/isc/socket.h index 72913873384..8d0c621ddf1 100644 --- a/lib/isc/include/isc/socket.h +++ b/lib/isc/include/isc/socket.h @@ -524,7 +524,7 @@ isc_result_t isc_socket_filter(isc_socket_t *sock, const char *filter); /*%< * Inform the kernel that it should perform accept filtering. - * If filter is NULL the current filter will be removed.:w + * If filter is NULL the current filter will be removed. */ isc_result_t diff --git a/lib/isc/sockaddr.c b/lib/isc/sockaddr.c index 832be1c2ce0..19331281e75 100644 --- a/lib/isc/sockaddr.c +++ b/lib/isc/sockaddr.c @@ -472,3 +472,33 @@ isc_sockaddr_frompath(isc_sockaddr_t *sockaddr, const char *path) { return (ISC_R_NOTIMPLEMENTED); #endif } + +isc_result_t +isc_sockaddr_fromsockaddr(isc_sockaddr_t *isa, const struct sockaddr *sa) { + unsigned int length = 0; + + switch (sa->sa_family) { + case AF_INET: + length = sizeof(isa->type.sin); + break; + case AF_INET6: + length = sizeof(isa->type.sin6); + break; +#ifdef ISC_PLATFORM_HAVESYSUNH + case AF_UNIX: + length = sizeof(isa->type.sunix); + break; +#endif + default: + return (ISC_R_NOTIMPLEMENTED); + } + if (length == 0) { + return (ISC_R_NOTIMPLEMENTED); + } + + memset(isa, 0, sizeof(isc_sockaddr_t)); + memcpy(isa, sa, length); + isa->length = length; + + return (ISC_R_SUCCESS); +} diff --git a/lib/isc/win32/libisc.def.in b/lib/isc/win32/libisc.def.in index 182a0217050..6865f82f46e 100644 --- a/lib/isc/win32/libisc.def.in +++ b/lib/isc/win32/libisc.def.in @@ -507,6 +507,7 @@ isc_sockaddr_fromin isc_sockaddr_fromin6 isc_sockaddr_fromnetaddr isc_sockaddr_frompath +isc_sockaddr_fromsockaddr isc_sockaddr_getport isc_sockaddr_hash isc_sockaddr_isexperimental