mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r7720: - simplify the asn1 decode of ldap_search() a lot, taking advantage of
the fact that the ldap data structures now use ldb_message_element. - fixed null termination of elements in ildap
This commit is contained in:
parent
f6c2c51907
commit
09060994c1
@ -309,28 +309,16 @@ static NTSTATUS rootdse_Search(struct ldapsrv_partition *partition, struct ldaps
|
||||
goto queue_reply;
|
||||
}
|
||||
ent->num_attributes = res[0]->num_elements;
|
||||
ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
|
||||
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
|
||||
ent->attributes = talloc_steal(ent_r, res[0]->elements);
|
||||
|
||||
for (j=0; j < ent->num_attributes; j++) {
|
||||
ent->attributes[j].name = talloc_steal(ent->attributes, res[0]->elements[j].name);
|
||||
ent->attributes[j].num_values = 0;
|
||||
ent->attributes[j].values = NULL;
|
||||
ent->attributes[j].num_values = res[0]->elements[j].num_values;
|
||||
if (ent->attributes[j].num_values == 1 &&
|
||||
strncmp(res[0]->elements[j].values[0].data, "_DYNAMIC_", 9) == 0) {
|
||||
ent->attributes[j].values[0].length >= 9 &&
|
||||
strncmp(ent->attributes[j].values[0].data, "_DYNAMIC_", 9) == 0) {
|
||||
status = fill_dynamic_values(ent->attributes, &(ent->attributes[j]));
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
return status;
|
||||
}
|
||||
} else {
|
||||
ent->attributes[j].values = talloc_array(ent->attributes,
|
||||
DATA_BLOB, ent->attributes[j].num_values);
|
||||
NT_STATUS_HAVE_NO_MEMORY(ent->attributes[j].values);
|
||||
for (y=0; y < ent->attributes[j].num_values; y++) {
|
||||
ent->attributes[j].values[y].length = res[0]->elements[j].values[y].length;
|
||||
ent->attributes[j].values[y].data = talloc_steal(ent->attributes[j].values,
|
||||
res[0]->elements[j].values[y].data);
|
||||
}
|
||||
}
|
||||
}
|
||||
queue_reply:
|
||||
|
@ -98,6 +98,9 @@ static BOOL ldap_push_filter(struct asn1_data *data, struct ldb_parse_tree *tree
|
||||
asn1_pop_tag(data);
|
||||
break;
|
||||
|
||||
case LDB_OP_NOT:
|
||||
#warning "OP_NOT missing"
|
||||
|
||||
default:
|
||||
return False;
|
||||
}
|
||||
@ -605,7 +608,6 @@ static void ldap_decode_attrib(TALLOC_CTX *mem_ctx, struct asn1_data *data,
|
||||
DATA_BLOB blob;
|
||||
asn1_read_OctetString(data, &blob);
|
||||
add_value_to_attrib(mem_ctx, &blob, attrib);
|
||||
data_blob_free(&blob);
|
||||
}
|
||||
asn1_end_tag(data);
|
||||
asn1_end_tag(data);
|
||||
|
@ -43,8 +43,9 @@ BOOL add_value_to_attrib(TALLOC_CTX *mem_ctx, struct ldb_val *value,
|
||||
if (attrib->values == NULL)
|
||||
return False;
|
||||
|
||||
attrib->values[attrib->num_values] =
|
||||
data_blob_talloc(attrib->values, value->data, value->length);
|
||||
attrib->values[attrib->num_values].data = talloc_steal(attrib->values,
|
||||
value->data);
|
||||
attrib->values[attrib->num_values].length = value->length;
|
||||
attrib->num_values += 1;
|
||||
return True;
|
||||
}
|
||||
|
@ -576,7 +576,6 @@ BOOL asn1_read_Integer(struct asn1_data *data, int *i)
|
||||
if (!asn1_start_tag(data, ASN1_INTEGER)) return False;
|
||||
if (!asn1_read_implicit_Integer(data, i)) return False;
|
||||
return asn1_end_tag(data);
|
||||
|
||||
}
|
||||
|
||||
/* read an interger */
|
||||
|
Loading…
Reference in New Issue
Block a user