svn commit: samba r17501 - in branches/SOC/mkhl/samdb-map/ldb_modules: .

abartlet at samba.org abartlet at samba.org
Fri Aug 11 22:53:22 GMT 2006


Author: abartlet
Date: 2006-08-11 22:53:21 +0000 (Fri, 11 Aug 2006)
New Revision: 17501

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17501

Log:
Samba accepts both string and binary forms of objectSid attributes in
some places.

This causes problems when we talk to an OpenLDAP server that assumes
this is a binary quanity, particularly on searches.

This patch adds this canonicolisation to the translations we do.

Andrew Bartlett


Modified:
   branches/SOC/mkhl/samdb-map/ldb_modules/entryUUID.c


Changeset:
Modified: branches/SOC/mkhl/samdb-map/ldb_modules/entryUUID.c
===================================================================
--- branches/SOC/mkhl/samdb-map/ldb_modules/entryUUID.c	2006-08-11 22:36:53 UTC (rev 17500)
+++ branches/SOC/mkhl/samdb-map/ldb_modules/entryUUID.c	2006-08-11 22:53:21 UTC (rev 17501)
@@ -75,6 +75,28 @@
 	return out;
 }
 
+/* The backend holds binary sids, so just copy them back */
+static struct ldb_val sid_copy(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
+{
+	struct ldb_val out = data_blob(NULL, 0);
+	ldb_handler_copy(module->ldb, ctx, val, &out);
+
+	return out;
+}
+
+/* Ensure we always convert sids into binary, so the backend doesn't have to know about both forms */
+static struct ldb_val sid_always_binary(struct ldb_module *module, TALLOC_CTX *ctx, const struct ldb_val *val)
+{
+	struct ldb_val out = data_blob(NULL, 0);
+	const struct ldb_attrib_handler *handler = ldb_attrib_handler(module->ldb, "objectSid");
+	
+	if (handler->canonicalise_fn(module->ldb, ctx, val, &out) != LDB_SUCCESS) {
+		return data_blob(NULL, 0);
+	}
+
+	return out;
+}
+
 const struct ldb_map_attribute entryUUID_attributes[] = 
 {
 	/* objectGUID */
@@ -89,7 +111,19 @@
 			},
 		},
 	},
+	/* objectSid */
 	{
+		.local_name = "objectSid",
+		.type = MAP_CONVERT,
+		.u = {
+			.convert = {
+				.remote_name = "objectSid", 
+				.convert_local = sid_always_binary,
+				.convert_remote = sid_copy,
+			},
+		},
+	},
+	{
 		.local_name = "whenCreated",
 		.type = MAP_RENAME,
 		.u = {



More information about the samba-cvs mailing list