Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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 == []
Exemplo n.º 3
0
 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, [])
Exemplo n.º 4
0
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 == []
Exemplo n.º 5
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()
Exemplo n.º 6
0
 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()
Exemplo n.º 7
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()
Exemplo n.º 8
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()
Exemplo n.º 9
0
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]
Exemplo n.º 10
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()
Exemplo n.º 11
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()
Exemplo n.º 12
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()
Exemplo n.º 13
0
 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())
Exemplo n.º 14
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()