]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libads: check for if DCs are in paused state when processing CLDAP replies
authorRalph Boehme <slow@samba.org>
Thu, 3 Jul 2025 10:50:53 +0000 (12:50 +0200)
committerJule Anger <janger@samba.org>
Thu, 7 Aug 2025 12:53:17 +0000 (12:53 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14981

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
(cherry picked from commit d3000d7df09de724694aa0682b9750b8c7767514)

source3/libads/netlogon_ping.c

index c94af8fbc57f2d529d8970b08b1abe36c8796e88..22f5a56b395bffff16962a3df21bf345cc7c6981 100644 (file)
@@ -787,23 +787,30 @@ static void netlogon_pings_done(struct tevent_req *subreq)
        state->num_received += 1;
 
        if (NT_STATUS_IS_OK(status)) {
+               enum netlogon_command cmd;
                uint32_t ret_flags;
-               bool ok;
+               bool ok = true;
 
                switch (response->ntver) {
                case NETLOGON_NT_VERSION_5EX:
                        ret_flags = response->data.nt5_ex.server_type;
+                       cmd = response->data.nt5_ex.command;
+                       ok &= !(cmd == LOGON_SAM_LOGON_PAUSE_RESPONSE ||
+                               cmd == LOGON_SAM_LOGON_PAUSE_RESPONSE_EX);
                        break;
                case NETLOGON_NT_VERSION_5:
                        ret_flags = response->data.nt5.server_type;
+                       cmd = response->data.nt5.command;
+                       ok &= !(cmd == LOGON_SAM_LOGON_PAUSE_RESPONSE ||
+                               cmd == LOGON_SAM_LOGON_PAUSE_RESPONSE_EX);
                        break;
                default:
                        ret_flags = 0;
                        break;
                }
 
-               ok = check_cldap_reply_required_flags(ret_flags,
-                                                     state->required_flags);
+               ok &= check_cldap_reply_required_flags(ret_flags,
+                                                      state->required_flags);
                if (ok) {
                        state->responses[i] = talloc_move(state->responses,
                                                          &response);