diff options
Diffstat (limited to 'source4/dsdb')
-rw-r--r-- | source4/dsdb/samdb/samdb.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/source4/dsdb/samdb/samdb.c b/source4/dsdb/samdb/samdb.c index e5eafb9188..405f15c83e 100644 --- a/source4/dsdb/samdb/samdb.c +++ b/source4/dsdb/samdb/samdb.c @@ -626,38 +626,32 @@ uint16_t samdb_result_acct_flags(struct ldb_message *msg, const char *attr) /* Find an attribute, with a particular value */ + +/* The current callers of this function expect a very specific + * behaviour: In particular, objectClass subclass equivilance is not + * wanted. This means that we should not lookup the schema for the + * comparison function */ struct ldb_message_element *samdb_find_attribute(struct ldb_context *ldb, const struct ldb_message *msg, const char *name, const char *value) { int i; struct ldb_message_element *el = ldb_msg_find_element(msg, name); - const struct ldb_schema_attribute *a; struct ldb_val v; - TALLOC_CTX *tmp_ctx = talloc_new(ldb); - if (!tmp_ctx) { - return NULL; - } - v.data = discard_const_p(uint8_t, value); v.length = strlen(value); if (!el) { - talloc_free(tmp_ctx); return NULL; } - a = ldb_schema_attribute_by_name(ldb, name); - for (i=0;i<el->num_values;i++) { - if (a->syntax->comparison_fn(ldb, tmp_ctx, &el->values[i], &v) == 0) { - talloc_free(tmp_ctx); + if (strcasecmp(value, (char *)el->values[i].data) == 0) { return el; } } - talloc_free(tmp_ctx); return NULL; } |