size_t length;
} DATA_BLOB;
+/* by making struct ldb_val and DATA_BLOB the same, we can simplify
+ a fair bit of code */
+#define ldb_val data_blob
+
/* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30, 4 byte aligned */
typedef uint64_t NTTIME;
static NTSTATUS convert_values(TALLOC_CTX *mem_ctx,
struct ldb_message_element *elem,
- struct ldap_attribute *attrs,
+ struct ldb_message_element *attrs,
struct ldb_context *samdb,
const char **dn,
struct ldap_SearchRequest *r)
goto queue_reply;
}
ent->num_attributes = res[0]->num_elements;
- ent->attributes = talloc_array(ent_r, struct ldap_attribute, ent->num_attributes);
+ ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
for (j=0; j < ent->num_attributes; j++) {
ent->attributes[j].name = talloc_steal(ent->attributes, res[0]->elements[j].name);
goto queue_reply2;
}
ent->num_attributes = res[i]->num_elements;
- ent->attributes = talloc_array(ent_r, struct ldap_attribute, ent->num_attributes);
+ ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
for (j=0; j < ent->num_attributes; j++) {
ent->attributes[j].name = talloc_steal(ent->attributes, res[i]->elements[j].name);
goto queue_reply;
}
ent->num_attributes = res[i]->num_elements;
- ent->attributes = talloc_array(ent_r, struct ldap_attribute, ent->num_attributes);
+ ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
for (j=0; j < ent->num_attributes; j++) {
ent->attributes[j].name = talloc_steal(ent->attributes, res[i]->elements[j].name);
}
-static NTSTATUS fill_dynamic_values(void *mem_ctx, struct ldap_attribute *attrs)
+static NTSTATUS fill_dynamic_values(void *mem_ctx, struct ldb_message_element *attrs)
{
/*
* currentTime
goto queue_reply;
}
ent->num_attributes = res[0]->num_elements;
- ent->attributes = talloc_array(ent_r, struct ldap_attribute, ent->num_attributes);
+ ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
for (j=0; j < ent->num_attributes; j++) {
ent->attributes[j].name = talloc_steal(ent->attributes, res[0]->elements[j].name);
goto queue_reply;
}
ent->num_attributes = res[i]->num_elements;
- ent->attributes = talloc_array(ent_r, struct ldap_attribute, ent->num_attributes);
+ ent->attributes = talloc_array(ent_r, struct ldb_message_element, ent->num_attributes);
NT_STATUS_HAVE_NO_MEMORY(ent->attributes);
for (j=0; j < ent->num_attributes; j++) {
ent->attributes[j].name = talloc_steal(ent->attributes, res[i]->elements[j].name);
sensible, but it can be to anything you like, including binary data
blobs of arbitrary size.
*/
+#ifndef ldb_val
struct ldb_val {
- unsigned int length;
- void *data;
+ uint8_t *data;
+ size_t length;
};
+#endif
/* these flags are used in ldd_message_element.flags fields. The
LDA_FLAGS_MOD_* flags are used in ldap_modify() calls to specify
*/
struct ldb_message_element {
unsigned int flags;
- char *name;
+ const char *name;
unsigned int num_values;
struct ldb_val *values;
};
response.dn = "";
response.num_attributes = 1;
- response.attributes = talloc(tmp_ctx, struct ldap_attribute);
+ response.attributes = talloc(tmp_ctx, struct ldb_message_element);
NT_STATUS_HAVE_NO_MEMORY(response.attributes);
response.attributes->name = "netlogon";
response.attributes->num_values = 1;
asn1_write_OctetString(&data, r->dn, strlen(r->dn));
asn1_push_tag(&data, ASN1_SEQUENCE(0));
for (i=0; i<r->num_attributes; i++) {
- struct ldap_attribute *attr = &r->attributes[i];
+ struct ldb_message_element *attr = &r->attributes[i];
asn1_push_tag(&data, ASN1_SEQUENCE(0));
asn1_write_OctetString(&data, attr->name,
strlen(attr->name));
asn1_push_tag(&data, ASN1_SEQUENCE(0));
for (i=0; i<r->num_mods; i++) {
- struct ldap_attribute *attrib = &r->mods[i].attrib;
+ struct ldb_message_element *attrib = &r->mods[i].attrib;
asn1_push_tag(&data, ASN1_SEQUENCE(0));
asn1_write_enumerated(&data, r->mods[i].type);
asn1_push_tag(&data, ASN1_SEQUENCE(0));
asn1_push_tag(&data, ASN1_SEQUENCE(0));
for (i=0; i<r->num_attributes; i++) {
- struct ldap_attribute *attrib = &r->attributes[i];
+ struct ldb_message_element *attrib = &r->attributes[i];
asn1_push_tag(&data, ASN1_SEQUENCE(0));
asn1_write_OctetString(&data, attrib->name,
strlen(attrib->name));
static void ldap_decode_attrib(TALLOC_CTX *mem_ctx, struct asn1_data *data,
- struct ldap_attribute *attrib)
+ struct ldb_message_element *attrib)
{
asn1_start_tag(data, ASN1_SEQUENCE(0));
asn1_read_OctetString_talloc(mem_ctx, data, &attrib->name);
}
static void ldap_decode_attribs(TALLOC_CTX *mem_ctx, struct asn1_data *data,
- struct ldap_attribute **attributes,
+ struct ldb_message_element **attributes,
int *num_attributes)
{
asn1_start_tag(data, ASN1_SEQUENCE(0));
while (asn1_peek_tag(data, ASN1_SEQUENCE(0))) {
- struct ldap_attribute attrib;
+ struct ldb_message_element attrib;
ZERO_STRUCT(attrib);
ldap_decode_attrib(mem_ctx, data, &attrib);
add_attrib_to_array_talloc(mem_ctx, &attrib,
const char *referral;
};
-struct ldap_attribute {
- const char *name;
- int num_values;
- DATA_BLOB *values;
-};
-
struct ldap_BindRequest {
int version;
const char *dn;
struct ldap_SearchResEntry {
const char *dn;
int num_attributes;
- struct ldap_attribute *attributes;
+ struct ldb_message_element *attributes;
};
struct ldap_SearchResRef {
struct ldap_mod {
enum ldap_modify_type type;
- struct ldap_attribute attrib;
+ struct ldb_message_element attrib;
};
struct ldap_ModifyRequest {
struct ldap_AddRequest {
const char *dn;
int num_attributes;
- struct ldap_attribute *attributes;
+ struct ldb_message_element *attributes;
};
struct ldap_DelRequest {
/* The following definitions come from libcli/ldap/ldap_ldif.c */
BOOL add_value_to_attrib(TALLOC_CTX *mem_ctx, struct ldb_val *value,
- struct ldap_attribute *attrib);
+ struct ldb_message_element *attrib);
BOOL add_attrib_to_array_talloc(TALLOC_CTX *mem_ctx,
- const struct ldap_attribute *attrib,
- struct ldap_attribute **attribs,
+ const struct ldb_message_element *attrib,
+ struct ldb_message_element **attribs,
int *num_attribs);
BOOL add_mod_to_array_talloc(TALLOC_CTX *mem_ctx,
struct ldap_mod *mod,
}
BOOL add_value_to_attrib(TALLOC_CTX *mem_ctx, struct ldb_val *value,
- struct ldap_attribute *attrib)
+ struct ldb_message_element *attrib)
{
attrib->values = talloc_realloc(mem_ctx,
attrib->values,
}
BOOL add_attrib_to_array_talloc(TALLOC_CTX *mem_ctx,
- const struct ldap_attribute *attrib,
- struct ldap_attribute **attribs,
+ const struct ldb_message_element *attrib,
+ struct ldb_message_element **attribs,
int *num_attribs)
{
*attribs = talloc_realloc(mem_ctx,
*attribs,
- struct ldap_attribute,
+ struct ldb_message_element,
*num_attribs+1);
if (*attribs == NULL)
while (next_attr(chunk, &attr_name, &value) == 0) {
int i;
- struct ldap_attribute *attrib = NULL;
+ struct ldb_message_element *attrib = NULL;
for (i=0; i<r->num_attributes; i++) {
if (strequal(r->attributes[i].name, attr_name)) {
if (attrib == NULL) {
r->attributes = talloc_realloc(msg,
r->attributes,
- struct ldap_attribute,
+ struct ldb_message_element,
r->num_attributes+1);
if (r->attributes == NULL)
return False;