コード例 #1
0
 def test_modify_and_rename(self):
     with self.client.connect(True) as conn:
         entry = LDAPEntry("cn=async_test,%s" % self.basedn)
         entry['objectclass'] = [
             'top', 'inetOrgPerson', 'person', 'organizationalPerson'
         ]
         entry['sn'] = "async_test"
         oldname = "cn=async_test,%s" % self.basedn
         newname = "cn=async_test2,%s" % self.basedn
         res = conn.search(newname, 0)
         if res:
             res[0].delete()
         try:
             conn.add(entry)
         except bonsai.errors.AlreadyExists:
             conn.delete(entry.dn)
             conn.add(entry)
         except:
             self.fail("Unexcepected error.")
         entry['sn'] = "async_test2"
         entry.modify()
         entry.rename(newname)
         res = conn.search(entry.dn, 0, attrlist=['sn'])
         self.assertEqual(entry['sn'], res[0]['sn'])
         res = conn.search(oldname, 0)
         self.assertEqual(res, [])
         conn.delete(entry.dn)
コード例 #2
0
ファイル: test_gevent.py プロジェクト: Noirello/bonsai
def test_modify_and_rename(gclient, basedn):
    """ Test modifying and renaming LDAP entry. """
    with gclient.connect(True) as conn:
        entry = LDAPEntry("cn=async_test,%s" % basedn)
        entry["objectclass"] = [
            "top",
            "inetOrgPerson",
            "person",
            "organizationalPerson",
        ]
        entry["sn"] = "async_test"
        oldname = "cn=async_test,%s" % basedn
        newname = "cn=async_test2,%s" % basedn
        res = conn.search(newname, 0)
        if res:
            res[0].delete()
        try:
            conn.add(entry)
        except bonsai.errors.AlreadyExists:
            conn.delete(entry.dn)
            conn.add(entry)
        except:
            pytest.fail("Unexpected error.")
        entry["sn"] = "async_test2"
        entry.modify()
        entry.rename(newname)
        res = conn.search(entry.dn, 0, attrlist=["sn"])
        assert entry["sn"] == res[0]["sn"]
        res = conn.search(oldname, 0)
        assert res == []
        conn.delete(entry.dn)
コード例 #3
0
 def test_sync_operations(self):
     """
     Test LDAPEntry's add, modify and delete synchronous operations.
     """
     entry = LDAPEntry("cn=test,%s" % self.basedn)
     self.client.set_credentials(*self.creds)
     with self.client.connect() as conn:
         entry['sn'] = 'test'
         self.assertRaises(bonsai.ObjectClassViolation,
                           lambda: conn.add(entry))
         entry['objectclass'] = ['top', 'inetOrgPerson', 'person',
                                 'organizationalPerson']
         try:
             conn.add(entry)
         except bonsai.AlreadyExists:
             conn.delete(entry.dn)
             conn.add(entry)
         except:
             self.fail("Adding LDAPEntry to the server is failed.")
         entry['sn'] = "Test_modify"
         try:
             entry.modify()
         except:
             self.fail("Modify failed.")
         obj = conn.search("cn=test,%s" % self.basedn, 0)[0]
         self.assertEqual(entry['sn'], obj['sn'])
         try:
             entry.delete()
         except:
             self.fail("Delete failed.")
コード例 #4
0
 def test_modify_and_rename(self):
     with self.client.connect(True) as conn:
         entry = LDAPEntry("cn=async_test,%s" % self.basedn)
         entry['objectclass'] = ['top', 'inetOrgPerson', 'person',
                                 'organizationalPerson']
         entry['sn'] = "async_test"
         oldname = "cn=async_test,%s" % self.basedn
         newname = "cn=async_test2,%s" % self.basedn
         res = conn.search(newname, 0)
         if res:
             res[0].delete()
         try:
             conn.add(entry)
         except bonsai.errors.AlreadyExists:
             conn.delete(entry.dn)
             conn.add(entry)
         except:
             self.fail("Unexcepected error.")
         entry['sn'] = "async_test2"
         entry.modify()
         entry.rename(newname)
         res = conn.search(entry.dn, 0, attrlist=['sn'])
         self.assertEqual(entry['sn'], res[0]['sn'])
         res = conn.search(oldname, 0)
         self.assertEqual(res, [])
         conn.delete(entry.dn)
コード例 #5
0
ファイル: test_ldapentry.py プロジェクト: Noirello/bonsai
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()
コード例 #6
0
 def test_sync_operations(self):
     """
     Test LDAPEntry's add, modify and delete synchronous operations.
     """
     entry = LDAPEntry("cn=test,%s" % self.basedn)
     self.client.set_credentials(*self.creds)
     with self.client.connect() as conn:
         entry['objectclass'] = [
             'top', 'inetOrgPerson', 'person', 'organizationalPerson'
         ]
         self.assertRaises(bonsai.ObjectClassViolation,
                           lambda: conn.add(entry))
         entry['sn'] = 'test'
         try:
             conn.add(entry)
         except bonsai.AlreadyExists:
             conn.delete(entry.dn)
             conn.add(entry)
         except:
             self.fail("Adding LDAPEntry to the server is failed.")
         entry['sn'] = "Test_modify"
         try:
             entry.modify()
         except:
             self.fail("Modify failed.")
         obj = conn.search("cn=test,%s" % self.basedn, 0)[0]
         self.assertEqual(entry['sn'], obj['sn'])
         try:
             entry.delete()
         except:
             self.fail("Delete failed.")
コード例 #7
0
ファイル: test_gevent.py プロジェクト: tck42/bonsai
def test_modify_and_rename(gclient, basedn):
    """ Test modifying and renaming LDAP entry. """
    with gclient.connect(True) as conn:
        entry = LDAPEntry("cn=async_test,%s" % basedn)
        entry["objectclass"] = [
            "top",
            "inetOrgPerson",
            "person",
            "organizationalPerson",
        ]
        entry["sn"] = "async_test"
        oldname = "cn=async_test,%s" % basedn
        newname = "cn=async_test2,%s" % basedn
        res = conn.search(newname, 0)
        if res:
            res[0].delete()
        try:
            conn.add(entry)
        except bonsai.errors.AlreadyExists:
            conn.delete(entry.dn)
            conn.add(entry)
        except:
            pytest.fail("Unexpected error.")
        entry["sn"] = "async_test2"
        entry.modify()
        entry.rename(newname)
        res = conn.search(entry.dn, 0, attrlist=["sn"])
        assert entry["sn"] == res[0]["sn"]
        res = conn.search(oldname, 0)
        assert res == []
        conn.delete(entry.dn)
コード例 #8
0
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()
コード例 #9
0
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()
コード例 #10
0
ファイル: test_ldapentry.py プロジェクト: Noirello/bonsai
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()
コード例 #11
0
ファイル: test_ldapentry.py プロジェクト: magnuswatn/bonsai
 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()
コード例 #12
0
ファイル: test_ldapentry.py プロジェクト: Noirello/bonsai
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()
コード例 #13
0
ファイル: test_tornado.py プロジェクト: tck42/bonsai
 def test_modify_and_rename(self):
     """ Test modifying and renaming an LDAP entry. """
     with (yield self.client.connect(True, ioloop=self.io_loop)) as conn:
         entry = LDAPEntry("cn=async_test,%s" % self.basedn)
         entry["objectclass"] = [
             "top",
             "inetOrgPerson",
             "person",
             "organizationalPerson",
         ]
         entry["sn"] = "async_test"
         oldname = "cn=async_test,%s" % self.basedn
         newname = "cn=async_test2,%s" % self.basedn
         res = yield conn.search(newname, 0)
         if res:
             yield res[0].delete()
         try:
             yield conn.add(entry)
         except bonsai.errors.AlreadyExists:
             yield conn.delete(entry.dn)
             yield conn.add(entry)
         except:
             self.fail("Unexpected error.")
         entry["sn"] = "async_test2"
         yield entry.modify()
         yield entry.rename(newname)
         res = yield conn.search(entry.dn, 0, attrlist=["sn"])
         assert entry["sn"] == res[0]["sn"]
         res = yield conn.search(oldname, 0)
         assert res == []
         yield conn.delete(entry.dn)
コード例 #14
0
 def test_modify_and_rename(self):
     """ Test modifying and renaming an LDAP entry. """
     with (yield self.client.connect(True, ioloop=self.io_loop)) as conn:
         entry = LDAPEntry("cn=async_test,%s" % self.basedn)
         entry['objectclass'] = [
             'top', 'inetOrgPerson', 'person', 'organizationalPerson'
         ]
         entry['sn'] = "async_test"
         oldname = "cn=async_test,%s" % self.basedn
         newname = "cn=async_test2,%s" % self.basedn
         res = yield conn.search(newname, 0)
         if res:
             yield res[0].delete()
         try:
             yield conn.add(entry)
         except bonsai.errors.AlreadyExists:
             yield conn.delete(entry.dn)
             yield conn.add(entry)
         except:
             self.fail("Unexpected error.")
         entry['sn'] = "async_test2"
         yield entry.modify()
         yield entry.rename(newname)
         res = yield conn.search(entry.dn, 0, attrlist=['sn'])
         self.assertEqual(entry['sn'], res[0]['sn'])
         res = yield conn.search(oldname, 0)
         self.assertEqual(res, [])
         yield conn.delete(entry.dn)
コード例 #15
0
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()
コード例 #16
0
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()
コード例 #17
0
ファイル: test_ldapentry.py プロジェクト: magnuswatn/bonsai
 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())
コード例 #18
0
ファイル: test_ldapentry.py プロジェクト: Noirello/bonsai
def test_sync_operations(client, basedn):
    """
    Test LDAPEntry's add, modify and delete synchronous operations.
    """
    entry = LDAPEntry("cn=test,%s" % basedn)
    with pytest.raises(ValueError):
        entry.modify()
    with client.connect() as conn:
        entry["sn"] = "test"
        with pytest.raises(bonsai.ObjectClassViolation):
            conn.add(entry)
        entry["objectclass"] = [
            "top",
            "inetOrgPerson",
            "person",
            "organizationalPerson",
        ]
        try:
            conn.add(entry)
        except bonsai.AlreadyExists:
            conn.delete(entry.dn)
            conn.add(entry)
        except:
            pytest.fail("Adding LDAPEntry to the server is failed.")
        entry["sn"] = "Test_modify"
        try:
            entry.modify()
        except:
            pytest.fail("Modify failed.")
        obj = conn.search("cn=test,%s" % basedn, 0)[0]
        assert entry["sn"] == obj["sn"]
        try:
            entry.delete()
        except:
            pytest.fail("Delete failed.")
    with pytest.raises(bonsai.errors.ClosedConnection):
        entry.modify()
コード例 #19
0
def test_sync_operations(client, basedn):
    """
    Test LDAPEntry's add, modify and delete synchronous operations.
    """
    entry = LDAPEntry("cn=test,%s" % basedn)
    with pytest.raises(ValueError):
        entry.modify()
    with client.connect() as conn:
        entry["sn"] = "test"
        with pytest.raises(bonsai.ObjectClassViolation):
            conn.add(entry)
        entry["objectclass"] = [
            "top",
            "inetOrgPerson",
            "person",
            "organizationalPerson",
        ]
        try:
            conn.add(entry)
        except bonsai.AlreadyExists:
            conn.delete(entry.dn)
            conn.add(entry)
        except:
            pytest.fail("Adding LDAPEntry to the server is failed.")
        entry["sn"] = "Test_modify"
        try:
            entry.modify()
        except:
            pytest.fail("Modify failed.")
        obj = conn.search("cn=test,%s" % basedn, 0)[0]
        assert entry["sn"] == obj["sn"]
        try:
            entry.delete()
        except:
            pytest.fail("Delete failed.")
    with pytest.raises(bonsai.errors.ClosedConnection):
        entry.modify()