📄 samba3sam.js
字号:
assert(res.msgs[0].dnsHostName == "z"); assert(res.msgs[0].lastLogon == "z"); assert(res.msgs[1].dn == s4.dn("cn=C")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "z"); /* Search by renamed attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(badPwdCount=x)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); /* Search by converted attribute */ attrs = new Array("dnsHostName", "lastLogon", "objectSid"); /* TODO: Using the SID directly in the parse tree leads to conversion errors, letting the search fail with no results. res = ldb.search("(objectSid=S-1-5-21-4231626423-2410014848-2360679739-552)", NULL, ldb. SCOPE_DEFAULT, attrs); */ res = ldb.search("(objectSid=*)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=X")); assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552"); /* Search by generated attribute */ /* In most cases, this even works when the mapping is missing * a `convert_operator' by enumerating the remote db. */ attrs = new Array("dnsHostName", "lastLogon", "primaryGroupID"); res = ldb.search("(primaryGroupID=512)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == s4.dn("cn=A")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].primaryGroupID == "512"); /* TODO: There should actually be two results, A and X. The * primaryGroupID of X seems to get corrupted somewhere, and the * objectSid isn't available during the generation of remote (!) data, * which can be observed with the following search. Also note that Xs * objectSid seems to be fine in the previous search for objectSid... */ /* res = ldb.search("(primaryGroupID=*)", NULL, ldb. SCOPE_DEFAULT, attrs); println(res.msgs.length + " results found"); for (i=0;i<res.msgs.length;i++) { for (obj in res.msgs[i]) { println(obj + ": " + res.msgs[i][obj]); } println("---"); } */ /* Search by remote name of renamed attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(sambaBadPasswordCount=*)", "", ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Search by objectClass */ attrs = new Array("dnsHostName", "lastLogon", "objectClass"); res = ldb.search("(objectClass=user)", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=X")); assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[0].objectClass != undefined); assert(res.msgs[0].objectClass[0] == "user"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectClass != undefined); assert(res.msgs[1].objectClass[0] == "user"); /* Prove that the objectClass is actually used for the search */ res = ldb.search("(|(objectClass=user)(badPwdCount=x))", NULL, ldb. SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[0].objectClass != undefined); for (i=0;i<res.msgs[0].objectClass.length;i++) { assert(res.msgs[0].objectClass[i] != "user"); } assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[1].objectClass != undefined); assert(res.msgs[1].objectClass[0] == "user"); assert(res.msgs[2].dn == s4.dn("cn=A")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "x"); assert(res.msgs[2].objectClass != undefined); assert(res.msgs[2].objectClass[0] == "user"); println("Testing search by parse tree"); /* Search by conjunction of local attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(&(codePage=x)(revision=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); /* Search by conjunction of remote attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(&(lastLogon=x)(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=X")); assert(res.msgs[0].dnsHostName == "x"); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); /* Search by conjunction of local and remote attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(&(codePage=x)(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); /* Search by conjunction of local and remote attribute w/o match */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(&(codePage=x)(nextRid=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); res = ldb.search("(&(revision=x)(lastLogon=z))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Search by disjunction of local attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(revision=x)(dnsHostName=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 2); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); /* Search by disjunction of remote attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(badPwdCount=x)(lastLogon=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=A")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "x"); /* Search by disjunction of local and remote attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(revision=x)(lastLogon=y))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=B")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "y"); assert(res.msgs[2].dn == s4.dn("cn=X")); assert(res.msgs[2].dnsHostName == "x"); assert(res.msgs[2].lastLogon == "x"); /* Search by disjunction of local and remote attribute w/o match */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(codePage=y)(nextRid=z))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Search by negated local attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(revision=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=Z")); assert(res.msgs[2].dnsHostName == "z"); assert(res.msgs[2].lastLogon == "z"); assert(res.msgs[3].dn == s4.dn("cn=C")); assert(res.msgs[3].dnsHostName == undefined); assert(res.msgs[3].lastLogon == "z"); /* Search by negated remote attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(description=x))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 3); assert(res.msgs[0].dn == s4.dn("cn=Z")); assert(res.msgs[0].dnsHostName == "z"); assert(res.msgs[0].lastLogon == "z"); assert(res.msgs[1].dn == s4.dn("cn=C")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "z"); /* Search by negated conjunction of local attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(codePage=x)(revision=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=Z")); assert(res.msgs[2].dnsHostName == "z"); assert(res.msgs[2].lastLogon == "z"); assert(res.msgs[3].dn == s4.dn("cn=C")); assert(res.msgs[3].dnsHostName == undefined); assert(res.msgs[3].lastLogon == "z"); /* Search by negated conjunction of remote attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(lastLogon=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=B")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "y"); assert(res.msgs[2].dn == s4.dn("cn=Z")); assert(res.msgs[2].dnsHostName == "z"); assert(res.msgs[2].lastLogon == "z"); assert(res.msgs[3].dn == s4.dn("cn=C")); assert(res.msgs[3].dnsHostName == undefined); assert(res.msgs[3].lastLogon == "z"); /* Search by negated conjunction of local and remote attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(&(codePage=x)(description=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 5); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=Z")); assert(res.msgs[2].dnsHostName == "z"); assert(res.msgs[2].lastLogon == "z"); assert(res.msgs[3].dn == s4.dn("cn=C")); assert(res.msgs[3].dnsHostName == undefined); assert(res.msgs[3].lastLogon == "z"); /* Search by negated disjunction of local attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(|(revision=x)(dnsHostName=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=A")); assert(res.msgs[1].dnsHostName == undefined); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=Z")); assert(res.msgs[2].dnsHostName == "z"); assert(res.msgs[2].lastLogon == "z"); assert(res.msgs[3].dn == s4.dn("cn=C")); assert(res.msgs[3].dnsHostName == undefined); assert(res.msgs[3].lastLogon == "z"); /* Search by negated disjunction of remote attributes */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(|(badPwdCount=x)(lastLogon=x)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 4); assert(res.msgs[0].dn == s4.dn("cn=Y")); assert(res.msgs[0].dnsHostName == "y"); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=Z")); assert(res.msgs[1].dnsHostName == "z"); assert(res.msgs[1].lastLogon == "z"); assert(res.msgs[2].dn == s4.dn("cn=C")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "z"); /* Search by negated disjunction of local and remote attribute */ attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(!(|(revision=x)(lastLogon=y)))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 4); assert(res.msgs[0].dn == s4.dn("cn=A")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "x"); assert(res.msgs[1].dn == s4.dn("cn=Z")); assert(res.msgs[1].dnsHostName == "z"); assert(res.msgs[1].lastLogon == "z"); assert(res.msgs[2].dn == s4.dn("cn=C")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "z"); println("Search by complex parse tree"); attrs = new Array("dnsHostName", "lastLogon"); res = ldb.search("(|(&(revision=x)(dnsHostName=x))(!(&(description=x)(nextRid=y)))(badPwdCount=y))", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 6); assert(res.msgs[0].dn == s4.dn("cn=B")); assert(res.msgs[0].dnsHostName == undefined); assert(res.msgs[0].lastLogon == "y"); assert(res.msgs[1].dn == s4.dn("cn=X")); assert(res.msgs[1].dnsHostName == "x"); assert(res.msgs[1].lastLogon == "x"); assert(res.msgs[2].dn == s4.dn("cn=A")); assert(res.msgs[2].dnsHostName == undefined); assert(res.msgs[2].lastLogon == "x"); assert(res.msgs[3].dn == s4.dn("cn=Z")); assert(res.msgs[3].dnsHostName == "z"); assert(res.msgs[3].lastLogon == "z"); assert(res.msgs[4].dn == s4.dn("cn=C")); assert(res.msgs[4].dnsHostName == undefined); assert(res.msgs[4].lastLogon == "z"); /* Clean up */ var dns = new Array(); dns[0] = s4.dn("cn=A"); dns[1] = s4.dn("cn=B"); dns[2] = s4.dn("cn=C"); dns[3] = s4.dn("cn=X"); dns[4] = s4.dn("cn=Y"); dns[5] = s4.dn("cn=Z"); for (i=0;i<dns.length;i++) { var ok = ldb.del(dns[i]); assert(ok.error == 0); }}function test_map_modify(ldb, s3, s4){ println("Running modification tests on mapped data"); var ldif; var attrs; var dn, dn2; var res; var ok; println("Testing modification of local records"); /* Add local record */ dn = "cn=test,dc=idealx,dc=org"; ldif = "dn: " + dn + "cn: testfoo: barrevision: 1description: test"; ok = ldb.add(ldif); assert(ok.error == 0); /* Check it's there */ attrs = new Array("foo", "revision", "description"); res = ldb.search("", dn, ldb.SCOPE_BASE, attrs); assert(res.error == 0); assert(res.msgs.length == 1); assert(res.msgs[0].dn == dn); assert(res.msgs[0].foo == "bar"); assert(res.msgs[0].revision == "1"); assert(res.msgs[0].description == "test"); /* Check it's not in the local db */ res = s4.db.search("(cn=test)", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Check it's not in the remote db */ res = s3.db.search("(cn=test)", NULL, ldb.SCOPE_DEFAULT, attrs); assert(res.error == 0); assert(res.msgs.length == 0); /* Modify local record */ ldif = "dn: " + dn + "replace: foofoo: bazreplace: descriptiondescription: foo";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -