[PATCH] Re: Fix up NET-API-BECOME-DC and repl_meta_data
Stefan (metze) Metzmacher
metze at samba.org
Tue Jan 22 11:16:10 GMT 2008
Andrew,
please commit this in small pieces using 'git add -i'
and check with 'git diff --cached' what is selected for the next
commit.
metze
>> ------------------------------------------------------------------------
>>
>> diff --git a/source/dsdb/repl/replicated_objects.c b/source/dsdb/repl/replicated_objects.c
>> index 8aff134..552d83f 100644
>> --- a/source/dsdb/repl/replicated_objects.c
>> +++ b/source/dsdb/repl/replicated_objects.c
>> @@ -400,8 +400,8 @@ WERROR dsdb_extended_replicated_objects_commit(struct ldb_context *ldb,
>>
>> ret = ldb_extended(ldb, DSDB_EXTENDED_REPLICATED_OBJECTS_OID, out, &ext_res);
>> if (ret != LDB_SUCCESS) {
>> - DEBUG(0,("Failed to apply records: %d: %s\n",
>> - ret, ldb_strerror(ret)));
>> + DEBUG(0,("Failed to apply records: %s: %s\n",
>> + ldb_errstring(ldb), ldb_strerror(ret)));
>> talloc_free(out);
>> return WERR_FOOBAR;
>> }
please commit this in a single commit.
>> diff --git a/source/dsdb/samdb/ldb_modules/partition.c b/source/dsdb/samdb/ldb_modules/partition.c
>> index 61b6444..40511a9 100644
>> --- a/source/dsdb/samdb/ldb_modules/partition.c
>> +++ b/source/dsdb/samdb/ldb_modules/partition.c
>> @@ -303,10 +303,19 @@ static int partition_replicate(struct ldb_module *module, struct ldb_request *re
>> * if we haven't found a matching partition
>> * pass the request to the main ldb
>> *
>> - * TODO: we should maybe return an error here
>> - * if it's not a special dn
>> */
>>
>> + if (!ldb_dn_is_special(dn)) {
>> + /* TODO:
>> + We should change this to a referral,
>> + based on pulling the DN apart, in future
>> + */
>> + ldb_asprintf_errstring(module->ldb,
>> + "partition_replicate: "
>> + "Operation on DN %s invalid, not a partition",
>> + ldb_dn_get_linearized(dn));
>> + return LDB_ERR_NO_SUCH_OBJECT;
>> + }
>> return ldb_next_request(module, req);
>> }
This should also be a small commit.
>> @@ -678,7 +687,6 @@ static int partition_sequence_number(struct ldb_module *module, struct ldb_reque
>> static int partition_extended_replicated_objects(struct ldb_module *module, struct ldb_request *req)
>> {
>> struct dsdb_extended_replicated_objects *ext;
>> -
>> ext = talloc_get_type(req->op.extended.data, struct dsdb_extended_replicated_objects);
>> if (!ext) {
>> ldb_debug(module->ldb, LDB_DEBUG_FATAL, "partition_extended_replicated_objects: invalid extended data\n");
>> @@ -692,6 +700,7 @@ static int partition_extended_replicated_objects(struct ldb_module *module, stru
>> }
>>
>> return partition_replicate(module, req, ext->partition_dn);
>> +
>> }
>>
>> /* extended */
please drop this reformatting.
>> diff --git a/source/dsdb/samdb/ldb_modules/repl_meta_data.c b/source/dsdb/samdb/ldb_modules/repl_meta_data.c
>> index 5a3cc4b..a21cf25 100644
>> --- a/source/dsdb/samdb/ldb_modules/repl_meta_data.c
>> +++ b/source/dsdb/samdb/ldb_modules/repl_meta_data.c
>> @@ -240,12 +240,9 @@ static int replmd_prepare_originating(struct ldb_module *module, struct ldb_requ
>> struct ldb_dn *dn, const char *fn_name,
>> int (*fn)(struct ldb_module *,
>> struct ldb_request *,
>> - const struct dsdb_schema *,
>> - const struct dsdb_control_current_partition *))
>> + const struct dsdb_schema *))
>> {
>> const struct dsdb_schema *schema;
>> - const struct ldb_control *partition_ctrl;
>> - const struct dsdb_control_current_partition *partition;
>>
>> /* do not manipulate our control entries */
>> if (ldb_dn_is_special(dn)) {
>> @@ -260,46 +257,16 @@ static int replmd_prepare_originating(struct ldb_module *module, struct ldb_requ
>> return LDB_ERR_CONSTRAINT_VIOLATION;
>> }
>>
>> - partition_ctrl = ldb_request_get_control(req, DSDB_CONTROL_CURRENT_PARTITION_OID);
>> - if (!partition_ctrl) {
>> - ldb_debug_set(module->ldb, LDB_DEBUG_FATAL,
>> - "%s: no current partition control found",
>> - fn_name);
>> - return LDB_ERR_CONSTRAINT_VIOLATION;
>> - }
>> -
>> - partition = talloc_get_type(partition_ctrl->data,
>> - struct dsdb_control_current_partition);
>> - if (!partition) {
>> - ldb_debug_set(module->ldb, LDB_DEBUG_FATAL,
>> - "%s: current partition control contains invalid data",
>> - fn_name);
>> - return LDB_ERR_CONSTRAINT_VIOLATION;
>> - }
>> -
>> - if (partition->version != DSDB_CONTROL_CURRENT_PARTITION_VERSION) {
>> - ldb_debug_set(module->ldb, LDB_DEBUG_FATAL,
>> - "%s: current partition control contains invalid version [%u != %u]\n",
>> - fn_name, partition->version, DSDB_CONTROL_CURRENT_PARTITION_VERSION);
>> - return LDB_ERR_CONSTRAINT_VIOLATION;
>> - }
>> -
>> - return fn(module, req, schema, partition);
>> + return fn(module, req, schema);
>> }
>>
>> static int replmd_add_originating(struct ldb_module *module,
>> struct ldb_request *req,
>> - const struct dsdb_schema *schema,
>> - const struct dsdb_control_current_partition *partition)
>> + const struct dsdb_schema *schema)
>> {
>> enum ndr_err_code ndr_err;
>> struct ldb_request *down_req;
>> struct ldb_message *msg;
>> - uint32_t instance_type;
>> - struct ldb_dn *new_dn;
>> - const char *rdn_name;
>> - const char *rdn_name_upper;
>> - const struct ldb_val *rdn_value = NULL;
>> const struct dsdb_attribute *rdn_attr = NULL;
>> struct GUID guid;
>> struct ldb_val guid_value;
>> @@ -321,12 +288,6 @@ static int replmd_add_originating(struct ldb_module *module,
>> return LDB_ERR_UNWILLING_TO_PERFORM;
>> }
>>
>> - if (ldb_msg_find_element(req->op.add.message, "instanceType")) {
>> - ldb_debug_set(module->ldb, LDB_DEBUG_ERROR,
>> - "replmd_add_originating: it's not allowed to add an object with instanceType\n");
>> - return LDB_ERR_UNWILLING_TO_PERFORM;
>> - }
>> -
>> /* Get a sequence number from the backend */
>> ret = ldb_sequence_number(module->ldb, LDB_SEQ_NEXT, &seq_num);
>> if (ret != LDB_SUCCESS) {
>> @@ -368,32 +329,9 @@ static int replmd_add_originating(struct ldb_module *module,
>> return LDB_ERR_OPERATIONS_ERROR;
>> }
>>
>> - /*
>> - * get details of the rdn name
>> - */
>> - rdn_name = ldb_dn_get_rdn_name(msg->dn);
>> - if (!rdn_name) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - rdn_attr = dsdb_attribute_by_lDAPDisplayName(schema, rdn_name);
>> - if (!rdn_attr) {
>> - talloc_free(down_req);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - rdn_value = ldb_dn_get_rdn_val(msg->dn);
>> - if (!rdn_value) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> -
>> /*
>> * remove autogenerated attributes
>> */
>> - ldb_msg_remove_attr(msg, rdn_name);
>> - ldb_msg_remove_attr(msg, "name");
>> ldb_msg_remove_attr(msg, "whenCreated");
>> ldb_msg_remove_attr(msg, "whenChanged");
>> ldb_msg_remove_attr(msg, "uSNCreated");
>> @@ -401,69 +339,14 @@ static int replmd_add_originating(struct ldb_module *module,
>> ldb_msg_remove_attr(msg, "replPropertyMetaData");
>>
>> /*
>> - * TODO: construct a new DN out of:
>> - * - the parent DN
>> - * - the upper case of rdn_attr->LDAPDisplayName
>> - * - rdn_value
>> - */
>> - new_dn = ldb_dn_copy(msg, msg->dn);
>> - if (!new_dn) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - rdn_name_upper = strupper_talloc(msg, rdn_attr->lDAPDisplayName);
>> - if (!rdn_name_upper) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - ret = ldb_dn_set_component(new_dn, 0, rdn_name_upper, *rdn_value);
>> - if (ret != LDB_SUCCESS) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - msg->dn = new_dn;
>> -
>> - /*
>> - * TODO: calculate correct instance type
>> - */
>> - instance_type = INSTANCE_TYPE_WRITE;
>> - if (ldb_dn_compare(partition->dn, msg->dn) == 0) {
>> - instance_type |= INSTANCE_TYPE_IS_NC_HEAD;
>> - if (ldb_dn_compare(msg->dn, samdb_base_dn(module->ldb)) != 0) {
>> - instance_type |= INSTANCE_TYPE_NC_ABOVE;
>> - }
>> - }
>> -
>> - /*
>> * readd replicated attributes
>> */
>> - ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL);
>> - if (ret != LDB_SUCCESS) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> - ret = ldb_msg_add_value(msg, "name", rdn_value, NULL);
>> - if (ret != LDB_SUCCESS) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>> ret = ldb_msg_add_string(msg, "whenCreated", time_str);
>> if (ret != LDB_SUCCESS) {
>> talloc_free(down_req);
>> ldb_oom(module->ldb);
>> return LDB_ERR_OPERATIONS_ERROR;
>> }
>> - ret = ldb_msg_add_fmt(msg, "instanceType", "%u", instance_type);
>> - if (ret != LDB_SUCCESS) {
>> - talloc_free(down_req);
>> - ldb_oom(module->ldb);
>> - return LDB_ERR_OPERATIONS_ERROR;
>> - }
>>
>> /* build the replication meta_data */
>> ZERO_STRUCT(nmd);
>> @@ -598,8 +481,7 @@ static int replmd_add(struct ldb_module *module, struct ldb_request *req)
>>
>> static int replmd_modify_originating(struct ldb_module *module,
>> struct ldb_request *req,
>> - const struct dsdb_schema *schema,
>> - const struct dsdb_control_current_partition *partition)
>> + const struct dsdb_schema *schema)
>> {
>> struct ldb_request *down_req;
>> struct ldb_message *msg;
>> @@ -806,10 +688,16 @@ static int replmd_replicated_apply_add(struct replmd_replicated_request *ar)
>> return ldb_next_request(ar->module, ar->sub.change_req);
>> #else
>> ret = ldb_next_request(ar->module, ar->sub.change_req);
>> - if (ret != LDB_SUCCESS) return replmd_replicated_request_error(ar, ret);
>> + if (ret != LDB_SUCCESS) {
>> + ldb_asprintf_errstring(ar->module->ldb, "Failed to add replicated object %s: %s", ldb_dn_get_linearized(ar->sub.change_req->op.add.message->dn),
>> + ldb_errstring(ar->module->ldb));
>> + return replmd_replicated_request_error(ar, ret);
>> + }
>>
>> - ar->sub.change_ret = ldb_wait(ar->sub.search_req->handle, LDB_WAIT_ALL);
>> + ar->sub.change_ret = ldb_wait(ar->sub.change_req->handle, LDB_WAIT_ALL);
>> if (ar->sub.change_ret != LDB_SUCCESS) {
>> + ldb_asprintf_errstring(ar->module->ldb, "Failed while waiting on add replicated object %s: %s", ldb_dn_get_linearized(ar->sub.change_req->op.add.message->dn),
>> + ldb_errstring(ar->module->ldb));
>> return replmd_replicated_request_error(ar, ar->sub.change_ret);
>> }
>>
>> @@ -1053,7 +941,7 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar)
>> ret = ldb_next_request(ar->module, ar->sub.change_req);
>> if (ret != LDB_SUCCESS) return replmd_replicated_request_error(ar, ret);
>>
>> - ar->sub.change_ret = ldb_wait(ar->sub.search_req->handle, LDB_WAIT_ALL);
>> + ar->sub.change_ret = ldb_wait(ar->sub.change_req->handle, LDB_WAIT_ALL);
>> if (ar->sub.change_ret != LDB_SUCCESS) {
>> return replmd_replicated_request_error(ar, ar->sub.change_ret);
>> }
>> @@ -1137,7 +1025,7 @@ static int replmd_replicated_apply_search(struct replmd_replicated_request *ar)
>> if (ret != LDB_SUCCESS) return replmd_replicated_request_error(ar, ret);
>>
>> ar->sub.search_ret = ldb_wait(ar->sub.search_req->handle, LDB_WAIT_ALL);
>> - if (ar->sub.search_ret != LDB_SUCCESS) {
>> + if (ar->sub.search_ret != LDB_SUCCESS && ar->sub.search_ret != LDB_ERR_NO_SUCH_OBJECT) {
>> return replmd_replicated_request_error(ar, ar->sub.search_ret);
>> }
>> if (ar->sub.search_msg) {
The above looks ok.
>> diff --git a/source/dsdb/schema/schema_syntax.c b/source/dsdb/schema/schema_syntax.c
>> index 9bc51c6..2c133b6 100644
>> --- a/source/dsdb/schema/schema_syntax.c
>> +++ b/source/dsdb/schema/schema_syntax.c
>> @@ -939,7 +939,7 @@ static WERROR dsdb_syntax_DN_BINARY_drsuapi_to_ldb(const struct dsdb_schema *sch
>> }
>>
>> ndr_err = ndr_pull_struct_blob_all(in->value_ctr.values[i].blob,
>> - out->values, NULL, &id3b,
>> + out->values, lp_iconv_convenience(global_loadparm), &id3b,
>> (ndr_pull_flags_fn_t)ndr_pull_drsuapi_DsReplicaObjectIdentifier3Binary);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
>> @@ -997,7 +997,7 @@ static WERROR dsdb_syntax_DN_BINARY_ldb_to_drsuapi(const struct dsdb_schema *sch
>> id3b.dn = (const char *)in->values[i].data;
>> id3b.binary = data_blob(NULL, 0);
>>
>> - ndr_err = ndr_push_struct_blob(&blobs[i], blobs, NULL, &id3b,
>> + ndr_err = ndr_push_struct_blob(&blobs[i], blobs, lp_iconv_convenience(global_loadparm), &id3b,
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3Binary);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
Here also an extra commit.
>> diff --git a/source/heimdal/lib/asn1/lex.c b/source/heimdal/lib/asn1/lex.c
>> index 86c4359..6a3a49c 100644
>> --- a/source/heimdal/lib/asn1/lex.c
>> +++ b/source/heimdal/lib/asn1/lex.c
>> @@ -1907,7 +1907,7 @@ static int yy_get_next_buffer (void)
>>
>> /* Read in more data. */
>> YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
>> - (yy_n_chars), (size_t) num_to_read );
>> + (yy_n_chars), num_to_read );
>>
>> YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
>> }
>> @@ -2408,7 +2408,7 @@ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
>>
>> /** Setup the input buffer state to scan a string. The next call to yylex() will
>> * scan from a @e copy of @a str.
>> - * @param yystr a NUL-terminated string to scan
>> + * @param str a NUL-terminated string to scan
>> *
>> * @return the newly allocated buffer state object.
>> * @note If you want to scan bytes that may contain NUL values, then use
please skip this reformatting.
>> diff --git a/source/lib/ldb/common/ldb.c b/source/lib/ldb/common/ldb.c
>> index 87f791c..5601a33 100644
>> --- a/source/lib/ldb/common/ldb.c
>> +++ b/source/lib/ldb/common/ldb.c
>> @@ -463,11 +463,17 @@ static int ldb_autotransaction_request(struct ldb_context *ldb, struct ldb_reque
>>
>> int ldb_wait(struct ldb_handle *handle, enum ldb_wait_type type)
>> {
>> + int ret;
>> if (!handle) {
>> return LDB_SUCCESS;
>> }
>>
>> - return handle->module->ops->wait(handle, type);
>> + ret = handle->module->ops->wait(handle, type);
>> + if (!ldb_errstring(handle->module->ldb)) {
>> + /* Set a default error string, to place the blame somewhere */
>> + ldb_asprintf_errstring(handle->module->ldb, "error waiting on module %s: %s (%d)", handle->module->ops->name, ldb_strerror(ret), ret);
>> + }
>> + return ret;
>> }
>>
>> /* set the specified timeout or, if timeout is 0 set the default timeout */
also an extra commit please.
>> diff --git a/source/libnet/libnet_become_dc.c b/source/libnet/libnet_become_dc.c
>> index 862631f..c9185c7 100644
>> --- a/source/libnet/libnet_become_dc.c
>> +++ b/source/libnet/libnet_become_dc.c
>> @@ -1514,10 +1514,10 @@ static void becomeDC_drsuapi_connect_send(struct libnet_BecomeDC_state *s,
>>
>> if (!drsuapi->binding) {
>> if (lp_parm_bool(s->libnet->lp_ctx, NULL, "become_dc", "print", false)) {
>> - binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[krb5,print,seal]", s->source_dsa.dns_name);
>> + binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[print,seal]", s->source_dsa.dns_name);
>> if (composite_nomem(binding_str, c)) return;
>> } else {
>> - binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[krb5,seal]", s->source_dsa.dns_name);
>> + binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[seal]", s->source_dsa.dns_name);
>> if (composite_nomem(binding_str, c)) return;
>> }
>> c->status = dcerpc_parse_binding(s, binding_str, &drsuapi->binding);
Is this change really needed?
We should really use krb5.
>> @@ -1687,6 +1687,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> struct drsuapi_DsReplicaObjectIdentifier *identifier;
>> uint32_t num_attrs, i = 0;
>> struct drsuapi_DsReplicaAttribute *attrs;
>> + struct smb_iconv_convenience *iconv_convenience = lp_iconv_convenience(s->libnet->lp_ctx);
>> enum ndr_err_code ndr_err;
>> bool w2k3;
>>
>> @@ -1785,7 +1786,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> NULL);
>> if (composite_nomem(v, c)) return;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, v,(ndr_push_flags_fn_t)ndr_push_security_descriptor);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> @@ -1844,7 +1845,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> s->forest.schema_dn_str);
>> if (composite_nomem(v[0].dn, c)) return;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> @@ -1874,7 +1875,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>>
>> v = &s->dest_dsa.invocation_id;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, v, (ndr_push_flags_fn_t)ndr_push_GUID);
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, v, (ndr_push_flags_fn_t)ndr_push_GUID);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> @@ -1913,21 +1914,21 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> v[2].sid = s->zero_sid;
>> v[2].dn = s->forest.schema_dn_str;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> }
>>
>> - ndr_err = ndr_push_struct_blob(&vd[1], vd, NULL, &v[1],
>> + ndr_err = ndr_push_struct_blob(&vd[1], vd, iconv_convenience, &v[1],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> }
>>
>> - ndr_err = ndr_push_struct_blob(&vd[2], vd, NULL, &v[2],
>> + ndr_err = ndr_push_struct_blob(&vd[2], vd, iconv_convenience, &v[2],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> @@ -1969,21 +1970,21 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> v[2].sid = s->zero_sid;
>> v[2].dn = s->forest.schema_dn_str;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> }
>>
>> - ndr_err = ndr_push_struct_blob(&vd[1], vd, NULL, &v[1],
>> + ndr_err = ndr_push_struct_blob(&vd[1], vd, iconv_convenience, &v[1],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> if (!composite_is_ok(c)) return;
>> }
>>
>> - ndr_err = ndr_push_struct_blob(&vd[2], vd, NULL, &v[2],
>> + ndr_err = ndr_push_struct_blob(&vd[2], vd, iconv_convenience, &v[2],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> @@ -2017,7 +2018,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> v[0].sid = s->zero_sid;
>> v[0].dn = s->forest.schema_dn_str;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> @@ -2049,7 +2050,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> v[0].sid = s->zero_sid;
>> v[0].dn = s->domain.dn_str;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
>> @@ -2131,7 +2132,7 @@ static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
>> v[0].sid = s->zero_sid;
>> v[0].dn = s->dest_dsa.computer_dn_str;
>>
>> - ndr_err = ndr_push_struct_blob(&vd[0], vd, NULL, &v[0],
>> + ndr_err = ndr_push_struct_blob(&vd[0], vd, iconv_convenience, &v[0],
>> (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);
>> if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
>> c->status = ndr_map_error2ntstatus(ndr_err);
This should also be its own commit.
>> diff --git a/source/selftest/target/Samba4.pm b/source/selftest/target/Samba4.pm
>> index 87a86ef..4a827cc 100644
>> --- a/source/selftest/target/Samba4.pm
>> +++ b/source/selftest/target/Samba4.pm
>> @@ -670,7 +670,7 @@ nogroup:x:65534:nobody
>> push (@provision_options, split(' ', $configuration));
>> push (@provision_options, "--host-name=$netbiosname");
>> push (@provision_options, "--host-ip=$ifaceipv4");
>> - push (@provision_options, "--quiet");
>> +# push (@provision_options, "--quiet");
>> push (@provision_options, "--domain=$domain");
>> push (@provision_options, "--realm=$realm");
>> push (@provision_options, "--adminpass=$password");
please remove this.
>> diff --git a/source/torture/libnet/libnet_BecomeDC.c b/source/torture/libnet/libnet_BecomeDC.c
>> index 10625b2..932498a 100644
>> --- a/source/torture/libnet/libnet_BecomeDC.c
>> +++ b/source/torture/libnet/libnet_BecomeDC.c
>> @@ -60,7 +60,9 @@ struct test_become_dc_state {
>> const char *configdn_ldb;
>> const char *schemadn_ldb;
>> const char *secrets_ldb;
>> + const char *templates_ldb;
>> const char *secrets_keytab;
>> + const char *dns_keytab;
>> } path;
>> };
>>
>> @@ -195,25 +197,13 @@ static NTSTATUS test_become_dc_prepare_db(void *private_data,
>> "subobj.SCHEMADN = \"%s\";\n"
>> "subobj.SCHEMADN_LDB = \"%s\";\n"
>> "subobj.HOSTNAME = \"%s\";\n"
>> - "subobj.DNSNAME = \"%s\";\n"
>> + "subobj.REALM = \"%s\";\n"
>> + "subobj.DOMAIN = \"%s\";\n"
>> "subobj.DEFAULTSITE = \"%s\";\n"
>> "\n"
>> - "modules_list = new Array(\"rootdse\",\n"
>> - " \"kludge_acl\",\n"
>> - " \"paged_results\",\n"
>> - " \"server_sort\",\n"
>> - " \"extended_dn\",\n"
>> - " \"asq\",\n"
>> - " \"samldb\",\n"
>> - " \"operational\",\n"
>> - " \"objectclass\",\n"
>> - " \"rdn_name\",\n"
>> - " \"show_deleted\",\n"
>> - " \"partition\");\n"
>> - "subobj.MODULES_LIST = join(\",\", modules_list);\n"
>> - "subobj.DOMAINDN_MOD = \"pdc_fsmo,password_hash,repl_meta_data\";\n"
>> - "subobj.CONFIGDN_MOD = \"naming_fsmo,repl_meta_data\";\n"
>> - "subobj.SCHEMADN_MOD = \"schema_fsmo,repl_meta_data\";\n"
>> + "subobj.DOMAINDN_MOD2 = \",repl_meta_data\";\n"
>> + "subobj.CONFIGDN_MOD2 = \",repl_meta_data\";\n"
>> + "subobj.SCHEMADN_MOD2 = \",repl_meta_data\";\n"
>> "\n"
>> "subobj.KRBTGTPASS = \"_NOT_USED_\";\n"
>> "subobj.MACHINEPASS = \"%s\";\n"
>> @@ -222,7 +212,9 @@ static NTSTATUS test_become_dc_prepare_db(void *private_data,
>> "var paths = provision_default_paths(subobj);\n"
>> "paths.samdb = \"%s\";\n"
>> "paths.secrets = \"%s\";\n"
>> + "paths.templates = \"%s\";\n"
>> "paths.keytab = \"%s\";\n"
>> + "paths.dns_keytab = \"%s\";\n"
>> "\n"
>> "var system_session = system_session();\n"
>> "\n"
>> @@ -238,12 +230,15 @@ static NTSTATUS test_become_dc_prepare_db(void *private_data,
>> p->forest->schema_dn_str, /* subobj.SCHEMADN */
>> s->path.schemadn_ldb, /* subobj.SCHEMADN_LDB */
>> p->dest_dsa->netbios_name, /* subobj.HOSTNAME */
>> - p->dest_dsa->dns_name, /* subobj.DNSNAME */
>> + torture_join_dom_dns_name(s->tj),/* subobj.REALM */
>> + torture_join_dom_netbios_name(s->tj),/* subobj.DOMAIN */
>> p->dest_dsa->site_name, /* subobj.DEFAULTSITE */
>> cli_credentials_get_password(s->machine_account),/* subobj.MACHINEPASS */
>> s->path.samdb_ldb, /* paths.samdb */
>> + s->path.templates_ldb, /* paths.templates */
>> s->path.secrets_ldb, /* paths.secrets */
>> - s->path.secrets_keytab); /* paths.keytab */
>> + s->path.secrets_keytab, /* paths.keytab */
>> + s->path.dns_keytab); /* paths.dns_keytab */
>> NT_STATUS_HAVE_NO_MEMORY(ejs);
>>
>> ret = test_run_ejs(ejs);
>> @@ -854,8 +849,12 @@ bool torture_net_become_dc(struct torture_context *torture)
>> if (!s->path.schemadn_ldb) return false;
>> s->path.secrets_ldb = talloc_asprintf(s, "%s_secrets.ldb", s->netbios_name);
>> if (!s->path.secrets_ldb) return false;
>> + s->path.templates_ldb = talloc_asprintf(s, "%s_templates.ldb", s->netbios_name);
>> + if (!s->path.templates_ldb) return false;
>> s->path.secrets_keytab = talloc_asprintf(s, "%s_secrets.keytab", s->netbios_name);
>> if (!s->path.secrets_keytab) return false;
>> + s->path.dns_keytab = talloc_asprintf(s, "%s_dns.keytab", s->netbios_name);
>> + if (!s->path.dns_keytab) return false;
>>
>> /* Join domain as a member server. */
>> s->tj = torture_join_domain(torture, s->netbios_name,
The rest looks also good.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 249 bytes
Desc: OpenPGP digital signature
Url : http://lists.samba.org/archive/samba-technical/attachments/20080122/49202fe6/signature.bin
More information about the samba-technical
mailing list