summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/libads/ldap.c18
-rw-r--r--source3/nsswitch/winbindd_ads.c20
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 */