git.samba.org
/
kai
/
samba.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
dbde9cb
)
Allow attributes to be overwritten, not just added to
author
Andrew Bartlett
<abartlet@samba.org>
Mon, 18 Aug 2008 10:21:31 +0000
(20:21 +1000)
committer
Andrew Bartlett
<abartlet@samba.org>
Mon, 18 Aug 2008 10:21:31 +0000
(20:21 +1000)
(This used to be commit
0aebae91be0fba7ffa94d73946a94aea930a252a
)
source4/lib/ldb/common/ldb_attributes.c
patch
|
blob
|
history
diff --git
a/source4/lib/ldb/common/ldb_attributes.c
b/source4/lib/ldb/common/ldb_attributes.c
index effd93ae2674e9e8ec620d53033b3bf4e2732886..ab6aa0b7341a9871a3072e690095662753c75743 100644
(file)
--- a/
source4/lib/ldb/common/ldb_attributes.c
+++ b/
source4/lib/ldb/common/ldb_attributes.c
@@
-62,11
+62,20
@@
int ldb_schema_attribute_add_with_syntax(struct ldb_context *ldb,
ldb->schema.attributes = a;
for (i = 0; i < ldb->schema.num_attributes; i++) {
ldb->schema.attributes = a;
for (i = 0; i < ldb->schema.num_attributes; i++) {
- if (ldb_attr_cmp(attribute, a[i].name) < 0) {
+ int cmp = ldb_attr_cmp(attribute, a[i].name);
+ if (cmp == 0) {
+ if (a[i].flags & LDB_ATTR_FLAG_ALLOCATED) {
+ talloc_free(discard_const_p(char, a[i].name));
+ }
+ /* To cancel out increment below */
+ ldb->schema.num_attributes--;
+ break;
+ } else if (cmp < 0) {
memmove(a+i+1, a+i, sizeof(*a) * (ldb->schema.num_attributes-i));
break;
}
}
memmove(a+i+1, a+i, sizeof(*a) * (ldb->schema.num_attributes-i));
break;
}
}
+ ldb->schema.num_attributes++;
a[i].name = attribute;
a[i].flags = flags;
a[i].name = attribute;
a[i].flags = flags;
@@
-80,7
+89,6
@@
int ldb_schema_attribute_add_with_syntax(struct ldb_context *ldb,
}
}
}
}
- ldb->schema.num_attributes++;
return 0;
}
return 0;
}
@@
-145,7
+153,7
@@
void ldb_schema_attribute_remove(struct ldb_context *ldb, const char *name)
int i;
a = ldb_schema_attribute_by_name(ldb, name);
int i;
a = ldb_schema_attribute_by_name(ldb, name);
- if (a == NULL) {
+ if (a == NULL
|| a->name == NULL
) {
return;
}
return;
}