コード例 #1
0
    def test_search_and_delete_entry(self):
        add_user(self.connection, testcase_id, 'del1', attributes={'givenName': 'givenname-delete'})
        read_only_entry = self.get_entry('del1')
        self.assertEqual(read_only_entry.entry_status, STATUS_READ)
        writable_entry = read_only_entry.entry_writable('inetorgperson')
        self.assertEqual(writable_entry.entry_status, STATUS_WRITABLE)
        writable_entry.entry_delete()
        self.assertEqual(writable_entry.entry_status, STATUS_READY_FOR_DELETION)
        result = writable_entry.entry_commit_changes()
        self.assertEqual(writable_entry.entry_status, STATUS_DELETED)
        self.assertTrue(result)
        counter = 20
        while counter > 0:  # waits for at maximum 20 times - delete operation can take some time to complete
            result = self.connection.search(search_base=test_base, search_filter='(' + test_name_attr + '=' + testcase_id + 'del1)', attributes=[test_name_attr, 'givenName'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
                entries = self.connection._get_entries(response)
            else:
                result = self.connection.result
                entries = self.connection.entries
            if len(entries) == 0:
                break
            sleep(3)
            counter -= 1

        self.assertEqual(result['description'], 'success')
        self.assertEqual(len(entries), 0)
        self.compare_entries(read_only_entry, writable_entry)
コード例 #2
0
    def test_check_groups_memberships(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-1'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-2'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-1'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-2'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-3'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-3'))
            self.connection.extend.novell.add_members_to_groups((self.delete_at_teardown[0][0], self.delete_at_teardown[1][0]),
                                                                self.delete_at_teardown[2][0],
                                                                fix=True,
                                                                transaction=True)

            self.connection.extend.novell.add_members_to_groups((self.delete_at_teardown[0][0], self.delete_at_teardown[1][0]),
                                                                self.delete_at_teardown[3][0],
                                                                fix=True,
                                                                transaction=True)

            # valid users in valid groups
            result = self.connection.extend.novell.check_groups_memberships((self.delete_at_teardown[0][0], self.delete_at_teardown[1][0]), (self.delete_at_teardown[2][0],self.delete_at_teardown[3][0]))
            self.assertTrue(result)

            # invalid users in valid groups
            result = self.connection.extend.novell.check_groups_memberships((self.delete_at_teardown[0][0], self.delete_at_teardown[3][0]), (self.delete_at_teardown[2][0],self.delete_at_teardown[3][0]))
            self.assertFalse(result)

            # invalid users in invalid groups
            result = self.connection.extend.novell.check_groups_memberships((self.delete_at_teardown[0][0], self.delete_at_teardown[4][0]), (self.delete_at_teardown[2][0], self.delete_at_teardown[5][0]))
            self.assertFalse(result)
コード例 #3
0
ファイル: testLDIF-content.py プロジェクト: cannatag/ldap3
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection()
     self.delete_at_teardown = []
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'ldif-content-1'))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'ldif-content-2'))
コード例 #4
0
    def test_find_entry_with_text_index_match(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-2'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-3'))
        o = ObjectDef('inetOrgPerson')
        o += AttrDef('cn', 'Common Name')
        o += AttrDef('sn', 'Surname')
        o += AttrDef(test_multivalued_attribute, 'Given Name')

        query_text = 'Common Name:=' + testcase_id + 'mat-*'
        r = Reader(self.connection, o, test_base, query_text)

        results = r.search()
        self.assertEqual(len(results), 3)
        try:  # multiple matches
            e = r['match']
        except  KeyError:
            pass

        e = r['-2']  # exact match
        self.assertTrue('mat-2' in e.entry_dn)

        try:
            e = r['no-match']  # no match
        except KeyError:
            pass
コード例 #5
0
ファイル: testControls.py プロジェクト: cannatag/ldap3
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection()
     self.delete_at_teardown = []
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'controls-1', attributes={'givenName': 'given name-1'}))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'controls-2', attributes={'givenName': 'given name-2'}))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'controls-3', attributes={'givenName': 'given name-3'}))
コード例 #6
0
 def test_paged_search_accumulator_with_schema(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1'))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-2'))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-3'))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-4'))
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-5'))
     r = Reader(self.connection, 'inetorgperson', test_base, 'cn:=' + testcase_id + 'mat-*')
     entries = r.search_paged(2, True, generator=False, attributes=['cn'])
     self.assertEqual(len(entries), 5)
コード例 #7
0
    def test_match_in_single_attribute_with_schema(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1', attributes={test_singlevalued_attribute: 'FALSE'}))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-2', attributes={test_singlevalued_attribute: 'FALSE'}))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-3', attributes={test_singlevalued_attribute: 'TRUE'}))
        r = Reader(self.connection, 'inetorgperson', test_base, 'cn:=' + testcase_id + 'mat-*')

        results = r.search()
        self.assertEqual(len(results), 3)

        e = r.match(test_singlevalued_attribute, 'FALSE')
        self.assertEqual(len(e), 2)
        e = r.match(test_singlevalued_attribute, 'fAlSe')
        self.assertEqual(len(e), 2)
コード例 #8
0
ファイル: testSearchOperation.py プロジェクト: cannatag/ldap3
 def test_search_string_guid(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-16', attributes={'givenName': testcase_id + 'givenname-16'}))
     if test_server_type == 'EDIR':
         result = self.connection.search(search_base=test_base, search_filter='(givenname=' + testcase_id + 'givenname-16)', attributes=[test_name_attr, 'sn', 'guid'])
     elif test_server_type == 'AD':  # not tested on AD yet
         result = self.connection.search(search_base=test_base, search_filter='(givenname=' + testcase_id + 'givenname-16)', attributes=[test_name_attr, 'sn', 'objectGuid'])
     else:  # not tested on other kind of servers
         return
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
         result = self.connection.result
     self.assertEqual(result['description'], 'success')
     self.assertEqual(len(response), 1)
     if test_server_type == 'EDIR':
         result = self.connection.search(search_base=test_base, search_filter='(guid=' + response[0]['attributes']['guid'] + ')', attributes=[test_name_attr, 'sn'])
     elif test_server_type == 'AD':  # not tested on AD yet
         result = self.connection.search(search_base=test_base, search_filter='(objectguid=' + response[0]['attributes']['objectguid'] + ')', attributes=[test_name_attr, 'sn'])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
         result = self.connection.result
     self.assertEqual(result['description'], 'success')
     self.assertEqual(len(response), 1)
     if test_server_type == 'EDIR':
         self.assertEqual(response[0]['attributes'][test_name_attr][0], testcase_id + 'sea-16')
     elif test_server_type == 'AD':
         self.assertEqual(response[0]['attributes'][test_name_attr], testcase_id + 'sea-16')
コード例 #9
0
 def test_search_object(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abstract-1'))
     o = ObjectDef(['inetorgPerson', 'person'], self.connection)
     r = Reader(self.connection, o, test_base, '(cn=' + testcase_id + 'abstract-1)')
     r.search(attributes='cn')  # AD returns operationError for reading some atributes
     self.assertEqual(len(r), 1)
     self.assertEqual(r.entries[0].cn, testcase_id + 'abstract-1')
コード例 #10
0
    def test_search_filter_with_object_class(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-1'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-2'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-3'))
        self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'abs-grp', self.delete_at_teardown))
        reverse = lambda a, e: e[::-1]
        o = ObjectDef('inetOrgPerson')
        o += AttrDef('cn', 'Common Name')
        o += AttrDef('sn', 'Surname')
        o += AttrDef(test_multivalued_attribute, 'Given Name', post_query=reverse)

        query_text = 'Common Name:=' + testcase_id + 'abs-*'
        r = Reader(self.connection, o, test_base, query_text)

        results = r.search()
        self.assertEqual(len(results), 3)
コード例 #11
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
 def test_modify_operation_from_bytes_literal(self):
     single = b'abc'
     multi = [b'abc', b'def']
     single_mod = b'cba'
     multi_mod = [b'cba', b'fed']
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-12', attributes={test_singlevalued_attribute: single, test_multivalued_attribute: multi}, test_bytes=True))
     self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
     result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
     self.assertEqual(len(response), 1)
     self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single])
     self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi))
     self.connection.modify(self.delete_at_teardown[0][0], {test_singlevalued_attribute: (MODIFY_REPLACE, single_mod), test_multivalued_attribute: (MODIFY_ADD, multi_mod)})
     if not self.connection.strategy.sync:
         sleep(2)
     result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
     self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single_mod])
     self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi + multi_mod))
コード例 #12
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
 def test_modify_operation_from_byte_values(self):
     if str is not bytes:  # integer list to bytes works only in Python 3
         single = make_bytes([195, 160, 195, 168, 195, 172, 195, 178, 195, 185])
         multi = [make_bytes([195, 160, 195, 168, 195, 172]), make_bytes([195, 178, 195, 185])]
         single_mod = make_bytes([195, 185, 195, 178, 195, 172, 195, 168, 195, 160])
         multi_mod = [make_bytes([195, 172, 195, 168, 195, 160]), make_bytes([195, 185, 195, 178])]
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-13', attributes={test_singlevalued_attribute: single, test_multivalued_attribute: multi}, test_bytes=True))
         self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
         result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
         if not self.connection.strategy.sync:
             response, result = self.connection.get_response(result)
         else:
             response = self.connection.response
         self.assertEqual(len(response), 1)
         self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single])
         self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi))
         self.connection.modify(self.delete_at_teardown[0][0], {test_singlevalued_attribute: (MODIFY_REPLACE, single_mod), test_multivalued_attribute: (MODIFY_ADD, multi_mod)})
         if not self.connection.strategy.sync:
             sleep(2)
         result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
         if not self.connection.strategy.sync:
             response, result = self.connection.get_response(result)
         else:
             response = self.connection.response
         self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single_mod])
         self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi + multi_mod))
コード例 #13
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
 def test_modify_operation_from_bytearray_unicode_literal(self):
     single = make_bytearray(u'\u00e0\u00e8\u00ec\u00f2\u00f9', 'utf-8')
     multi = [make_bytearray(u'\u00e0\u00e8\u00ec', 'utf-8'), make_bytearray(u'\u00f2\u00f9', 'utf-8')]
     single_mod = make_bytearray(u'\u00f9\u00f2\u00ec\u00e8\u00e0', 'utf-8')
     multi_mod = [make_bytearray(u'\u00ec\u00e8\u00e0', 'utf-8'), make_bytearray('\u00f9\u00f2', 'utf-8')]
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-18', attributes={test_singlevalued_attribute: single, test_multivalued_attribute: multi}, test_bytes=True))
     self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
     result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
     self.assertEqual(len(response), 1)
     self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single])
     self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi))
     self.connection.modify(self.delete_at_teardown[0][0], {test_singlevalued_attribute: (MODIFY_REPLACE, single_mod), test_multivalued_attribute: (MODIFY_ADD, multi_mod)})
     if not self.connection.strategy.sync:
         sleep(2)
     result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
     self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single_mod])
     self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi + multi_mod))
コード例 #14
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
 def test_modify_operation_from_bytearray_unicode_name(self):
     if str is not bytes:  # works only in python 3
         single = make_bytearray(u'\N{LATIN SMALL LETTER A WITH GRAVE}\N{LATIN SMALL LETTER E WITH GRAVE}\N{LATIN SMALL LETTER I WITH GRAVE}\N{LATIN SMALL LETTER O WITH GRAVE}\N{LATIN SMALL LETTER U WITH GRAVE}', 'utf-8')
         multi = [make_bytearray(u'\N{LATIN SMALL LETTER A WITH GRAVE}\N{LATIN SMALL LETTER E WITH GRAVE}\N{LATIN SMALL LETTER I WITH GRAVE}', 'utf-8'), make_bytearray('\N{LATIN SMALL LETTER O WITH GRAVE}\N{LATIN SMALL LETTER U WITH GRAVE}', 'utf-8')]
         single_mod = make_bytearray('\N{LATIN SMALL LETTER U WITH GRAVE}\N{LATIN SMALL LETTER O WITH GRAVE}\N{LATIN SMALL LETTER I WITH GRAVE}\N{LATIN SMALL LETTER E WITH GRAVE}\N{LATIN SMALL LETTER A WITH GRAVE}', 'utf-8')
         multi_mod = [make_bytearray('\N{LATIN SMALL LETTER I WITH GRAVE}\N{LATIN SMALL LETTER E WITH GRAVE}\N{LATIN SMALL LETTER A WITH GRAVE}', 'utf-8'), make_bytearray('\N{LATIN SMALL LETTER U WITH GRAVE}\N{LATIN SMALL LETTER O WITH GRAVE}', 'utf-8')]
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-19', attributes={test_singlevalued_attribute: single, test_multivalued_attribute: multi}, test_bytes=True))
         self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
         result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
         if not self.connection.strategy.sync:
             response, result = self.connection.get_response(result)
         else:
             response = self.connection.response
         self.assertEqual(len(response), 1)
         self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single])
         self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi))
         self.connection.modify(self.delete_at_teardown[0][0], {test_singlevalued_attribute: (MODIFY_REPLACE, single_mod), test_multivalued_attribute: (MODIFY_ADD, multi_mod)})
         if not self.connection.strategy.sync:
             sleep(2)
         result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
         if not self.connection.strategy.sync:
             response, result = self.connection.get_response(result)
         else:
             response = self.connection.response
         self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single_mod])
         self.assertEqual(sorted(response[0]['raw_attributes'][test_multivalued_attribute]), sorted(multi + multi_mod))
コード例 #15
0
    def test_remove_member_from_group_transactional(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-5'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-5', self.delete_at_teardown))
            self.connection.extend.novell.add_members_to_groups(self.delete_at_teardown[0][0],
                                                                self.delete_at_teardown[1][0],
                                                                fix=True,
                                                                transaction=True)
            result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[1][0] + ' not found')

            result = self.connection.search(self.delete_at_teardown[1][0], '(objectclass=*)', attributes=['member', 'equivalentToMe'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')

            self.connection.extend.novell.remove_members_from_groups(self.delete_at_teardown[0][0],
                                                                     self.delete_at_teardown[1][0],
                                                                     fix=False,
                                                                     transaction=False)

            result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] not in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] not in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[1][0] + ' not found')

            result = self.connection.search(self.delete_at_teardown[1][0], '(objectclass=*)', attributes=['member', 'equivalentToMe'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] not in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] not in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')
コード例 #16
0
ファイル: testAddOperation.py プロジェクト: cannatag/ldap3
 def test_add_binary(self):
     bin1 = open('512b-rsa-example-cert.der','rb')
     bin2 = open('1024b-rsa-example-cert.der','rb')
     der_certificates = [bin1.read(), bin2.read()]
     bin1.close()
     bin2.close()
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'add-operation-4', attributes={'userCertificate;binary': der_certificates}))
     self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
コード例 #17
0
    def test_search_with_pre_query(self):
        change = lambda attr, value: testcase_id + 'abs-*'

        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-7'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-8'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-9'))
        self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'abstract-group', self.delete_at_teardown))

        ou = ObjectDef('inetOrgPerson')
        ou += AttrDef('cn', 'Common Name', pre_query=change)
        ou += AttrDef('sn', 'Surname')
        ou += AttrDef(test_multivalued_attribute, 'Given Name')
        ou += AttrDef('ACL')
        qu = 'Common Name := bug'
        ru = Reader(self.connection, ou, test_base, qu)
        lu = ru.search()
        self.assertEqual(len(lu), 3)
コード例 #18
0
 def test_paged_search_generator_with_schema_base_object(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1'))
     r = Reader(self.connection, 'inetorgperson', self.delete_at_teardown[0][0])
     entries = r.search_paged(2, True, generator=True, attributes=['cn'])
     cont = 0
     for _ in entries:
         cont += 1
     self.assertEqual(cont, 1)
コード例 #19
0
ファイル: testSearchOperation.py プロジェクト: cannatag/ldap3
    def test_search_simple_paged(self):
        if not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-5', attributes={'givenName': 'givenname-3'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-6', attributes={'givenName': 'givenname-4'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-7', attributes={'givenName': 'givenname-5'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-8', attributes={'givenName': 'givenname-6'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-9', attributes={'givenName': 'givenname-7'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-10', attributes={'givenName': 'givenname-8'}))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-11', attributes={'givenName': 'givenname-9'}))

            paged_size = 4
            total_entries = 0
            result = self.connection.search(search_base=test_base, search_filter='(' + test_name_attr + '=' + testcase_id + '*)', search_scope=SUBTREE, attributes=[test_name_attr, 'givenName'], paged_size=paged_size)
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response = self.connection.response
                result = self.connection.result
            self.assertEqual(result['description'], 'success')
            self.assertEqual(len(response), paged_size)
            total_entries += len(response)
            cookie = result['controls']['1.2.840.113556.1.4.319']['value']['cookie']
            while cookie:
                result = self.connection.search(search_base=test_base, search_filter='(' + test_name_attr + '=' + testcase_id + '*)', search_scope=SUBTREE, attributes=[test_name_attr, 'givenName'], paged_size=paged_size, paged_cookie=cookie)
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                else:
                    response = self.connection.response
                    result = self.connection.result
                self.assertEqual(result['description'], 'success')
                total_entries += len(response)
                self.assertTrue(len(response) <= paged_size)
                cookie = result['controls']['1.2.840.113556.1.4.319']['value']['cookie']
            self.assertEqual(total_entries, 11)
コード例 #20
0
 def test_modify_dn_operation(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'modify-dn-1'))
     result = self.connection.modify_dn(self.delete_at_teardown[0][0], test_name_attr + '=' + testcase_id + 'modified-dn-1')
     if not self.connection.strategy.sync:
         _, result = self.connection.get_response(result)
     else:
         result = self.connection.result
     self.delete_at_teardown[0] = (self.delete_at_teardown[0][0].replace('modify-dn-1', 'modified-dn-1'), self.delete_at_teardown[0][1])
     self.assertEqual(result['description'], 'success')
コード例 #21
0
    def test_add_members_to_groups(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-2'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-3'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-4'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-2', self.delete_at_teardown))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-3'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-4'))
            self.connection.extend.novell.add_members_to_groups([self.delete_at_teardown[0][0],
                                                                 self.delete_at_teardown[1][0],
                                                                 self.delete_at_teardown[2][0]],
                                                                [self.delete_at_teardown[3][0],
                                                                 self.delete_at_teardown[4][0],
                                                                 self.delete_at_teardown[5][0]],
                                                                fix=True,
                                                                transaction=False
                                                                )
            for i in range(0, 2):
                result = self.connection.search(self.delete_at_teardown[i][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership'])
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                else:
                    response, result = self.connection.response, self.connection.result

                if response:
                    for j in range(3, 5):
                        self.assertTrue(self.delete_at_teardown[j][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[j][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[i][0] + ' not found')

            for j in range(3, 5):
                result = self.connection.search(self.delete_at_teardown[j][0], '(objectclass=*)', attributes=['member', 'equivalentToMe'])
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                else:
                    response, result = self.connection.response, self.connection.result

                if response:
                    for i in range(0, 2):
                        self.assertTrue(self.delete_at_teardown[i][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[i][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[j][0] + ' not found')
コード例 #22
0
    def test_search_with_None_default(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-12'))

        ou = ObjectDef('inetOrgPerson')
        ou += AttrDef('cn', 'CommonName')
        ou += AttrDef('employeeType', key='Employee', default=None)
        qu = 'CommonName := ' + testcase_id + 'abs-12'
        ru = Reader(self.connection, ou, test_base, qu)
        lu = ru.search()
        self.assertEqual(lu[0].employee.value, None)
コード例 #23
0
ファイル: testCheckNamesFalse.py プロジェクト: cannatag/ldap3
 def test_valid_attribute(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'chk-2', attributes={'givenName': 'given-name-2'}))
     result = self.connection.search(search_base=test_base, search_filter='(' + test_name_attr + '=' + testcase_id + 'chk-2)', attributes=[test_name_attr, 'givenName'])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
         result = self.connection.result
     self.assertEqual(result['description'], 'success')
     self.assertEqual(len(response), 1)
コード例 #24
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
    def test_modify_operation_from_bytes_for_objectclass(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-29', test_bytes=True))
        self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
        result = self.connection.modify(self.delete_at_teardown[0][0], {'objectClass': (MODIFY_REPLACE, [b'top', b'organizationalunit'])})
        if not self.connection.strategy.sync:
            sleep(2)
            response, result = self.connection.get_response(result)
        else:
            result = self.connection.result

        self.assertTrue(result['description'], ['objectClassViolation', 'objectClassModsProhibited'])
コード例 #25
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
    def test_compare_false_operation_with_bytes(self):
        single = make_bytes('àèìòù', 'utf-8')
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-11', attributes={test_singlevalued_attribute: single}, test_bytes=True))
        self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
        result = self.connection.compare(self.delete_at_teardown[0][0], test_singlevalued_attribute, 'invalid')
        if not self.connection.strategy.sync:
            _, result = self.connection.get_response(result)
        else:
            result = self.connection.result

        self.assertEqual(result['description'], 'compareFalse')
コード例 #26
0
    def test_search_with_dereference(self):
        reverse = lambda a, e: e[::-1]

        def raise_parentheses_rank(_, l):
            up = {'(': '[', ')': ']', '[': '{', ']': '}', '{': '<', '}': '>'}
            r = []
            for e in l:
                s = ''
                for c in e:
                    s += up[c] if c in up else c
                r.append(s)

            return r

        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-4'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-5'))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'abs-6'))
        self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'abstract-group', self.delete_at_teardown))
        ou = ObjectDef('inetOrgPerson')
        ou += AttrDef('cn', 'Common Name', post_query=reverse)
        ou += AttrDef('sn', 'Surname')
        ou += AttrDef(test_multivalued_attribute, 'Given Name', post_query=raise_parentheses_rank)
        ou += AttrDef('ACL')
        qu = 'Common Name: ' + testcase_id + 'abs-*'
        ru = Reader(self.connection, ou, test_base, qu)
        lu = ru.search()
        self.assertEqual(len(lu), 3)

        og = ObjectDef('groupOfNames')
        og += AttrDef('member', dereference_dn=ou)
        og += 'cn'
        qg = 'cn := ' + testcase_id + 'abstract-group'
        rg = Reader(self.connection, og, test_base, qg)
        lg = rg.search()
        self.assertEqual(len(lg), 1)

        eg = lg[0]
        mg = eg.member
        self.assertEqual(len(mg), 3)
        ug = eg.member[0]
        self.assertTrue(str(ug.surname) in ['abs-4', 'abs-5', 'abs-6'])
コード例 #27
0
    def test_match_in_single_attribute(self):
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1', attributes={test_multivalued_attribute: ['givenname-1', 'givenname-1a']}))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-2', attributes={test_multivalued_attribute: ['givenname-2', 'givenname-2a']}))
        self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-3', attributes={test_multivalued_attribute: ['givenname-3', 'givenname-3a']}))
        o = ObjectDef('inetOrgPerson')
        o += AttrDef('cn', 'Common Name')
        o += AttrDef('sn', 'Surname')
        o += AttrDef(test_multivalued_attribute, 'Given Name')

        query_text = 'Common Name:=' + testcase_id + 'mat-*'
        r = Reader(self.connection, o, test_base, query_text)

        results = r.search()
        self.assertEqual(len(results), 3)

        e = r.match('Given Name', 'name')  # multiple matches
        self.assertEqual(len(e), 3)
        e = r.match('Given Name', '2a')  # single match
        self.assertEqual(len(e), 1)
        e = r.match('Given Name', 'no-match')  # no match
        self.assertEqual(len(e), 0)
コード例 #28
0
ファイル: testBytesOperation.py プロジェクト: cannatag/ldap3
 def test_add_operation_from_bytes(self):
     single = make_bytes('àèìòù', 'utf-8')
     multi = [make_bytes('àèì', 'utf-8'), make_bytes('òù', 'utf-8')]
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'byt-2', attributes={test_singlevalued_attribute: single, test_multivalued_attribute: multi}, test_bytes=True))
     self.assertEqual('success', self.delete_at_teardown[0][1]['description'])
     result = self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', BASE, attributes=[test_singlevalued_attribute, test_multivalued_attribute])
     if not self.connection.strategy.sync:
         response, result = self.connection.get_response(result)
     else:
         response = self.connection.response
     self.assertEqual(len(response), 1)
     self.assertEqual(response[0]['raw_attributes'][test_singlevalued_attribute], [single])
コード例 #29
0
 def test_modify_entry_with_attrdef_with_friendly_name(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'new-9', attributes={test_multivalued_attribute: testcase_id + 'friendly-attr-name-1'}))
     a = AttrDef(name=test_multivalued_attribute, key='myname')
     o = ObjectDef('inetorgperson')
     o += a
     r = Reader(self.connection, o, test_base, 'myname:=' + testcase_id + 'friendly*')
     r.search()
     self.assertTrue(r[0].myname, testcase_id + 'friendly-attr-name-1')
     w = Writer.from_cursor(r)
     e = w[0]
     e.myname += 'xyz'
     w.commit()
     self.assertTrue('xyz' in e.myname)
コード例 #30
0
ファイル: testMicrosoftAD.py プロジェクト: cannatag/ldap3
 def test_modify_existing_password_as_administrator(self):
     if test_server_type == 'AD' and test_strategy != REUSABLE:
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'pwd-3', attributes={'givenName': 'pwd-3'}))
         dn = self.delete_at_teardown[-1][0]
         new_password = '******'
         result = self.connection.extend.microsoft.modify_password(dn, new_password)
         self.assertEqual(result, True)
         # creates a second connection and tries to bind with the new password
         test_connection = get_connection(bind=False, authentication=SIMPLE, simple_credentials=(dn, new_password))
         test_connection.bind()
         connected_user = test_connection.extend.standard.who_am_i()
         test_connection.unbind()
         self.assertTrue('pwd-3' in connected_user)
コード例 #31
0
 def test_add(self):
     self.delete_at_teardown.append(
         add_user(self.connection, testcase_id, 'add-operation-1'))
     self.assertEqual('success',
                      self.delete_at_teardown[0][1]['description'])
コード例 #32
0
    def test_remove_member_from_group_transactional(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(
                add_user(self.connection, testcase_id, 'user-5'))
            self.delete_at_teardown.append(
                add_group(self.connection, testcase_id, 'group-5',
                          self.delete_at_teardown))
            self.connection.extend.novell.add_members_to_groups(
                self.delete_at_teardown[0][0],
                self.delete_at_teardown[1][0],
                fix=True,
                transaction=True)
            result = self.connection.search(
                self.delete_at_teardown[0][0],
                '(objectclass=*)',
                attributes=['securityEquals', 'groupMembership'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] in (
                    response[0]['attributes']['securityEquals']
                    if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] in (
                    response[0]['attributes']['groupMembership']
                    if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True,
                                 self.delete_at_teardown[1][0] + ' not found')

            result = self.connection.search(
                self.delete_at_teardown[1][0],
                '(objectclass=*)',
                attributes=['member', 'equivalentToMe'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] in (
                    response[0]['attributes']['member'] if 'member' in
                    response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] in (
                    response[0]['attributes']['equivalentToMe']
                    if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True,
                                 self.delete_at_teardown[0][0] + ' not found')

            self.connection.extend.novell.remove_members_from_groups(
                self.delete_at_teardown[0][0],
                self.delete_at_teardown[1][0],
                fix=False,
                transaction=False)

            result = self.connection.search(
                self.delete_at_teardown[0][0],
                '(objectclass=*)',
                attributes=['securityEquals', 'groupMembership'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] not in (
                    response[0]['attributes']['securityEquals']
                    if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] not in (
                    response[0]['attributes']['groupMembership']
                    if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True,
                                 self.delete_at_teardown[1][0] + ' not found')

            result = self.connection.search(
                self.delete_at_teardown[1][0],
                '(objectclass=*)',
                attributes=['member', 'equivalentToMe'])
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
            else:
                response, result = self.connection.response, self.connection.result

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] not in (
                    response[0]['attributes']['member'] if 'member' in
                    response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] not in (
                    response[0]['attributes']['equivalentToMe']
                    if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True,
                                 self.delete_at_teardown[0][0] + ' not found')
コード例 #33
0
ファイル: testSearchOperation.py プロジェクト: kxt/ldap3-1
    def test_search_simple_paged(self):
        if not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-5',
                         attributes={'givenName': 'givenname-3'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-6',
                         attributes={'givenName': 'givenname-4'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-7',
                         attributes={'givenName': 'givenname-5'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-8',
                         attributes={'givenName': 'givenname-6'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-9',
                         attributes={'givenName': 'givenname-7'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-10',
                         attributes={'givenName': 'givenname-8'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-11',
                         attributes={'givenName': 'givenname-9'}))

            paged_size = 4
            total_entries = 0
            status, result, response, request = get_response_values(
                self.connection.search(
                    search_base=test_base,
                    search_filter='(' + test_name_attr + '=' + testcase_id +
                    '*)',
                    search_scope=SUBTREE,
                    attributes=[test_name_attr, 'givenName'],
                    paged_size=paged_size), self.connection)
            self.assertEqual(result['description'], 'success')
            self.assertEqual(len(response), paged_size)
            total_entries += len(response)
            cookie = result['controls']['1.2.840.113556.1.4.319']['value'][
                'cookie']
            while cookie:
                status, result, response, request = get_response_values(
                    self.connection.search(
                        search_base=test_base,
                        search_filter='(' + test_name_attr + '=' +
                        testcase_id + '*)',
                        search_scope=SUBTREE,
                        attributes=[test_name_attr, 'givenName'],
                        paged_size=paged_size,
                        paged_cookie=cookie), self.connection)
                self.assertEqual(result['description'], 'success')
                total_entries += len(response)
                self.assertTrue(len(response) <= paged_size)
                cookie = result['controls']['1.2.840.113556.1.4.319']['value'][
                    'cookie']
            self.assertEqual(total_entries, 11)
コード例 #34
0
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection()
     self.delete_at_teardown = []
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'modify-1', attributes={'givenName': 'givenname-1'}))
コード例 #35
0
ファイル: testDeleteOperation.py プロジェクト: kxt/ldap3-1
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection(check_names=True)
     self.delete_at_teardown = []
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'delete-1'))
コード例 #36
0
 def test_valid_object_class_add(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'chk-3', attributes={'objectClass': ['inetOrgPerson', 'Person']}))
     self.assertEqual(self.delete_at_teardown[0][1]['description'], 'success')
コード例 #37
0
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection(check_names=True)
     self.delete_at_teardown = []
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'compare-1', attributes={'givenName': 'compare'}))
コード例 #38
0
    def test_search_simple_paged(self):
        if not self.connection.strategy.pooled:
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-3',
                         attributes={'givenName': 'givenname-3'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-4',
                         attributes={'givenName': 'givenname-4'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-5',
                         attributes={'givenName': 'givenname-5'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-6',
                         attributes={'givenName': 'givenname-6'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-7',
                         attributes={'givenName': 'givenname-7'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-8',
                         attributes={'givenName': 'givenname-8'}))
            self.delete_at_teardown.append(
                add_user(self.connection,
                         testcase_id,
                         'sea-9',
                         attributes={'givenName': 'givenname-9'}))

            paged_size = 4
            total_entries = 0
            result = self.connection.search(
                search_base=test_base,
                search_filter='(' + test_name_attr + '=' + testcase_id + '*)',
                search_scope=SUBTREE,
                attributes=[test_name_attr, 'givenName'],
                paged_size=paged_size)
            if not self.connection.strategy.sync:
                response, result = self.connection.get_response(result)
                entries = self.connection._get_entries(response)
            else:
                result = self.connection.result
                entries = self.connection.entries
            self.assertEqual(result['description'], 'success')
            self.assertEqual(len(entries), paged_size)
            total_entries += len(entries)
            cookie = result['controls']['1.2.840.113556.1.4.319']['value'][
                'cookie']
            while cookie:
                result = self.connection.search(
                    search_base=test_base,
                    search_filter='(' + test_name_attr + '=' + testcase_id +
                    '*)',
                    search_scope=SUBTREE,
                    attributes=[test_name_attr, 'givenName'],
                    paged_size=paged_size,
                    paged_cookie=cookie)
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                    entries = self.connection._get_entries(response)
                else:
                    result = self.connection.result
                    entries = self.connection.entries
                self.assertEqual(result['description'], 'success')
                total_entries += len(entries)
                self.assertTrue(len(entries) <= paged_size)
                cookie = result['controls']['1.2.840.113556.1.4.319']['value'][
                    'cookie']
            self.assertEqual(total_entries, 9)
コード例 #39
0
ファイル: testSearchOperation.py プロジェクト: maxsond/ldap3
 def setUp(self):
     global testcase_id
     testcase_id = random_id()
     self.connection = get_connection()
     self.delete_at_teardown = []
     if test_server_type == 'EDIR':
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-1', attributes={'givenName': 'givenname-1', test_int_attr: 0}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-2', attributes={'givenName': 'givenname-2', test_int_attr: 0}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-3-\u2122', attributes={'givenName': 'givenname-3', test_int_attr: 0}))  # TRADE-MARK SIGN
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-4-�����', attributes={'givenName': 'givenname-4', test_int_attr: 0}))
     elif test_server_type == 'AD':
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-1', attributes={'givenName': 'givenname-1'}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-2', attributes={'givenName': 'givenname-2'}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-3-\u2122', attributes={'givenName': 'givenname-3'}))  # TRADE-MARK SIGN
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-4-�����', attributes={'givenName': 'givenname-4'}))
     else:
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-1', attributes={'givenName': 'givenname-1'}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'sea-2', attributes={'givenName': 'givenname-2'}))
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-3-\u2122', attributes={'givenName': 'givenname-3'}))  # TRADE-MARK SIGN
         self.delete_at_teardown.append(add_user(self.connection, testcase_id, u'sea-4-�����', attributes={'givenName': 'givenname-4', test_int_attr: 0}))
コード例 #40
0
    def test_remove_members_from_groups_transactional(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-6'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-7'))
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-8'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-6', self.delete_at_teardown))  # this group has members but other attributes are not set
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-7'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-8'))
            self.connection.extend.novell.add_members_to_groups([self.delete_at_teardown[0][0],
                                                                 self.delete_at_teardown[1][0],
                                                                 self.delete_at_teardown[2][0]],
                                                                [self.delete_at_teardown[3][0],
                                                                 self.delete_at_teardown[4][0],
                                                                 self.delete_at_teardown[5][0]],
                                                                fix=True,
                                                                transaction=True
                                                                )
            for i in range(0, 2):
                status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[i][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

                if response:
                    for j in range(3, 5):
                        self.assertTrue(self.delete_at_teardown[j][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[j][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[i][0] + ' not found')

            for j in range(3, 5):
                status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[j][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

                if response:
                    for i in range(0, 2):
                        self.assertTrue(self.delete_at_teardown[i][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[i][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[j][0] + ' not found')

            self.connection.extend.novell.remove_members_from_groups([self.delete_at_teardown[0][0],
                                                                      self.delete_at_teardown[1][0],
                                                                      self.delete_at_teardown[2][0]],
                                                                     [self.delete_at_teardown[3][0],
                                                                      self.delete_at_teardown[4][0],
                                                                      self.delete_at_teardown[5][0]],
                                                                     fix=True,
                                                                     transaction=False
                                                                     )

            for i in range(0, 2):
                status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[i][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

                if response:
                    for j in range(3, 5):
                        self.assertTrue(self.delete_at_teardown[j][0] not in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[j][0] not in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[i][0] + ' not found')

            for j in range(3, 5):
                status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[j][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

                if response:
                    for i in range(0, 2):
                        self.assertTrue(self.delete_at_teardown[i][0] not in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[i][0] not in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
                else:
                    self.assertFalse(True, self.delete_at_teardown[j][0] + ' not found')
コード例 #41
0
    def test_remove_member_from_group(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'user-1'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-1'))
            self.delete_at_teardown.append(add_group(self.connection, testcase_id, 'group-1b', [self.delete_at_teardown[0]]))
            self.connection.extend.novell.add_members_to_groups(self.delete_at_teardown[0][0],
                                                                [self.delete_at_teardown[1][0],
                                                                 self.delete_at_teardown[2][0]],
                                                                fix=True,
                                                                transaction=False)
            # verifies user in group-1
            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[1][0] + ' not found')

            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[1][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')

            # verifies user in group-1b
            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[2][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[2][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[2][0] + ' not found')

            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[2][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')

            self.connection.extend.novell.remove_members_from_groups(self.delete_at_teardown[0][0],
                                                                     self.delete_at_teardown[1][0],
                                                                     fix=False,
                                                                     transaction=False)

            # verifies users not in group-1
            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[1][0] not in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[1][0] not in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[1][0] + ' not found')

            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[1][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] not in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] not in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')

            # verifies user still in group-1b
            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[0][0], '(objectclass=*)', attributes=['securityEquals', 'groupMembership']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[2][0] in (response[0]['attributes']['securityEquals'] if 'securityEquals' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[2][0] in (response[0]['attributes']['groupMembership'] if 'groupMembership' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[2][0] + ' not found')

            status, result, response, request = get_response_values(self.connection.search(self.delete_at_teardown[2][0], '(objectclass=*)', attributes=['member', 'equivalentToMe']), self.connection)

            if response:
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['member'] if 'member' in response[0]['attributes'] else []))
                self.assertTrue(self.delete_at_teardown[0][0] in (response[0]['attributes']['equivalentToMe'] if 'equivalentToMe' in response[0]['attributes'] else []))
            else:
                self.assertFalse(True, self.delete_at_teardown[0][0] + ' not found')
コード例 #42
0
    def test_add_members_to_groups(self):
        if test_server_type == 'EDIR' and not self.connection.strategy.pooled and not self.connection.strategy.no_real_dsa:
            self.delete_at_teardown.append(
                add_user(self.connection, testcase_id, 'user-2'))
            self.delete_at_teardown.append(
                add_user(self.connection, testcase_id, 'user-3'))
            self.delete_at_teardown.append(
                add_user(self.connection, testcase_id, 'user-4'))
            self.delete_at_teardown.append(
                add_group(self.connection, testcase_id, 'group-2',
                          self.delete_at_teardown))
            self.delete_at_teardown.append(
                add_group(self.connection, testcase_id, 'group-3'))
            self.delete_at_teardown.append(
                add_group(self.connection, testcase_id, 'group-4'))
            self.connection.extend.novell.add_members_to_groups(
                [
                    self.delete_at_teardown[0][0],
                    self.delete_at_teardown[1][0],
                    self.delete_at_teardown[2][0]
                ], [
                    self.delete_at_teardown[3][0],
                    self.delete_at_teardown[4][0],
                    self.delete_at_teardown[5][0]
                ],
                fix=True,
                transaction=False)
            for i in range(0, 2):
                result = self.connection.search(
                    self.delete_at_teardown[i][0],
                    '(objectclass=*)',
                    attributes=['securityEquals', 'groupMembership'])
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                else:
                    response, result = self.connection.response, self.connection.result

                if response:
                    for j in range(3, 5):
                        self.assertTrue(self.delete_at_teardown[j][0] in (
                            response[0]['attributes']['securityEquals']
                            if 'securityEquals' in
                            response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[j][0] in (
                            response[0]['attributes']['groupMembership']
                            if 'groupMembership' in
                            response[0]['attributes'] else []))
                else:
                    self.assertFalse(
                        True, self.delete_at_teardown[i][0] + ' not found')

            for j in range(3, 5):
                result = self.connection.search(
                    self.delete_at_teardown[j][0],
                    '(objectclass=*)',
                    attributes=['member', 'equivalentToMe'])
                if not self.connection.strategy.sync:
                    response, result = self.connection.get_response(result)
                else:
                    response, result = self.connection.response, self.connection.result

                if response:
                    for i in range(0, 2):
                        self.assertTrue(self.delete_at_teardown[i][0] in (
                            response[0]['attributes']['member'] if 'member' in
                            response[0]['attributes'] else []))
                        self.assertTrue(self.delete_at_teardown[i][0] in (
                            response[0]['attributes']['equivalentToMe']
                            if 'equivalentToMe' in
                            response[0]['attributes'] else []))
                else:
                    self.assertFalse(
                        True, self.delete_at_teardown[j][0] + ' not found')
コード例 #43
0
ファイル: testMicrosoftAD.py プロジェクト: maxsond/ldap3
    def test_dir_sync(self):
        if False:  # takes a long long time to complete
            # if test_server_type == 'AD':
            sync = self.connection.extend.microsoft.dir_sync(
                test_root_partition, attributes=['*'])
            # read all previous changes
            while sync.more_results:
                print('PREV', len(sync.loop()))

            # add a new object and verify the sync
            dn, _ = add_user(self.connection,
                             testcase_id,
                             'to-be-deleted-1',
                             attributes={'givenName': 'to-be-deleted-1'})
            sleep(1)
            response = sync.loop()
            print('ADD OBJ', len(response), response[0]['attributes'])
            found = False
            for entry in response:
                if entry[
                        'type'] == 'searchResEntry' and testcase_id + 'to-be-deleted-1' in entry[
                            'dn']:
                    found = True
                    break
            self.assertTrue(found)

            # modify-add an attribute and verify the sync
            result = self.connection.modify(dn, {
                'businessCategory': (MODIFY_ADD, ['businessCategory-1-added'])
            })
            if not self.connection.strategy.sync:
                _, result = self.connection.get_response(result)
            else:
                result = self.connection.result
            self.assertEqual(result['description'], 'success')
            sleep(1)
            response = sync.loop()
            print('MOD-ADD ATTR', len(response), response[0]['attributes'])
            found = False
            for entry in response:
                if entry[
                        'type'] == 'searchResEntry' and testcase_id + 'to-be-deleted-1' in entry[
                            'dn']:
                    found = True
                    break
            self.assertTrue(found)

            # modify-replace an attribute and verify the sync
            result = self.connection.modify(
                dn, {
                    'businessCategory':
                    (MODIFY_REPLACE, ['businessCategory-1-replaced']),
                    'sn': (MODIFY_REPLACE, ['sn-replaced'])
                })
            if not self.connection.strategy.sync:
                _, result = self.connection.get_response(result)
            else:
                result = self.connection.result
            self.assertEqual(result['description'], 'success')
            sleep(1)
            response = sync.loop()
            print('MOD-REPLACE ATTR', len(response), response[0]['attributes'])
            found = False
            for entry in response:
                if entry[
                        'type'] == 'searchResEntry' and testcase_id + 'to-be-deleted-1' in entry[
                            'dn']:
                    found = True
                    break
            self.assertTrue(found)

            # modify-delete an attribute and verify the sync
            # result = self.connection.modify(dn, {'businessCategory': (MODIFY_ADD, ['businessCategory-2-added', 'businessCategory-3-added'])})
            # if not self.connection.strategy.sync:
            #     _, result = self.connection.get_response(result)
            # else:
            #     result = self.connection.result
            # self.assertEqual(result['description'], 'success')
            result = self.connection.modify(
                dn, {
                    'businessCategory':
                    (MODIFY_DELETE, ['businessCategory-1-replaced'])
                })
            if not self.connection.strategy.sync:
                _, result = self.connection.get_response(result)
            else:
                result = self.connection.result
            self.assertEqual(result['description'], 'success')
            sleep(1)
            response = sync.loop()
            print('MOD-DEL ATTR', len(response), response[0]['attributes'])
            found = False
            for entry in response:
                if entry[
                        'type'] == 'searchResEntry' and testcase_id + 'to-be-deleted-1' in entry[
                            'dn']:
                    found = True
                    break
            self.assertTrue(found)

            # delete object and verify the sync
            self.connection.delete(dn)
            sleep(1)
            response = sync.loop()
            print('DEL OBJ', len(response), response[0]['attributes'])
            found = False
            for entry in response:
                if entry[
                        'type'] == 'searchResEntry' and testcase_id + 'to-be-deleted-1' in entry[
                            'dn']:
                    found = True
                    break

            self.assertTrue(found)
コード例 #44
0
 def test_valid_attribute(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'chk-2', attributes={'givenName': 'given-name-2'}))
     status, result, response, request = get_response_values(self.connection.search(search_base=test_base, search_filter='(' + test_name_attr + '=' + testcase_id + 'chk-2)', attributes=[test_name_attr, 'givenName']), self.connection)
     self.assertEqual(result['description'], 'success')
     self.assertEqual(len(response), 1)
コード例 #45
0
 def test_paged_search_accumulator_with_schema_single_entry(self):
     self.delete_at_teardown.append(add_user(self.connection, testcase_id, 'mat-1'))
     r = Reader(self.connection, 'inetorgperson', test_base, 'cn:=' + testcase_id + 'mat-*')
     entries = r.search_paged(2, True, generator=False, attributes=['cn'])
     self.assertEqual(len(entries), 1)