[SCM] Samba Shared Repository - branch master updated
Andrew Tridgell
tridge at samba.org
Fri Jan 15 20:11:23 MST 2010
The branch, master has been updated
via ee73608... s4-kcc: added DsReplicaGetInfo pending ops call
via 84b47d3... s4-provision: added w2k8r2 ldap capabilities
via 637d50b... s4-devel: added rebuild_zone.sh
via a9808ae... s4-provision: added "check-names ignore;" to allow for _msdcs A records
via 473345f... s4-kcc: added DsReplicaGetInfo CURSORS2 level
via 93531a5... s4-idl: in DsReplicaGetInfo unknown2 is actually an enumeration_context
via c22973d... s4-kcc: added support for CURSORS info level in DsReplicaGetInfo
via 8342d08... s4-dsdb: take advantage of local cursor and sort
via db7eba7... s4-dsdb: add our local cursor and sort in dsdb_load_udv_*()
via 0bba440... s4-drs: use dsdb_load_udv_v2() in getncchanges code
via 09d947f... s4-dsdb: use dsdb_load_udv_v2() in repl task
via 4cef742... s4-dsdb: added dsdb_load_udv_v2() and dsdb_load_udv_v1()
via 3ff3612... s4-kcc: simplify the ReplicaGetInfo implementation a bit
via 900fea3... s4-kcc: squash a warning
via 3a9b33b... s4-drs: better debug info when security checks fail
via 5efff3a... s4-dsdb: require admin access for DsReplicaGetInfo
via 5bfeed8... s4-drs: framework for DsGetReplInfo(), includes the DS_REPL_INFO_NEIGHBORS infoType.
via 22d9215... s4-drs: give better debug info on unsupported DRS calls
via 48bdf3e... s4-drs: torture test for DsGetReplInfo() (RPC-DSGETINFO test).
via 51bf383... s4-dsdb: added isGlobalCatalogReady
from f85b6ee... Second part of bug 7045 - Bad (non memory copying) interfaces in smbc_setXXXX calls.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit ee736083c07e953a5fee944d3e048e2a38f98b30
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 13:40:51 2010 +1100
s4-kcc: added DsReplicaGetInfo pending ops call
Just return 0 pending ops for now
commit 84b47d33349ff12fa5951f3348db20a05879f614
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 13:20:46 2010 +1100
s4-provision: added w2k8r2 ldap capabilities
commit 637d50b5d0eedced7c2cac6b0605a6c52eec2050
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 13:20:24 2010 +1100
s4-devel: added rebuild_zone.sh
This rebuilds a DNS zone file, including all DCs from sam.ldb
commit a9808ae83da936a2b93c9b8400ad2283a843ab4b
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 13:19:50 2010 +1100
s4-provision: added "check-names ignore;" to allow for _msdcs A records
commit 473345f8003a89a365a80963c24cb90d932c4e31
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 12:10:40 2010 +1100
s4-kcc: added DsReplicaGetInfo CURSORS2 level
commit 93531a52f030cad7d4237d7813fa1d73d641b35a
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 12:03:01 2010 +1100
s4-idl: in DsReplicaGetInfo unknown2 is actually an enumeration_context
commit c22973d88dbfb46e5c387ff03b7bb66bada7cac3
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:49:39 2010 +1100
s4-kcc: added support for CURSORS info level in DsReplicaGetInfo
commit 8342d08f5c3ffd02f54c5d5ace9e76cf551acb51
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:49:09 2010 +1100
s4-dsdb: take advantage of local cursor and sort
in getncchanges and repl task we don't need the extra load and sort
any more.
commit db7eba7080e3f60da6751d638a31eaf3e36c9b12
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:48:25 2010 +1100
s4-dsdb: add our local cursor and sort in dsdb_load_udv_*()
This makes things much simpler for the callers
commit 0bba44094af9a1d88e0c2443d382993f1ebfb91e
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:08:59 2010 +1100
s4-drs: use dsdb_load_udv_v2() in getncchanges code
commit 09d947f77cda4eb62c21cfd7acd539b8fe305a6a
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:08:44 2010 +1100
s4-dsdb: use dsdb_load_udv_v2() in repl task
commit 4cef7427ec22df1a5c16a22820952f2f963dc1e3
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 11:08:15 2010 +1100
s4-dsdb: added dsdb_load_udv_v2() and dsdb_load_udv_v1()
commit 3ff3612e29c16d7f3d87e06e6327d6b5bf530e2c
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 10:37:26 2010 +1100
s4-kcc: simplify the ReplicaGetInfo implementation a bit
commit 900fea322cabaa279e016508c688107415ed0796
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 10:36:56 2010 +1100
s4-kcc: squash a warning
commit 3a9b33b4876349165e7e16777fa283b128d525be
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 10:36:40 2010 +1100
s4-drs: better debug info when security checks fail
show the security token of the user at debug level 2
commit 5efff3ad6a7fdfe71101b2debe7d79678432c5c4
Author: Andrew Tridgell <tridge at samba.org>
Date: Sat Jan 16 10:36:06 2010 +1100
s4-dsdb: require admin access for DsReplicaGetInfo
commit 5bfeed89da6177adf9dfa49471adcbc25c7d0e7a
Author: Andrew Tridgell <tridge at samba.org>
Date: Fri Jan 15 19:36:16 2010 +1100
s4-drs: framework for DsGetReplInfo(), includes the DS_REPL_INFO_NEIGHBORS infoType.
This patch includes the framework for the implementation of all infoTypes of
the DsGetReplInfo() call, and includes the implementation for the first one,
the DS_REPL_INFO_NEIGHBORS.
Signed-off-by: Andrew Tridgell <tridge at samba.org>
commit 22d92157e35240b8b2f653a688dffd68a4b0e330
Author: Andrew Tridgell <tridge at samba.org>
Date: Fri Jan 15 19:34:32 2010 +1100
s4-drs: give better debug info on unsupported DRS calls
commit 48bdf3e608acf79926a7bc3acd9b0588216c7d64
Author: Erick Nogueira do Nascimento <erick.nogueira.nascimento at gmail.com>
Date: Wed Dec 23 17:54:30 2009 -0200
s4-drs: torture test for DsGetReplInfo() (RPC-DSGETINFO test).
Signed-off-by: Andrew Tridgell <tridge at samba.org>
commit 51bf383c26cb3f867f376305c803dac04ff686a7
Author: Andrew Tridgell <tridge at samba.org>
Date: Fri Jan 15 19:13:26 2010 +1100
s4-dsdb: added isGlobalCatalogReady
needed for dcdiag.exe
-----------------------------------------------------------------------
Summary of changes:
librpc/gen_ndr/drsuapi.h | 14 +-
librpc/gen_ndr/ndr_drsuapi.c | 42 +-
librpc/idl/drsuapi.idl | 14 +-
source4/dsdb/common/util.c | 128 +++++++
source4/dsdb/config.mk | 4 +-
source4/dsdb/kcc/kcc_drs_replica_info.c | 549 +++++++++++++++++++++++++++
source4/dsdb/kcc/kcc_service.c | 10 +-
source4/dsdb/kcc/kcc_service.h | 2 +
source4/dsdb/repl/drepl_partitions.c | 66 +---
source4/dsdb/samdb/ldb_modules/rootdse.c | 12 +
source4/rpc_server/drsuapi/dcesrv_drsuapi.c | 46 ++-
source4/rpc_server/drsuapi/drsutil.c | 11 +-
source4/rpc_server/drsuapi/getncchanges.c | 93 +----
source4/scripting/devel/rebuild_zone.sh | 107 ++++++
source4/setup/named.conf | 3 +
source4/setup/provision_rootdse_add.ldif | 2 +
source4/torture/config.mk | 2 +-
source4/torture/rpc/dsgetinfo.c | 350 +++++++++++++++++
source4/torture/rpc/rpc.c | 1 +
19 files changed, 1251 insertions(+), 205 deletions(-)
create mode 100644 source4/dsdb/kcc/kcc_drs_replica_info.c
create mode 100755 source4/scripting/devel/rebuild_zone.sh
create mode 100644 source4/torture/rpc/dsgetinfo.c
Changeset truncated at 500 lines:
diff --git a/librpc/gen_ndr/drsuapi.h b/librpc/gen_ndr/drsuapi.h
index 6cc62a8..a440b7a 100644
--- a/librpc/gen_ndr/drsuapi.h
+++ b/librpc/gen_ndr/drsuapi.h
@@ -1295,10 +1295,10 @@ struct drsuapi_DsReplicaGetInfoRequest2 {
enum drsuapi_DsReplicaInfoType info_type;
const char *object_dn;/* [unique,charset(UTF16)] */
struct GUID guid1;
- uint32_t unknown1;
+ uint32_t flags;
const char *string1;/* [unique,charset(UTF16)] */
const char *string2;/* [unique,charset(UTF16)] */
- uint32_t unknown2;
+ uint32_t enumeration_context;
};
union drsuapi_DsReplicaGetInfoRequest {
@@ -1420,13 +1420,13 @@ struct drsuapi_DsReplicaAttrValMetaData {
struct drsuapi_DsReplicaAttrValMetaDataCtr {
uint32_t count;
- int32_t enumeration_context;
+ uint32_t enumeration_context;
struct drsuapi_DsReplicaAttrValMetaData *array;/* [size_is(count)] */
};
struct drsuapi_DsReplicaCursor2Ctr {
uint32_t count;
- int32_t enumeration_context;
+ uint32_t enumeration_context;
struct drsuapi_DsReplicaCursor2 *array;/* [size_is(count)] */
};
@@ -1439,7 +1439,7 @@ struct drsuapi_DsReplicaCursor3 {
struct drsuapi_DsReplicaCursor3Ctr {
uint32_t count;
- int32_t enumeration_context;
+ uint32_t enumeration_context;
struct drsuapi_DsReplicaCursor3 *array;/* [size_is(count)] */
};
@@ -1455,7 +1455,7 @@ struct drsuapi_DsReplicaObjMetaData2 {
struct drsuapi_DsReplicaObjMetaData2Ctr {
uint32_t count;
- int32_t enumeration_context;
+ uint32_t enumeration_context;
struct drsuapi_DsReplicaObjMetaData2 *array;/* [size_is(count)] */
};
@@ -1476,7 +1476,7 @@ struct drsuapi_DsReplicaAttrValMetaData2 {
struct drsuapi_DsReplicaAttrValMetaData2Ctr {
uint32_t count;
- int32_t enumeration_context;
+ uint32_t enumeration_context;
struct drsuapi_DsReplicaAttrValMetaData2 *array;/* [size_is(count)] */
};
diff --git a/librpc/gen_ndr/ndr_drsuapi.c b/librpc/gen_ndr/ndr_drsuapi.c
index 3b8ac3d..f18b9aa 100644
--- a/librpc/gen_ndr/ndr_drsuapi.c
+++ b/librpc/gen_ndr/ndr_drsuapi.c
@@ -9708,10 +9708,10 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaGetInfoRequest2(struct ndr_pu
NDR_CHECK(ndr_push_drsuapi_DsReplicaInfoType(ndr, NDR_SCALARS, r->info_type));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->object_dn));
NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->guid1));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->flags));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->string1));
NDR_CHECK(ndr_push_unique_ptr(ndr, r->string2));
- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
NDR_CHECK(ndr_push_trailer_align(ndr, 5));
}
if (ndr_flags & NDR_BUFFERS) {
@@ -9755,7 +9755,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaGetInfoRequest2(struct ndr_pu
r->object_dn = NULL;
}
NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->guid1));
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->flags));
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_string1));
if (_ptr_string1) {
NDR_PULL_ALLOC(ndr, r->string1);
@@ -9768,7 +9768,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaGetInfoRequest2(struct ndr_pu
} else {
r->string2 = NULL;
}
- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
}
if (ndr_flags & NDR_BUFFERS) {
@@ -9824,7 +9824,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaGetInfoRequest2(struct ndr_print *ndr,
}
ndr->depth--;
ndr_print_GUID(ndr, "guid1", &r->guid1);
- ndr_print_uint32(ndr, "unknown1", r->unknown1);
+ ndr_print_uint32(ndr, "flags", r->flags);
ndr_print_ptr(ndr, "string1", r->string1);
ndr->depth++;
if (r->string1) {
@@ -9837,7 +9837,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaGetInfoRequest2(struct ndr_print *ndr,
ndr_print_string(ndr, "string2", r->string2);
}
ndr->depth--;
- ndr_print_uint32(ndr, "unknown2", r->unknown2);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->depth--;
}
@@ -10969,7 +10969,7 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaAttrValMetaDataCtr(struct ndr
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->count));
NDR_CHECK(ndr_push_align(ndr, 8));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
- NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->enumeration_context));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
for (cntr_array_0 = 0; cntr_array_0 < r->count; cntr_array_0++) {
NDR_CHECK(ndr_push_drsuapi_DsReplicaAttrValMetaData(ndr, NDR_SCALARS, &r->array[cntr_array_0]));
}
@@ -10991,7 +10991,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaAttrValMetaDataCtr(struct ndr
NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
- NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->enumeration_context));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
@@ -11021,7 +11021,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaAttrValMetaDataCtr(struct ndr_print *nd
ndr_print_struct(ndr, name, "drsuapi_DsReplicaAttrValMetaDataCtr");
ndr->depth++;
ndr_print_uint32(ndr, "count", r->count);
- ndr_print_int32(ndr, "enumeration_context", r->enumeration_context);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
ndr->depth++;
for (cntr_array_0=0;cntr_array_0<r->count;cntr_array_0++) {
@@ -11042,7 +11042,7 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaCursor2Ctr(struct ndr_push *n
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->count));
NDR_CHECK(ndr_push_align(ndr, 8));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
- NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->enumeration_context));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
for (cntr_array_0 = 0; cntr_array_0 < r->count; cntr_array_0++) {
NDR_CHECK(ndr_push_drsuapi_DsReplicaCursor2(ndr, NDR_SCALARS, &r->array[cntr_array_0]));
}
@@ -11061,7 +11061,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaCursor2Ctr(struct ndr_pull *n
NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
- NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->enumeration_context));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
@@ -11085,7 +11085,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaCursor2Ctr(struct ndr_print *ndr, const
ndr_print_struct(ndr, name, "drsuapi_DsReplicaCursor2Ctr");
ndr->depth++;
ndr_print_uint32(ndr, "count", r->count);
- ndr_print_int32(ndr, "enumeration_context", r->enumeration_context);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
ndr->depth++;
for (cntr_array_0=0;cntr_array_0<r->count;cntr_array_0++) {
@@ -11177,7 +11177,7 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaCursor3Ctr(struct ndr_push *n
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->count));
NDR_CHECK(ndr_push_align(ndr, 8));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
- NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->enumeration_context));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
for (cntr_array_0 = 0; cntr_array_0 < r->count; cntr_array_0++) {
NDR_CHECK(ndr_push_drsuapi_DsReplicaCursor3(ndr, NDR_SCALARS, &r->array[cntr_array_0]));
}
@@ -11199,7 +11199,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaCursor3Ctr(struct ndr_pull *n
NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
- NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->enumeration_context));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
@@ -11229,7 +11229,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaCursor3Ctr(struct ndr_print *ndr, const
ndr_print_struct(ndr, name, "drsuapi_DsReplicaCursor3Ctr");
ndr->depth++;
ndr_print_uint32(ndr, "count", r->count);
- ndr_print_int32(ndr, "enumeration_context", r->enumeration_context);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
ndr->depth++;
for (cntr_array_0=0;cntr_array_0<r->count;cntr_array_0++) {
@@ -11360,7 +11360,7 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaObjMetaData2Ctr(struct ndr_pu
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->count));
NDR_CHECK(ndr_push_align(ndr, 8));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
- NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->enumeration_context));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
for (cntr_array_0 = 0; cntr_array_0 < r->count; cntr_array_0++) {
NDR_CHECK(ndr_push_drsuapi_DsReplicaObjMetaData2(ndr, NDR_SCALARS, &r->array[cntr_array_0]));
}
@@ -11382,7 +11382,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaObjMetaData2Ctr(struct ndr_pu
NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
- NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->enumeration_context));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
@@ -11412,7 +11412,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaObjMetaData2Ctr(struct ndr_print *ndr,
ndr_print_struct(ndr, name, "drsuapi_DsReplicaObjMetaData2Ctr");
ndr->depth++;
ndr_print_uint32(ndr, "count", r->count);
- ndr_print_int32(ndr, "enumeration_context", r->enumeration_context);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
ndr->depth++;
for (cntr_array_0=0;cntr_array_0<r->count;cntr_array_0++) {
@@ -11609,7 +11609,7 @@ static enum ndr_err_code ndr_push_drsuapi_DsReplicaAttrValMetaData2Ctr(struct nd
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->count));
NDR_CHECK(ndr_push_align(ndr, 8));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->count));
- NDR_CHECK(ndr_push_int32(ndr, NDR_SCALARS, r->enumeration_context));
+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->enumeration_context));
for (cntr_array_0 = 0; cntr_array_0 < r->count; cntr_array_0++) {
NDR_CHECK(ndr_push_drsuapi_DsReplicaAttrValMetaData2(ndr, NDR_SCALARS, &r->array[cntr_array_0]));
}
@@ -11631,7 +11631,7 @@ static enum ndr_err_code ndr_pull_drsuapi_DsReplicaAttrValMetaData2Ctr(struct nd
NDR_CHECK(ndr_pull_array_size(ndr, &r->array));
NDR_CHECK(ndr_pull_align(ndr, 8));
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->count));
- NDR_CHECK(ndr_pull_int32(ndr, NDR_SCALARS, &r->enumeration_context));
+ NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->enumeration_context));
NDR_PULL_ALLOC_N(ndr, r->array, ndr_get_array_size(ndr, &r->array));
_mem_save_array_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->array, 0);
@@ -11661,7 +11661,7 @@ _PUBLIC_ void ndr_print_drsuapi_DsReplicaAttrValMetaData2Ctr(struct ndr_print *n
ndr_print_struct(ndr, name, "drsuapi_DsReplicaAttrValMetaData2Ctr");
ndr->depth++;
ndr_print_uint32(ndr, "count", r->count);
- ndr_print_int32(ndr, "enumeration_context", r->enumeration_context);
+ ndr_print_uint32(ndr, "enumeration_context", r->enumeration_context);
ndr->print(ndr, "%s: ARRAY(%d)", "array", (int)r->count);
ndr->depth++;
for (cntr_array_0=0;cntr_array_0<r->count;cntr_array_0++) {
diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl
index 9a9df03..b538b7c 100644
--- a/librpc/idl/drsuapi.idl
+++ b/librpc/idl/drsuapi.idl
@@ -1416,10 +1416,10 @@ interface drsuapi
drsuapi_DsReplicaInfoType info_type;
[charset(UTF16),string] uint16 *object_dn;
GUID guid1;
- uint32 unknown1;
+ uint32 flags;
[charset(UTF16),string] uint16 *string1;
[charset(UTF16),string] uint16 *string2;
- uint32 unknown2;
+ uint32 enumeration_context;
} drsuapi_DsReplicaGetInfoRequest2;
typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union {
@@ -1530,13 +1530,13 @@ interface drsuapi
typedef struct {
uint32 count;
- int32 enumeration_context;
+ uint32 enumeration_context;
[size_is(count)] drsuapi_DsReplicaAttrValMetaData array[];
} drsuapi_DsReplicaAttrValMetaDataCtr;
typedef struct {
uint32 count;
- int32 enumeration_context;
+ uint32 enumeration_context;
[size_is(count)] drsuapi_DsReplicaCursor2 array[];
} drsuapi_DsReplicaCursor2Ctr;
@@ -1549,7 +1549,7 @@ interface drsuapi
typedef struct {
uint32 count;
- int32 enumeration_context;
+ uint32 enumeration_context;
[size_is(count)] drsuapi_DsReplicaCursor3 array[];
} drsuapi_DsReplicaCursor3Ctr;
@@ -1565,7 +1565,7 @@ interface drsuapi
typedef struct {
uint32 count;
- int32 enumeration_context;
+ uint32 enumeration_context;
[size_is(count)] drsuapi_DsReplicaObjMetaData2 array[];
} drsuapi_DsReplicaObjMetaData2Ctr;
@@ -1586,7 +1586,7 @@ interface drsuapi
typedef struct {
uint32 count;
- int32 enumeration_context;
+ uint32 enumeration_context;
[size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[];
} drsuapi_DsReplicaAttrValMetaData2Ctr;
diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index 5dcbbd8..b57d383 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -3237,3 +3237,131 @@ int samdb_ldb_val_case_cmp(const char *s, struct ldb_val *v)
}
return 0;
}
+
+
+/*
+ load the UDV for a partition in v2 format
+ The list is returned sorted, and with our local cursor added
+ */
+int dsdb_load_udv_v2(struct ldb_context *samdb, struct ldb_dn *dn, TALLOC_CTX *mem_ctx,
+ struct drsuapi_DsReplicaCursor2 **cursors, uint32_t *count)
+{
+ static const char *attrs[] = { "replUpToDateVector", NULL };
+ struct ldb_result *r;
+ const struct ldb_val *ouv_value;
+ int ret, i;
+ uint64_t highest_usn;
+ const struct GUID *our_invocation_id;
+ struct timeval now = timeval_current();
+
+ ret = ldb_search(samdb, mem_ctx, &r, dn, LDB_SCOPE_BASE, attrs, NULL);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ ouv_value = ldb_msg_find_ldb_val(r->msgs[0], "replUpToDateVector");
+ if (ouv_value) {
+ enum ndr_err_code ndr_err;
+ struct replUpToDateVectorBlob ouv;
+
+ ndr_err = ndr_pull_struct_blob(ouv_value, r,
+ lp_iconv_convenience(ldb_get_opaque(samdb, "loadparm")), &ouv,
+ (ndr_pull_flags_fn_t)ndr_pull_replUpToDateVectorBlob);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ talloc_free(r);
+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+ }
+ if (ouv.version != 2) {
+ /* we always store as version 2, and
+ * replUpToDateVector is not replicated
+ */
+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
+ }
+
+ *count = ouv.ctr.ctr2.count;
+ *cursors = talloc_steal(mem_ctx, ouv.ctr.ctr2.cursors);
+ } else {
+ *count = 0;
+ *cursors = NULL;
+ }
+
+ talloc_free(r);
+
+ our_invocation_id = samdb_ntds_invocation_id(samdb);
+ if (!our_invocation_id) {
+ DEBUG(0,(__location__ ": No invocationID on samdb - %s\n", ldb_errstring(samdb)));
+ talloc_free(*cursors);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ ret = dsdb_load_partition_usn(samdb, dn, &highest_usn, NULL);
+ if (ret != LDB_SUCCESS) {
+ /* nothing to add - this can happen after a vampire */
+ qsort(*cursors, *count,
+ sizeof(struct drsuapi_DsReplicaCursor2),
+ (comparison_fn_t)drsuapi_DsReplicaCursor2_compare);
+ return LDB_SUCCESS;
+ }
+
+ for (i=0; i<*count; i++) {
+ if (GUID_equal(our_invocation_id, &(*cursors)[i].source_dsa_invocation_id)) {
+ (*cursors)[i].highest_usn = highest_usn;
+ (*cursors)[i].last_sync_success = timeval_to_nttime(&now);
+ qsort(*cursors, *count,
+ sizeof(struct drsuapi_DsReplicaCursor2),
+ (comparison_fn_t)drsuapi_DsReplicaCursor2_compare);
+ return LDB_SUCCESS;
+ }
+ }
+
+ (*cursors) = talloc_realloc(mem_ctx, *cursors, struct drsuapi_DsReplicaCursor2, (*count)+1);
+ if (! *cursors) {
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ (*cursors)[*count].source_dsa_invocation_id = *our_invocation_id;
+ (*cursors)[*count].highest_usn = highest_usn;
+ (*cursors)[*count].last_sync_success = timeval_to_nttime(&now);
+ (*count)++;
+
+ qsort(*cursors, *count,
+ sizeof(struct drsuapi_DsReplicaCursor2),
+ (comparison_fn_t)drsuapi_DsReplicaCursor2_compare);
+
+ return LDB_SUCCESS;
+}
+
+/*
+ load the UDV for a partition in version 1 format
+ The list is returned sorted, and with our local cursor added
+ */
+int dsdb_load_udv_v1(struct ldb_context *samdb, struct ldb_dn *dn, TALLOC_CTX *mem_ctx,
+ struct drsuapi_DsReplicaCursor **cursors, uint32_t *count)
+{
+ struct drsuapi_DsReplicaCursor2 *v2;
+ int ret, i;
+
+ ret = dsdb_load_udv_v2(samdb, dn, mem_ctx, &v2, count);
+ if (ret != LDB_SUCCESS) {
+ return ret;
+ }
+
+ if (*count == 0) {
+ talloc_free(v2);
+ *cursors = NULL;
+ return LDB_SUCCESS;
+ }
+
+ *cursors = talloc_array(mem_ctx, struct drsuapi_DsReplicaCursor, *count);
+ if (*cursors == NULL) {
+ talloc_free(v2);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ for (i=0; i<*count; i++) {
+ (*cursors)[i].source_dsa_invocation_id = v2[i].source_dsa_invocation_id;
+ (*cursors)[i].highest_usn = v2[i].highest_usn;
+ }
+ talloc_free(v2);
+ return LDB_SUCCESS;
+}
diff --git a/source4/dsdb/config.mk b/source4/dsdb/config.mk
index 3226c08..5ea31c3 100644
--- a/source4/dsdb/config.mk
+++ b/source4/dsdb/config.mk
@@ -85,6 +85,8 @@ KCC_SRV_OBJ_FILES = $(addprefix $(dsdbsrcdir)/kcc/, \
kcc_service.o \
kcc_connection.o \
kcc_deleted.o \
- kcc_periodic.o)
+ kcc_periodic.o \
+ kcc_drs_replica_info.o)
$(eval $(call proto_header_template,$(dsdbsrcdir)/kcc/kcc_service_proto.h,$(KCC_SRV_OBJ_FILES:.o=.c)))
+
diff --git a/source4/dsdb/kcc/kcc_drs_replica_info.c b/source4/dsdb/kcc/kcc_drs_replica_info.c
new file mode 100644
index 0000000..8c18293
--- /dev/null
+++ b/source4/dsdb/kcc/kcc_drs_replica_info.c
@@ -0,0 +1,549 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ DRS Replica Information
+
+ Copyright (C) Erick Nogueira do Nascimento 2009
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
+#include "includes.h"
+#include "dsdb/samdb/samdb.h"
+#include "auth/auth.h"
+#include "smbd/service.h"
+#include "lib/events/events.h"
+#include "lib/messaging/irpc.h"
+#include "dsdb/kcc/kcc_service.h"
+#include "lib/ldb/include/ldb_errors.h"
+#include "../lib/util/dlinklist.h"
+#include "librpc/gen_ndr/ndr_misc.h"
+#include "librpc/gen_ndr/ndr_drsuapi.h"
+#include "librpc/gen_ndr/ndr_drsblobs.h"
+#include "param/param.h"
+
--
Samba Shared Repository
More information about the samba-cvs
mailing list