diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2006-01-03 19:39:53 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2006-01-03 19:39:53 +0000 |
commit | 547759c37cb338b6106d14995604e7faefe3a464 (patch) | |
tree | 997c77d7867b776be08c9570cb2c02f18d25fb4c /source/scripting | |
parent | 17483b82b900c5e2e2d1979070963ba60c7547c9 (diff) | |
download | samba-547759c37cb338b6106d14995604e7faefe3a464.tar.gz samba-547759c37cb338b6106d14995604e7faefe3a464.tar.xz samba-547759c37cb338b6106d14995604e7faefe3a464.zip |
r12699: correctly escape invalid DN characters (reported by Steinar H. Gunderson).
this still doesn't work as a bug in ldb causes it to not understand
escaped characters in DNs when parsing DNs
Diffstat (limited to 'source/scripting')
-rw-r--r-- | source/scripting/ejs/smbcalls_ldb.c | 31 | ||||
-rw-r--r-- | source/scripting/libjs/upgrade.js | 2 |
2 files changed, 31 insertions, 2 deletions
diff --git a/source/scripting/ejs/smbcalls_ldb.c b/source/scripting/ejs/smbcalls_ldb.c index e9dba94eaa4..78063ed6b48 100644 --- a/source/scripting/ejs/smbcalls_ldb.c +++ b/source/scripting/ejs/smbcalls_ldb.c @@ -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); diff --git a/source/scripting/libjs/upgrade.js b/source/scripting/libjs/upgrade.js index 4ac6b6db344..0ffb790d5f4 100644 --- a/source/scripting/libjs/upgrade.js +++ b/source/scripting/libjs/upgrade.js @@ -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, |