]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
winbindd: add find_routing_from_namespace_noinit()
authorStefan Metzmacher <metze@samba.org>
Thu, 17 May 2018 08:37:34 +0000 (10:37 +0200)
committerRalph Boehme <slow@samba.org>
Sat, 22 Feb 2025 16:00:36 +0000 (16:00 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/winbindd/winbindd_proto.h
source3/winbindd/winbindd_util.c

index 7874e9b98bde8f030f9f5a1c887c96d90b1b5d78..3d4a69acbcf25b20644bb0cbb2d292fe0cf94402 100644 (file)
@@ -515,6 +515,7 @@ void winbindd_ping_offline_domains(struct tevent_context *ev,
 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_routing_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 48d18f05530b2147832399abf08b89ff442c1a18..8cd9b42b307539441374bb034e9c574e1f41fd81 100644 (file)
@@ -1690,6 +1690,52 @@ struct winbindd_domain *find_trust_from_name_noinit(const char *domain_name)
        return NULL;
 }
 
+struct winbindd_domain *find_routing_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) {
+                       break;
+               }
+
+               if (domain->alt_name == NULL) {
+                       continue;
+               }
+
+               match = strequal(namespace, domain->alt_name);
+               if (match) {
+                       break;
+               }
+
+               if (domain->fti == NULL) {
+                       continue;
+               }
+
+               match = trust_forest_info_match_tln_namespace(domain->fti,
+                                                             namespace);
+               if (match) {
+                       break;
+               }
+       }
+
+       if (domain == NULL) {
+               /* Not found */
+               return NULL;
+       }
+
+       if (domain->routing_domain != NULL) {
+               return domain->routing_domain;
+       }
+
+       return domain;
+}
+
 struct winbindd_domain *find_domain_from_name(const char *domain_name)
 {
        struct winbindd_domain *domain;