diff options
-rw-r--r-- | source3/winbindd/winbindd_cache.c | 52 | ||||
-rw-r--r-- | source3/winbindd/winbindd_proto.h | 1 |
2 files changed, 53 insertions, 0 deletions
diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c index c6ef293134..9363a70a21 100644 --- a/source3/winbindd/winbindd_cache.c +++ b/source3/winbindd/winbindd_cache.c @@ -4542,6 +4542,58 @@ struct winbindd_tdc_domain * wcache_tdc_fetch_domain( TALLOC_CTX *ctx, const cha return d; } +/********************************************************************* + ********************************************************************/ + +struct winbindd_tdc_domain* + wcache_tdc_fetch_domainbysid(TALLOC_CTX *ctx, + const struct dom_sid *sid) +{ + struct winbindd_tdc_domain *dom_list = NULL; + size_t num_domains = 0; + int i; + struct winbindd_tdc_domain *d = NULL; + + DEBUG(10,("wcache_tdc_fetch_domainbysid: Searching for domain %s\n", + sid_string_dbg(sid))); + + if (!init_wcache()) { + return false; + } + + /* fetch the list */ + + wcache_tdc_fetch_list(&dom_list, &num_domains); + + for (i = 0; i<num_domains; i++) { + if (sid_equal(sid, &(dom_list[i].sid))) { + DEBUG(10, ("wcache_tdc_fetch_domainbysid: " + "Found domain %s for SID %s\n", + dom_list[i].domain_name, + sid_string_dbg(sid))); + + d = TALLOC_P(ctx, struct winbindd_tdc_domain); + if (!d) + break; + + d->domain_name = talloc_strdup(d, + dom_list[i].domain_name); + + d->dns_name = talloc_strdup(d, dom_list[i].dns_name); + sid_copy(&d->sid, &dom_list[i].sid); + d->trust_flags = dom_list[i].trust_flags; + d->trust_type = dom_list[i].trust_type; + d->trust_attribs = dom_list[i].trust_attribs; + + break; + } + } + + TALLOC_FREE(dom_list); + + return d; +} + /********************************************************************* ********************************************************************/ diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h index ecdbdfe684..52e6bfede0 100644 --- a/source3/winbindd/winbindd_proto.h +++ b/source3/winbindd/winbindd_proto.h @@ -134,6 +134,7 @@ bool winbindd_cache_validate_and_initialize(void); bool wcache_tdc_fetch_list( struct winbindd_tdc_domain **domains, size_t *num_domains ); bool wcache_tdc_add_domain( struct winbindd_domain *domain ); struct winbindd_tdc_domain * wcache_tdc_fetch_domain( TALLOC_CTX *ctx, const char *name ); +struct winbindd_tdc_domain* wcache_tdc_fetch_domainbysid(TALLOC_CTX *ctx, const struct dom_sid *sid); void wcache_tdc_clear( void ); #ifdef HAVE_ADS struct ads_struct; |