def test_tls(self):
     """ Test TLS connection. """
     if self.cfg['SERVER']['has_tls'] == 'False':
         self.skipTest("TLS is not set.")
     client = LDAPClient(self.url, True)
     client.set_cert_policy("ALLOW")
     try:
         conn = client.connect()
         conn.close()
     except:
         self.fail("TLS connection is failed")
 def setUp(self):
     """ Set LDAP URL and open connection. """
     self.cfg = configparser.ConfigParser()
     self.cfg.read('test.ini')
     self.url = "ldap://%s:%s/%s?%s?%s" % (self.cfg["SERVER"]["host"], \
                                     self.cfg["SERVER"]["port"], \
                                     self.cfg["SERVER"]["basedn"], \
                                     self.cfg["SERVER"]["search_attr"], \
                                     self.cfg["SERVER"]["search_scope"])
     self.basedn = self.cfg["SERVER"]["basedn"]
     client = LDAPClient(self.url)
     client.set_credentials("SIMPLE", (self.cfg["SIMPLEAUTH"]["user"],
                                       self.cfg["SIMPLEAUTH"]["password"]))
     self.conn = client.connect()
Beispiel #3
0
 def setUp(self):
     """ Set host url and connection. """
     cfg = configparser.ConfigParser()
     cfg.read('test.ini')
     self.url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                                  cfg["SERVER"]["port"])
     self.client = LDAPClient(self.url)
Beispiel #4
0
class LDAPClientTest(unittest.TestCase):
    """ Testing LDAPClient object. """
    def setUp(self):
        """ Set host url and connection. """
        cfg = configparser.ConfigParser()
        cfg.read('test.ini')
        self.url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                                     cfg["SERVER"]["port"])
        self.client = LDAPClient(self.url)

    def test_connect(self):
        """ Test connect method. """
        self.assertIsNotNone(self.client.connect())

    def test_rootdse(self):
        """ Test receiving root DSE. """
        root_dse = self.client.get_rootDSE()
        self.assertEqual(root_dse['supportedLDAPVersion'][0], 3)
Beispiel #5
0
 def setUp(self):
     """ Set LDAP client, get config parameters. """
     cfg = configparser.ConfigParser()
     cfg.read('test.ini')
     url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                             cfg["SERVER"]["port"])
     self.client = LDAPClient(url)
     self.creds = ("SIMPLE", (cfg["SIMPLEAUTH"]["user"],
                              cfg["SIMPLEAUTH"]["password"]))
     self.basedn = cfg["SERVER"]["basedn"]
 def test_bind_digest(self):
     """ Test DIGEST-MD5 connection. """
     if "DIGESTAUTH" not in self.cfg:
         self.skipTest("No digest authentication is set.")
     client = LDAPClient(self.url)
     if self.cfg["DIGESTAUTH"]["realm"] == "None":
         realm = None
     else:
         realm = self.cfg["DIGESTAUTH"]["realm"]
     client.set_credentials("DIGEST-MD5", (self.cfg["DIGESTAUTH"]["user"], \
                                     self.cfg["DIGESTAUTH"]["password"], \
                                     realm))
     try:
         conn = client.connect()
     except (pyldap.errors.ConnectionError, \
             pyldap.errors.AuthenticationError):
         self.fail()
     finally:
         self.assertNotEqual("anonymous", conn.whoami(), "Digest "
         "authentication was unsuccessful.")
         conn.close()
Beispiel #7
0
 def setUp(self):
     """ Set LDAP connection and test entry. """
     cfg = configparser.ConfigParser()
     cfg.read('test.ini')
     url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                             cfg["SERVER"]["port"])
     self.client = LDAPClient(url)
     self.client.set_credentials("SIMPLE", (cfg["SIMPLEAUTH"]["user"],
                                            cfg["SIMPLEAUTH"]["password"]))
     self.conn = self.client.connect()
     self.basedn = cfg["SERVER"]["basedn"]
     self.entry = LDAPEntry("cn=test,%s" % self.basedn)
     self.entry['objectclass'] = ['top', 'inetOrgPerson', 'person',
                                  'organizationalPerson']
     self.entry['sn'] = "Test"
Beispiel #8
0
class LDAPEntryTest(unittest.TestCase):
    """ Testing LDAPEntr object. """
    def setUp(self):
        """ Set LDAP connection and test entry. """
        cfg = configparser.ConfigParser()
        cfg.read('test.ini')
        url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                                cfg["SERVER"]["port"])
        self.client = LDAPClient(url)
        self.client.set_credentials("SIMPLE", (cfg["SIMPLEAUTH"]["user"],
                                               cfg["SIMPLEAUTH"]["password"]))
        self.conn = self.client.connect()
        self.basedn = cfg["SERVER"]["basedn"]
        self.entry = LDAPEntry("cn=test,%s" % self.basedn)
        self.entry['objectclass'] = ['top', 'inetOrgPerson', 'person',
                                     'organizationalPerson']
        self.entry['sn'] = "Test"

    def tearDown(self):
        """ Close connection. """
        self.conn.close()
        del self.entry

    def test_operations(self):
        """ Test LDAPEntry's add, modify, rename and delete operations. """
        try:
            self.conn.add(self.entry)
        except pyldap.errors.AlreadyExists:
            self.entry.delete()
            self.conn.add(self.entry)
        except:
            self.fail("Add failed.")
        self.entry.rename("cn=test2,%s" % self.basedn)
        self.assertEqual(str(self.entry.dn), "cn=test2,%s" % self.basedn)
        obj = self.conn.search("cn=test,%s" % self.basedn, 0)
        self.assertEqual(obj, [])
        self.entry['sn'] = "Test_modify"
        try:
            self.entry.modify()
        except:
            self.fail("Modify failed.")
        obj = self.conn.search("cn=test2,%s" % self.basedn, 0)[0]
        self.assertEqual(self.entry['sn'], obj['sn'])
        try:
            self.entry.delete()
        except:
            self.fail("Delete failed.")

    def test_update(self):
        """ Test updating LDAPEntry object. """
        self.entry.update({"GivenName": "test2", "mail" : "test@mail"})
        self.entry.update([("sn", "test")])
        self.assertEqual(self.entry['mail'], ['test@mail'])
        self.assertEqual(self.entry['givenname'], ['test2'])
        self.assertEqual(self.entry['sn'][0], 'test')

    def test_ci(self):
        """ Test case-insensitivity of LDAPEntry object. """
        self.entry['givenName'] = "test"
        self.entry['mail'] = "test@mail"
        self.assertEqual(self.entry['GiVenName'], self.entry['givenname'])
        del self.entry['mAil']
        self.assertRaises(KeyError, lambda: self.entry['mail'])

    def test_append(self):
        """ Test LDAPEntry's append method. """
        self.entry['givenName'] = "test"
        self.entry['givenname'].append("test2")
        self.assertEqual(self.entry['givenname'], ["test", "test2"])
        self.assertRaises(TypeError,
                          lambda: self.entry['GivenName']
                          .extend(['teSt', "test3"]))

    def test_get(self):
        """ Test LDAPEntry's get method. """
        self.assertEqual(self.entry.get("Noneelem"), None)
        self.assertEqual(self.entry['sn'], self.entry.get('sN'))

    def test_pop(self):
        """ Test LDAPEntry's pop method. """
        self.entry['test'] = "test"
        self.assertEqual(self.entry.pop("test"), ["test"])
        self.assertEqual(self.entry.pop("test", None), None)

    def test_popitem(self):
        """ Test LDAPEntry's popitem method. """
        item = self.entry.popitem()
        self.assertEqual(len(item), 2)
        self.assertNotIn(item[0], self.entry)
        self.entry[item[0]] = item[1]

    def test_clear(self):
        """ Test LDAPEntry's clear method. """
        entry = self.entry
        entry.clear()
        self.assertDictEqual(entry, {})
        self.assertEqual(entry.dn, self.entry.dn)

    def test_special_char(self):
        """ Test adding entry with special character in its DN. """
        conn = self.client.connect()
        entry = LDAPEntry("cn=test\, *\+withspec,dc=local")
        entry['objectclass'] = ['top', 'inetOrgPerson']
        entry['sn'] = "Test,*special"
        conn.add(entry)
        result = conn.search("dc=local", 1)
        entry.delete()
        self.assertIn(entry.dn, [res.dn for res in result])
Beispiel #9
0
class LDAPEntryTest(unittest.TestCase):
    def setUp(self):
        """ Set LDAP client, get config parameters. """
        cfg = configparser.ConfigParser()
        cfg.read('test.ini')
        url = "ldap://%s:%s" % (cfg["SERVER"]["host"],
                                cfg["SERVER"]["port"])
        self.client = LDAPClient(url)
        self.creds = ("SIMPLE", (cfg["SIMPLEAUTH"]["user"],
                                 cfg["SIMPLEAUTH"]["password"]))
        self.basedn = cfg["SERVER"]["basedn"]
    
    def test_set_get(self):
        """ Test LDAPEntry's SetItem, GetItem and get methods. """  
        entry = LDAPEntry("cn=test");
        entry['sn'] = 'Test'
        self.assertDictEqual(entry, {'sn' : ['Test']},
                             "LDAPEntry set is failed.")
        entry['givenname'] = 'Test'
        self.assertEqual(entry.get("None"), None,
                         "LDAPEntry get is failed.")
        self.assertListEqual(entry.get("GivenName"), entry['givenNAME'],
                         "LDAPEntry get is failed.")
        del entry['sn']
        self.assertRaises(KeyError, lambda: entry['sn'])
         
    def test_append_extend(self):
        """ Test append and extend methods of LDAPEntry's attribute. """
        entry = LDAPEntry("cn=test");
        entry['givenName'] = "test"
        entry['givenname'].append("test2")
        self.assertListEqual(entry['givenname'], ["test", "test2"])
        self.assertEqual(entry['givenname'][0], "test")
        self.assertRaises(TypeError,
                          lambda: entry['GivenName']
                          .extend(['teSt', "test3"]))
 
    def test_pop(self):
        """ Test LDAPEntry's pop method. """
        entry = LDAPEntry("cn=test")
        entry['test'] = "test"
        self.assertEqual(entry.pop("test"), ["test"])
        self.assertEqual(entry.pop("test", None), None)
 
    def test_popitem(self):
        """ Test LDAPEntry's popitem method. """
        entry = LDAPEntry("cn=test")
        entry['test'] = "test"
        entry['test2'] = 'test'
        item = entry.popitem()
        self.assertEqual(len(item), 2)
        self.assertNotIn(item[0], entry)
        entry[item[0]] = item[1]
        self.assertEqual(entry[item[0]], item[1])
 
    def test_clear(self):
        """ Test LDAPEntry's clear method. """
        entry = LDAPEntry("cn=test")
        entry['sn'] = ['test1', 'test2']
        entry['gn'] = ['test3']
        entry.clear()
        self.assertDictEqual(entry, {})
        self.assertEqual(entry.dn, "cn=test")
     
    def test_update(self):
        """ Test updating LDAPEntry object. """
        entry = LDAPEntry("cn=test")
        entry.update({"GivenName": "test2", "mail" : "test@mail"})
        entry.update([("sn", "test")])
        self.assertEqual(entry['mail'], ['test@mail'])
        self.assertEqual(entry['givenname'], ['test2'])
        self.assertEqual(entry['sn'][0], 'test')
     
    def test_special_char(self):
        """ Test adding entry with special character in its DN. """
        self.client.set_credentials(*self.creds)
        conn = self.client.connect()
        entry = LDAPEntry("cn=test\, *\+withspec,%s" % self.basedn)
        entry['objectclass'] = ['top', 'inetOrgPerson']
        entry['sn'] = "Test,*special"
        conn.add(entry)
        result = conn.search(self.basedn, 1)
        entry.delete()
        conn.close()
        self.assertIn(entry.dn, [res.dn for res in result])
         
    def test_unicode(self):
        """ Test adding entry with special character in its DN. """
        self.client.set_credentials(*self.creds)
        conn = self.client.connect()
        dname = "cn=test_\u00B5\u010D\u0F57,%s" % self.basedn
        entry = LDAPEntry(dname)
        entry['objectclass'] = ['top', 'inetOrgPerson']
        entry['sn'] = "unicode_\u00B5\u010D\u0F57"
        conn.add(entry)
        result = conn.search(dname, 0)
        entry.delete()
        conn.close()
        self.assertIn(dname, [res.dn for res in result])
     
    def test_connection(self):
        """ Test set and get connection object form LDAPEntry. """
        entry = LDAPEntry("cn=test,%s" % self.basedn)
        conn = self.client.connect()
        entry.connection = conn
        self.assertEqual(entry.connection, conn)
        def invalid_assign():
             entry.connection = "string"
        self.assertRaises(TypeError, invalid_assign)
    
    def test_sync_operations(self):
        """
        Test LDAPEntry's add, modify, rename 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(pyldap.ObjectClassViolation,
                              lambda: conn.add(entry))
            entry['sn'] = 'test'
            try:
                conn.add(entry)
            except pyldap.AlreadyExists:
                conn.delete(entry.dn)
                conn.add(entry)
            except:
                self.fail("Adding LDAPEntry to the server is failed.")
            entry.rename("cn=test2,%s" % self.basedn)
            self.assertEqual(str(entry.dn), "cn=test2,%s" % self.basedn)
            obj = conn.search("cn=test,%s" % self.basedn, 0)
            self.assertEqual(obj, [])
            obj = conn.search("cn=test2,%s" % self.basedn, 0)[0]
            self.assertEqual(entry.dn, obj.dn)
            entry['sn'] = "Test_modify"
            try:
                entry.modify()
            except:
                self.fail("Modify failed.")
            obj = conn.search("cn=test2,%s" % self.basedn, 0)[0]
            self.assertEqual(entry['sn'], obj['sn'])
            try:
                entry.delete()
            except:
                self.fail("Delete failed.")
    
    def test_async_operations(self):
        """
        Test LDAPEntry's add, modify, rename and delete
        asynchronous operations. 
        """
        try:
            import asyncio

            loop = asyncio.new_event_loop()
            asyncio.set_event_loop(None)

            entry = LDAPEntry("cn=async_test,%s" % self.basedn)
            self.client.set_credentials(*self.creds)

            @asyncio.coroutine
            def test1():
                """ Test receiving ObjectClassViolation error. """
                with (yield from self.client.connect(True)) as conn:
                    entry['objectclass'] = ['top', 'inetOrgPerson', 'person',
                                     'organizationalPerson']
                    yield from conn.add(entry)

            @asyncio.coroutine
            def test2():
                """ Test add, rename, search and delete an entry. """
                entry['sn'] = 'test'
                with (yield from self.client.connect(True)) as conn:
                    try:
                        yield from conn.add(entry)
                    except pyldap.AlreadyExists:
                        yield from conn.delete(entry.dn)
                        yield from conn.add(entry)
                    except Exception as ex:
                        self.fail("Adding LDAPEntry to the server "
                                  "async is failed with: %s" % str(ex))
                    yield from entry.rename("cn=async_test2,%s" % self.basedn)
                    self.assertEqual(str(entry.dn), "cn=async_test2,%s" %
                                     self.basedn)
                    obj = yield from conn.search("cn=async_test,%s" %
                                                 self.basedn, 0)
                    self.assertEqual(obj, [])
                    obj = yield from conn.search("cn=async_test2,%s" %
                                                 self.basedn, 0)
                    self.assertEqual(entry.dn, list(obj)[0].dn)
                    entry['sn'] = "Test_modify"
                    try:
                        yield from entry.modify()
                    except:
                        self.fail("Modify failed.")
                    obj = yield from conn.search("cn=async_test2,%s" %
                                                 self.basedn, 0)
                    self.assertEqual(entry['sn'], list(obj)[0]['sn'])
                    try:
                        yield from entry.delete()
                    except:
                        self.fail("Delete failed.")

            self.assertRaises(pyldap.ObjectClassViolation,
                              lambda: loop.run_until_complete(test1()))
            loop.run_until_complete(test2())
        except ImportError:
            self.skipTest("Asyncio library is not installed.")
 def test_connection_error(self):
     """ Test connection error. """
     client = LDAPClient("ldap://invalid")
     self.assertRaises(pyldap.ConnectionError, lambda : client.connect())
 def test_authentication_error(self):
     """ Test authentication error. """
     client = LDAPClient(self.url)
     client.set_credentials("SIMPLE", ("cn=wrong", "wronger"))
     self.assertRaises(pyldap.AuthenticationError, lambda : client.connect())