]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
kerberos: Use netlogon_pings()
authorVolker Lendecke <vl@samba.org>
Fri, 25 Oct 2024 15:38:04 +0000 (17:38 +0200)
committerVolker Lendecke <vl@samba.org>
Mon, 11 Nov 2024 14:03:04 +0000 (14:03 +0000)
This also makes sure we've got a KDC via DS_KDC_REQUIRED

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/libads/kerberos.c

index 291cb7b1e01fdba3579c9495b14d443c688c9e67..0e6fe838cceabef0de33bbfeba9b3111ade1fd59 100644 (file)
 #include "smb_krb5.h"
 #include "../librpc/gen_ndr/ndr_misc.h"
 #include "libads/kerberos_proto.h"
-#include "libads/cldap.h"
+#include "libads/netlogon_ping.h"
 #include "secrets.h"
 #include "../lib/tsocket/tsocket.h"
 #include "lib/util/asn1.h"
+#include "librpc/gen_ndr/netlogon.h"
 
 #ifdef HAVE_KRB5
 
@@ -437,7 +438,6 @@ static char *get_kdc_ip_string(char *mem_ctx,
        size_t num_dcs;
        struct sockaddr_storage *dc_addrs = NULL;
        struct tsocket_address **dc_addrs2 = NULL;
-       const struct tsocket_address * const *dc_addrs3 = NULL;
        char *result = NULL;
        struct netlogon_samlogon_response **responses = NULL;
        NTSTATUS status;
@@ -561,19 +561,25 @@ static char *get_kdc_ip_string(char *mem_ctx,
                }
        }
 
-       dc_addrs3 = (const struct tsocket_address * const *)dc_addrs2;
-
-       status = cldap_multi_netlogon(talloc_tos(),
-                       dc_addrs3, num_dcs,
-                       realm, lp_netbios_name(),
-                       NETLOGON_NT_VERSION_5 | NETLOGON_NT_VERSION_5EX,
-                       MIN(num_dcs, 3), timeval_current_ofs(3, 0), &responses);
+       status = netlogon_pings(talloc_tos(), /* mem_ctx */
+                               lp_client_netlogon_ping_protocol(), /* proto */
+                               dc_addrs2, /* servers */
+                               num_dcs,   /* num_servers */
+                               (struct netlogon_ping_filter){
+                                       .ntversion = NETLOGON_NT_VERSION_5 |
+                                                    NETLOGON_NT_VERSION_5EX,
+                                       .domain = realm,
+                                       .hostname = lp_netbios_name(),
+                                       .acct_ctrl = -1,
+                                       .required_flags = DS_KDC_REQUIRED,
+                               },
+                               MIN(num_dcs, 3),           /* min_servers */
+                               timeval_current_ofs(3, 0), /* timeout */
+                               &responses);
        TALLOC_FREE(dc_addrs2);
-       dc_addrs3 = NULL;
 
        if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(10,("get_kdc_ip_string: cldap_multi_netlogon failed: "
-                         "%s\n", nt_errstr(status)));
+               DBG_DEBUG("netlogon_pings failed: %s\n", nt_errstr(status));
                goto out;
        }