]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
No need for mk_local_addr, can pass the sockaddr structure.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 9 Dec 2020 10:56:35 +0000 (11:56 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 9 Dec 2020 10:56:35 +0000 (11:56 +0100)
config.h.in
configure
configure.ac
daemon/worker.c
util/net_help.c
util/net_help.h
util/netevent.c

index 98b5f067be7122db943d991dc0b37f8e49aa669f..f993b81b021a6c7ba9a90821ae91be85486c53f9 100644 (file)
 /* Define to 1 if `ipi_spec_dst' is a member of `struct in_pktinfo'. */
 #undef HAVE_STRUCT_IN_PKTINFO_IPI_SPEC_DST
 
-/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */
-#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
-
 /* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
 #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
 
index c053ab92039ca7f23ab96c21c55b12968516f774..00d36a361672b4f793a1fbabc2fd6ad0f9b109d4 100755 (executable)
--- a/configure
+++ b/configure
@@ -20149,50 +20149,6 @@ $as_echo "no" >&6; }
 
 fi
 
-fi
-
-ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_len" "ac_cv_member_struct_sockaddr_in6_sin6_len" "
-$ac_includes_default
-#if HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-
-"
-if test "x$ac_cv_member_struct_sockaddr_in6_sin6_len" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1
-_ACEOF
-
-
 fi
 
 ac_fn_c_check_member "$LINENO" "struct sockaddr_un" "sun_len" "ac_cv_member_struct_sockaddr_un_sun_len" "
index fa55366871e5a6705bc77330e48295bd4ad23be0..d648f55ad5701fbedd6f03e4f633a63937a0dd2f 100644 (file)
@@ -1533,40 +1533,6 @@ if test $ac_cv_func_daemon = yes; then
 ])
 fi
 
-AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_len],,,[
-AC_INCLUDES_DEFAULT
-#if HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_NETINET_TCP_H
-#include <netinet/tcp.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-
-#ifdef HAVE_WS2TCPIP_H
-#include <ws2tcpip.h>
-#endif
-])
 AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
 AC_INCLUDES_DEFAULT
 #ifdef HAVE_SYS_UN_H
index 36d4208f1b21ed4f351cef9b8eaffca7d285d131..7134d3914a210ccab5f0682aef9cbe86cb03c853 100644 (file)
@@ -1163,16 +1163,9 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
         * sending src (client)/dst (local service) addresses over DNSTAP from incoming request handler
         */
        if(worker->dtenv.log_client_query_messages) {
-               struct sockaddr_storage* dst_addr;
-               if(repinfo->addr.ss_family == AF_INET)
-                       dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-               else
-                       dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
                log_addr(VERB_ALGO, "request from client", &repinfo->addr, repinfo->addrlen);
-               log_addr(VERB_ALGO, "to local addr", dst_addr, sizeof(dst_addr));
-               dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer);
-               if(dst_addr)
-                       free(dst_addr);
+               log_addr(VERB_ALGO, "to local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
+               dt_msg_send_client_query(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer);
        }
 #endif
        acladdr = acl_addr_lookup(worker->daemon->acl, &repinfo->addr, 
@@ -1600,16 +1593,9 @@ send_reply_rc:
         * sending src (client)/dst (local service) addresses over DNSTAP from send_reply code label (when we serviced local zone for ex.)
         */
        if(worker->dtenv.log_client_response_messages) {
-               struct sockaddr_storage* dst_addr;
-                if(repinfo->addr.ss_family == AF_INET)
-                       dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-                else
-                       dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-               log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr));
+               log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
                 log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen);
-               dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, dst_addr, c->type, c->buffer);
-               if(dst_addr)
-                       free(dst_addr);
+               dt_msg_send_client_response(&worker->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, c->type, c->buffer);
        }
 #endif
        if(worker->env.cfg->log_replies)
index 9a94556d4891281501abf150604bf21f6b94df4c..557fc127d27110a95dce91e4fd752416f86a416b 100644 (file)
@@ -1610,40 +1610,3 @@ sock_close(int socket)
        closesocket(socket);
 }
 #  endif /* USE_WINSOCK */
-
-
-struct sockaddr_storage*
-mk_local_addr(void* addr, u_short port, u_char family)
-{
-       struct sockaddr_storage* dst_addr = malloc(sizeof(struct sockaddr_storage));
-       if(!dst_addr) {
-               log_err("malloc failure");
-               return NULL;
-       }
-       if(family == AF_INET) {
-               struct in_addr* v4addr = (struct in_addr*)addr;
-               struct sockaddr_in sin;
-               memset(&sin, 0, sizeof(sin));
-               sin.sin_family = AF_INET;
-               sin.sin_addr = *v4addr;
-               sin.sin_port = port;
-               memcpy(dst_addr, &sin, sizeof(sin));
-       } else if(family == AF_INET6) {
-               struct in6_addr* v6addr = (struct in6_addr*)addr;
-               struct sockaddr_in6 sin6;
-               memset(&sin6, 0, sizeof(sin6));
-#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
-               sin6.sin6_len = sizeof(sin6);
-#endif
-               sin6.sin6_family = AF_INET6;
-               sin6.sin6_addr = *v6addr;
-               sin6.sin6_port = port;
-               sin6.sin6_flowinfo = 0;
-               memcpy(dst_addr, &sin6, sizeof(sin6));
-       } else {
-               log_err("unknown inet address family");
-               free(dst_addr);
-               return NULL;
-       }
-       return dst_addr;
-}
index d89319c0a981afa9d022342dea575daa972f6509..45b607a430d5a3893054a1cd6c8e8426ff92f115 100644 (file)
@@ -502,14 +502,4 @@ char* sock_strerror(int errn);
 /** close the socket with close, or wsa closesocket */
 void sock_close(int socket);
 
-/**
- * Make and fill a stucture of sockaddr_storage* (malloced) type
- * Note: currently it needed to form local address used by dnstap functions only
- * @param addr: this is in_addr or in6_addr internet address structure
- * @param port: TCP/UDP port
- * @param family: Internet address family
- * @return: pointer to created sockaddr_storage structure or NULL on error
- */
-struct sockaddr_storage* mk_local_addr(void* addr, u_short port, u_char family);
-
 #endif /* NET_HELP_H */
index 962f389b442a63dc4778aca8fa5909149f6a726d..37e6ac4f2bfae27759df3a74398f8820fdfc791a 100644 (file)
@@ -3948,16 +3948,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
                 * sending src (client)/dst (local service) addresses over DNSTAP from udp callback
                 */
                if(repinfo->c->dtenv != NULL && repinfo->c->dtenv->log_client_response_messages) {
-                       struct sockaddr_storage* dst_addr;
-                       if(repinfo->addr.ss_family == AF_INET)
-                               dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-                       else
-                               dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-                       log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr));
+                       log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
                        log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen);
-                       dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, dst_addr, repinfo->c->type, repinfo->c->buffer);
-                       if(dst_addr)
-                               free(dst_addr);
+                       dt_msg_send_client_response(repinfo->c->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type, repinfo->c->buffer);
                }
 #endif
        } else {
@@ -3966,17 +3959,10 @@ comm_point_send_reply(struct comm_reply *repinfo)
                 * sending src (client)/dst (local service) addresses over DNSTAP from TCP callback
                 */
                if(repinfo->c->tcp_parent->dtenv != NULL && repinfo->c->tcp_parent->dtenv->log_client_response_messages) {
-                       struct sockaddr_storage* dst_addr;
-                       if(repinfo->addr.ss_family == AF_INET)
-                               dst_addr = mk_local_addr(&((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-                       else
-                               dst_addr = mk_local_addr(&((struct sockaddr_in6*)repinfo->c->socket->addr->ai_addr)->sin6_addr, ((struct sockaddr_in*)repinfo->c->socket->addr->ai_addr)->sin_port, repinfo->addr.ss_family);
-                       log_addr(VERB_ALGO, "from local addr", dst_addr, sizeof(dst_addr));
+                       log_addr(VERB_ALGO, "from local addr", (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->socket->addr->ai_addrlen);
                        log_addr(VERB_ALGO, "response to client", &repinfo->addr, repinfo->addrlen);
-                       dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, dst_addr, repinfo->c->type,
+                       dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv, &repinfo->addr, (void*)repinfo->c->socket->addr->ai_addr, repinfo->c->type,
                                ( repinfo->c->tcp_req_info? repinfo->c->tcp_req_info->spool_buffer: repinfo->c->buffer ));
-                       if(dst_addr)
-                               free(dst_addr);
                }
 #endif
                if(repinfo->c->tcp_req_info) {