svn commit: samba r20293 - in branches/SAMBA_4_0/source: libnet
torture/libnet
metze at samba.org
metze at samba.org
Wed Dec 20 21:54:07 GMT 2006
Author: metze
Date: 2006-12-20 21:54:06 +0000 (Wed, 20 Dec 2006)
New Revision: 20293
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20293
Log:
implement store chunk hook for libnet_BecomeDC()
metze
Modified:
branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
branches/SAMBA_4_0/source/libnet/libnet_become_dc.h
branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c
Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-20 21:17:19 UTC (rev 20292)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-20 21:54:06 UTC (rev 20293)
@@ -65,21 +65,8 @@
struct libnet_BecomeDC_SourceDSA source_dsa;
struct libnet_BecomeDC_DestDSA dest_dsa;
- struct becomeDC_partition {
- struct drsuapi_DsReplicaObjectIdentifier nc;
- struct GUID destination_dsa_guid;
- struct GUID source_dsa_guid;
- struct GUID source_dsa_invocation_id;
- struct drsuapi_DsReplicaHighWaterMark highwatermark;
- struct drsuapi_DsReplicaCoursorCtrEx *uptodateness_vector;
- uint32_t replica_flags;
+ struct libnet_BecomeDC_Partition schema_part, config_part, domain_part;
- struct drsuapi_DsReplicaObjectListItemEx *first_object;
- struct drsuapi_DsReplicaObjectListItemEx *last_object;
-
- NTSTATUS (*store_chunk)(void *private_data, void *todo);
- } schema_part, config_part, domain_part;
-
struct becomeDC_fsmo {
const char *dns_name;
const char *server_dn_str;
@@ -91,6 +78,7 @@
struct libnet_BecomeDC_CheckOptions _co;
struct libnet_BecomeDC_PrepareDB _pp;
+ struct libnet_BecomeDC_StoreChunk _sc;
struct libnet_BecomeDC_Callbacks callbacks;
};
@@ -1555,7 +1543,7 @@
static void becomeDC_drsuapi_pull_partition_send(struct libnet_BecomeDC_state *s,
struct becomeDC_drsuapi *drsuapi_h,
struct becomeDC_drsuapi *drsuapi_p,
- struct becomeDC_partition *partition,
+ struct libnet_BecomeDC_Partition *partition,
void (*recv_fn)(struct rpc_request *req))
{
struct composite_context *c = s->creq;
@@ -1572,7 +1560,7 @@
r->in.req.req8.source_dsa_invocation_id = partition->source_dsa_invocation_id;
r->in.req.req8.naming_context = &partition->nc;
r->in.req.req8.highwatermark = partition->highwatermark;
- r->in.req.req8.uptodateness_vector = partition->uptodateness_vector;
+ r->in.req.req8.uptodateness_vector = NULL;
r->in.req.req8.replica_flags = partition->replica_flags;
r->in.req.req8.max_object_count = 133;
r->in.req.req8.max_ndr_size = 1336811;
@@ -1588,7 +1576,7 @@
r->in.req.req5.source_dsa_invocation_id = partition->source_dsa_invocation_id;
r->in.req.req5.naming_context = &partition->nc;
r->in.req.req5.highwatermark = partition->highwatermark;
- r->in.req.req5.uptodateness_vector = partition->uptodateness_vector;
+ r->in.req.req5.uptodateness_vector = NULL;
r->in.req.req5.replica_flags = partition->replica_flags;
r->in.req.req5.max_object_count = 133;
r->in.req.req5.max_ndr_size = 1336770;
@@ -1596,11 +1584,6 @@
r->in.req.req5.h1 = 0;
}
-DEBUG(0,("start NC[%s] tmp_highest_usn[%llu] highest_usn[%llu]\n",
- partition->nc.dn,
- partition->highwatermark.tmp_highest_usn,
- partition->highwatermark.highest_usn));
-
/*
* we should try to use the drsuapi_p->pipe here, as w2k3 does
* but it seems that some extra flags in the DCERPC Bind call
@@ -1612,52 +1595,49 @@
}
static WERROR becomeDC_drsuapi_pull_partition_recv(struct libnet_BecomeDC_state *s,
- struct becomeDC_partition *partition,
+ struct libnet_BecomeDC_Partition *partition,
struct drsuapi_DsGetNCChanges *r)
{
+ uint32_t ctr_level = 0;
struct drsuapi_DsGetNCChangesCtr1 *ctr1 = NULL;
struct drsuapi_DsGetNCChangesCtr6 *ctr6 = NULL;
- uint32_t out_level = 0;
struct GUID *source_dsa_guid;
struct GUID *source_dsa_invocation_id;
struct drsuapi_DsReplicaHighWaterMark *new_highwatermark;
- struct drsuapi_DsReplicaObjectListItemEx *first_object;
- struct drsuapi_DsReplicaObjectListItemEx *cur;
+ NTSTATUS nt_status;
if (!W_ERROR_IS_OK(r->out.result)) {
return r->out.result;
}
if (r->out.level == 1) {
- out_level = 1;
+ ctr_level = 1;
ctr1 = &r->out.ctr.ctr1;
} else if (r->out.level == 2) {
- out_level = 1;
+ ctr_level = 1;
ctr1 = r->out.ctr.ctr2.ctr.mszip1.ctr1;
} else if (r->out.level == 6) {
- out_level = 6;
+ ctr_level = 6;
ctr6 = &r->out.ctr.ctr6;
} else if (r->out.level == 7 &&
r->out.ctr.ctr7.level == 6 &&
r->out.ctr.ctr7.type == DRSUAPI_COMPRESSION_TYPE_MSZIP) {
- out_level = 6;
+ ctr_level = 6;
ctr6 = r->out.ctr.ctr7.ctr.mszip6.ctr6;
} else {
return WERR_BAD_NET_RESP;
}
- switch (out_level) {
+ switch (ctr_level) {
case 1:
source_dsa_guid = &ctr1->source_dsa_guid;
source_dsa_invocation_id = &ctr1->source_dsa_invocation_id;
new_highwatermark = &ctr1->new_highwatermark;
- first_object = ctr1->first_object;
break;
case 6:
source_dsa_guid = &ctr6->source_dsa_guid;
source_dsa_invocation_id = &ctr6->source_dsa_invocation_id;
new_highwatermark = &ctr6->new_highwatermark;
- first_object = ctr6->first_object;
break;
}
@@ -1665,26 +1645,20 @@
partition->source_dsa_guid = *source_dsa_guid;
partition->source_dsa_invocation_id = *source_dsa_invocation_id;
- if (!partition->first_object) {
- partition->first_object = talloc_steal(s, first_object);
- } else {
- partition->last_object->next_object = talloc_steal(partition->last_object,
- first_object);
- }
- for (cur = first_object; cur->next_object; cur = cur->next_object) {}
- partition->last_object = cur;
+ if (!partition->store_chunk) return WERR_OK;
-DEBUG(0,("end NC[%s] tmp_highest_usn[%llu] highest_usn[%llu]\n",
- partition->nc.dn,
- partition->highwatermark.tmp_highest_usn,
- partition->highwatermark.highest_usn));
+ s->_sc.domain = &s->domain;
+ s->_sc.forest = &s->forest;
+ s->_sc.source_dsa = &s->source_dsa;
+ s->_sc.dest_dsa = &s->dest_dsa;
+ s->_sc.partition = partition;
+ s->_sc.ctr_level = ctr_level;
+ s->_sc.ctr1 = ctr1;
+ s->_sc.ctr6 = ctr6;
- if (partition->store_chunk) {
- NTSTATUS nt_status;
- nt_status = partition->store_chunk(s->callbacks.private_data, NULL);
- if (!NT_STATUS_IS_OK(nt_status)) {
- return ntstatus_to_werror(nt_status);
- }
+ nt_status = partition->store_chunk(s->callbacks.private_data, &s->_sc);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ return ntstatus_to_werror(nt_status);
}
return WERR_OK;
@@ -1821,7 +1795,7 @@
static void becomeDC_drsuapi_update_refs_send(struct libnet_BecomeDC_state *s,
struct becomeDC_drsuapi *drsuapi,
- struct becomeDC_partition *partition,
+ struct libnet_BecomeDC_Partition *partition,
void (*recv_fn)(struct rpc_request *req));
static void becomeDC_drsuapi2_update_refs_schema_recv(struct rpc_request *req);
@@ -1857,7 +1831,7 @@
static void becomeDC_drsuapi_update_refs_send(struct libnet_BecomeDC_state *s,
struct becomeDC_drsuapi *drsuapi,
- struct becomeDC_partition *partition,
+ struct libnet_BecomeDC_Partition *partition,
void (*recv_fn)(struct rpc_request *req))
{
struct composite_context *c = s->creq;
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.h
===================================================================
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.h 2006-12-20 21:17:19 UTC (rev 20292)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.h 2006-12-20 21:54:06 UTC (rev 20293)
@@ -18,6 +18,11 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#ifndef _LIBNET_BECOME_DC_H
+#define _LIBNET_BECOME_DC_H
+
+#include "librpc/gen_ndr/drsuapi.h"
+
struct libnet_BecomeDC_Domain {
/* input */
const char *dns_name;
@@ -82,15 +87,43 @@
const struct libnet_BecomeDC_DestDSA *dest_dsa;
};
+struct libnet_BecomeDC_StoreChunk;
+
+struct libnet_BecomeDC_Partition {
+ struct drsuapi_DsReplicaObjectIdentifier nc;
+ struct GUID destination_dsa_guid;
+ struct GUID source_dsa_guid;
+ struct GUID source_dsa_invocation_id;
+ struct drsuapi_DsReplicaHighWaterMark highwatermark;
+ uint32_t replica_flags;
+
+ NTSTATUS (*store_chunk)(void *private_data,
+ const struct libnet_BecomeDC_StoreChunk *info);
+};
+
+struct libnet_BecomeDC_StoreChunk {
+ const struct libnet_BecomeDC_Domain *domain;
+ const struct libnet_BecomeDC_Forest *forest;
+ const struct libnet_BecomeDC_SourceDSA *source_dsa;
+ const struct libnet_BecomeDC_DestDSA *dest_dsa;
+ const struct libnet_BecomeDC_Partition *partition;
+ uint32_t ctr_level;
+ const struct drsuapi_DsGetNCChangesCtr1 *ctr1;
+ const struct drsuapi_DsGetNCChangesCtr6 *ctr6;
+};
+
struct libnet_BecomeDC_Callbacks {
void *private_data;
NTSTATUS (*check_options)(void *private_data,
const struct libnet_BecomeDC_CheckOptions *info);
NTSTATUS (*prepare_db)(void *private_data,
const struct libnet_BecomeDC_PrepareDB *info);
- NTSTATUS (*schema_chunk)(void *private_data, void *todo);
- NTSTATUS (*config_chunk)(void *private_data, void *todo);
- NTSTATUS (*domain_chunk)(void *private_data, void *todo);
+ NTSTATUS (*schema_chunk)(void *private_data,
+ const struct libnet_BecomeDC_StoreChunk *info);
+ NTSTATUS (*config_chunk)(void *private_data,
+ const struct libnet_BecomeDC_StoreChunk *info);
+ NTSTATUS (*domain_chunk)(void *private_data,
+ const struct libnet_BecomeDC_StoreChunk *info);
};
struct libnet_BecomeDC {
@@ -108,3 +141,5 @@
const char *error_string;
} out;
};
+
+#endif /* _LIBNET_BECOME_DC_H */
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c
===================================================================
--- branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c 2006-12-20 21:17:19 UTC (rev 20292)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_BecomeDC.c 2006-12-20 21:54:06 UTC (rev 20293)
@@ -77,6 +77,15 @@
return NT_STATUS_OK;
}
+static NTSTATUS test_become_dc_store_chunk(void *private_data,
+ const struct libnet_BecomeDC_StoreChunk *c)
+{
+ DEBUG(0,("Partition[%s]\n",
+ c->partition->nc.dn));
+
+ return NT_STATUS_OK;
+}
+
BOOL torture_net_become_dc(struct torture_context *torture)
{
BOOL ret = True;
@@ -110,6 +119,9 @@
b.in.callbacks.private_data = tj;
b.in.callbacks.check_options = test_become_dc_check_options;
b.in.callbacks.prepare_db = test_become_dc_prepare_db;
+ b.in.callbacks.schema_chunk = test_become_dc_store_chunk;
+ b.in.callbacks.config_chunk = test_become_dc_store_chunk;
+ b.in.callbacks.domain_chunk = test_become_dc_store_chunk;
status = libnet_BecomeDC(ctx, ctx, &b);
if (!NT_STATUS_IS_OK(status)) {
More information about the samba-cvs
mailing list