smbd-server: Process ip add/drop events for options:dynamic only
authorVinit Agnihotri <vagnihotri@ddn.com>
Tue, 5 Mar 2024 11:03:25 +0000 (03:03 -0800)
committerMartin Schwenke <martins@samba.org>
Tue, 16 Apr 2024 23:51:45 +0000 (23:51 +0000)
Signed-off-by: Vinit Agnihotri <vagnihotri@ddn.com>
Reviewed-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/smbd/server.c

index e2d6c8c0be1802a59eb57ddac0922dbbac7022ce..c7d5dae44f01bc97981dc480ec5520d43ec3ec44 100644 (file)
@@ -1695,6 +1695,7 @@ static void smbd_addr_changed(struct tevent_req *req)
        struct sockaddr_storage addr;
        NTSTATUS status;
        uint32_t if_index;
+       bool match;
 
        status = addrchange_recv(req, &type, &addr, &if_index);
        TALLOC_FREE(req);
@@ -1705,6 +1706,16 @@ static void smbd_addr_changed(struct tevent_req *req)
                return;
        }
 
+       match = interface_ifindex_exists_with_options(if_index,
+                                                     IFACE_DYNAMIC_OPTION);
+       if (!match) {
+               DBG_NOTICE(
+                       "smbd: No interface present for if_index %u "
+                       "with dynamic option\n",
+                       if_index);
+               goto rearm;
+       }
+
        if (type == ADDRCHANGE_DEL) {
                char addrstr[INET6_ADDRSTRLEN];
 
@@ -1728,14 +1739,6 @@ static void smbd_addr_changed(struct tevent_req *req)
                           "on if_index %u\n",
                           addrstr, if_index);
 
-               if (!interface_ifindex_exists(if_index)) {
-                       DBG_NOTICE(
-                               "smbd: No interface present for if_index %u\n",
-                               if_index
-                               );
-                       goto rearm;
-               }
-
                if (!smbd_open_socket_for_ip(state->parent,
                                             state->ev,
                                             state->msg_ctx,