From 2de5f06d399109009c343b0acfef822db38502a1 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 28 Nov 2018 17:19:39 +0100 Subject: [PATCH] libcli/security: add dom_sid_lookup_is_predefined_domain() BUG: https://bugzilla.samba.org/show_bug.cgi?id=12164 Pair-Programmed-With: Stefan Metzmacher Signed-off-by: Ralph Boehme Signed-off-by: Stefan Metzmacher Reviewed-by: David Mulder Reviewed-by: Andreas Schneider --- libcli/security/dom_sid.h | 1 + libcli/security/util_sid.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/libcli/security/dom_sid.h b/libcli/security/dom_sid.h index 1effdbc2f6c..abaf305f96a 100644 --- a/libcli/security/dom_sid.h +++ b/libcli/security/dom_sid.h @@ -74,6 +74,7 @@ NTSTATUS dom_sid_lookup_predefined_sid(const struct dom_sid *sid, enum lsa_SidType *type, const struct dom_sid **authority_sid, const char **authority_name); +bool dom_sid_lookup_is_predefined_domain(const char *domain); int dom_sid_compare_auth(const struct dom_sid *sid1, const struct dom_sid *sid2); diff --git a/libcli/security/util_sid.c b/libcli/security/util_sid.c index af04dff1325..531d3809565 100644 --- a/libcli/security/util_sid.c +++ b/libcli/security/util_sid.c @@ -879,6 +879,39 @@ NTSTATUS dom_sid_lookup_predefined_name(const char *name, return NT_STATUS_NONE_MAPPED; } +bool dom_sid_lookup_is_predefined_domain(const char *domain) +{ + size_t di; + bool match; + + if (domain == NULL) { + domain = ""; + } + + match = strequal(domain, ""); + if (match) { + /* + * Strange, but that's what W2012R2 does. + */ + domain = "BUILTIN"; + } + + for (di = 0; di < ARRAY_SIZE(predefined_domains); di++) { + const struct predefined_domain_mapping *d = + &predefined_domains[di]; + int cmp; + + cmp = strcasecmp(d->domain, domain); + if (cmp != 0) { + continue; + } + + return true; + } + + return false; +} + NTSTATUS dom_sid_lookup_predefined_sid(const struct dom_sid *sid, const char **name, enum lsa_SidType *type, -- 2.34.1