winbindd: add find_domain_from_namespace_noinit()
authorStefan Metzmacher <metze@samba.org>
Thu, 17 May 2018 08:37:34 +0000 (10:37 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 29 Oct 2019 13:38:47 +0000 (14:38 +0100)
source3/winbindd/winbindd_proto.h
source3/winbindd/winbindd_util.c

index 2a829b0171a39228c96cee683670a35a8ca7e30b..efdc61daa9ad6ab1a392ff718843aa8376443e10 100644 (file)
@@ -470,6 +470,7 @@ enum winbindd_result winbindd_dual_init_connection(struct winbindd_domain *domai
 bool init_domain_list(void);
 struct winbindd_domain *find_domain_from_name_noinit(const char *domain_name);
 struct winbindd_domain *find_trust_from_name_noinit(const char *domain_name);
+struct winbindd_domain *find_domain_from_namespace_noinit(const char *name_space);
 struct winbindd_domain *find_domain_from_name(const char *domain_name);
 struct winbindd_domain *find_domain_from_sid_noinit(const struct dom_sid *sid);
 struct winbindd_domain *find_trust_from_sid_noinit(const struct dom_sid *sid);
index f51fa7efe061e29749514974f9709a8af6f2fe36..c0c62c02cb083061f254d36cee4b341fe5aad787 100644 (file)
@@ -1389,6 +1389,41 @@ struct winbindd_domain *find_trust_from_name_noinit(const char *domain_name)
        return NULL;
 }
 
+struct winbindd_domain *find_domain_from_namespace_noinit(const char *namespace)
+{
+       struct winbindd_domain *domain;
+
+       /* Search through list */
+
+       for (domain = domain_list(); domain != NULL; domain = domain->next) {
+               bool match;
+
+               match = strequal(namespace, domain->name);
+               if (match) {
+                       return domain;
+               }
+
+               if (domain->alt_name == NULL) {
+                       continue;
+               }
+
+               match = strequal(namespace, domain->alt_name);
+               if (match) {
+                       return domain;
+               }
+
+               match = trust_forest_info_match_tln_namespace(&domain->fti,
+                                                             namespace);
+               if (match) {
+                       return domain;
+               }
+       }
+
+       /* Not found */
+
+       return NULL;
+}
+
 struct winbindd_domain *find_domain_from_name(const char *domain_name)
 {
        struct winbindd_domain *domain;