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

📄 schema_syntax.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 3 页
字号:
{	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++) {		NTTIME v;		time_t t;		out->value_ctr.values[i].blob	= &blobs[i];		blobs[i] = data_blob_talloc(blobs, NULL, 8);		W_ERROR_HAVE_NO_MEMORY(blobs[i].data);		t = ldb_string_to_time((const char *)in->values[i].data);		unix_to_nt_time(&v, t);		v /= 10000000;		SBVAL(blobs[i].data, 0, v);	}	return WERR_OK;}static WERROR dsdb_syntax_DATA_BLOB_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++) {		if (in->value_ctr.values[i].blob == NULL) {			return WERR_FOOBAR;		}		if (in->value_ctr.values[i].blob->length == 0) {			return WERR_FOOBAR;		}		out->values[i] = data_blob_dup_talloc(out->values,						      in->value_ctr.values[i].blob);		W_ERROR_HAVE_NO_MEMORY(out->values[i].data);	}	return WERR_OK;}static WERROR dsdb_syntax_DATA_BLOB_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++) {		out->value_ctr.values[i].blob	= &blobs[i];		blobs[i] = data_blob_dup_talloc(blobs, &in->values[i]);		W_ERROR_HAVE_NO_MEMORY(blobs[i].data);	}	return WERR_OK;}static WERROR _dsdb_syntax_OID_obj_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 v;		const struct dsdb_class *c;		const 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;		}		v = IVAL(in->value_ctr.values[i].blob->data, 0);		c = dsdb_class_by_governsID_id(schema, v);		if (!c) {			return WERR_FOOBAR;		}		str = talloc_strdup(out->values, c->lDAPDisplayName);		W_ERROR_HAVE_NO_MEMORY(str);		/* the values need to be reversed */		out->values[out->num_values - (i + 1)] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR _dsdb_syntax_OID_oid_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 v;		WERROR status;		const 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;		}		v = IVAL(in->value_ctr.values[i].blob->data, 0);		status = dsdb_map_int2oid(schema, v, out->values, &str);		W_ERROR_NOT_OK_RETURN(status);		out->values[i] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR dsdb_syntax_OID_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;	switch (attr->attributeID_id) {	case DRSUAPI_ATTRIBUTE_objectClass:		return _dsdb_syntax_OID_obj_drsuapi_to_ldb(schema, attr, in, mem_ctx, out);	case DRSUAPI_ATTRIBUTE_governsID:	case DRSUAPI_ATTRIBUTE_attributeID:	case DRSUAPI_ATTRIBUTE_attributeSyntax:		return _dsdb_syntax_OID_oid_drsuapi_to_ldb(schema, attr, in, mem_ctx, out);	}	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 v;		const char *name;		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;		}		v = IVAL(in->value_ctr.values[i].blob->data, 0);		name = dsdb_lDAPDisplayName_by_id(schema, v);		if (!name) {			return WERR_FOOBAR;		}		str = talloc_strdup(out->values, name);		W_ERROR_HAVE_NO_MEMORY(str);		out->values[i] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR dsdb_syntax_OID_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;	}	switch (attr->attributeID_id) {	case DRSUAPI_ATTRIBUTE_objectClass:	case DRSUAPI_ATTRIBUTE_governsID:	case DRSUAPI_ATTRIBUTE_attributeID:	case DRSUAPI_ATTRIBUTE_attributeSyntax:		return dsdb_syntax_FOOBAR_ldb_to_drsuapi(schema, attr, in, mem_ctx, out);	}	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++) {		uint32_t v;		out->value_ctr.values[i].blob	= &blobs[i];		blobs[i] = data_blob_talloc(blobs, NULL, 4);		W_ERROR_HAVE_NO_MEMORY(blobs[i].data);		v = strtol((const char *)in->values[i].data, NULL, 10);		SIVAL(blobs[i].data, 0, v);	}	return WERR_OK;}static WERROR dsdb_syntax_UNICODE_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++) {		ssize_t ret;		char *str;		if (in->value_ctr.values[i].blob == NULL) {			return WERR_FOOBAR;		}		if (in->value_ctr.values[i].blob->length == 0) {			return WERR_FOOBAR;		}		ret = convert_string_talloc(out->values, schema->iconv_convenience, 									CH_UTF16, CH_UNIX,					    in->value_ctr.values[i].blob->data,					    in->value_ctr.values[i].blob->length,					    (void **)&str);		if (ret == -1) {			return WERR_FOOBAR;		}		out->values[i] = data_blob_string_const(str);	}	return WERR_OK;}static WERROR dsdb_syntax_UNICODE_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++) {		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 **)&blobs[i].data);		if (ret == -1) {			return WERR_FOOBAR;		}		blobs[i].length = ret;	}	return WERR_OK;}static WERROR dsdb_syntax_DN_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_DsReplicaObjectIdentifier3 id3;		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, &id3,						   (ndr_pull_flags_fn_t)ndr_pull_drsuapi_DsReplicaObjectIdentifier3);		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 */		out->values[i] = data_blob_string_const(id3.dn);	}	return WERR_OK;}static WERROR dsdb_syntax_DN_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_DsReplicaObjectIdentifier3 id3;		enum ndr_err_code ndr_err;		out->value_ctr.values[i].blob	= &blobs[i];		/* TODO: handle id3.guid and id3.sid */		ZERO_STRUCT(id3);		id3.dn = (const char *)in->values[i].data;		ndr_err = ndr_push_struct_blob(&blobs[i], blobs, schema->iconv_convenience, &id3, (ndr_push_flags_fn_t)ndr_push_drsuapi_DsReplicaObjectIdentifier3);

⌨️ 快捷键说明

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