📄 ldap.js
字号:
#!/bin/shexec smbscript "$0" ${1+"$@"}/* test certin LDAP behaviours*/var ldb = ldb_init();var gc_ldb = ldb_init();var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA", "POPT_COMMON_CREDENTIALS");if (options == undefined) { println("Failed to parse options"); return -1;}libinclude("base.js");if (options.ARGV.length != 1) { println("Usage: ldap.js <HOST>"); return -1;}var host = options.ARGV[0];function basic_tests(ldb, gc_ldb, base_dn, configuration_dn, schema_dn){ println("Running basic tests"); ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); ldb.del("cn=ldaptestuser,cn=users," + base_dn); ldb.del("cn=ldaptestuser2,cn=users," + base_dn); ldb.del("cn=ldaptestuser3,cn=users," + base_dn); ldb.del("cn=ldaptestuser4,cn=users," + base_dn); ldb.del("cn=ldaptestuser5,cn=users," + base_dn); ldb.del("CN=ldaptestuser4,CN=ldaptestcontainer2," + base_dn); ldb.del("cn=ldaptestuser7,cn=users," + base_dn); ldb.del("CN=ldaptestcontainer2," + base_dn); ldb.del("cn=ldaptestgroup,cn=users," + base_dn); ldb.del("cn=ldaptestgroup2,cn=users," + base_dn); println("Testing group add with invalid member"); var ok = ldb.add("dn: cn=ldaptestgroup,cn=uSers," + base_dn + "objectclass: groupmember: cn=ldaptestuser,cn=useRs," + base_dn + ""); if (ok.error != 32) { /* LDAP_NO_SUCH_OBJECT */ println(ok.errstr); assert(ok.error == 32); } println("Testing user add"); var ok = ldb.add("dn: cn=ldaptestuser,cn=uSers," + base_dn + "objectclass: userobjectclass: personcN: LDAPtestUSERgivenname: ldapsn: testy"); if (ok.error != 0) { ok = ldb.del("cn=ldaptestuser,cn=users," + base_dn); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } ok = ldb.add("dn: cn=ldaptestuser,cn=uSers," + base_dn + "objectclass: userobjectclass: personcN: LDAPtestUSERgivenname: ldapsn: testy"); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } } var ok = ldb.add("dn: cn=ldaptestgroup,cn=uSers," + base_dn + "objectclass: groupmember: cn=ldaptestuser,cn=useRs," + base_dn + ""); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } var ok = ldb.add("dn: cn=ldaptestcomputer,cn=computers," + base_dn + "objectclass: computercN: LDAPtestCOMPUTER"); if (ok.error != 0) { ok = ldb.del("cn=ldaptestcomputer,cn=computers," + base_dn); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } ok = ldb.add("dn: cn=ldaptestcomputer,cn=computers," + base_dn + "objectClass: computercn: LDAPtestCOMPUTER"); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } } if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } var ok = ldb.add("dn: cn=ldaptest2computer,cn=computers," + base_dn + "objectClass: computercn: LDAPtest2COMPUTERuserAccountControl: 4096displayname: ldap testy"); if (ok.error != 0) { ok = ldb.del("cn=ldaptest2computer,cn=computers," + base_dn); if (ok.error != 0) { println(ok.errstr); // assert(ok.error == 0); } ok = ldb.add("dn: cn=ldaptest2computer,cn=computers," + base_dn + "objectClass: computercn: LDAPtest2COMPUTERuserAccountControl: 4096displayname: ldap testy"); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } } var ok = ldb.add("dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "objectClass: computercn: LDAPtest2COMPUTER"); if (ok.error != 34) { println("Did not reject invalid RDN compared with DN: " + ok.errstr); assert(ok.error == 34); } var ok = ldb.add("dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "objectClass: computercn: LDAPtestCOMPUTER3sAMAccountType: 805306368"); if (ok.error != 53) { println("Did not reject invalid 'sAMAccountType: 805306368': " + ok.errstr); assert(ok.error == 53); } var ok = ldb.add("dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "objectClass: computercn: LDAPtestCOMPUTER3userAccountControl: 0"); if (ok.error != 53) { println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); assert(ok.error == 53); } var ok = ldb.add("dn: cn=ldaptestuser7,cn=users," + base_dn + "objectClass: usercn: LDAPtestuser7userAccountControl: 0"); if (ok.error != 53) { println("Did not reject invalid 'userAccountControl: 0': " + ok.errstr); assert(ok.error == 53); } var ok = ldb.add("dn: cn=ldaptestuser7,cn=users," + base_dn + "objectClass: usercn: LDAPtestuser7userAccountControl: 2"); if (ok.error != 0) { println("Did not accept 'userAccountControl: 2': " + ok.errstr); assert(ok.error == 0); } ldb.del("cn=ldaptestuser7,cn=users," + base_dn); var ok = ldb.add("dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "objectclass: computercN: LDAPtestCOMPUTER3"); if (ok.error != 0) { ok = ldb.del("cn=ldaptestcomputer3,cn=computers," + base_dn); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } ok = ldb.add("dn: cn=ldaptestcomputer3,cn=computers," + base_dn + "objectClass: computercn: LDAPtestCOMPUTER3"); if (ok.error != 0) { println(ok.errstr); assert(ok.error == 0); } } println("Testing ldb.search for (&(cn=ldaptestcomputer3)(objectClass=user))"); var res = ldb.search("(&(cn=ldaptestcomputer3)(objectClass=user))"); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (&(cn=ldaptestcomputer3)(objectClass=user))"); assert(res.error == 0); assert(res.msgs.length == 1); } assert(res.msgs[0].dn == ("CN=ldaptestcomputer3,CN=Computers," + base_dn)); assert(res.msgs[0].cn == "ldaptestcomputer3"); assert(res.msgs[0].name == "ldaptestcomputer3"); assert(res.msgs[0].objectClass[0] == "top"); assert(res.msgs[0].objectClass[1] == "person"); assert(res.msgs[0].objectClass[2] == "organizationalPerson"); assert(res.msgs[0].objectClass[3] == "user"); assert(res.msgs[0].objectClass[4] == "computer"); assert(res.msgs[0].objectGUID != undefined); assert(res.msgs[0].whenCreated != undefined); assert(res.msgs[0].objectCategory == ("CN=Computer,CN=Schema,CN=Configuration," + base_dn)); assert(res.msgs[0].primaryGroupID == 513); assert(res.msgs[0].sAMAccountType == 805306368); assert(res.msgs[0].userAccountControl == 546); ldb.del(res.msgs[0].dn); println("Testing attribute or value exists behaviour"); ok = ldb.modify("dn: cn=ldaptest2computer,cn=computers," + base_dn + "changetype: modifyreplace: servicePrincipalNameservicePrincipalName: host/ldaptest2computerservicePrincipalName: host/ldaptest2computerservicePrincipalName: cifs/ldaptest2computer");//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS if (ok.error != 20) { println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); assert(ok.error == 20); } ok = ldb.modify("dn: cn=ldaptest2computer,cn=computers," + base_dn + "changetype: modifyreplace: servicePrincipalNameservicePrincipalName: host/ldaptest2computerservicePrincipalName: cifs/ldaptest2computer"); if (ok.error != 0) { println("Failed to replace servicePrincpalName:" + ok.errstr); assert(ok.error == 20); } ok = ldb.modify("dn: cn=ldaptest2computer,cn=computers," + base_dn + "changetype: modifyadd: servicePrincipalNameservicePrincipalName: host/ldaptest2computer");//LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS if (ok.error != 20) { println("Expected error LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS, got :" + ok.errstr); assert(ok.error == 20); } println("Testing ranged results"); ok = ldb.modify("dn: cn=ldaptest2computer,cn=computers," + base_dn + "changetype: modifyreplace: servicePrincipalName"); if (ok.error != 0) { println("Failed to replace servicePrincpalName:" + ok.errstr); assert(ok.error == 0); } ok = ldb.modify("dn: cn=ldaptest2computer,cn=computers," + base_dn + "changetype: modifyadd: servicePrincipalNameservicePrincipalName: host/ldaptest2computer0servicePrincipalName: host/ldaptest2computer1servicePrincipalName: host/ldaptest2computer2servicePrincipalName: host/ldaptest2computer3servicePrincipalName: host/ldaptest2computer4servicePrincipalName: host/ldaptest2computer5servicePrincipalName: host/ldaptest2computer6servicePrincipalName: host/ldaptest2computer7servicePrincipalName: host/ldaptest2computer8servicePrincipalName: host/ldaptest2computer9servicePrincipalName: host/ldaptest2computer10servicePrincipalName: host/ldaptest2computer11servicePrincipalName: host/ldaptest2computer12servicePrincipalName: host/ldaptest2computer13servicePrincipalName: host/ldaptest2computer14servicePrincipalName: host/ldaptest2computer15servicePrincipalName: host/ldaptest2computer16servicePrincipalName: host/ldaptest2computer17servicePrincipalName: host/ldaptest2computer18servicePrincipalName: host/ldaptest2computer19servicePrincipalName: host/ldaptest2computer20servicePrincipalName: host/ldaptest2computer21servicePrincipalName: host/ldaptest2computer22servicePrincipalName: host/ldaptest2computer23servicePrincipalName: host/ldaptest2computer24servicePrincipalName: host/ldaptest2computer25servicePrincipalName: host/ldaptest2computer26servicePrincipalName: host/ldaptest2computer27servicePrincipalName: host/ldaptest2computer28servicePrincipalName: host/ldaptest2computer29"); if (ok.error != 0) { println("Failed to replace servicePrincpalName:" + ok.errstr); assert(ok.error == 0); } var attrs = new Array("servicePrincipalName;range=0-*"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-*"); assert(res.error == 0); assert(res.msgs.length == 1); }// println(res.msgs[0]["servicePrincipalName;range=0-*"].length); assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); var attrs = new Array("servicePrincipalName;range=0-19"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (cn=ldaptest2computer) for servicePrincipalName;range=0-19"); assert(res.error == 0); assert(res.msgs.length == 1); }// println(res.msgs[0]["servicePrincipalName;range=0-19"].length); assert(res.msgs[0]["servicePrincipalName;range=0-19"].length == 20); var attrs = new Array("servicePrincipalName;range=0-30"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-19"); assert(res.error == 0); assert(res.msgs.length == 1); } assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); var attrs = new Array("servicePrincipalName;range=0-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=0-40"); assert(res.error == 0); assert(res.msgs.length == 1); } assert(res.msgs[0]["servicePrincipalName;range=0-*"].length == 30); var attrs = new Array("servicePrincipalName;range=30-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs); if (res.error != 0 || res.msgs.length != 1) { println("Could not find (cn=ldaptest2computer) at servicePrincipalName;range=30-40"); assert(res.error == 0); assert(res.msgs.length == 1); } assert(res.msgs[0]["servicePrincipalName;range=30-*"].length == 0); var attrs = new Array("servicePrincipalName;range=10-40"); var res = ldb.search("(cn=ldaptest2computer))", base_dn, ldb.SCOPE_SUBTREE, attrs);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -