def _create_org(conn, basedn, entry_num): nonlocal gconn nonlocal entry entry = bonsai.LDAPEntry("ou=limited,%s" % basedn) entry.update({ "objectclass": ["top", "organizationalUnit"], "ou": "limited" }) gconn = conn try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn, recursive=True) conn.add(entry) for idx in range(entry_num): item = bonsai.LDAPEntry("cn=test_{idx},{base}".format( idx=idx, base=entry.dn)) item["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] item["sn"] = "test_{idx}".format(idx=idx) conn.add(item) return entry
def _create_org(conn, org_dn, entry_num): nonlocal gconn nonlocal entry nonlocal gnum entry = bonsai.LDAPEntry(org_dn) entry["objectclass"] = ["top", "organizationalUnit"] entry["ou"] = entry.dn.rdns[0][0][1] gconn = conn gnum = entry_num try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn, recursive=True) conn.add(entry) for idx in range(entry_num): item = bonsai.LDAPEntry( "cn=test_{idx},{base}".format(idx=idx, base=entry.dn) ) item["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] item["sn"] = "test_{idx}".format(idx=idx) conn.add(item) return entry
def test_add_and_delete_referrals(cfg, ipaddr): """ Test add and delete an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=test-ref,ou=nerdherd,dc=bonsai,dc=test") ref = "ldap://test.host/cn=nobody" cli = LDAPClient("ldap://%s" % ipaddr) cli.set_credentials("SIMPLE", user=cfg["SIMPLEAUTH"]["user"], password=cfg["SIMPLEAUTH"]["password"]) cli.managedsait = True with cli.connect() as conn: entry = bonsai.LDAPEntry(refdn, conn) entry["objectClass"] = ["referral", "extensibleObject"] entry["o"] = "test-ref" entry["ref"] = ref conn.add(entry) res = conn.search(refdn, 0, attrlist=["ref"])[0] assert entry.dn == res.dn assert entry["ref"] == res["ref"] cli.managedsait = False with cli.connect() as conn: with pytest.raises(bonsai.LDAPError): conn.delete(entry.dn) cli.managedsait = True with cli.connect() as conn: conn.delete(entry.dn) res = conn.search(refdn, 0, attrlist=["ref"]) assert res == []
def test_wrong_add_param(conn, ipaddr): """ Test passing wrong parameter for add method. """ with pytest.raises(ClosedConnection): cli = LDAPClient("ldap://%s" % ipaddr) LDAPConnection(cli).add(bonsai.LDAPEntry("cn=dummy")) with pytest.raises(TypeError): conn.add("wrong")
def test_add_and_delete(self): """ Test adding and removing an LDAP entry. """ entry = bonsai.LDAPEntry("cn=example,%s" % self.basedn) entry.update({"objectclass" : ["top", "inetorgperson"], "cn" : "example", "sn" : "example"}) try: self.conn.add(entry) res = self.conn.search(entry.dn, 0) self.assertEqual(res[0], entry) self.conn.delete("cn=example,%s" % self.cfg["SERVER"]["basedn"]) res = self.conn.search(entry.dn, 0) self.assertListEqual(res, []) self.assertRaises(ValueError, lambda: self.conn.add(bonsai.LDAPEntry(""))) except bonsai.LDAPError: self.fail("Add and delete new entry is failed.")
def test_add_and_delete(conn, basedn): """ Test adding and removing an LDAP entry. """ entry = bonsai.LDAPEntry("cn=example,%s" % basedn) entry.update( {"objectclass": ["top", "inetorgperson"], "cn": "example", "sn": "example"} ) try: conn.add(entry) res = conn.search(entry.dn, 0) assert res[0] == entry conn.delete("cn=example,%s" % basedn) res = conn.search(entry.dn, 0) assert res == [] with pytest.raises(ValueError): conn.add(bonsai.LDAPEntry("")) except bonsai.LDAPError: pytest.fail("Add and delete new entry is failed.")
def test_recursive_delete(self): """ Test removing a subtree recursively. """ org1 = bonsai.LDAPEntry("ou=testusers,%s" % self.basedn) org1.update({"objectclass" : ['organizationalUnit', 'top'], "ou" : "testusers"}) org2 = bonsai.LDAPEntry("ou=tops,ou=testusers,%s" % self.basedn) org2.update({"objectclass" : ['organizationalUnit', 'top'], "ou" : "tops"}) entry = bonsai.LDAPEntry("cn=tester,ou=tops,ou=testusers,%s" % self.basedn) entry.update({"objectclass" : ["top", "inetorgperson"], "cn" : "tester", "sn" : "example"}) try: self.conn.add(org1) self.conn.add(org2) self.conn.add(entry) self.conn.delete(org1.dn, recursive=True) res = self.conn.search(org1.dn, 2) self.assertListEqual(res, []) except bonsai.LDAPError: self.fail("Recursive delete is failed.")
def test_recursive_delete(conn, basedn): """ Test removing a subtree recursively. """ org1 = bonsai.LDAPEntry("ou=testusers,%s" % basedn) org1.update({"objectclass": ["organizationalUnit", "top"], "ou": "testusers"}) org2 = bonsai.LDAPEntry("ou=tops,ou=testusers,%s" % basedn) org2.update({"objectclass": ["organizationalUnit", "top"], "ou": "tops"}) entry = bonsai.LDAPEntry("cn=tester,ou=tops,ou=testusers,%s" % basedn) entry.update( {"objectclass": ["top", "inetorgperson"], "cn": "tester", "sn": "example"} ) try: conn.add(org1) conn.add(org2) conn.add(entry) conn.delete(org1.dn, recursive=True) res = conn.search(org1.dn, 2) assert res == [] except bonsai.LDAPError: pytest.fail("Recursive delete is failed.")
def test_add_and_delete(self): entry = bonsai.LDAPEntry("cn=example,%s" % self.cfg["SERVER"]["basedn"]) entry.update({ "objectclass": ["top", "inetorgperson"], "cn": "example", "sn": "example" }) try: self.conn.add(entry) self.conn.delete("cn=example,%s" % self.cfg["SERVER"]["basedn"]) except bonsai.LDAPError: self.fail("Add and delete new entry is failed.")
def large_org(): """ Create a heavily populated organization LDAP entry. """ gconn = None entry = None gnum = None def _create_org(conn, org_dn, entry_num): nonlocal gconn nonlocal entry nonlocal gnum entry = bonsai.LDAPEntry(org_dn) entry["objectclass"] = ["top", "organizationalUnit"] entry["ou"] = entry.dn.rdns[0][0][1] gconn = conn gnum = entry_num try: conn.add(entry) except bonsai.AlreadyExists: conn.delete(entry.dn, recursive=True) conn.add(entry) for idx in range(entry_num): item = bonsai.LDAPEntry( "cn=test_{idx},{base}".format(idx=idx, base=entry.dn) ) item["objectclass"] = [ "top", "inetOrgPerson", "person", "organizationalPerson", ] item["sn"] = "test_{idx}".format(idx=idx) conn.add(item) return entry yield _create_org if gconn.closed: gconn = gconn.open() for idx in range(gnum): # Delete entries one by one to avoid Administration Limit Exceeded with AD. item = bonsai.LDAPEntry("cn=test_{idx},{base}".format(idx=idx, base=entry.dn)) gconn.delete(item.dn) gconn.delete(entry.dn, recursive=True) gconn.close()
def close_conn(): cli = LDAPClient("ldap://%s" % self.ipaddr) LDAPConnection(cli).add(bonsai.LDAPEntry("cn=dummy"))