From: W.C.A. Wijngaards Date: Wed, 9 Dec 2020 10:56:35 +0000 (+0100) Subject: No need for mk_local_addr, can pass the sockaddr structure. X-Git-Tag: release-1.13.2rc1~254^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6bf1293bcd7dec82dadeab00aaee559147be73f2;p=thirdparty%2Funbound.git No need for mk_local_addr, can pass the sockaddr structure. --- diff --git a/config.h.in b/config.h.in index 98b5f067b..f993b81b0 100644 --- a/config.h.in +++ b/config.h.in @@ -571,9 +571,6 @@ /* 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 diff --git a/configure b/configure index c053ab920..00d36a361 100755 --- 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 -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_SYS_UIO_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_NETINET_TCP_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_WINSOCK2_H -#include -#endif - -#ifdef HAVE_WS2TCPIP_H -#include -#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" " diff --git a/configure.ac b/configure.ac index fa5536687..d648f55ad 100644 --- a/configure.ac +++ b/configure.ac @@ -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 -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef HAVE_SYS_UIO_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_NETINET_TCP_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_WINSOCK2_H -#include -#endif - -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]) AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[ AC_INCLUDES_DEFAULT #ifdef HAVE_SYS_UN_H diff --git a/daemon/worker.c b/daemon/worker.c index 36d4208f1..7134d3914 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -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) diff --git a/util/net_help.c b/util/net_help.c index 9a94556d4..557fc127d 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -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; -} diff --git a/util/net_help.h b/util/net_help.h index d89319c0a..45b607a43 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -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 */ diff --git a/util/netevent.c b/util/netevent.c index 962f389b4..37e6ac4f2 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -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) {