if (attr->ldif_write_fn(ldb, msg, &el->values[0], &v) != 0) {
goto failed;
}
- val = mprData(v.data, v.length);
+ /* FIXME: nasty hack, remove me when ejs will support
+ * arbitrary string and does not truncate on \0 */
+ if (strlen((char *)v.data) != v.length) {
+ val = mprDataBlob(v);
+ } else {
+ val = mprData(v.data, v.length);
+ }
} else {
int j;
val = mprArray(el->name);
&el->values[j], &v) != 0) {
goto failed;
}
- mprAddArray(&val, j, mprData(v.data, v.length));
+ /* FIXME: nasty hack, remove me when ejs will support
+ * arbitrary string and does not truncate on \0 */
+ if (strlen((char *)v.data) != v.length) {
+ mprAddArray(&val, j, mprDataBlob(v));
+ } else {
+ mprAddArray(&val, j, mprData(v.data, v.length));
+ }
}
}
mprSetVar(&var, el->name, val);
attrib_attrs = new Array("objectClass", "lDAPDisplayName",
"isSingleValued", "linkID", "systemFlags", "systemOnly",
"schemaIDGUID", "adminDisplayName", "attributeID",
- "attributeSyntax");
+ "attributeSyntax", "oMSyntax", "oMObjectClass");
/*
notes:
}
}
+function get_object_cn(ldb, name) {
+ var attrs = new Array("cn");
+
+ var res = ldb.search(sprintf("(ldapDisplayName=%s)", name), rootDse.schemaNamingContext, ldb.SCOPE_SUBTREE, attrs);
+ assert(res != undefined);
+ assert(res.length == 1);
+
+ var cn = res[0]["cn"];
+ assert(cn != undefined);
+ if (typeof(cn) == "string") {
+ return cn;
+ }
+ return cn[0];
+}
/*
create an objectclass object
*/
-function obj_objectClass(name) {
+function obj_objectClass(ldb, name) {
var o = new Object();
o.name = name;
+ o.cn = get_object_cn(ldb, name);
return o;
}
/*
create an attribute object
*/
-function obj_attribute(name) {
+function obj_attribute(ldb, name) {
var o = new Object();
o.name = name;
+ o.cn = get_object_cn(ldb, name);
return o;
}
*/
function write_ldif_one(o, attrs) {
var i;
- printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.name);
- printf("cn: %s\n", o.name);
- printf("name: %s\n", o.name);
+ printf("dn: CN=%s,CN=Schema,CN=Configuration,${BASEDN}\n", o.cn);
+ printf("cn: %s\n", o.cn);
+ printf("name: %s\n", o.cn);
for (i=0;i<attrs.length;i++) {
var a = attrs[i];
if (o[a] == undefined) {
continue;
}
+ /* special case for oMObjectClass, which is a binary object */
+ if (a == "oMObjectClass") {
+ printf("%s:: %s\n", a, o[a]);
+ continue;
+ }
var v = o[a];
if (typeof(v) == "string") {
v = new Array(v);
var msg = res[0];
var a;
for (a in msg) {
+ /* special case for oMObjectClass, which is a binary object */
+ if (a == "oMObjectClass") {
+ o[a] = ldb.encode(msg[a]);
+ continue;
+ }
o[a] = msg[a];
}
}
var name = list[i];
if (objectclasses[name] == undefined) {
dprintf("Found new objectclass '%s'\n", name);
- objectclasses[name] = obj_objectClass(name);
+ objectclasses[name] = obj_objectClass(ldb, name);
}
}
}
for (j=0;j<len;j++) {
var a = alist[j];
if (attributes[a] == undefined) {
- attributes[a] = obj_attribute(a);
+ attributes[a] = obj_attribute(ldb, a);
}
}
}
var msg = res[0];
for (a in msg) {
if (attributes[a] == undefined) {
- attributes[a] = obj_attribute(a);
+ attributes[a] = obj_attribute(ldb, a);
}
}
}
for (c=0;c<msg.length;c++) {
var objectClass = msg[c];
if (objectclasses[objectClass] == undefined) {
- objectclasses[objectClass] = obj_objectClass(objectClass);
+ objectclasses[objectClass] = obj_objectClass(ldb, objectClass);
objectclasses[objectClass].exampleDN = res[r].dn;
}
}
dprintf("unknown class '%s'\n", name);
return undefined;
}
- return obj_objectClass(name);
+ return obj_objectClass(ldb, name);
}
/*