summaryrefslogtreecommitdiff
path: root/source3/nsswitch/winbindd_ads.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2001-12-10 02:25:19 +0000
committerAndrew Tridgell <tridge@samba.org>2001-12-10 02:25:19 +0000
commitf3918919d24ebd1bf1f309e65196e216558da0b5 (patch)
tree16d0fe795fc9073932d420e46046603b7905d124 /source3/nsswitch/winbindd_ads.c
parentdd0b65a91c50f49abe6dd608c958467857b56a92 (diff)
downloadsamba-f3918919d24ebd1bf1f309e65196e216558da0b5.tar.gz
samba-f3918919d24ebd1bf1f309e65196e216558da0b5.tar.bz2
samba-f3918919d24ebd1bf1f309e65196e216558da0b5.zip
moved the domain sid lookup and enumeration of trusted domains into
the backends at startup, loop until we get the domain sid for our primary domain, trying every 10 seconds. This makes winbindd handle a room-wide power failure better (This used to be commit 7c60ae59378be1b2af2e57ee3927966a29a797a5)
Diffstat (limited to 'source3/nsswitch/winbindd_ads.c')
-rw-r--r--source3/nsswitch/winbindd_ads.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/source3/nsswitch/winbindd_ads.c b/source3/nsswitch/winbindd_ads.c
index e009f9a9ab..198e6ca92b 100644
--- a/source3/nsswitch/winbindd_ads.c
+++ b/source3/nsswitch/winbindd_ads.c
@@ -657,6 +657,41 @@ static NTSTATUS sequence_number(struct winbindd_domain *domain, uint32 *seq)
return NT_STATUS_OK;
}
+/* get a list of trusted domains */
+static NTSTATUS trusted_domains(struct winbindd_domain *domain,
+ TALLOC_CTX *mem_ctx,
+ uint32 *num_domains,
+ char ***names,
+ DOM_SID **dom_sids)
+{
+ *num_domains = 0;
+ return NT_STATUS_NOT_IMPLEMENTED;
+}
+
+/* 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;
+ int rc;
+
+ ads = ads_cached_connection(domain);
+ if (!ads) goto done;
+
+ rc = ads_do_search(ads, ads->bind_path, LDAP_SCOPE_BASE, "(objectclass=*)",
+ attrs, &res);
+ if (rc) goto done;
+ if (ads_pull_sid(ads, res, "objectSid", sid)) {
+ status = NT_STATUS_OK;
+ }
+ ads_msgfree(ads, res);
+
+done:
+ return status;
+}
+
/* the ADS backend methods are exposed via this structure */
struct winbindd_methods ads_methods = {
query_user_list,
@@ -666,7 +701,9 @@ struct winbindd_methods ads_methods = {
query_user,
lookup_usergroups,
lookup_groupmem,
- sequence_number
+ sequence_number,
+ trusted_domains,
+ domain_sid
};
#endif