[SCM] Samba Shared Repository - branch master updated - tevent-0-9-8-664-gf28219d

Andrew Tridgell tridge at samba.org
Wed Sep 23 15:08:11 MDT 2009


The branch, master has been updated
       via  f28219d1a117bf02746679de5e9e25103fd83b29 (commit)
       via  10f86114debaff6ca4c8baac38e39db49615d027 (commit)
       via  075f9e2c2919207fdf28cf0a7c19df12f5a809d2 (commit)
       via  6fba3a22fecc8126fb2f8aa4c518dbf0bbfdef80 (commit)
       via  af4c1f7fc67173e21b50797fd9de7e68602a97ed (commit)
       via  9b7de7f491389609b3a07ed625e0d708c5e36a37 (commit)
       via  523fb6d72b08a77e9c423a4f2d15d699d576d701 (commit)
       via  87b6f2e863c6e117643ab6704e50167e849b69cc (commit)
       via  b60854ec46dc4b9243cff0a59a7e36ac6537d771 (commit)
       via  c94e3ff0642749a3353b603e873c74cc17d5f8ad (commit)
       via  5c51560d43981ec9a9df2d979130fe5d61b1bcd4 (commit)
       via  a50672b44b188b6c3a2f85fa74b754dac614f2a9 (commit)
       via  43f7d7e1b1384741a8819e23ef0f799c7211deb8 (commit)
      from  cd749ef8bd271b1de0212e25c67f87283ba7582b (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f28219d1a117bf02746679de5e9e25103fd83b29
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Sep 1 19:56:56 2009 +1000

    s4:ldif_handlers Fix memory leak in objectCategory LDIF handler

commit 10f86114debaff6ca4c8baac38e39db49615d027
Author: Andrew Tridgell <tridge at samba.org>
Date:   Wed Sep 23 13:56:10 2009 -0700

    s4-drs: fill in more guids and SIDs, plus filter rDN
    
    In DsGetNCChanges we need to fill in the parentGUID and objectGUID of
    each object, plus we need to filter out the rDN from the meta data,
    and always send the instanceType

commit 075f9e2c2919207fdf28cf0a7c19df12f5a809d2
Author: Andrew Tridgell <tridge at samba.org>
Date:   Wed Sep 23 13:54:47 2009 -0700

    s4-dsdb: cope with windows sending extra pad bytes

commit 6fba3a22fecc8126fb2f8aa4c518dbf0bbfdef80
Author: Andrew Tridgell <tridge at samba.org>
Date:   Wed Sep 23 13:52:39 2009 -0700

    s4-dsdb: added dsdb_find_sid_by_dn()

commit af4c1f7fc67173e21b50797fd9de7e68602a97ed
Author: Andrew Tridgell <tridge at samba.org>
Date:   Tue Sep 22 20:57:18 2009 -0700

    s4-drsserver: fixed addition of sort control

commit 9b7de7f491389609b3a07ed625e0d708c5e36a37
Author: Andrew Tridgell <tridge at samba.org>
Date:   Tue Sep 22 20:56:54 2009 -0700

    fixed spelling

commit 523fb6d72b08a77e9c423a4f2d15d699d576d701
Author: Andrew Tridgell <tridge at samba.org>
Date:   Tue Sep 22 20:56:32 2009 -0700

    s4-drs: ignore zero value elements in DRS add operations
    
    w2k8 sometimes sends us a new object via DRS with an attribute with no
    values

commit 87b6f2e863c6e117643ab6704e50167e849b69cc
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 16:30:31 2009 -0700

    s4-netlogon: always set the dNSHostName in GetDomainInfo
    
    This seems to be what w2k8 does

commit b60854ec46dc4b9243cff0a59a7e36ac6537d771
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 10:45:14 2009 -0700

    regenerate IDL

commit c94e3ff0642749a3353b603e873c74cc17d5f8ad
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 10:42:42 2009 -0700

    s4-netlogon: make GetDomainInfo response match w2k8

commit 5c51560d43981ec9a9df2d979130fe5d61b1bcd4
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 10:41:06 2009 -0700

    s4-cldap: return domainFunctionality from SAM

commit a50672b44b188b6c3a2f85fa74b754dac614f2a9
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 10:38:40 2009 -0700

    idl: fixed string termination for netlogon GetDomainInfo

commit 43f7d7e1b1384741a8819e23ef0f799c7211deb8
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Sep 21 10:38:09 2009 -0700

    s4-nbt: added NBT_SERVER_DNS_FOREST

-----------------------------------------------------------------------

Summary of changes:
 librpc/gen_ndr/nbt.h                            |    1 +
 librpc/gen_ndr/ndr_nbt.c                        |    1 +
 librpc/gen_ndr/ndr_netlogon.c                   |  100 +++++++++++-----------
 librpc/gen_ndr/netlogon.h                       |   20 +++---
 librpc/idl/nbt.idl                              |    3 +-
 librpc/idl/netlogon.idl                         |   20 +++---
 source4/cldap_server/netlogon.c                 |    5 +
 source4/dsdb/common/util.c                      |   30 +++++++
 source4/dsdb/samdb/ldb_modules/repl_meta_data.c |   13 +++
 source4/dsdb/schema/schema_syntax.c             |    8 +-
 source4/lib/ldb-samba/ldif_handlers.c           |    1 +
 source4/lib/ldb/ldb_tdb/ldb_tdb.c               |    2 +-
 source4/rpc_server/drsuapi/drsutil.c            |   12 ++-
 source4/rpc_server/drsuapi/getncchanges.c       |   51 +++++++++++-
 source4/rpc_server/netlogon/dcerpc_netlogon.c   |   44 +++++++----
 15 files changed, 211 insertions(+), 100 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/nbt.h b/librpc/gen_ndr/nbt.h
index e596abd..ec234e1 100644
--- a/librpc/gen_ndr/nbt.h
+++ b/librpc/gen_ndr/nbt.h
@@ -411,6 +411,7 @@ struct nbt_sockaddr {
 #define NBT_SERVER_NDNC ( 0x00000400 )
 #define NBT_SERVER_SELECT_SECRET_DOMAIN_6 ( 0x00000800 )
 #define NBT_SERVER_FULL_SECRET_DOMAIN_6 ( 0x00001000 )
+#define NBT_SERVER_DNS_FOREST ( 0x01000000 )
 
 /* bitmap netlogon_nt_version_flags */
 #define NETLOGON_NT_VERSION_1 ( 0x00000001 )
diff --git a/librpc/gen_ndr/ndr_nbt.c b/librpc/gen_ndr/ndr_nbt.c
index 561562e..a1ee796 100644
--- a/librpc/gen_ndr/ndr_nbt.c
+++ b/librpc/gen_ndr/ndr_nbt.c
@@ -1618,6 +1618,7 @@ _PUBLIC_ void ndr_print_nbt_server_type(struct ndr_print *ndr, const char *name,
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_NDNC", NBT_SERVER_NDNC, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_SELECT_SECRET_DOMAIN_6", NBT_SERVER_SELECT_SECRET_DOMAIN_6, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_FULL_SECRET_DOMAIN_6", NBT_SERVER_FULL_SECRET_DOMAIN_6, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "NBT_SERVER_DNS_FOREST", NBT_SERVER_DNS_FOREST, r);
 	ndr->depth--;
 }
 
diff --git a/librpc/gen_ndr/ndr_netlogon.c b/librpc/gen_ndr/ndr_netlogon.c
index 8559139..0013cf4 100644
--- a/librpc/gen_ndr/ndr_netlogon.c
+++ b/librpc/gen_ndr/ndr_netlogon.c
@@ -8064,31 +8064,31 @@ static enum ndr_err_code ndr_push_netr_OneDomainInfo(struct ndr_push *ndr, int n
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 5));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dns_domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dns_forestname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->domainname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domainname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_forestname));
 		NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->domain_guid));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->domain_sid));
 		NDR_CHECK(ndr_push_netr_trust_extension_container(ndr, NDR_SCALARS, &r->trust_extension));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string4));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string2));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string3));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string4));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy_long1));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy_long2));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy_long3));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy_long4));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dns_domainname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dns_forestname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domainname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domainname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_forestname));
 		if (r->domain_sid) {
 			NDR_CHECK(ndr_push_dom_sid2(ndr, NDR_SCALARS|NDR_BUFFERS, r->domain_sid));
 		}
 		NDR_CHECK(ndr_push_netr_trust_extension_container(ndr, NDR_BUFFERS, &r->trust_extension));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string4));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string2));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string3));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string4));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -8099,9 +8099,9 @@ static enum ndr_err_code ndr_pull_netr_OneDomainInfo(struct ndr_pull *ndr, int n
 	TALLOC_CTX *_mem_save_domain_sid_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 5));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dns_domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dns_forestname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->domainname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_domainname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_forestname));
 		NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->domain_guid));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_domain_sid));
 		if (_ptr_domain_sid) {
@@ -8110,18 +8110,18 @@ static enum ndr_err_code ndr_pull_netr_OneDomainInfo(struct ndr_pull *ndr, int n
 			r->domain_sid = NULL;
 		}
 		NDR_CHECK(ndr_pull_netr_trust_extension_container(ndr, NDR_SCALARS, &r->trust_extension));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string4));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string2));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string3));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string4));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy_long1));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy_long2));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy_long3));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy_long4));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dns_domainname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dns_forestname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->domainname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_domainname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_forestname));
 		if (r->domain_sid) {
 			_mem_save_domain_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
 			NDR_PULL_SET_MEM_CTX(ndr, r->domain_sid, 0);
@@ -8129,9 +8129,9 @@ static enum ndr_err_code ndr_pull_netr_OneDomainInfo(struct ndr_pull *ndr, int n
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_domain_sid_0, 0);
 		}
 		NDR_CHECK(ndr_pull_netr_trust_extension_container(ndr, NDR_BUFFERS, &r->trust_extension));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string4));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string2));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string3));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string4));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -8140,9 +8140,9 @@ _PUBLIC_ void ndr_print_netr_OneDomainInfo(struct ndr_print *ndr, const char *na
 {
 	ndr_print_struct(ndr, name, "netr_OneDomainInfo");
 	ndr->depth++;
-	ndr_print_lsa_String(ndr, "domainname", &r->domainname);
-	ndr_print_lsa_String(ndr, "dns_domainname", &r->dns_domainname);
-	ndr_print_lsa_String(ndr, "dns_forestname", &r->dns_forestname);
+	ndr_print_lsa_StringLarge(ndr, "domainname", &r->domainname);
+	ndr_print_lsa_StringLarge(ndr, "dns_domainname", &r->dns_domainname);
+	ndr_print_lsa_StringLarge(ndr, "dns_forestname", &r->dns_forestname);
 	ndr_print_GUID(ndr, "domain_guid", &r->domain_guid);
 	ndr_print_ptr(ndr, "domain_sid", r->domain_sid);
 	ndr->depth++;
@@ -8151,9 +8151,9 @@ _PUBLIC_ void ndr_print_netr_OneDomainInfo(struct ndr_print *ndr, const char *na
 	}
 	ndr->depth--;
 	ndr_print_netr_trust_extension_container(ndr, "trust_extension", &r->trust_extension);
-	ndr_print_lsa_String(ndr, "dummy_string2", &r->dummy_string2);
-	ndr_print_lsa_String(ndr, "dummy_string3", &r->dummy_string3);
-	ndr_print_lsa_String(ndr, "dummy_string4", &r->dummy_string4);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string2", &r->dummy_string2);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string3", &r->dummy_string3);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string4", &r->dummy_string4);
 	ndr_print_uint32(ndr, "dummy_long1", r->dummy_long1);
 	ndr_print_uint32(ndr, "dummy_long2", r->dummy_long2);
 	ndr_print_uint32(ndr, "dummy_long3", r->dummy_long3);
@@ -8196,10 +8196,10 @@ static enum ndr_err_code ndr_push_netr_DomainInformation(struct ndr_push *ndr, i
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->trusted_domain_count));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->trusted_domains));
 		NDR_CHECK(ndr_push_netr_LsaPolicyInformation(ndr, NDR_SCALARS, &r->lsa_policy));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dns_hostname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->dummy_string4));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_hostname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string2));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string3));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string4));
 		NDR_CHECK(ndr_push_netr_WorkstationFlags(ndr, NDR_SCALARS, r->workstation_flags));
 		NDR_CHECK(ndr_push_netr_SupportedEncTypes(ndr, NDR_SCALARS, r->supported_enc_types));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->dummy_long3));
@@ -8217,10 +8217,10 @@ static enum ndr_err_code ndr_push_netr_DomainInformation(struct ndr_push *ndr, i
 			}
 		}
 		NDR_CHECK(ndr_push_netr_LsaPolicyInformation(ndr, NDR_BUFFERS, &r->lsa_policy));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dns_hostname));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string2));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string3));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string4));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_hostname));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string2));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string3));
+		NDR_CHECK(ndr_push_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string4));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -8242,10 +8242,10 @@ static enum ndr_err_code ndr_pull_netr_DomainInformation(struct ndr_pull *ndr, i
 			r->trusted_domains = NULL;
 		}
 		NDR_CHECK(ndr_pull_netr_LsaPolicyInformation(ndr, NDR_SCALARS, &r->lsa_policy));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dns_hostname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->dummy_string4));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dns_hostname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string2));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string3));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_SCALARS, &r->dummy_string4));
 		NDR_CHECK(ndr_pull_netr_WorkstationFlags(ndr, NDR_SCALARS, &r->workstation_flags));
 		NDR_CHECK(ndr_pull_netr_SupportedEncTypes(ndr, NDR_SCALARS, &r->supported_enc_types));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->dummy_long3));
@@ -8270,10 +8270,10 @@ static enum ndr_err_code ndr_pull_netr_DomainInformation(struct ndr_pull *ndr, i
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_trusted_domains_0, 0);
 		}
 		NDR_CHECK(ndr_pull_netr_LsaPolicyInformation(ndr, NDR_BUFFERS, &r->lsa_policy));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dns_hostname));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string2));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string3));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->dummy_string4));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dns_hostname));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string2));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string3));
+		NDR_CHECK(ndr_pull_lsa_StringLarge(ndr, NDR_BUFFERS, &r->dummy_string4));
 		if (r->trusted_domains) {
 			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->trusted_domains, r->trusted_domain_count));
 		}
@@ -8304,10 +8304,10 @@ _PUBLIC_ void ndr_print_netr_DomainInformation(struct ndr_print *ndr, const char
 	}
 	ndr->depth--;
 	ndr_print_netr_LsaPolicyInformation(ndr, "lsa_policy", &r->lsa_policy);
-	ndr_print_lsa_String(ndr, "dns_hostname", &r->dns_hostname);
-	ndr_print_lsa_String(ndr, "dummy_string2", &r->dummy_string2);
-	ndr_print_lsa_String(ndr, "dummy_string3", &r->dummy_string3);
-	ndr_print_lsa_String(ndr, "dummy_string4", &r->dummy_string4);
+	ndr_print_lsa_StringLarge(ndr, "dns_hostname", &r->dns_hostname);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string2", &r->dummy_string2);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string3", &r->dummy_string3);
+	ndr_print_lsa_StringLarge(ndr, "dummy_string4", &r->dummy_string4);
 	ndr_print_netr_WorkstationFlags(ndr, "workstation_flags", r->workstation_flags);
 	ndr_print_netr_SupportedEncTypes(ndr, "supported_enc_types", r->supported_enc_types);
 	ndr_print_uint32(ndr, "dummy_long3", r->dummy_long3);
diff --git a/librpc/gen_ndr/netlogon.h b/librpc/gen_ndr/netlogon.h
index 8953fc2..890fba1 100644
--- a/librpc/gen_ndr/netlogon.h
+++ b/librpc/gen_ndr/netlogon.h
@@ -991,15 +991,15 @@ struct netr_trust_extension_container {
 };
 
 struct netr_OneDomainInfo {
-	struct lsa_String domainname;
-	struct lsa_String dns_domainname;
-	struct lsa_String dns_forestname;
+	struct lsa_StringLarge domainname;
+	struct lsa_StringLarge dns_domainname;
+	struct lsa_StringLarge dns_forestname;
 	struct GUID domain_guid;
 	struct dom_sid2 *domain_sid;/* [unique] */
 	struct netr_trust_extension_container trust_extension;
-	struct lsa_String dummy_string2;
-	struct lsa_String dummy_string3;
-	struct lsa_String dummy_string4;
+	struct lsa_StringLarge dummy_string2;
+	struct lsa_StringLarge dummy_string3;
+	struct lsa_StringLarge dummy_string4;
 	uint32_t dummy_long1;
 	uint32_t dummy_long2;
 	uint32_t dummy_long3;
@@ -1018,10 +1018,10 @@ struct netr_DomainInformation {
 	uint32_t trusted_domain_count;
 	struct netr_OneDomainInfo *trusted_domains;/* [unique,size_is(trusted_domain_count)] */
 	struct netr_LsaPolicyInformation lsa_policy;
-	struct lsa_String dns_hostname;
-	struct lsa_String dummy_string2;
-	struct lsa_String dummy_string3;
-	struct lsa_String dummy_string4;
+	struct lsa_StringLarge dns_hostname;
+	struct lsa_StringLarge dummy_string2;
+	struct lsa_StringLarge dummy_string3;
+	struct lsa_StringLarge dummy_string4;
 	uint32_t workstation_flags;
 	uint32_t supported_enc_types;
 	uint32_t dummy_long3;
diff --git a/librpc/idl/nbt.idl b/librpc/idl/nbt.idl
index 9cefff7..fc82b1c 100644
--- a/librpc/idl/nbt.idl
+++ b/librpc/idl/nbt.idl
@@ -356,7 +356,8 @@ interface nbt
 		NBT_SERVER_GOOD_TIMESERV		= 0x00000200,
 		NBT_SERVER_NDNC				= 0x00000400,
 		NBT_SERVER_SELECT_SECRET_DOMAIN_6	= 0x00000800,
-		NBT_SERVER_FULL_SECRET_DOMAIN_6		= 0x00001000
+		NBT_SERVER_FULL_SECRET_DOMAIN_6		= 0x00001000,
+		NBT_SERVER_DNS_FOREST			= 0x01000000
 	} nbt_server_type;
 
 	typedef [bitmap32bit,public] bitmap {
diff --git a/librpc/idl/netlogon.idl b/librpc/idl/netlogon.idl
index 1cc0f2b..ef2c8a4 100644
--- a/librpc/idl/netlogon.idl
+++ b/librpc/idl/netlogon.idl
@@ -1357,15 +1357,15 @@ interface netlogon
 	} netr_trust_extension_container;
 
 	typedef struct {
-		lsa_String domainname;
-		lsa_String dns_domainname;
-		lsa_String dns_forestname;
+		lsa_StringLarge domainname;
+		lsa_StringLarge dns_domainname;
+		lsa_StringLarge dns_forestname;
 		GUID domain_guid;
 		dom_sid2 *domain_sid;
 		netr_trust_extension_container trust_extension;
-		lsa_String dummy_string2;
-		lsa_String dummy_string3;
-		lsa_String dummy_string4;
+		lsa_StringLarge dummy_string2;
+		lsa_StringLarge dummy_string3;
+		lsa_StringLarge dummy_string4;
 		uint32 dummy_long1;
 		uint32 dummy_long2;
 		uint32 dummy_long3;
@@ -1385,10 +1385,10 @@ interface netlogon
 		uint32 trusted_domain_count;
 		[size_is(trusted_domain_count)] netr_OneDomainInfo *trusted_domains;
 		netr_LsaPolicyInformation lsa_policy;
-		lsa_String dns_hostname;
-		lsa_String dummy_string2;
-		lsa_String dummy_string3;
-		lsa_String dummy_string4;
+		lsa_StringLarge dns_hostname;
+		lsa_StringLarge dummy_string2;
+		lsa_StringLarge dummy_string3;
+		lsa_StringLarge dummy_string4;
 		netr_WorkstationFlags workstation_flags;
 		netr_SupportedEncTypes supported_enc_types;
 		uint32 dummy_long3;
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c
index b1a46c3..ecc1369 100644
--- a/source4/cldap_server/netlogon.c
+++ b/source4/cldap_server/netlogon.c
@@ -212,7 +212,12 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 		DS_DNS_DOMAIN;
 
 	if (samdb_is_pdc(sam_ctx)) {
+		int *domainFunctionality;
 		server_type |= NBT_SERVER_PDC;
+		domainFunctionality = talloc_get_type(ldb_get_opaque(sam_ctx, "domainFunctionality"), int);
+		if (domainFunctionality && *domainFunctionality >= DS_DOMAIN_FUNCTION_2008) {
+			server_type |= NBT_SERVER_FULL_SECRET_DOMAIN_6;
+		}
 	}
 
 	if (samdb_is_gc(sam_ctx)) {
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 126f9fa..9a49417 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -1609,6 +1609,7 @@ int samdb_search_for_parent_domain(struct ldb_context *ldb, TALLOC_CTX *mem_ctx,
 	if (res->count != 1) {
 		*errstring = talloc_asprintf(mem_ctx, "Invalid dn (%s), not child of a domain object",
 					     ldb_dn_get_linearized(dn));
+		DEBUG(0,(__location__ ": %s\n", *errstring));
 		talloc_free(local_ctx);
 		return LDB_ERR_CONSTRAINT_VIOLATION;
 	}
@@ -2205,6 +2206,35 @@ int dsdb_find_guid_by_dn(struct ldb_context *ldb,
 	return LDB_SUCCESS;
 }
 
+/*
+  use a DN to find a SID
+ */
+int dsdb_find_sid_by_dn(struct ldb_context *ldb, 
+			struct ldb_dn *dn, struct dom_sid *sid)
+{
+	int ret;
+	struct ldb_result *res;
+	const char *attrs[] = { "objectSID", NULL };
+	TALLOC_CTX *tmp_ctx = talloc_new(ldb);
+	struct dom_sid *s;
+
+	ZERO_STRUCTP(sid);
+
+	ret = ldb_search(ldb, tmp_ctx, &res, dn, LDB_SCOPE_BASE, attrs, NULL);
+	if (ret != LDB_SUCCESS) {
+		talloc_free(tmp_ctx);
+		return ret;
+	}
+	s = samdb_result_dom_sid(tmp_ctx, res->msgs[0], "objectSID");
+	if (s == NULL) {
+		talloc_free(tmp_ctx);
+		return LDB_ERR_NO_SUCH_OBJECT;
+	}
+	*sid = *s;
+	talloc_free(tmp_ctx);
+	return LDB_SUCCESS;
+}
+
 
 
 /*
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
index 39102e5..bb1c5bb 100644
--- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
+++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
@@ -1135,6 +1135,19 @@ static int replmd_replicated_apply_add(struct replmd_replicated_request *ar)
 		return replmd_replicated_request_error(ar, ret);
 	}
 
+	/* remove any message elements that have zero values */
+	for (i=0; i<msg->num_elements; i++) {
+		if (msg->elements[i].num_values == 0) {
+			DEBUG(4,(__location__ ": Removing attribute %s with num_values==0\n",
+				 msg->elements[i].name));
+			memmove(&msg->elements[i], 
+				&msg->elements[i+1], 
+				sizeof(msg->elements[i])*(msg->num_elements - (i+1)));
+			msg->num_elements--;
+			i--;
+		}
+	}
+	
 	/*
 	 * the meta data array is already sorted by the caller
 	 */
diff --git a/source4/dsdb/schema/schema_syntax.c b/source4/dsdb/schema/schema_syntax.c
index d5f7e6b..c564471 100644
--- a/source4/dsdb/schema/schema_syntax.c
+++ b/source4/dsdb/schema/schema_syntax.c
@@ -1067,10 +1067,10 @@ static WERROR dsdb_syntax_DN_drsuapi_to_ldb(struct ldb_context *ldb,
 		}
 
 		
-
-		ndr_err = ndr_pull_struct_blob_all(in->value_ctr.values[i].blob,
-						   tmp_ctx, schema->iconv_convenience, &id3,
-						   (ndr_pull_flags_fn_t)ndr_pull_drsuapi_DsReplicaObjectIdentifier3);
+		/* windows sometimes sends an extra two pad bytes here */
+		ndr_err = ndr_pull_struct_blob(in->value_ctr.values[i].blob,
+					       tmp_ctx, schema->iconv_convenience, &id3,
+					       (ndr_pull_flags_fn_t)ndr_pull_drsuapi_DsReplicaObjectIdentifier3);
 		if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 			NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
 			talloc_free(tmp_ctx);
diff --git a/source4/lib/ldb-samba/ldif_handlers.c b/source4/lib/ldb-samba/ldif_handlers.c
index d1bdd95..43a1045 100644
--- a/source4/lib/ldb-samba/ldif_handlers.c
+++ b/source4/lib/ldb-samba/ldif_handlers.c
@@ -432,6 +432,7 @@ static int ldif_canonicalise_objectCategory(struct ldb_context *ldb, void *mem_c
 	}
 
 	if (!schema) {
+		talloc_free(tmp_ctx);
 		*out = data_blob_talloc(mem_ctx, in->data, in->length);
 		if (in->data && !out->data) {
 			return LDB_ERR_OPERATIONS_ERROR;
diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.c b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
index e569a5a..55acb61 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_tdb.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
@@ -270,7 +270,7 @@ static int ltdb_add_internal(struct ldb_module *module,
 		const struct ldb_schema_attribute *a = ldb_schema_attribute_by_name(ldb, el->name);
 
 		if (el->num_values == 0) {
-			ldb_asprintf_errstring(ldb, "attribute %s on %s speicified, but with 0 values (illigal)", 
+			ldb_asprintf_errstring(ldb, "attribute %s on %s specified, but with 0 values (illegal)", 
 					       el->name, ldb_dn_get_linearized(msg->dn));
 			return LDB_ERR_CONSTRAINT_VIOLATION;
 		}
diff --git a/source4/rpc_server/drsuapi/drsutil.c b/source4/rpc_server/drsuapi/drsutil.c
index ef48a9f..e1d6bed 100644
--- a/source4/rpc_server/drsuapi/drsutil.c
+++ b/source4/rpc_server/drsuapi/drsutil.c
@@ -95,15 +95,17 @@ int drsuapi_search_with_extended_dn(struct ldb_context *ldb,
 	}
 
 	if (sort_attrib) {
-		struct ldb_server_sort_control *sort_control;
-		sort_control = talloc(req, struct ldb_server_sort_control);
+		struct ldb_server_sort_control **sort_control;
+		sort_control = talloc_array(req, struct ldb_server_sort_control *, 2);
 		if (sort_control == NULL) {
 			talloc_free(tmp_ctx);
 			return LDB_ERR_OPERATIONS_ERROR;
 		}
-		sort_control->attributeName = sort_attrib;
-		sort_control->orderingRule = NULL;
-		sort_control->reverse = 1;
+		sort_control[0] = talloc(req, struct ldb_server_sort_control);
+		sort_control[0]->attributeName = sort_attrib;
+		sort_control[0]->orderingRule = NULL;
+		sort_control[0]->reverse = 1;
+		sort_control[1] = NULL;
 
 		ret = ldb_request_add_control(req, LDB_CONTROL_SERVER_SORT_OID, true, sort_control);
 		if (ret != LDB_SUCCESS) {
diff --git a/source4/rpc_server/drsuapi/getncchanges.c b/source4/rpc_server/drsuapi/getncchanges.c
index 56a37e9..f38f95c 100644
--- a/source4/rpc_server/drsuapi/getncchanges.c
+++ b/source4/rpc_server/drsuapi/getncchanges.c
@@ -51,6 +51,8 @@ static WERROR get_nc_changes_build_object(struct drsuapi_DsReplicaObjectListItem
 	uint32_t rid = 0;
 	enum ndr_err_code ndr_err;
 	uint32_t *attids;
+	const char *rdn;
+	const struct dsdb_attribute *rdn_sa;
 
 	if (ldb_dn_compare(ncRoot_dn, msg->dn) == 0) {
 		obj->is_nc_prefix = true;
@@ -59,6 +61,21 @@ static WERROR get_nc_changes_build_object(struct drsuapi_DsReplicaObjectListItem
 		obj->is_nc_prefix = false;
 		obj->parent_object_guid = talloc(obj, struct GUID);
 		*obj->parent_object_guid = samdb_result_guid(msg, "parentGUID");
+		if (GUID_all_zero(obj->parent_object_guid)) {
+			struct ldb_dn *parent_dn = ldb_dn_copy(msg, msg->dn);
+			if (parent_dn == NULL) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list