]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/worker: compare udp src ports as well as addresses; cleanup
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Mon, 19 Mar 2018 14:59:02 +0000 (15:59 +0100)
committerPetr Špaček <petr.spacek@nic.cz>
Wed, 9 May 2018 16:55:53 +0000 (18:55 +0200)
daemon/worker.c
lib/utils.c

index 6e17eee395468f71e2e5d1f3603863cad66cd65e..f61c9b588b06d633c31e42dbf3f31ce4c4b1fd23 100644 (file)
@@ -1389,8 +1389,7 @@ static uv_handle_t *retransmit(struct qr_task *task)
                }
                struct sockaddr *addr = (struct sockaddr *)choice;
                struct session *session = ret->data;
-               assert (session->peer.ip.sa_family == AF_UNSPEC);
-               session->outgoing = true;
+               assert (session->peer.ip.sa_family == AF_UNSPEC && session->outgoing);
                memcpy(&session->peer, addr, sizeof(session->peer));
                if (qr_task_send(task, ret, (struct sockaddr *)choice,
                                 task->pktbuf) == 0) {
index 62c61e3b8050580e3ac932d40e340c48efac6c17..c52befb47af1ffaa6c2964c04bef7b854e462bcd 100644 (file)
@@ -379,6 +379,9 @@ int kr_sockaddr_cmp(const struct sockaddr *left, const struct sockaddr *right)
                if (left_in->sin_addr.s_addr != right_in->sin_addr.s_addr) {
                        return kr_error(EFAULT);
                }
+               if (left_in->sin_port != right_in->sin_port) {
+                       return kr_error(EFAULT);
+               }
        } else if (left->sa_family == AF_INET6) {
                struct sockaddr_in6 *left_in6 = (struct sockaddr_in6 *)left;
                struct sockaddr_in6 *right_in6 = (struct sockaddr_in6 *)right;
@@ -386,6 +389,9 @@ int kr_sockaddr_cmp(const struct sockaddr *left, const struct sockaddr *right)
                           sizeof(struct in6_addr)) != 0) {
                        return kr_error(EFAULT);
                }
+               if (left_in6->sin6_port != right_in6->sin6_port) {
+                       return kr_error(EFAULT);
+               }
        } else {
                return kr_error(ENOENT);
        }