⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schema_syntax.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 3 页
字号:
		if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {			NTSTATUS status = ndr_map_error2ntstatus(ndr_err);			return ntstatus_to_werror(status);		}	}	return WERR_OK;}static WERROR dsdb_syntax_DN_BINARY_drsuapi_to_ldb(const struct dsdb_schema *schema,						   const struct dsdb_attribute *attr,						   const struct drsuapi_DsReplicaAttribute *in,						   TALLOC_CTX *mem_ctx,						   struct ldb_message_element *out){	uint32_t i;	out->flags	= 0;	out->name	= talloc_strdup(mem_ctx, attr->lDAPDisplayName);	W_ERROR_HAVE_NO_MEMORY(out->name);	out->num_values	= in->value_ctr.num_values;	out->values	= talloc_array(mem_ctx, struct ldb_val, out->num_values);	W_ERROR_HAVE_NO_MEMORY(out->values);	for (i=0; i < out->num_values; i++) {		struct drsuapi_DsReplicaObjectIdentifier3Binary id3b;		char *binary;		char *str;		enum ndr_err_code ndr_err;		if (in->value_ctr.values[i].blob == NULL) {			return WERR_FOOBAR;		}		if (in->value_ctr.values[i].blob->length == 0) {			return WERR_FOOBAR;		}		ndr_err = ndr_pull_struct_blob_all(in->value_ctr.values[i].blob,						   out->values, schema->iconv_convenience, &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);			return ntstatus_to_werror(status);		}		/* TODO: handle id3.guid and id3.sid */		binary = data_blob_hex_string(out->values, &id3b.binary);		W_ERROR_HAVE_NO_MEMORY(binary);		str = talloc_asprintf(out->values, "B:%u:%s:%s",				      (unsigned int)(id3b.binary.length * 2), /* because of 2 hex chars per byte */				      binary,				      id3b.dn);		W_ERROR_HAVE_NO_MEMORY(str);		/* TODO: handle id3.guid and id3.sid */		out->values[i] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR dsdb_syntax_DN_BINARY_ldb_to_drsuapi(const struct dsdb_schema *schema,						   const struct dsdb_attribute *attr,						   const struct ldb_message_element *in,						   TALLOC_CTX *mem_ctx,						   struct drsuapi_DsReplicaAttribute *out){	uint32_t i;	DATA_BLOB *blobs;	if (attr->attributeID_id == 0xFFFFFFFF) {		return WERR_FOOBAR;	}	out->attid			= attr->attributeID_id;	out->value_ctr.num_values	= in->num_values;	out->value_ctr.values		= talloc_array(mem_ctx,						       struct drsuapi_DsAttributeValue,						       in->num_values);	W_ERROR_HAVE_NO_MEMORY(out->value_ctr.values);	blobs = talloc_array(mem_ctx, DATA_BLOB, in->num_values);	W_ERROR_HAVE_NO_MEMORY(blobs);	for (i=0; i < in->num_values; i++) {		struct drsuapi_DsReplicaObjectIdentifier3Binary id3b;		enum ndr_err_code ndr_err;		out->value_ctr.values[i].blob	= &blobs[i];		/* TODO: handle id3b.guid and id3b.sid, id3.binary */		ZERO_STRUCT(id3b);		id3b.dn		= (const char *)in->values[i].data;		id3b.binary	= data_blob(NULL, 0);		ndr_err = ndr_push_struct_blob(&blobs[i], blobs, schema->iconv_convenience, &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);			return ntstatus_to_werror(status);		}	}	return WERR_OK;}static WERROR dsdb_syntax_PRESENTATION_ADDRESS_drsuapi_to_ldb(const struct dsdb_schema *schema,							      const struct dsdb_attribute *attr,							      const struct drsuapi_DsReplicaAttribute *in,							      TALLOC_CTX *mem_ctx,							      struct ldb_message_element *out){	uint32_t i;	out->flags	= 0;	out->name	= talloc_strdup(mem_ctx, attr->lDAPDisplayName);	W_ERROR_HAVE_NO_MEMORY(out->name);	out->num_values	= in->value_ctr.num_values;	out->values	= talloc_array(mem_ctx, struct ldb_val, out->num_values);	W_ERROR_HAVE_NO_MEMORY(out->values);	for (i=0; i < out->num_values; i++) {		uint32_t len;		ssize_t ret;		char *str;		if (in->value_ctr.values[i].blob == NULL) {			return WERR_FOOBAR;		}		if (in->value_ctr.values[i].blob->length < 4) {			return WERR_FOOBAR;		}		len = IVAL(in->value_ctr.values[i].blob->data, 0);		if (len != in->value_ctr.values[i].blob->length) {			return WERR_FOOBAR;		}		ret = convert_string_talloc(out->values, schema->iconv_convenience, CH_UTF16, CH_UNIX,					    in->value_ctr.values[i].blob->data+4,					    in->value_ctr.values[i].blob->length-4,					    (void **)&str);		if (ret == -1) {			return WERR_FOOBAR;		}		out->values[i] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR dsdb_syntax_PRESENTATION_ADDRESS_ldb_to_drsuapi(const struct dsdb_schema *schema,							      const struct dsdb_attribute *attr,							      const struct ldb_message_element *in,							      TALLOC_CTX *mem_ctx,							      struct drsuapi_DsReplicaAttribute *out){	uint32_t i;	DATA_BLOB *blobs;	if (attr->attributeID_id == 0xFFFFFFFF) {		return WERR_FOOBAR;	}	out->attid			= attr->attributeID_id;	out->value_ctr.num_values	= in->num_values;	out->value_ctr.values		= talloc_array(mem_ctx,						       struct drsuapi_DsAttributeValue,						       in->num_values);	W_ERROR_HAVE_NO_MEMORY(out->value_ctr.values);	blobs = talloc_array(mem_ctx, DATA_BLOB, in->num_values);	W_ERROR_HAVE_NO_MEMORY(blobs);	for (i=0; i < in->num_values; i++) {		uint8_t *data;		ssize_t ret;		out->value_ctr.values[i].blob	= &blobs[i];		ret = convert_string_talloc(blobs, schema->iconv_convenience, CH_UNIX, CH_UTF16,					    in->values[i].data,					    in->values[i].length,					    (void **)&data);		if (ret == -1) {			return WERR_FOOBAR;		}		blobs[i] = data_blob_talloc(blobs, NULL, 4 + ret);		W_ERROR_HAVE_NO_MEMORY(blobs[i].data);		SIVAL(blobs[i].data, 0, 4 + ret);		if (ret > 0) {			memcpy(blobs[i].data + 4, data, ret);			talloc_free(data);		}	}	return WERR_OK;}#define OMOBJECTCLASS(val) { .length = sizeof(val) - 1, .data = discard_const_p(uint8_t, val) }static const struct dsdb_syntax dsdb_syntaxes[] = {	{		.name			= "Boolean",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.7",		.oMSyntax		= 1,		.attributeSyntax_oid	= "2.5.5.8",		.drsuapi_to_ldb		= dsdb_syntax_BOOL_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_BOOL_ldb_to_drsuapi,	},{		.name			= "Integer",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.27",		.oMSyntax		= 2,		.attributeSyntax_oid	= "2.5.5.9",		.drsuapi_to_ldb		= dsdb_syntax_INT32_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_INT32_ldb_to_drsuapi,	},{		.name			= "String(Octet)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.40",		.oMSyntax		= 4,		.attributeSyntax_oid	= "2.5.5.10",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(Sid)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.40",		.oMSyntax		= 4,		.attributeSyntax_oid	= "2.5.5.17",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(Object-Identifier)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.38",		.oMSyntax		= 6,		.attributeSyntax_oid	= "2.5.5.2",		.drsuapi_to_ldb		= dsdb_syntax_OID_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_OID_ldb_to_drsuapi,	},{		.name			= "Enumeration",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.27",		.oMSyntax		= 10,		.attributeSyntax_oid	= "2.5.5.9",		.drsuapi_to_ldb		= dsdb_syntax_INT32_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_INT32_ldb_to_drsuapi,	},{	/* not used in w2k3 forest */		.name			= "String(Numeric)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.36",		.oMSyntax		= 18,		.attributeSyntax_oid	= "2.5.5.6",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(Printable)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.44",		.oMSyntax		= 19,		.attributeSyntax_oid	= "2.5.5.5",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(Teletex)",		.ldap_oid		= "1.2.840.113556.1.4.905",		.oMSyntax		= 20,		.attributeSyntax_oid	= "2.5.5.4",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(IA5)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.26",		.oMSyntax		= 22,		.attributeSyntax_oid	= "2.5.5.5",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "String(UTC-Time)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.53",		.oMSyntax		= 23,		.attributeSyntax_oid	= "2.5.5.11",		.drsuapi_to_ldb		= dsdb_syntax_NTTIME_UTC_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_NTTIME_UTC_ldb_to_drsuapi,	},{		.name			= "String(Generalized-Time)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.24",		.oMSyntax		= 24,		.attributeSyntax_oid	= "2.5.5.11",		.drsuapi_to_ldb		= dsdb_syntax_NTTIME_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_NTTIME_ldb_to_drsuapi,	},{	/* not used in w2k3 schema */		.name			= "String(Case Sensitive)",		.ldap_oid		= "1.2.840.113556.1.4.1362",		.oMSyntax		= 27,		.attributeSyntax_oid	= "2.5.5.3",		.drsuapi_to_ldb		= dsdb_syntax_FOOBAR_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_FOOBAR_ldb_to_drsuapi,	},{		.name			= "String(Unicode)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.15",		.oMSyntax		= 64,		.attributeSyntax_oid	= "2.5.5.12",		.drsuapi_to_ldb		= dsdb_syntax_UNICODE_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_UNICODE_ldb_to_drsuapi,	},{		.name			= "Interval/LargeInteger",		.ldap_oid		= "1.2.840.113556.1.4.906",		.oMSyntax		= 65,		.attributeSyntax_oid	= "2.5.5.16",		.drsuapi_to_ldb		= dsdb_syntax_INT64_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_INT64_ldb_to_drsuapi,	},{		.name			= "String(NT-Sec-Desc)",		.ldap_oid		= "1.2.840.113556.1.4.907",		.oMSyntax		= 66,		.attributeSyntax_oid	= "2.5.5.15",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "Object(DS-DN)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.12",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x4a"),		.attributeSyntax_oid	= "2.5.5.1",		.drsuapi_to_ldb		= dsdb_syntax_DN_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DN_ldb_to_drsuapi,	},{		.name			= "Object(DN-Binary)",		.ldap_oid		= "1.2.840.113556.1.4.903",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0b"),		.attributeSyntax_oid	= "2.5.5.7",		.drsuapi_to_ldb		= dsdb_syntax_DN_BINARY_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DN_BINARY_ldb_to_drsuapi,	},{	/* not used in w2k3 schema */		.name			= "Object(OR-Name)",		.ldap_oid		= "1.2.840.113556.1.4.1221",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x56\x06\x01\x02\x05\x0b\x1D"),		.attributeSyntax_oid	= "2.5.5.7",		.drsuapi_to_ldb		= dsdb_syntax_FOOBAR_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_FOOBAR_ldb_to_drsuapi,	},{	/* 	 * TODO: verify if DATA_BLOB is correct here...!	 *	 *       repsFrom and repsTo are the only attributes using	 *       this attribute syntax, but they're not replicated... 	 */		.name			= "Object(Replica-Link)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.40",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x06"),		.attributeSyntax_oid	= "2.5.5.10",		.drsuapi_to_ldb		= dsdb_syntax_DATA_BLOB_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_DATA_BLOB_ldb_to_drsuapi,	},{		.name			= "Object(Presentation-Address)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.43",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x5c"),		.attributeSyntax_oid	= "2.5.5.13",		.drsuapi_to_ldb		= dsdb_syntax_PRESENTATION_ADDRESS_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_PRESENTATION_ADDRESS_ldb_to_drsuapi,	},{	/* not used in w2k3 schema */		.name			= "Object(Access-Point)",		.ldap_oid		= "1.3.6.1.4.1.1466.115.121.1.2",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2b\x0c\x02\x87\x73\x1c\x00\x85\x3e"),		.attributeSyntax_oid	= "2.5.5.14",		.drsuapi_to_ldb		= dsdb_syntax_FOOBAR_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_FOOBAR_ldb_to_drsuapi,	},{	/* not used in w2k3 schema */		.name			= "Object(DN-String)",		.ldap_oid		= "1.2.840.113556.1.4.904",		.oMSyntax		= 127,		.oMObjectClass		= OMOBJECTCLASS("\x2a\x86\x48\x86\xf7\x14\x01\x01\x01\x0c"),		.attributeSyntax_oid	= "2.5.5.14",		.drsuapi_to_ldb		= dsdb_syntax_FOOBAR_drsuapi_to_ldb,		.ldb_to_drsuapi		= dsdb_syntax_FOOBAR_ldb_to_drsuapi,	}};const struct dsdb_syntax *dsdb_syntax_for_attribute(const struct dsdb_attribute *attr){	uint32_t i;	for (i=0; i < ARRAY_SIZE(dsdb_syntaxes); i++) {		if (attr->oMSyntax != dsdb_syntaxes[i].oMSyntax) continue;		if (attr->oMObjectClass.length != dsdb_syntaxes[i].oMObjectClass.length) continue;		if (attr->oMObjectClass.length) {			int ret;			ret = memcmp(attr->oMObjectClass.data,				     dsdb_syntaxes[i].oMObjectClass.data,				     attr->oMObjectClass.length);			if (ret != 0) continue;		}		if (strcmp(attr->attributeSyntax_oid, dsdb_syntaxes[i].attributeSyntax_oid) != 0) continue;		return &dsdb_syntaxes[i];	}	return NULL;}WERROR dsdb_attribute_drsuapi_to_ldb(const struct dsdb_schema *schema,				     const struct drsuapi_DsReplicaAttribute *in,				     TALLOC_CTX *mem_ctx,				     struct ldb_message_element *out){	const struct dsdb_attribute *sa;	sa = dsdb_attribute_by_attributeID_id(schema, in->attid);	if (!sa) {		return WERR_FOOBAR;	}	return sa->syntax->drsuapi_to_ldb(schema, sa, in, mem_ctx, out);}WERROR dsdb_attribute_ldb_to_drsuapi(const struct dsdb_schema *schema,				     const struct ldb_message_element *in,				     TALLOC_CTX *mem_ctx,				     struct drsuapi_DsReplicaAttribute *out){	const struct dsdb_attribute *sa;	sa = dsdb_attribute_by_lDAPDisplayName(schema, in->name);	if (!sa) {		return WERR_FOOBAR;	}	return sa->syntax->ldb_to_drsuapi(schema, sa, in, mem_ctx, out);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -