def test_change_attribute_error(self): """ Test change_attribute method's error handling. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" self.client.set_credentials(*self.creds) with self.client.connect() as conn: entry = LDAPEntry(user_dn, conn) self.assertRaises(ValueError, lambda: entry.change_attribute("mail", 4, "t")) entry.change_attribute("sn", 0, "Lembeck") self.assertRaises(bonsai.TypeOrValueExists, entry.modify) entry.change_attribute("description", LDAPModOp.DELETE, "sam") self.assertRaises(bonsai.NoSuchAttribute, entry.modify)
def test_clear_attribute_changes(): """ Test clear_attribute_changes method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" entry = LDAPEntry(user_dn) entry.change_attribute("uidNumber", 0, 4) assert entry["uidNumber"].added == [4] entry.change_attribute("uidNumber", 1, 4) assert entry["uidNumber"].deleted == [4] entry.clear_attribute_changes("uidNumber") assert entry["uidNumber"].status == 0 assert entry["uidNumber"].added == [] assert entry["uidNumber"].deleted == []
def test_clear_attribute_changes(self): """ Test clear_attribute_changes method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" entry = LDAPEntry(user_dn) entry.change_attribute("uidNumber", 0, 4) self.assertEqual(entry['uidNumber'].added, [4]) entry.change_attribute("uidNumber", 1, 4) self.assertEqual(entry['uidNumber'].deleted, [4]) entry.clear_attribute_changes('uidNumber') self.assertEqual(entry['uidNumber'].status, 0) self.assertEqual(entry['uidNumber'].added, []) self.assertEqual(entry['uidNumber'].deleted, [])
def test_modify_referrals(client): """ Test modifying an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=invalid-ref,ou=nerdherd,dc=bonsai,dc=test") newref = "ldap://invalid.host/cn=nobody" cli = LDAPClient(client.url) cli.set_credentials(client.mechanism, **client.credentials) cli.managedsait = True with cli.connect() as conn: entry = LDAPEntry(refdn, conn) entry.change_attribute("ref", LDAPModOp.ADD, newref) entry.modify() res = conn.search(refdn, 0, attrlist=["ref"])[0] assert len(res["ref"]) == 3 assert newref in res["ref"] entry.change_attribute("ref", LDAPModOp.DELETE, newref) entry.modify()
def test_modify_referrals(self): """ Test modifying an LDAP referral with ManageDdsIT control. """ refdn = bonsai.LDAPDN("o=invalid-ref,ou=nerdherd,dc=bonsai,dc=test") newref = "ldap://invalid.host/cn=nobody" cli = LDAPClient(self.client.url) cli.set_credentials(*self.creds) cli.managedsait = True with cli.connect() as conn: entry = LDAPEntry(refdn, conn) entry.change_attribute("ref", LDAPModOp.ADD, newref) entry.modify() res = conn.search(refdn, 0, attrlist=['ref'])[0] self.assertEqual(len(res['ref']), 3) self.assertIn(newref, res['ref']) entry.change_attribute("ref", LDAPModOp.DELETE, newref) entry.modify()
def ldap(): result = ldap_image.run() LDAPCONFIG['host'] = result[0] LDAPCONFIG['port'] = result[1] client = LDAPClient(f"ldap://{LDAPCONFIG['host']}:{LDAPCONFIG['port']}") client.set_credentials("SIMPLE", user='******', password='******') conn = client.connect() anna = LDAPEntry("uid=anna,dc=my-company,dc=com") anna['objectClass'] = ['top', 'inetOrgPerson'] anna['sn'] = "Wu" anna['cn'] = "Wu" anna['uid'] = "anna" anna['displayName'] = "Anna" conn.add(anna) anna.change_attribute("userPassword", LDAPModOp.REPLACE, "newsecret") anna.modify() yield result ldap_image.stop()
def test_write_changes(): """ Test writing LDIF changes of an LDAP Entry. """ ent = LDAPEntry("cn=test") ent["cn"] = "test" ent["sn"] = ["sntest1", "sntest2"] ent.change_attribute("givenName", LDAPModOp.REPLACE, "test") ent.change_attribute("uidNumber", LDAPModOp.DELETE, 0) ent.change_attribute("gidNumber", LDAPModOp.DELETE) with StringIO() as out: ldif = LDIFWriter(out) ldif.write_changes(ent) content = out.getvalue() lines = content.split("\n") assert "dn: {0}".format(ent.dn) == lines.pop(0) # First line. assert "changetype: modify" == lines.pop(0) # Second line. assert "add: cn" in lines assert "cn: {0}".format(ent["cn"][0]) == lines[lines.index("add: cn") + 1] assert "add: sn" in lines assert set(ent["sn"]) == {lin.split("sn: ")[1] for lin in lines if "sn: " in lin} assert "replace: givenName" in lines assert ( "givenName: {0}".format(ent["givenName"][0]) == lines[lines.index("replace: givenName") + 1] ) assert "delete: uidNumber" in lines assert "uidNumber: 0" == lines[lines.index("delete: uidNumber") + 1] assert "delete: gidNumber" in lines # Remove the key entirely. assert "-" == lines[lines.index("delete: gidNumber") + 1]
def test_change_attribute_error(client): """ Test change_attribute method's error handling. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) with pytest.raises(ValueError): entry.change_attribute("mail", 4, "t") entry.change_attribute("sn", 0, "Lembeck") with pytest.raises(bonsai.TypeOrValueExists): entry.modify() entry.clear_attribute_changes("sn") entry.change_attribute("description", LDAPModOp.DELETE, "sam") with pytest.raises(bonsai.NoSuchAttribute): entry.modify()
def test_change_attribute(client): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" if sys.platform == "win32": multiattr = "otherTelephone" else: multiattr = "mail" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() assert conn.search(user_dn, 0)[0]["mail"][0] == "*****@*****.**" entry.change_attribute("mail", 1, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() with pytest.raises(KeyError): _ = conn.search(user_dn, 0)[0]["mail"] entry.change_attribute(multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**") assert entry[multiattr].status == 2 entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1) entry.modify() assert multiattr not in conn.search(user_dn, 0)[0].keys()
def test_change_attribute(self): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" self.client.set_credentials(*self.creds) if sys.platform == "win32": multiattr = 'otherTelephone' else: multiattr = 'mail' with self.client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") self.assertEqual(entry['mail'].status, 1) entry.modify() self.assertEqual(conn.search(user_dn, 0)[0]['mail'][0], "*****@*****.**") entry.change_attribute("mail", 1, "*****@*****.**") self.assertEqual(entry['mail'].status, 1) entry.modify() self.assertRaises(KeyError, lambda: conn.search(user_dn, 0)[0]['mail']) entry.change_attribute(multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**") self.assertEqual(entry[multiattr].status, 2) entry.modify() res = conn.search(user_dn, 0)[0][multiattr] self.assertIn("*****@*****.**", res) self.assertIn("*****@*****.**", res) entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] self.assertIn("*****@*****.**", res) self.assertIn("*****@*****.**", res) entry.change_attribute(multiattr, 1) entry.modify() self.assertNotIn(multiattr, conn.search(user_dn, 0)[0].keys())
def test_change_attribute(client): """ Test change_attribute method. """ user_dn = "cn=sam,ou=nerdherd,dc=bonsai,dc=test" if sys.platform == "win32": multiattr = "otherTelephone" else: multiattr = "mail" with client.connect() as conn: entry = LDAPEntry(user_dn, conn) entry.change_attribute("mail", LDAPModOp.ADD, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() assert conn.search(user_dn, 0)[0]["mail"][0] == "*****@*****.**" entry.change_attribute("mail", 1, "*****@*****.**") assert entry["mail"].status == 1 entry.modify() with pytest.raises(KeyError): _ = conn.search(user_dn, 0)[0]["mail"] entry.change_attribute( multiattr, LDAPModOp.REPLACE, "*****@*****.**", "*****@*****.**" ) assert entry[multiattr].status == 2 entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1, "*****@*****.**") entry.change_attribute(multiattr, 0, "*****@*****.**") entry.modify() res = conn.search(user_dn, 0)[0][multiattr] assert "*****@*****.**" in res assert "*****@*****.**" in res entry.change_attribute(multiattr, 1) entry.modify() assert multiattr not in conn.search(user_dn, 0)[0].keys()