)]}'
{"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e1f8c68dda4b10a501404c69cfda0d9cc5b2b423","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                      domain_id\u003dNone, group_id\u003dNone):"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        def _get_roles_for_just_user_and_project(user_id, tenant_id):"},{"line_number":91,"context_line":"            self.get_project(tenant_id)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"            proj_dn \u003d self.project._id_to_dn(tenant_id)"},{"line_number":94,"context_line":"            assignments \u003d self.role.get_role_assignments(proj_dn)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_a4c7c943","line":91,"updated":"2014-05-20 16:39:46.000000000","message":"this could be refactored from \u0027tenant_id\u0027 to \u0027project_id\u0027 at some point, probably not in this patch, but I\u0027m noticing it now compared to _get_roles_for_group_and_project","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"cca7674b158e5a6e900ac7a36dbfb31f4db48d8d","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                # \"normalize\" DN by uppercase, then see if the entry is in the"},{"line_number":105,"context_line":"                # tree by checking if the entry DN ends with the tree DN."},{"line_number":106,"context_line":"                assignment_dn_norm \u003d assignment.user_dn.upper()"},{"line_number":107,"context_line":"                user_tree_dn_norm \u003d self.user.tree_dn.upper()"},{"line_number":108,"context_line":"                if not assignment_dn_norm.endswith(user_tree_dn_norm):"},{"line_number":109,"context_line":"                    # Skip this assignment, it\u0027s not a user assignment."}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_01ba2c0a","line":106,"updated":"2014-05-20 16:20:29.000000000","message":"This looks suspect:  I thought we had a utility method to handle this kind of DN processing from Nate\u0027s work.  Do we really need to hardcode Upper?","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":8116,"name":"John Dennis","email":"jdennis@redhat.com","username":"jdennis"},"change_message_id":"a29b2d03fbf3a4db977cd95339521dc1619546e3","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                # \"normalize\" DN by uppercase, then see if the entry is in the"},{"line_number":105,"context_line":"                # tree by checking if the entry DN ends with the tree DN."},{"line_number":106,"context_line":"                assignment_dn_norm \u003d assignment.user_dn.upper()"},{"line_number":107,"context_line":"                user_tree_dn_norm \u003d self.user.tree_dn.upper()"},{"line_number":108,"context_line":"                if not assignment_dn_norm.endswith(user_tree_dn_norm):"},{"line_number":109,"context_line":"                    # Skip this assignment, it\u0027s not a user assignment."}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_33813a4e","line":106,"in_reply_to":"7adec928_01a6ac53","updated":"2014-05-20 19:34:44.000000000","message":"We really should be using a common subroutine or class for DN comparisons. Correctly operating on DN\u0027s is non-trival despite their superficial simplicity. I\u0027d like to see this wait until the utility from  https://review.openstack.org/#/c/88517 is merged. Note I have added some extensive comments in that review.","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"aa72bca730f0faa7acaf05f8a243fbc07d310d68","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                # \"normalize\" DN by uppercase, then see if the entry is in the"},{"line_number":105,"context_line":"                # tree by checking if the entry DN ends with the tree DN."},{"line_number":106,"context_line":"                assignment_dn_norm \u003d assignment.user_dn.upper()"},{"line_number":107,"context_line":"                user_tree_dn_norm \u003d self.user.tree_dn.upper()"},{"line_number":108,"context_line":"                if not assignment_dn_norm.endswith(user_tree_dn_norm):"},{"line_number":109,"context_line":"                    # Skip this assignment, it\u0027s not a user assignment."}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_01a6ac53","line":106,"in_reply_to":"7adec928_01ba2c0a","updated":"2014-05-20 16:33:18.000000000","message":"The patch with the DN comparison function has not landed yet:\n\n  https://review.openstack.org/#/c/88517\n\nWe could mark this as a TODO if we don\u0027t want to gate on the other patch.","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"cf40515737395d884d86395a1918e37d4d74e8fd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                # tree by checking if the entry DN ends with the tree DN."},{"line_number":106,"context_line":"                assignment_dn_norm \u003d assignment.user_dn.upper()"},{"line_number":107,"context_line":"                user_tree_dn_norm \u003d self.user.tree_dn.upper()"},{"line_number":108,"context_line":"                if not assignment_dn_norm.endswith(user_tree_dn_norm):"},{"line_number":109,"context_line":"                    # Skip this assignment, it\u0027s not a user assignment."},{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d82035b3","line":108,"updated":"2014-05-20 19:28:04.000000000","message":"This should check if the objectclass is present that indicates if the entry is a user (user_objectclass).  Simply checking if the entry is beneath the user tree is not sufficient in case groups and users live in the same container in LDAP.","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e1f8c68dda4b10a501404c69cfda0d9cc5b2b423","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                role_id \u003d self.role._dn_to_id(assignment.role_dn)"},{"line_number":113,"context_line":"                roles.append(role_id)"},{"line_number":114,"context_line":"            return roles"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        def _get_roles_for_group_and_project(group_id, project_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_84a56da3","line":113,"updated":"2014-05-20 16:39:46.000000000","message":"(NIT): suggest having this like the roles.append below, just for consistency: \n\n     roles.append(self.role._dn_to_id(assignment.role_dn)\n     return roles\n\nWas there something specific to doing it this way in _get_roles_for_just_user_and_project versus the way it is done in _get_roles_for_group_and_project?","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e1f8c68dda4b10a501404c69cfda0d9cc5b2b423","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                    continue"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                roles.append(self.role._dn_to_id(assignment.role_dn))"},{"line_number":139,"context_line":"            return roles"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if domain_id is not None:"},{"line_number":142,"context_line":"            msg \u003d _(\u0027Domain metadata not supported by LDAP\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_a4234903","line":139,"updated":"2014-05-20 16:39:46.000000000","message":"There isn\u0027t much different between these two methods, it would be nice to see them combined since they are pretty similar. Not sure the best way to do that yet though.","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"f6ded6fed2e4e29c5e43585ca3f7923c7ec5f518","unresolved":false,"context_lines":[{"line_number":1423,"context_line":""},{"line_number":1424,"context_line":"        group1 \u003d {\u0027id\u0027: user_group_id, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1425,"context_line":"                  \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, }"},{"line_number":1426,"context_line":"        self.identity_api.create_group(user_group_id, group1)"},{"line_number":1427,"context_line":""},{"line_number":1428,"context_line":"        role1 \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":1429,"context_line":"        self.assignment_api.create_role(role1[\u0027id\u0027], role1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d263b4db","line":1426,"updated":"2014-05-20 19:10:37.000000000","message":"I thought all IDs are supposed to be globally unique. Do we allow that at the API level?","commit_id":"eeef41aaecf34f20d52ebf70d24412cfb0300b5e"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0df8c594eb201695f4ef8a40c21a1bd8e7ca038f","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"            user1[\u0027id\u0027], CONF.identity.default_domain_id)"},{"line_number":1251,"context_line":"        self.assertEqual(0, len(combined_role_list))"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"    def test_get_roles_for_user_and_project_user_group_same_id(self):"},{"line_number":1254,"context_line":"        \"\"\"When a user has the same ID as a group,"},{"line_number":1255,"context_line":"        get_roles_for_user_and_project returns the roles for the group."},{"line_number":1256,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_fed95623","line":1253,"updated":"2014-05-20 22:10:27.000000000","message":"this test should be in the other review right?","commit_id":"97dfd55ad1b40365754dcbfce856f7ffae280a44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7f3da5119a1ce1781795473338e7995eaaa1feea","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"            user1[\u0027id\u0027], CONF.identity.default_domain_id)"},{"line_number":1251,"context_line":"        self.assertEqual(0, len(combined_role_list))"},{"line_number":1252,"context_line":""},{"line_number":1253,"context_line":"    def test_get_roles_for_user_and_project_user_group_same_id(self):"},{"line_number":1254,"context_line":"        \"\"\"When a user has the same ID as a group,"},{"line_number":1255,"context_line":"        get_roles_for_user_and_project returns the roles for the group."},{"line_number":1256,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_99814cfe","line":1253,"in_reply_to":"7adec928_fed95623","updated":"2014-05-20 22:53:51.000000000","message":"The test that\u0027s in test_backend needs to overridden for ldap because this patch doesn\u0027t have the fix.","commit_id":"97dfd55ad1b40365754dcbfce856f7ffae280a44"}]}
