mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-25 17:19:42 -05:00
No need for mk_local_addr, can pass the sockaddr structure.
This commit is contained in:
parent
9272725cdd
commit
6bf1293bcd
7 changed files with 8 additions and 164 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
44
configure
vendored
44
configure
vendored
|
|
@ -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" "
|
||||
|
|
|
|||
34
configure.ac
34
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 <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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue