]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Move isc_socket_getsockname() calls into dispatch
authorEvan Hunt <each@isc.org>
Mon, 4 Jan 2021 22:38:35 +0000 (14:38 -0800)
committerEvan Hunt <each@isc.org>
Sat, 2 Oct 2021 18:39:56 +0000 (11:39 -0700)
We now use dns_dispentry_getlocaladdress(). (this API is likely to be
cleaned up further later.)

lib/dns/dispatch.c
lib/dns/include/dns/dispatch.h
lib/dns/resolver.c

index 2f65f7d4c74767d2faecf6d69f5501b9deff8441..24cb01fe6af8b11ef4ab48047e712dbaf4050b60 100644 (file)
@@ -2678,6 +2678,23 @@ dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp) {
        return (ISC_R_NOTIMPLEMENTED);
 }
 
+isc_result_t
+dns_dispentry_getlocaladdress(dns_dispentry_t *resp, isc_sockaddr_t *addrp) {
+       REQUIRE(VALID_RESPONSE(resp));
+       REQUIRE(addrp != NULL);
+
+       if (resp->disp->socktype == isc_sockettype_tcp) {
+               return (isc_socket_getsockname(resp->disp->socket, addrp));
+       }
+
+       if (resp->dispsocket != NULL) {
+               return (isc_socket_getsockname(resp->dispsocket->socket,
+                                              addrp));
+       }
+
+       return (ISC_R_NOTIMPLEMENTED);
+}
+
 unsigned int
 dns_dispatch_getattributes(dns_dispatch_t *disp) {
        REQUIRE(VALID_DISPATCH(disp));
index 2854a7bcb6f42e0478a95729da79df5878dde109..7ce569111b1089235a879366ddf9fe38f6f2586b 100644 (file)
@@ -374,7 +374,21 @@ dns_dispatch_getlocaladdress(dns_dispatch_t *disp, isc_sockaddr_t *addrp);
  *
  * Requires:
  *\li  disp is valid.
- *\li  addrp to be non null.
+ *\li  addrp to be non NULL.
+ *
+ * Returns:
+ *\li  ISC_R_SUCCESS
+ *\li  ISC_R_NOTIMPLEMENTED
+ */
+
+isc_result_t
+dns_dispentry_getlocaladdress(dns_dispentry_t *resp, isc_sockaddr_t *addrp);
+/*%<
+ * Return the local address for this dispatch entry.
+ *
+ * Requires:
+ *\li  resp is valid.
+ *\li  addrp to be non NULL.
  *
  * Returns:
  *\li  ISC_R_SUCCESS
index 59079b0c5f0048980bbb5d60d6abe32f5f57c87f..c011dabae7c8498121d932d06d037dbfc8fcd0f5 100644 (file)
@@ -2370,7 +2370,7 @@ resquery_send(resquery_t *query) {
        isc_region_t r;
        dns_resolver_t *res = NULL;
        isc_task_t *task;
-       isc_socket_t *sock;
+       isc_socket_t *sock = NULL;
        isc_buffer_t tcpbuffer;
        isc_sockaddr_t *address = NULL;
        isc_buffer_t *buffer = NULL;
@@ -2849,7 +2849,7 @@ resquery_send(resquery_t *query) {
                dtmsgtype = DNS_DTTYPE_RQ;
        }
 
-       result = isc_socket_getsockname(sock, &localaddr);
+       result = dns_dispentry_getlocaladdress(query->dispentry, &localaddr);
        if (result == ISC_R_SUCCESS) {
                la = &localaddr;
        }
@@ -9801,7 +9801,6 @@ rctx_logpacket(respctx_t *rctx) {
 #ifdef HAVE_DNSTAP
        isc_result_t result;
        fetchctx_t *fctx = rctx->fctx;
-       isc_socket_t *sock = NULL;
        isc_sockaddr_t localaddr, *la = NULL;
        unsigned char zone[DNS_NAME_MAXWIRE];
        dns_dtmsgtype_t dtmsgtype;
@@ -9838,12 +9837,10 @@ rctx_logpacket(respctx_t *rctx) {
                dtmsgtype = DNS_DTTYPE_RR;
        }
 
-       sock = dns_dispatch_getentrysocket(rctx->query);
-       if (sock != NULL) {
-               result = isc_socket_getsockname(sock, &localaddr);
-               if (result == ISC_R_SUCCESS) {
-                       la = &localaddr;
-               }
+       result = dns_dispentry_getlocaladdress(rctx->query->dispentry,
+                                              &localaddr);
+       if (result == ISC_R_SUCCESS) {
+               la = &localaddr;
        }
 
        dns_dt_send(fctx->res->view, dtmsgtype, la,