libcli/security: add dom_sid_lookup_is_predefined_domain()
authorRalph Boehme <slow@samba.org>
Wed, 28 Nov 2018 16:19:39 +0000 (17:19 +0100)
committerRalph Boehme <slow@samba.org>
Wed, 5 Dec 2018 07:12:16 +0000 (08:12 +0100)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12164

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Ralph Boehme <slow@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: David Mulder <dmulder@suse.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
libcli/security/dom_sid.h
libcli/security/util_sid.c

index 1effdbc2f6c8bc9d06c6ff7abbb26a95e2e9cdcc..abaf305f96a14381378091e0ea336af047ee4353 100644 (file)
@@ -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);
index af04dff1325a19e2b0c40ebd588beaf760ffbb6f..531d3809565e537f1efdcd8203b9d73c75047490 100644 (file)
@@ -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,