diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libads/ldap.c | 18 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_ads.c | 20 |
2 files changed, 23 insertions, 15 deletions
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index d2b9f74c4d..8966ceb32a 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -680,4 +680,22 @@ ADS_STATUS ads_trusted_domains(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, return ADS_SUCCESS; } +/* find the domain sid for our domain */ +ADS_STATUS ads_domain_sid(ADS_STRUCT *ads, DOM_SID *sid) +{ + const char *attrs[] = {"objectSid", NULL}; + void *res; + ADS_STATUS rc; + + rc = ads_do_search(ads, ads->bind_path, LDAP_SCOPE_BASE, "(objectclass=*)", + attrs, &res); + if (!ADS_ERR_OK(rc)) return rc; + if (!ads_pull_sid(ads, res, "objectSid", sid)) { + return ADS_ERROR_SYSTEM(ENOENT); + } + ads_msgfree(ads, res); + + return ADS_SUCCESS; +} + #endif diff --git a/source3/nsswitch/winbindd_ads.c b/source3/nsswitch/winbindd_ads.c index 8d0c78b2d5..a0d35030bf 100644 --- a/source3/nsswitch/winbindd_ads.c +++ b/source3/nsswitch/winbindd_ads.c @@ -706,7 +706,7 @@ static NTSTATUS trusted_domains(struct winbindd_domain *domain, char ***names, DOM_SID **dom_sids) { - ADS_STRUCT *ads = NULL; + ADS_STRUCT *ads; ADS_STATUS rc; *num_domains = 0; @@ -723,25 +723,15 @@ static NTSTATUS trusted_domains(struct winbindd_domain *domain, /* find the domain sid for a domain */ static NTSTATUS domain_sid(struct winbindd_domain *domain, DOM_SID *sid) { - NTSTATUS status = NT_STATUS_UNSUCCESSFUL; - const char *attrs[] = {"objectSid", NULL}; - ADS_STRUCT *ads = NULL; - void *res; + ADS_STRUCT *ads; ADS_STATUS rc; ads = ads_cached_connection(domain); - if (!ads) goto done; + if (!ads) return NT_STATUS_UNSUCCESSFUL; - rc = ads_do_search(ads, ads->bind_path, LDAP_SCOPE_BASE, "(objectclass=*)", - attrs, &res); - if (!ADS_ERR_OK(rc)) goto done; - if (ads_pull_sid(ads, res, "objectSid", sid)) { - status = NT_STATUS_OK; - } - ads_msgfree(ads, res); + rc = ads_domain_sid(ads, sid); -done: - return status; + return ads_ntstatus(rc); } /* the ADS backend methods are exposed via this structure */ |