r12699: correctly escape invalid DN characters (reported by Steinar H. Gunderson).
authorJelmer Vernooij <jelmer@samba.org>
Tue, 3 Jan 2006 19:39:53 +0000 (19:39 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:49:41 +0000 (13:49 -0500)
this still doesn't work as a bug in ldb causes it to not understand
escaped characters in DNs when parsing DNs
(This used to be commit 10da56fb6cc57b6c0650a8dc81ded5faa643a96e)

source4/scripting/ejs/smbcalls_ldb.c
source4/scripting/libjs/upgrade.js

index e9dba94eaa40b6d818eaf8988ad8e2f9e257b60a..78063ed6b48dac1eea931c23367c207a9706a2c5 100644 (file)
@@ -322,7 +322,35 @@ static int ejs_base64decode(MprVarHandle eid, int argc, struct MprVar **argv)
 
        return 0;
 }
-  
+
+/* 
+   escape a DN
+   usage:
+     dataout = ldb.dn_escape(datain)
+ */
+static int ejs_dn_escape(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+       char *ret;
+       struct ldb_val val;
+       
+       if (argc != 1) {
+               ejsSetErrorMsg(eid, "ldb.dn_escape invalid argument count");
+               return -1;
+       }
+
+       val.data = mprToString(argv[0]);
+       val.length = strlen((const char *)val.data);
+
+       ret = ldb_dn_escape_value(mprMemCtx(), val);
+       if (ret == NULL) {
+               mpr_Return(eid, mprCreateUndefinedVar());
+       } else {
+               mpr_Return(eid, mprString(ret));
+               talloc_free(ret);
+       }
+
+       return 0;
+}
 
 /*
   perform an ldb add 
@@ -511,6 +539,7 @@ static int ejs_ldb_init(MprVarHandle eid, int argc, struct MprVar **argv)
        mprSetCFunction(ldb, "errstring", ejs_ldbErrstring);
        mprSetCFunction(ldb, "encode", ejs_base64encode);
        mprSetCFunction(ldb, "decode", ejs_base64decode);
+       mprSetCFunction(ldb, "dn_escape", ejs_dn_escape);
        mprSetCFunction(ldb, "close", ejs_ldbClose);
        mprSetCFunction(ldb, "transaction_start", ejs_ldbTransactionStart);
        mprSetCFunction(ldb, "transaction_cancel", ejs_ldbTransactionCancel);
index 4ac6b6db3447d0f75cf07532d472e3cd590d327d..0ffb790d5f42f8e337431b3a6c770cd2c7a27bb2 100644 (file)
@@ -151,7 +151,7 @@ objectSid: %s-%d
 lmPwdHash:: %s
 ntPwdHash:: %s
 
-", acc.fullname, domaindn, acc.logon_time, acc.logoff_time, acc.username, acc.nt_username, acc.nt_username, 
+", ldb.dn_escape(acc.fullname), domaindn, acc.logon_time, acc.logoff_time, acc.username, acc.nt_username, acc.nt_username, 
 
 acc.fullname, acc.acct_desc, acc.group_rid, acc.bad_password_count, acc.logon_count,
 acc.domain, acc.dir_drive, acc.munged_dial, acc.homedir, acc.logon_script,