svn commit: samba r8038 - in branches/SAMBA_4_0/source/lib/ldb:
ldb_tdb samba
tridge at samba.org
tridge at samba.org
Fri Jul 1 07:02:27 GMT 2005
Author: tridge
Date: 2005-07-01 07:02:26 +0000 (Fri, 01 Jul 2005)
New Revision: 8038
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8038
Log:
- fixed indexing on binary values that need base64 encoding and canonicalisation
- added support for recognising the S- form of objectsid in search
expressions. I thought this could be done with just a comparison
modified comparison function, but it turns out it also needs a
canonicalisation function so that indexing can work
Modified:
branches/SAMBA_4_0/source/lib/ldb/ldb_tdb/ldb_index.c
branches/SAMBA_4_0/source/lib/ldb/samba/ldif_handlers.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/ldb_tdb/ldb_index.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/ldb_tdb/ldb_index.c 2005-07-01 06:21:26 UTC (rev 8037)
+++ branches/SAMBA_4_0/source/lib/ldb/ldb_tdb/ldb_index.c 2005-07-01 07:02:26 UTC (rev 8038)
@@ -118,9 +118,8 @@
talloc_free(attr_folded);
return NULL;
}
-
if (ldb_should_b64_encode(&v)) {
- char *vstr = ldb_base64_encode(ldb, value->data, value->length);
+ char *vstr = ldb_base64_encode(ldb, v.data, v.length);
if (!vstr) return NULL;
ret = talloc_asprintf(ldb, "%s:%s::%s", LTDB_INDEX, attr_folded, vstr);
talloc_free(vstr);
Modified: branches/SAMBA_4_0/source/lib/ldb/samba/ldif_handlers.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/samba/ldif_handlers.c 2005-07-01 06:21:26 UTC (rev 8037)
+++ branches/SAMBA_4_0/source/lib/ldb/samba/ldif_handlers.c 2005-07-01 07:02:26 UTC (rev 8038)
@@ -85,17 +85,39 @@
strncmp(v2->data, "S-", 2) == 0) {
return strcmp(v1->data, v2->data);
}
+ if (strncmp(v1->data, "S-", 2) == 0) {
+ struct ldb_val v;
+ int ret;
+ if (ldif_read_objectSid(ldb, v1, &v) != 0) {
+ return -1;
+ }
+ ret = ldb_comparison_binary(ldb, &v, v2);
+ talloc_free(v.data);
+ return ret;
+ }
return ldb_comparison_binary(ldb, v1, v2);
}
+/*
+ canonicalise a objectSid
+*/
+static int ldb_canonicalise_objectSid(struct ldb_context *ldb, const struct ldb_val *in,
+ struct ldb_val *out)
+{
+ if (strncmp(in->data, "S-", 2) == 0) {
+ return ldif_read_objectSid(ldb, in, out);
+ }
+ return ldb_handler_copy(ldb, in, out);
+}
+
static const struct ldb_attrib_handler samba_handlers[] = {
{
.attr = "objectSid",
.flags = 0,
.ldif_read_fn = ldif_read_objectSid,
.ldif_write_fn = ldif_write_objectSid,
- .canonicalise_fn = ldb_handler_copy,
+ .canonicalise_fn = ldb_canonicalise_objectSid,
.comparison_fn = ldb_comparison_objectSid
}
};
More information about the samba-cvs
mailing list