From 51ddddfa9f832d1a9aa207c7a13393e3c11b5dc3 Mon Sep 17 00:00:00 2001 From: Christian Ambach Date: Fri, 29 Oct 2010 15:53:20 +0200 Subject: [PATCH] s3:winbind add wcache_tdc_fetch_domainbysid add a function to lookup a domain in the winbind cache by domain SID --- source3/winbindd/winbindd_cache.c | 52 +++++++++++++++++++++++++++++++ source3/winbindd/winbindd_proto.h | 1 + 2 files changed, 53 insertions(+) diff --git a/source3/winbindd/winbindd_cache.c b/source3/winbindd/winbindd_cache.c index c6ef2931345..9363a70a214 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; idomain_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 ecdbdfe6846..52e6bfede0f 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; -- 2.34.1