]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
add isc_sockaddr_fromsockaddr function
authorWitold Kręcicki <wpk@isc.org>
Tue, 15 Jan 2019 10:01:13 +0000 (11:01 +0100)
committerEvan Hunt <each@isc.org>
Thu, 7 Nov 2019 19:55:37 +0000 (11:55 -0800)
This converts from struct sockaddr to isc_sockaddr_t

lib/isc/include/isc/sockaddr.h
lib/isc/include/isc/socket.h
lib/isc/sockaddr.c
lib/isc/win32/libisc.def.in

index 478e77c727841018923da76b6e8eecdc74d41636..1588ba9645e57a9fcbbcda34b92e2783c056ee97 100644 (file)
@@ -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")
 /*%<
index 729138733847951508d93dd98fe32d6e1d3502ca..8d0c621ddf17af1a6374f65e4ef749c4aa3f5b8f 100644 (file)
@@ -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
index 832be1c2ce0e28811479ebe6c588c27b4cb38fbd..19331281e7515b3726816f3f4a1271fb058a3adb 100644 (file)
@@ -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);
+}
index 182a0217050f119df33c3faa72999695f1b0fa3f..6865f82f46e35515a6b4642c46f5fc6f5d3fdd98 100644 (file)
@@ -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