)]}'
{"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e1b058aa66f984c47436bf96dcc5061a13903bb7","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"            attrs \u003d [(\u0027objectClass\u0027, [self.object_class]),"},{"line_number":538,"context_line":"                     (self.member_attribute, [user_dn]),"},{"line_number":539,"context_line":"                     (self.id_attr, self._dn_to_id(role_dn))]"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"            if self.use_dumb_member:"},{"line_number":542,"context_line":"                attrs[1][1].append(self.dumb_member)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_60beb766","line":539,"updated":"2014-09-15 15:53:58.000000000","message":"Agree with Brant\u0027s comment, this needs to be unit tested.","commit_id":"f62c1556ac2ba1068c59b6fbf8a28bd901c9f568"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"ddc7840f06545bd64865491824f9b33e390f9e58","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"            attrs \u003d [(\u0027objectClass\u0027, [self.object_class]),"},{"line_number":538,"context_line":"                     (self.member_attribute, [user_dn]),"},{"line_number":539,"context_line":"                     (self.id_attr, self._dn_to_id(role_dn))]"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"            if self.use_dumb_member:"},{"line_number":542,"context_line":"                attrs[1][1].append(self.dumb_member)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_d249758f","line":539,"in_reply_to":"fa98f980_60beb766","updated":"2014-09-19 18:13:34.000000000","message":"Does this change the data that is stored and fetched?  If so, this code is already in production:  it will mean different values are written going forward than are used now, and I don\u0027t know how LDAP will handle the mixed approach.","commit_id":"f62c1556ac2ba1068c59b6fbf8a28bd901c9f568"},{"author":{"_account_id":13130,"name":"Varun Mittal","email":"varun.mittal@in.ibm.com","username":"vmittal"},"change_message_id":"cb5ccee6e31a547124bd3930499d5707d7a70563","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"            attrs \u003d [(\u0027objectClass\u0027, [self.object_class]),"},{"line_number":538,"context_line":"                     (self.member_attribute, [user_dn]),"},{"line_number":539,"context_line":"                     (self.id_attr, self._dn_to_id(role_dn))]"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"            if self.use_dumb_member:"},{"line_number":542,"context_line":"                attrs[1][1].append(self.dumb_member)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_f7af487b","line":539,"in_reply_to":"fa98f980_d249758f","updated":"2014-09-19 19:29:15.000000000","message":"It should not change the data that is stored/fetched.\nIt is just helping old style LDAP servers, which can\u0027t add the missing attribute on their own, to store data.\nThe new style LDAPs automatically add that attribute(if it\u0027s missing) and won\u0027t error out if it\u0027s explicitly mentioned too","commit_id":"f62c1556ac2ba1068c59b6fbf8a28bd901c9f568"},{"author":{"_account_id":13130,"name":"Varun Mittal","email":"varun.mittal@in.ibm.com","username":"vmittal"},"change_message_id":"ee56b2a8355ef3a996dd494b6cd9c51afe4e33f0","unresolved":false,"context_lines":[{"line_number":537,"context_line":""},{"line_number":538,"context_line":"            attrs \u003d [(\u0027objectClass\u0027, [self.object_class]),"},{"line_number":539,"context_line":"                     (self.member_attribute, [user_dn]),"},{"line_number":540,"context_line":"                     (self.id_attr, role_id)]"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"            if self.use_dumb_member:"},{"line_number":543,"context_line":"                attrs[1][1].append(self.dumb_member)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_b0c37189","line":540,"updated":"2014-09-20 16:32:07.000000000","message":"I changed the fix which I made earlier. Replaced the call to _dn_to_id with role_id since that is already available in the arguments.\n\nAlso, with _dn_to_id will the utf8 characters be converted in the attributes list while those characters in dn remains unchanged ? Is this correct ?","commit_id":"716b448f82bda6beca7b93b424b6075c9595d47d"}],"keystone/common/ldap/core.py":[{"author":{"_account_id":13130,"name":"Varun Mittal","email":"varun.mittal@in.ibm.com","username":"vmittal"},"change_message_id":"382c1722f914318fc4e73c33afeca0b73f691e44","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                 (\u0027member\u0027,"},{"line_number":1692,"context_line":"                                 [self._id_to_dn(object_id)]),"},{"line_number":1693,"context_line":"                                 (self.id_attr,"},{"line_number":1694,"context_line":"                                 self._dn_to_id(self.enabled_emulation_dn))]"},{"line_number":1695,"context_line":"                    if self.use_dumb_member:"},{"line_number":1696,"context_line":"                        attr_list[1][1].append(self.dumb_member)"},{"line_number":1697,"context_line":"                    conn.add_s(self.enabled_emulation_dn, attr_list)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_10527ddd","line":1694,"updated":"2014-09-20 16:38:38.000000000","message":"I didn\u0027t understand what this class does, but making changes in FakeLDAP required this to change for the tests to succeed.","commit_id":"716b448f82bda6beca7b93b424b6075c9595d47d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"37cf86b5ff451767ad2e27a5a6f4c8e3444f7e16","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                 (\u0027member\u0027,"},{"line_number":1692,"context_line":"                                 [self._id_to_dn(object_id)]),"},{"line_number":1693,"context_line":"                                 (self.id_attr,"},{"line_number":1694,"context_line":"                                 self._dn_to_id(self.enabled_emulation_dn))]"},{"line_number":1695,"context_line":"                    if self.use_dumb_member:"},{"line_number":1696,"context_line":"                        attr_list[1][1].append(self.dumb_member)"},{"line_number":1697,"context_line":"                    conn.add_s(self.enabled_emulation_dn, attr_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_45f6e1d8","line":1694,"updated":"2014-09-22 21:24:58.000000000","message":"I don\u0027t think that _dn_to_id should be used here. Copy the code out of it to extract the first attribute value instead.\n\nWe might want to change _dn_to_id to work differently, so shouldn\u0027t reuse it where it doesn\u0027t make sense.\n\nAlternatively, make enabled_emulation a little smarter and also store the ID (e.g., self.enabled_emulation_id).","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e444d52784fe86823b2f2e55a37597148cfa2ec2","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                 (\u0027member\u0027,"},{"line_number":1692,"context_line":"                                 [self._id_to_dn(object_id)]),"},{"line_number":1693,"context_line":"                                 (self.id_attr,"},{"line_number":1694,"context_line":"                                 self._dn_to_id(self.enabled_emulation_dn))]"},{"line_number":1695,"context_line":"                    if self.use_dumb_member:"},{"line_number":1696,"context_line":"                        attr_list[1][1].append(self.dumb_member)"},{"line_number":1697,"context_line":"                    conn.add_s(self.enabled_emulation_dn, attr_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_c1056ec3","line":1694,"updated":"2014-09-22 16:32:24.000000000","message":"new indentation is really hard to follow, since they all open and close on the same indentation level. might be easier to follow if this was a multi-line statement, instead of all being packed into one","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3ac5a1deca026ec3fb8de8906ae566a0ff6412aa","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                 (\u0027member\u0027,"},{"line_number":1692,"context_line":"                                 [self._id_to_dn(object_id)]),"},{"line_number":1693,"context_line":"                                 (self.id_attr,"},{"line_number":1694,"context_line":"                                 self._dn_to_id(self.enabled_emulation_dn))]"},{"line_number":1695,"context_line":"                    if self.use_dumb_member:"},{"line_number":1696,"context_line":"                        attr_list[1][1].append(self.dumb_member)"},{"line_number":1697,"context_line":"                    conn.add_s(self.enabled_emulation_dn, attr_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_dbab9287","line":1694,"in_reply_to":"da9df570_3bdade78","updated":"2014-09-22 22:52:56.000000000","message":"Done","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"59cdf1368809fa39f1a839640f5a2082e9325294","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                 (\u0027member\u0027,"},{"line_number":1692,"context_line":"                                 [self._id_to_dn(object_id)]),"},{"line_number":1693,"context_line":"                                 (self.id_attr,"},{"line_number":1694,"context_line":"                                 self._dn_to_id(self.enabled_emulation_dn))]"},{"line_number":1695,"context_line":"                    if self.use_dumb_member:"},{"line_number":1696,"context_line":"                        attr_list[1][1].append(self.dumb_member)"},{"line_number":1697,"context_line":"                    conn.add_s(self.enabled_emulation_dn, attr_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_3bdade78","line":1694,"in_reply_to":"da9df570_45f6e1d8","updated":"2014-09-22 22:43:30.000000000","message":"Actually, this is incorrect since the second part of the tuple should be a list like the other attrs.","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f87e19b692c6145a1e212fa447152d5d8caac2e8","unresolved":false,"context_lines":[{"line_number":1671,"context_line":"            # Extract the attribute name and value from the configured DN."},{"line_number":1672,"context_line":"            naming_dn \u003d utf8_decode("},{"line_number":1673,"context_line":"                ldap.dn.str2dn(utf8_encode(self.enabled_emulation_dn)))"},{"line_number":1674,"context_line":"            naming_rdn \u003d naming_dn[0][0]"},{"line_number":1675,"context_line":"            naming_attr \u003d (naming_rdn[0], [naming_rdn[1]])"},{"line_number":1676,"context_line":"        self.enabled_emulation_naming_attr \u003d naming_attr"},{"line_number":1677,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da9df570_e4bb520c","line":1674,"updated":"2014-09-23 01:49:29.000000000","message":"This will not properly handle DN\u0027s with multi-valued RDNs.  That\u0027s fine, as I know that there are plenty of other areas that won\u0027t handle multi-valued RDNs in Keystone.  It might be worth at least adding a comment here.","commit_id":"abd6dce869174199b5c6a1aa13f772356ac0ddfa"}],"keystone/tests/fakeldap.py":[{"author":{"_account_id":13130,"name":"Varun Mittal","email":"varun.mittal@in.ibm.com","username":"vmittal"},"change_message_id":"b079f022601c883ef53e5d3706750c05774fe6f4","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if k \u003d\u003d id_attr:"},{"line_number":308,"context_line":"                for val in dummy_v:"},{"line_number":309,"context_line":"                    if core.utf8_decode(val) \u003d\u003d id_value:"},{"line_number":310,"context_line":"                        id_attr_in_modlist \u003d True"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        if not id_attr_in_modlist:"},{"line_number":313,"context_line":"            LOG.debug(\u0027id_attribute\u003d%(attr)s missing from attributes\u003d%(attrs)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_503c0594","line":310,"updated":"2014-09-20 16:35:55.000000000","message":"dummy_v contains all values for particular attribute(key). If any attribute and value matches the one extracted from dn, mark the id_attr_in_modlist flag as true.","commit_id":"716b448f82bda6beca7b93b424b6075c9595d47d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"bdf19034e3002e2d7d40ecb7cba6fb6c6330e924","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    def dn(self, dn):"},{"line_number":248,"context_line":"        return core.utf8_decode(dn)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _dn_to_idattr(self, dn):"},{"line_number":251,"context_line":"        return core.utf8_decode(ldap.dn.str2dn(core.utf8_encode(dn))[0][0][0])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _dn_to_idvalue(self, dn):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_2eaabe70","line":250,"updated":"2014-09-21 01:02:28.000000000","message":"should be named _dn_to_id_attr(\n\nsame for the function below.","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e444d52784fe86823b2f2e55a37597148cfa2ec2","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    def dn(self, dn):"},{"line_number":248,"context_line":"        return core.utf8_decode(dn)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _dn_to_idattr(self, dn):"},{"line_number":251,"context_line":"        return core.utf8_decode(ldap.dn.str2dn(core.utf8_encode(dn))[0][0][0])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _dn_to_idvalue(self, dn):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_41209e49","line":250,"in_reply_to":"da9df570_2eaabe70","updated":"2014-09-22 16:32:24.000000000","message":"++","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3ac5a1deca026ec3fb8de8906ae566a0ff6412aa","unresolved":false,"context_lines":[{"line_number":247,"context_line":"    def dn(self, dn):"},{"line_number":248,"context_line":"        return core.utf8_decode(dn)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _dn_to_idattr(self, dn):"},{"line_number":251,"context_line":"        return core.utf8_decode(ldap.dn.str2dn(core.utf8_encode(dn))[0][0][0])"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def _dn_to_idvalue(self, dn):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9df570_5b9fa25f","line":250,"in_reply_to":"da9df570_41209e49","updated":"2014-09-22 22:52:56.000000000","message":"Done","commit_id":"b5764441da2799b59ee7cd9cb451417c353d1c26"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fc8839e871fe0c230b96ca29e9c5f8f92f2a30c1","unresolved":false,"context_lines":[{"line_number":1826,"context_line":"        self.assertEqual(\u0027crap\u0027, user_ref[\u0027id\u0027])"},{"line_number":1827,"context_line":"        self.assertEqual(\u0027Foo Bar\u0027, user_ref[\u0027name\u0027])"},{"line_number":1828,"context_line":""},{"line_number":1829,"context_line":"    @mock.patch.object(common_ldap_core.KeystoneLDAPHandler, \u0027add_s\u0027)"},{"line_number":1830,"context_line":"    def test_extra_attrs_for_add_user(self, mocked_add_s):"},{"line_number":1831,"context_line":"        \"\"\"Ensure the extra attributes for add_user are being passed."},{"line_number":1832,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9df570_74174652","line":1829,"updated":"2014-09-19 22:21:03.000000000","message":"put this in keystone/tests/unit/assignment/backends/ldap.py","commit_id":"be96e3ff3fe3b55dbdb02d5862a6fb445700fb32"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b44f11ceba009459b021dec53f384df7ff753c07","unresolved":false,"context_lines":[{"line_number":1826,"context_line":"        self.assertEqual(\u0027crap\u0027, user_ref[\u0027id\u0027])"},{"line_number":1827,"context_line":"        self.assertEqual(\u0027Foo Bar\u0027, user_ref[\u0027name\u0027])"},{"line_number":1828,"context_line":""},{"line_number":1829,"context_line":"    @mock.patch.object(common_ldap_core.KeystoneLDAPHandler, \u0027add_s\u0027)"},{"line_number":1830,"context_line":"    def test_extra_attrs_for_add_user(self, mocked_add_s):"},{"line_number":1831,"context_line":"        \"\"\"Ensure the extra attributes for add_user are being passed."},{"line_number":1832,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9df570_b778d02c","line":1829,"in_reply_to":"da9df570_74174652","updated":"2014-09-19 23:43:18.000000000","message":"should be test_ldap or it won\u0027t be run","commit_id":"be96e3ff3fe3b55dbdb02d5862a6fb445700fb32"}]}
