From: Volker Lendecke Date: Mon, 28 Oct 2024 14:01:57 +0000 (+0100) Subject: libads: Move check_cldap_reply_required_flags() to netlogon_ping.c X-Git-Tag: tdb-1.4.13~586 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eb8767a076e38d35ea5cb8b8d11f0af1ba0d6518;p=thirdparty%2Fsamba.git libads: Move check_cldap_reply_required_flags() to netlogon_ping.c netlogon_ping.c depends on it but itself has fewer dependencies than cldap.c, so we can use it in more places Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- diff --git a/source3/libads/cldap.c b/source3/libads/cldap.c index e0789c50dac..96d602d9feb 100644 --- a/source3/libads/cldap.c +++ b/source3/libads/cldap.c @@ -28,59 +28,6 @@ #include "libads/cldap.h" #include "libads/netlogon_ping.h" -/**************************************************************** -****************************************************************/ - -#define RETURN_ON_FALSE(x) if (!(x)) return false; - -bool check_cldap_reply_required_flags(uint32_t ret_flags, - uint32_t req_flags) -{ - if (req_flags == 0) { - return true; - } - - if (req_flags & DS_PDC_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_PDC); - - if (req_flags & DS_GC_SERVER_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_GC); - - if (req_flags & DS_ONLY_LDAP_NEEDED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_LDAP); - - if ((req_flags & DS_DIRECTORY_SERVICE_REQUIRED) || - (req_flags & DS_DIRECTORY_SERVICE_PREFERRED)) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS); - - if (req_flags & DS_KDC_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_KDC); - - if (req_flags & DS_TIMESERV_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_TIMESERV); - - if (req_flags & DS_WEB_SERVICE_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_ADS_WEB_SERVICE); - - if (req_flags & DS_WRITABLE_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_WRITABLE); - - if (req_flags & DS_DIRECTORY_SERVICE_6_REQUIRED) - RETURN_ON_FALSE(ret_flags & (NBT_SERVER_SELECT_SECRET_DOMAIN_6 - |NBT_SERVER_FULL_SECRET_DOMAIN_6)); - - if (req_flags & DS_DIRECTORY_SERVICE_8_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_8); - - if (req_flags & DS_DIRECTORY_SERVICE_9_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_9); - - if (req_flags & DS_DIRECTORY_SERVICE_10_REQUIRED) - RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_10); - - return true; -} - /******************************************************************* do a cldap netlogon query. Always 389/udp *******************************************************************/ diff --git a/source3/libads/cldap.h b/source3/libads/cldap.h index 0cde4c7ea49..3553f121387 100644 --- a/source3/libads/cldap.h +++ b/source3/libads/cldap.h @@ -27,9 +27,6 @@ /* The following definitions come from libads/cldap.c */ -bool check_cldap_reply_required_flags(uint32_t ret_flags, - uint32_t req_flags); - bool ads_cldap_netlogon_5(TALLOC_CTX *mem_ctx, struct sockaddr_storage *ss, const char *realm, diff --git a/source3/libads/netlogon_ping.c b/source3/libads/netlogon_ping.c index 4fd776a2efe..c94af8fbc57 100644 --- a/source3/libads/netlogon_ping.c +++ b/source3/libads/netlogon_ping.c @@ -29,6 +29,59 @@ #include "lib/util/tevent_ntstatus.h" #include "source4/lib/tls/tls.h" #include "source3/libads/cldap.h" +#include "librpc/gen_ndr/netlogon.h" + +#define RETURN_ON_FALSE(x) \ + if (!(x)) \ + return false; + +bool check_cldap_reply_required_flags(uint32_t ret_flags, uint32_t req_flags) +{ + if (req_flags == 0) { + return true; + } + + if (req_flags & DS_PDC_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_PDC); + + if (req_flags & DS_GC_SERVER_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_GC); + + if (req_flags & DS_ONLY_LDAP_NEEDED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_LDAP); + + if ((req_flags & DS_DIRECTORY_SERVICE_REQUIRED) || + (req_flags & DS_DIRECTORY_SERVICE_PREFERRED)) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS); + + if (req_flags & DS_KDC_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_KDC); + + if (req_flags & DS_TIMESERV_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_TIMESERV); + + if (req_flags & DS_WEB_SERVICE_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_ADS_WEB_SERVICE); + + if (req_flags & DS_WRITABLE_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_WRITABLE); + + if (req_flags & DS_DIRECTORY_SERVICE_6_REQUIRED) + RETURN_ON_FALSE(ret_flags & + (NBT_SERVER_SELECT_SECRET_DOMAIN_6 | + NBT_SERVER_FULL_SECRET_DOMAIN_6)); + + if (req_flags & DS_DIRECTORY_SERVICE_8_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_8); + + if (req_flags & DS_DIRECTORY_SERVICE_9_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_9); + + if (req_flags & DS_DIRECTORY_SERVICE_10_REQUIRED) + RETURN_ON_FALSE(ret_flags & NBT_SERVER_DS_10); + + return true; +} struct ldap_netlogon_state { struct tevent_context *ev; diff --git a/source3/libads/netlogon_ping.h b/source3/libads/netlogon_ping.h index dc238bd1c62..d50c0a47936 100644 --- a/source3/libads/netlogon_ping.h +++ b/source3/libads/netlogon_ping.h @@ -24,6 +24,8 @@ #include "libcli/util/ntstatus.h" #include "lib/param/loadparm.h" +bool check_cldap_reply_required_flags(uint32_t ret_flags, uint32_t req_flags); + struct netlogon_samlogon_response; struct netlogon_ping_filter {