Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
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 == []
Пример #4
0
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")
Пример #5
0
 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.")
Пример #6
0
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.")
Пример #7
0
 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.")
Пример #8
0
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.")
Пример #9
0
 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.")
Пример #10
0
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()
Пример #11
0
 def close_conn():
     cli = LDAPClient("ldap://%s" % self.ipaddr)
     LDAPConnection(cli).add(bonsai.LDAPEntry("cn=dummy"))