示例#1
0
static bool torture_test_syntax(struct torture_context *torture,
				struct torture_dsdb_syntax *priv,
				const char *oid,
				const char *attr_string,
				const char *ldb_str,
				const char *drs_str)
{
	TALLOC_CTX *tmp_ctx = talloc_new(torture);
	DATA_BLOB drs_binary = hexstr_to_data_blob(tmp_ctx, drs_str);
	DATA_BLOB ldb_blob = data_blob_string_const(ldb_str);
	struct drsuapi_DsReplicaAttribute drs, drs2;
	struct drsuapi_DsAttributeValue val;
	const struct dsdb_syntax *syntax;
	const struct dsdb_attribute *attr;
	struct ldb_message_element el;
	struct ldb_context *ldb = priv->ldb;
	struct dsdb_schema *schema = priv->schema;
	struct dsdb_syntax_ctx syntax_ctx;

	/* use default syntax conversion context */
	dsdb_syntax_ctx_init(&syntax_ctx, ldb, schema);

	drs.value_ctr.num_values = 1;
	drs.value_ctr.values = &val;
	val.blob = &drs_binary;

	torture_assert(torture, syntax = find_syntax_map_by_standard_oid(oid), "Failed to find syntax handler");
	torture_assert(torture, attr = dsdb_attribute_by_lDAPDisplayName(schema, attr_string), "Failed to find attribute handler");
	torture_assert_str_equal(torture, attr->syntax->name, syntax->name, "Syntax from schema not as expected");
	

	torture_assert_werr_ok(torture, syntax->drsuapi_to_ldb(&syntax_ctx, attr, &drs, tmp_ctx, &el), "Failed to convert from DRS to ldb format");

	torture_assert_data_blob_equal(torture, el.values[0], ldb_blob, "Incorrect conversion from DRS to ldb format");

	torture_assert_werr_ok(torture, syntax->ldb_to_drsuapi(&syntax_ctx, attr, &el, tmp_ctx, &drs2), "Failed to convert from ldb to DRS format");
	
	torture_assert(torture, drs2.value_ctr.values[0].blob, "No blob returned from conversion");

	torture_assert_data_blob_equal(torture, *drs2.value_ctr.values[0].blob, drs_binary, "Incorrect conversion from ldb to DRS format");
	return true;
}
示例#2
0
WERROR dsdb_class_from_drsuapi(struct ldb_context *ldb, 
			       struct dsdb_schema *schema,
			       struct drsuapi_DsReplicaObject *r,
			       TALLOC_CTX *mem_ctx,
			       struct dsdb_class *obj)
{
	WERROR status;
	struct drsuapi_DsReplicaAttribute *attr;
	DATA_BLOB blob;

	GET_STRING_DS(schema, r, "name", mem_ctx, obj, cn, true);
	GET_STRING_DS(schema, r, "lDAPDisplayName", mem_ctx, obj, lDAPDisplayName, true);
	GET_UINT32_DS(schema, r, "governsID", obj, governsID_id, 0xFFFFFFFF);
	status = dsdb_schema_pfm_oid_from_attid(schema->prefixmap, obj->governsID_id,
						mem_ctx, &obj->governsID_oid);
	if (!W_ERROR_IS_OK(status)) {
		DEBUG(0,("%s: '%s': unable to map governsID 0x%08X: %s\n",
			__location__, obj->lDAPDisplayName, obj->governsID_id,
			win_errstr(status)));
		return status;
	}
	GET_GUID_DS(schema, r, "schemaIDGUID", mem_ctx, obj, schemaIDGUID);

	obj->objectGUID = r->identifier->guid;

	GET_UINT32_DS(schema, r, "objectClassCategory", obj, objectClassCategory, 0);
	GET_STRING_DS(schema, r, "rDNAttID", mem_ctx, obj, rDNAttID, false);

	attr = dsdb_find_object_attr_name(schema, r, "defaultObjectCategory", NULL); 

	if (!attr || attr->value_ctr.num_values != 1 || !attr->value_ctr.values[0].blob) { 
		d_printf("%s: no defaultObjectCategory supplied\n", __location__); 
		return WERR_INVALID_PARAM; 
	}

	status = dsdb_syntax_one_DN_drsuapi_to_ldb(mem_ctx, ldb, find_syntax_map_by_standard_oid(LDB_SYNTAX_DN), 
						   schema->iconv_convenience, attr->value_ctr.values[0].blob, &blob);
	if (!W_ERROR_IS_OK(status)) {
		return status;
	}
	obj->defaultObjectCategory = (char *)blob.data;

	GET_UINT32_DS(schema, r, "subClassOf", obj, subClassOf_id, 0);

	GET_UINT32_LIST_DS(schema, r, "systemAuxiliaryClass", mem_ctx, obj, systemAuxiliaryClass_ids);
	GET_UINT32_LIST_DS(schema, r, "auxiliaryClass", mem_ctx, obj, auxiliaryClass_ids);

	GET_UINT32_LIST_DS(schema, r, "systemMustContain", mem_ctx, obj, systemMustContain_ids);
	GET_UINT32_LIST_DS(schema, r, "systemMayContain", mem_ctx, obj, systemMayContain_ids);
	GET_UINT32_LIST_DS(schema, r, "mustContain", mem_ctx, obj, mustContain_ids);
	GET_UINT32_LIST_DS(schema, r, "mayContain", mem_ctx, obj, mayContain_ids);

	GET_UINT32_LIST_DS(schema, r, "systemPossSuperiors", mem_ctx, obj, systemPossSuperiors_ids);
	GET_UINT32_LIST_DS(schema, r, "possSuperiors", mem_ctx, obj, possSuperiors_ids);

	GET_STRING_DS(schema, r, "defaultSecurityDescriptor", mem_ctx, obj, defaultSecurityDescriptor, false);

	GET_UINT32_DS(schema, r, "schemaFlagsEx", obj, schemaFlagsEx, 0);
	GET_BLOB_DS(schema, r, "msDs-Schema-Extensions", mem_ctx, obj, msDs_Schema_Extensions);

	GET_BOOL_DS(schema, r, "showInAdvancedViewOnly", obj, showInAdvancedViewOnly, false);
	GET_STRING_DS(schema, r, "adminDisplayName", mem_ctx, obj, adminDisplayName, false);
	GET_STRING_DS(schema, r, "adminDescription", mem_ctx, obj, adminDescription, false);
	GET_STRING_DS(schema, r, "classDisplayName", mem_ctx, obj, classDisplayName, false);
	GET_BOOL_DS(schema, r, "defaultHidingValue", obj, defaultHidingValue, false);
	GET_BOOL_DS(schema, r, "isDefunct", obj, isDefunct, false);
	GET_BOOL_DS(schema, r, "systemOnly", obj, systemOnly, false);

	return WERR_OK;
}