View | Details | Raw Unified | Return to bug 37687 | Differences between
and this patch

Collapse All | Expand All

(-)source4/dsdb/samdb/ldb_modules/partition.c.orig (+40 lines)
 Lines 605-610   static int partition_search(struct ldb_m Link Here 
605
	lp_ctx = talloc_get_type(ldb_get_opaque(ldb, "loadparm"),
605
	lp_ctx = talloc_get_type(ldb_get_opaque(ldb, "loadparm"),
606
						struct loadparm_context);
606
						struct loadparm_context);
607
607
608
	// Determine forestdnszones_dn for comparison below
609
	struct ldb_dn *forestdnszones_dn = ldb_dn_copy(ac, ldb_get_default_basedn(ldb));
610
	if (!forestdnszones_dn) {
611
		return ldb_oom(ldb_module_get_ctx(module));
612
	}
613
	if (!ldb_dn_add_child_fmt(forestdnszones_dn, "DC=ForestDnsZones")) {
614
		return ldb_oom(ldb_module_get_ctx(module));
615
	}
616
617
	// Determine domaindnszones_dn for comparison below
618
	struct ldb_dn *domaindnszones_dn = ldb_dn_copy(ac, ldb_get_default_basedn(ldb));
619
	if (!domaindnszones_dn) {
620
		return ldb_oom(ldb_module_get_ctx(module));
621
	}
622
	if (!ldb_dn_add_child_fmt(domaindnszones_dn, "DC=DomainDnsZones")) {
623
		return ldb_oom(ldb_module_get_ctx(module));
624
	}
625
626
	/* Don't return application partitions on GC search */
627
	if (!no_gc_control ) {	// not set by ldap_backend.c:ldapsrv_SearchRequest for GC port searches
628
		// This behaviour was found on a Windows Server 2008R2 Foundation
629
		// Looks like it's generally true that AD GC search doesn't return Forest+DomainDNSZones
630
		// let's only treat the Windows Server 2008R2 Foundation case for now:
631
		if (ldb_dn_is_null(req->op.search.base) && domain_scope_control) {
632
			// workaround: set base to avoid partition_send_all below, skip Forest and DomainDNSZones
633
			req->op.search.base = ldb_dn_copy(ac, ldb_get_default_basedn(ldb));
634
		}
635
	}
636
608
	/* Search from the base DN */
637
	/* Search from the base DN */
609
	if (ldb_dn_is_null(req->op.search.base)) {
638
	if (ldb_dn_is_null(req->op.search.base)) {
610
		if (!phantom_root) {
639
		if (!phantom_root) {
 Lines 628-633   static int partition_search(struct ldb_m Link Here 
628
		}
657
		}
629
658
630
		if (phantom_root) {
659
		if (phantom_root) {
660
661
			/* Don't return application partitions on GC search */
662
			if (!no_gc_control && domain_scope_control) {
663
				if (ldb_dn_compare(data->partitions[i]->ctrl->dn, forestdnszones_dn) == 0) {
664
					continue;
665
				}
666
				if (ldb_dn_compare(data->partitions[i]->ctrl->dn, domaindnszones_dn) == 0) {
667
					continue;
668
				}
669
			}
670
631
			/* Phantom root: Find all partitions under the
671
			/* Phantom root: Find all partitions under the
632
			 * search base. We match if:
672
			 * search base. We match if:
633
			 *
673
			 *

Return to bug 37687