)]}'
{"keystone/common/config.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9c3cf5b87c5e122725c9f03db06e4146dc1aae35","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        cfg.IntOpt(\u0027auth_pool_connection_lifetime\u0027, default\u003d60,"},{"line_number":783,"context_line":"                   help\u003d\u0027End user auth connection lifetime in seconds.\u0027),"},{"line_number":784,"context_line":"        cfg.BoolOpt(\u0027posix_group\u0027, default\u003dFalse,"},{"line_number":785,"context_line":"                    help\u003d\u0027The posixGroup version is generally use in UNIX \u0027"},{"line_number":786,"context_line":"                         \u0027environments and OpenDirectory. The groupofNames \u0027"},{"line_number":787,"context_line":"                         \u0027version is the more Windows/AD like method. Set \u0027"},{"line_number":788,"context_line":"                         \u0027this parameter to True for posixGroup version\u0027),"},{"line_number":789,"context_line":"    ],"},{"line_number":790,"context_line":"    \u0027auth\u0027: ["},{"line_number":791,"context_line":"        cfg.ListOpt(\u0027methods\u0027, default\u003d_DEFAULT_AUTH_METHODS,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_e2cac419","line":788,"range":{"start_line":785,"start_character":26,"end_line":788,"end_character":71},"updated":"2016-02-16 03:40:51.000000000","message":"suggested reword: \n\n\"If \u0027group_objectclass\u0027 has been set to \u0027posixGroup\u0027 (which is commonly used by UNIX environments and OpenDirectory), it is recommended to set this option to True. By doing so, user IDs are not expected to be full DNs.\"\n\nmaybe someone has a better suggestion.","commit_id":"0770c132d461cfe9916b095fce24020f7cc9b677"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e415e5114046787bd1db508102b09dde55c57364","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"},{"line_number":788,"context_line":"                         \u0027option to True. By doing so, user IDs are not \u0027"},{"line_number":789,"context_line":"                         \u0027expected to be full DNs.The posixGroup version \u0027"},{"line_number":790,"context_line":"                         \u0027is generally used in UNIX\u0027),"},{"line_number":791,"context_line":"    ],"},{"line_number":792,"context_line":"    \u0027auth\u0027: ["}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_afefe185","line":789,"range":{"start_line":789,"start_character":49,"end_line":789,"end_character":50},"updated":"2016-02-16 16:14:42.000000000","message":"add a space after the period","commit_id":"8f5edec3b5dfa879a1c805ad37d29ad7909d8ace"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0f2e45c349265cddbbf32604fbe4d8b9265bf901","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                   help\u003d\u0027End user auth connection pool size.\u0027),"},{"line_number":782,"context_line":"        cfg.IntOpt(\u0027auth_pool_connection_lifetime\u0027, default\u003d60,"},{"line_number":783,"context_line":"                   help\u003d\u0027End user auth connection lifetime in seconds.\u0027),"},{"line_number":784,"context_line":"        cfg.BoolOpt(\u0027posix_group\u0027, default\u003dFalse,"},{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_e2544d22","line":784,"updated":"2016-02-16 22:57:28.000000000","message":"change the name to group_members_are_ids and default to False.","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"2534fdf1ce4d0be44c939007b1d3c4f8eef0ea2e","unresolved":false,"context_lines":[{"line_number":781,"context_line":"                   help\u003d\u0027End user auth connection pool size.\u0027),"},{"line_number":782,"context_line":"        cfg.IntOpt(\u0027auth_pool_connection_lifetime\u0027, default\u003d60,"},{"line_number":783,"context_line":"                   help\u003d\u0027End user auth connection lifetime in seconds.\u0027),"},{"line_number":784,"context_line":"        cfg.BoolOpt(\u0027posix_group\u0027, default\u003dFalse,"},{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_5eacd68b","line":784,"in_reply_to":"dae33548_e2544d22","updated":"2016-02-17 12:41:17.000000000","message":"Done","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0f2e45c349265cddbbf32604fbe4d8b9265bf901","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        cfg.IntOpt(\u0027auth_pool_connection_lifetime\u0027, default\u003d60,"},{"line_number":783,"context_line":"                   help\u003d\u0027End user auth connection lifetime in seconds.\u0027),"},{"line_number":784,"context_line":"        cfg.BoolOpt(\u0027posix_group\u0027, default\u003dFalse,"},{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"},{"line_number":788,"context_line":"                         \u0027option to True. By doing so, user IDs are not \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_62167d56","line":785,"updated":"2016-02-16 22:57:28.000000000","message":"This should say\n\n If the members of the group objectclass are user IDs rather\n than DNs, set this to true. This is the case when using\n posixGroup as the group objectclass and OpenDirectory.","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"2534fdf1ce4d0be44c939007b1d3c4f8eef0ea2e","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        cfg.IntOpt(\u0027auth_pool_connection_lifetime\u0027, default\u003d60,"},{"line_number":783,"context_line":"                   help\u003d\u0027End user auth connection lifetime in seconds.\u0027),"},{"line_number":784,"context_line":"        cfg.BoolOpt(\u0027posix_group\u0027, default\u003dFalse,"},{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"},{"line_number":788,"context_line":"                         \u0027option to True. By doing so, user IDs are not \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3ea9127c","line":785,"in_reply_to":"dae33548_62167d56","updated":"2016-02-17 12:41:17.000000000","message":"Done","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0f2e45c349265cddbbf32604fbe4d8b9265bf901","unresolved":false,"context_lines":[{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"},{"line_number":788,"context_line":"                         \u0027option to True. By doing so, user IDs are not \u0027"},{"line_number":789,"context_line":"                         \u0027expected to be full DNs. The posixGroup version \u0027"},{"line_number":790,"context_line":"                         \u0027is generally used in UNIX\u0027),"},{"line_number":791,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_e27d6db2","line":788,"range":{"start_line":788,"start_character":36,"end_line":788,"end_character":40},"updated":"2016-02-16 22:57:28.000000000","message":"change to \"true\" since this is what the help text says.","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"2534fdf1ce4d0be44c939007b1d3c4f8eef0ea2e","unresolved":false,"context_lines":[{"line_number":785,"context_line":"                    help\u003d\u0027If \"group_objectclass\" has been set to \"posixGroup\" \u0027"},{"line_number":786,"context_line":"                         \u0027(which is commonly used by UNIX environments and \u0027"},{"line_number":787,"context_line":"                         \u0027OpenDirectory), it is recommended to set this \u0027"},{"line_number":788,"context_line":"                         \u0027option to True. By doing so, user IDs are not \u0027"},{"line_number":789,"context_line":"                         \u0027expected to be full DNs. The posixGroup version \u0027"},{"line_number":790,"context_line":"                         \u0027is generally used in UNIX\u0027),"},{"line_number":791,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_7ebd5ab6","line":788,"range":{"start_line":788,"start_character":36,"end_line":788,"end_character":40},"in_reply_to":"dae33548_e27d6db2","updated":"2016-02-17 12:41:17.000000000","message":"Done","commit_id":"0b98b3162cf2f3eba08021b50cdd1ad21a3afb25"}],"keystone/identity/backends/ldap.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"42ef1cbe8ee09ad989bd9219474db2b4a51e0988","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_7b1dab0e","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"updated":"2015-12-16 23:00:52.000000000","message":"you could just use conf.ldap.user_dn_key here, and remove the assignment on line 40","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":11782,"name":"Andrey Grebennikov","email":"agrebennikov1983@gmail.com","username":"agrebennikov"},"change_message_id":"8e5c793a179997fbec7dff808385a48ad062d49e","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_7837c9b0","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"3a7e1126_1fdc4511","updated":"2016-01-20 22:58:10.000000000","message":"I would even use \"posix_groups \u003d true/false\" instead of specifying the key - there cannot be any other values but \"dn\" and \"id\" for the user_ref.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":18835,"name":"Toshiya Shiga","email":"tos-shiga@yk.jp.nec.com","username":"tos-shiga"},"change_message_id":"6824b22cb453c0213b012baad67303088446b672","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_ec9a40c5","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"3a7e1126_7b1dab0e","updated":"2015-12-17 01:53:19.000000000","message":"agree that use conf.ldap.user_dn_key.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cbaf60b5945a543a20694942f4408eab44c949b3","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_1fdc4511","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"3a7e1126_ec9a40c5","updated":"2015-12-17 17:32:54.000000000","message":"++, Also not sure if \u0027user_dn_key\u0027 is the appropriate name as user DN is being extracted all over the place. See line 150, 155, etc. It may confuse folks maintaining this code later on. How about \u0027user_group_member_attribute\u0027?","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":11782,"name":"Andrey Grebennikov","email":"agrebennikov1983@gmail.com","username":"agrebennikov"},"change_message_id":"8e5c793a179997fbec7dff808385a48ad062d49e","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_1866cded","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"3a7e1126_ec9a40c5","updated":"2016-01-20 22:58:10.000000000","message":"I think it was added in this way since we are adding it to Kilo, which doesn\u0027t accept conf.\u003c\u003e variables.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f482a8f563bad6d45883c80317cd6b9bb5577172","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_8f96dd4a","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"9a68dd71_1866cded","updated":"2016-01-21 11:17:29.000000000","message":"Andrey, yes - the reason is the domain specific config feature.\nSteve, Toshiya, guang-yee: conf isn\u0027t available in this scope.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"638a9dc47346cd4b8a842d81d55fc52210d8773d","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_27726dae","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"9a68dd71_4c646621","updated":"2016-01-21 15:02:26.000000000","message":"Yes. I\u0027ve rather us not have to support old-style in our code if we don\u0027t have to support it in Kilo. This will just get rewritten to the new way anyway once someone comes along and sees it the old style.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"cb3c4e41993183eff88a609fe2488d6deb64e051","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_d08af7be","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"9a68dd71_8c1b3e1b","updated":"2016-01-22 11:02:09.000000000","message":"Lance, CONF has global config rather than domain-specific - it doesn\u0027t work properly in latter case (I\u0027ve tried)","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":11782,"name":"Andrey Grebennikov","email":"agrebennikov1983@gmail.com","username":"agrebennikov"},"change_message_id":"ec0a17b830608a2082ba52f1e55c65b97f594422","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_4c646621","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"9a68dd71_8c1b3e1b","updated":"2016-01-21 14:58:00.000000000","message":"This is the real-customer-need patch. I\u0027s been deployed with Kilo and we have to support it. Any concern about using old-style config option implementation?","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5e090c04428188a83fae5cbd1a84baf9dac15f3f","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":159,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":160,"context_line":"        user_dn \u003d user_ref[self.ldap_user_dn_key]"},{"line_number":161,"context_line":"        return self.group.list_user_groups_filtered(user_dn, hints)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def list_groups(self, hints):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_8c1b3e1b","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":49},"in_reply_to":"9a68dd71_8f96dd4a","updated":"2016-01-21 14:52:09.000000000","message":"We have CONF scope available here - is this something that we are going to backport to Kilo? The bug isn\u0027t tagged with any backport potentials.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"cbaf60b5945a543a20694942f4408eab44c949b3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            except ldap.DECODING_ERROR:"},{"line_number":172,"context_line":"                # OpenDirectory uses different entry layout"},{"line_number":173,"context_line":"                # and stores user id as it is"},{"line_number":174,"context_line":"                user_id \u003d user_dn"},{"line_number":175,"context_line":"            try:"},{"line_number":176,"context_line":"                users.append(self.user.get_filtered(user_id))"},{"line_number":177,"context_line":"            except exception.UserNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_3fe1019b","line":174,"range":{"start_line":174,"start_character":26,"end_line":174,"end_character":33},"updated":"2015-12-17 17:32:54.000000000","message":"This would work fine if the group member attribute is either a DN or user ID. Otherwise, if user_id_attribute is different than user group member attribute, this may be problematic. If we can put in a safeguard check to make sure these two attributes are the same then that would be awesome.","commit_id":"362a2cbedf2771fbd55a8cf3f999698814cb3d79"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9c3cf5b87c5e122725c9f03db06e4146dc1aae35","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def list_groups_for_user(self, user_id, hints):"},{"line_number":181,"context_line":"        user_ref \u003d self._get_user(user_id)"},{"line_number":182,"context_line":"        return self.group.list_user_groups_filtered(user_ref[\u0027dn\u0027], hints)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def list_groups(self, hints):"},{"line_number":185,"context_line":"        return self.group.get_all_filtered(hints)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_3f0175af","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":74},"updated":"2016-02-16 03:40:51.000000000","message":"undo this change, it seems unrelated","commit_id":"0770c132d461cfe9916b095fce24020f7cc9b677"}],"keystone/tests/unit/fakeldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ac21cfe090d0b2465685d486160344614141501","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            norm.append([(name, val, i)])"},{"line_number":79,"context_line":"        return core.utf8_decode(ldap.dn.dn2str(norm))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    if CONF.ldap.group_members_are_ids:"},{"line_number":82,"context_line":"        dn_format_attrs \u003d (\u0027roleOccupant\u0027,)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        dn_format_attrs \u003d (\u0027member\u0027, \u0027roleOccupant\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_d6d1e658","line":81,"updated":"2016-02-17 14:55:27.000000000","message":"The behavior of the fake ldap implementation to change based on a config setting.\n\nI think it would be better to have normalize_dn ignore member that\u0027s not a valid DN.","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"38184e5cd3dfe3648459fbb40761c33c16bf78f2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            norm.append([(name, val, i)])"},{"line_number":79,"context_line":"        return core.utf8_decode(ldap.dn.dn2str(norm))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    if CONF.ldap.group_members_are_ids:"},{"line_number":82,"context_line":"        dn_format_attrs \u003d (\u0027roleOccupant\u0027,)"},{"line_number":83,"context_line":"    else:"},{"line_number":84,"context_line":"        dn_format_attrs \u003d (\u0027member\u0027, \u0027roleOccupant\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_d518aa20","line":81,"in_reply_to":"dae33548_d6d1e658","updated":"2016-02-17 20:04:05.000000000","message":"Done","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cfac58b1c6d37b65e042a105096aaf8c0c54c9c5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            norm.append([(name, val, i)])"},{"line_number":85,"context_line":"        return core.utf8_decode(ldap.dn.dn2str(norm))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if attr_name in(\u0027member\u0027, \u0027roleOccupant\u0027):"},{"line_number":88,"context_line":"        attr_fn \u003d normalize_dn"},{"line_number":89,"context_line":"    else:"},{"line_number":90,"context_line":"        attr_fn \u003d normalize_value"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_704a8c27","line":87,"updated":"2016-02-17 20:33:29.000000000","message":"revert this change.","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8820547af660c3cead99c6a50db38dfffab3843e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            norm.append([(name, val, i)])"},{"line_number":85,"context_line":"        return core.utf8_decode(ldap.dn.dn2str(norm))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if attr_name in(\u0027member\u0027, \u0027roleOccupant\u0027):"},{"line_number":88,"context_line":"        attr_fn \u003d normalize_dn"},{"line_number":89,"context_line":"    else:"},{"line_number":90,"context_line":"        attr_fn \u003d normalize_value"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_e4641dba","line":87,"in_reply_to":"dae33548_704a8c27","updated":"2016-02-17 20:52:53.000000000","message":"Done","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9c3cf5b87c5e122725c9f03db06e4146dc1aae35","unresolved":false,"context_lines":[{"line_number":2110,"context_line":"    def add_user(self, user_dn, group_id, user_id):"},{"line_number":2111,"context_line":"        group_ref \u003d self.get(group_id)"},{"line_number":2112,"context_line":"        group_dn \u003d group_ref[\u0027dn\u0027]"},{"line_number":2113,"context_line":"        # exception.Conflict may be raised, but there is not need to"},{"line_number":2114,"context_line":"        # handle it here"},{"line_number":2115,"context_line":"        super(ldap_backend.GroupApi, self).add_member(user_id, group_dn)"},{"line_number":2116,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_02d1a857","line":2113,"range":{"start_line":2113,"start_character":57,"end_line":2113,"end_character":60},"updated":"2016-02-16 03:40:51.000000000","message":"no*","commit_id":"0770c132d461cfe9916b095fce24020f7cc9b677"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9c3cf5b87c5e122725c9f03db06e4146dc1aae35","unresolved":false,"context_lines":[{"line_number":2176,"context_line":"        user_refs \u003d self.identity_api.list_users_in_group(new_group[\u0027id\u0027])"},{"line_number":2177,"context_line":"        found \u003d False"},{"line_number":2178,"context_line":"        for x in user_refs:"},{"line_number":2179,"context_line":"            if (x[\u0027id\u0027] \u003d\u003d new_user[\u0027id\u0027]):"},{"line_number":2180,"context_line":"                found \u003d True"},{"line_number":2181,"context_line":"            self.assertNotIn(\u0027password\u0027, x)"},{"line_number":2182,"context_line":"        self.assertTrue(found)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_e27c84ed","line":2179,"range":{"start_line":2179,"start_character":15,"end_line":2179,"end_character":42},"updated":"2016-02-16 03:40:51.000000000","message":"the ()\u0027s here are not necessary","commit_id":"0770c132d461cfe9916b095fce24020f7cc9b677"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e415e5114046787bd1db508102b09dde55c57364","unresolved":false,"context_lines":[{"line_number":2110,"context_line":"    def add_user(self, user_dn, group_id, user_id):"},{"line_number":2111,"context_line":"        group_ref \u003d self.get(group_id)"},{"line_number":2112,"context_line":"        group_dn \u003d group_ref[\u0027dn\u0027]"},{"line_number":2113,"context_line":"        # exception.Conflict may be raised, but there is not need to"},{"line_number":2114,"context_line":"        # handle it here"},{"line_number":2115,"context_line":"        super(ldap_backend.GroupApi, self).add_member(user_id, group_dn)"},{"line_number":2116,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_0a3ebbb7","line":2113,"range":{"start_line":2113,"start_character":57,"end_line":2113,"end_character":60},"updated":"2016-02-16 16:14:42.000000000","message":"use no*\n\ns/not/no","commit_id":"8f5edec3b5dfa879a1c805ad37d29ad7909d8ace"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ac21cfe090d0b2465685d486160344614141501","unresolved":false,"context_lines":[{"line_number":2129,"context_line":""},{"line_number":2130,"context_line":"        _assert_backends(self, identity\u003d\u0027ldap\u0027)"},{"line_number":2131,"context_line":""},{"line_number":2132,"context_line":"        # Substitute group API entry in the driver to store members properly"},{"line_number":2133,"context_line":"        self.group_api_mock \u003d mock.patch.object("},{"line_number":2134,"context_line":"            self.identity_api.driver, \u0027group\u0027,"},{"line_number":2135,"context_line":"            POSIXGroupApi(self.identity_api.conf))"}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_3625b208","line":2132,"updated":"2016-02-17 14:55:27.000000000","message":"There\u0027s no need to do this and it\u0027s unnecessarily complicated. Create the group directly using LDAP operations rather than going through the manager. This is how the tests should be written anyways.","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ac21cfe090d0b2465685d486160344614141501","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"        for x in user_refs:"},{"line_number":2179,"context_line":"            if x[\u0027id\u0027] \u003d\u003d new_user[\u0027id\u0027]:"},{"line_number":2180,"context_line":"                found \u003d True"},{"line_number":2181,"context_line":"            self.assertNotIn(\u0027password\u0027, x)"},{"line_number":2182,"context_line":"        self.assertTrue(found)"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_f65cea7e","line":2181,"updated":"2016-02-17 14:55:27.000000000","message":"what does password have to do with any of these changes? Just test what you\u0027re changing.","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"38184e5cd3dfe3648459fbb40761c33c16bf78f2","unresolved":false,"context_lines":[{"line_number":2178,"context_line":"        for x in user_refs:"},{"line_number":2179,"context_line":"            if x[\u0027id\u0027] \u003d\u003d new_user[\u0027id\u0027]:"},{"line_number":2180,"context_line":"                found \u003d True"},{"line_number":2181,"context_line":"            self.assertNotIn(\u0027password\u0027, x)"},{"line_number":2182,"context_line":"        self.assertTrue(found)"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_95c62298","line":2181,"in_reply_to":"dae33548_f65cea7e","updated":"2016-02-17 20:04:05.000000000","message":"Done","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cfac58b1c6d37b65e042a105096aaf8c0c54c9c5","unresolved":false,"context_lines":[{"line_number":2104,"context_line":"            self.assertEqual(exp_filter, m.call_args[0][2])"},{"line_number":2105,"context_line":""},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"class POSIXGroupApi(ldap_backend.GroupApi):"},{"line_number":2108,"context_line":"    \"\"\"A patch for GroupAPI to store member uid instead of dn\"\"\""},{"line_number":2109,"context_line":""},{"line_number":2110,"context_line":"    def add_user(self, user_dn, group_id, user_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_102ea042","line":2107,"updated":"2016-02-17 20:33:29.000000000","message":"There shouldn\u0027t be anything using this anymore, so remove it.","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8820547af660c3cead99c6a50db38dfffab3843e","unresolved":false,"context_lines":[{"line_number":2104,"context_line":"            self.assertEqual(exp_filter, m.call_args[0][2])"},{"line_number":2105,"context_line":""},{"line_number":2106,"context_line":""},{"line_number":2107,"context_line":"class POSIXGroupApi(ldap_backend.GroupApi):"},{"line_number":2108,"context_line":"    \"\"\"A patch for GroupAPI to store member uid instead of dn\"\"\""},{"line_number":2109,"context_line":""},{"line_number":2110,"context_line":"    def add_user(self, user_dn, group_id, user_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_64c3ed89","line":2107,"in_reply_to":"dae33548_102ea042","updated":"2016-02-17 20:52:53.000000000","message":"Done","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cfac58b1c6d37b65e042a105096aaf8c0c54c9c5","unresolved":false,"context_lines":[{"line_number":2139,"context_line":"        self.config_fixture.config(group\u003d\u0027identity\u0027, driver\u003d\u0027ldap\u0027)"},{"line_number":2140,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027, group_members_are_ids\u003dTrue)"},{"line_number":2141,"context_line":"        self.config_fixture.config("},{"line_number":2142,"context_line":"            group\u003d\u0027ldap\u0027, group_member_attribute\u003d\u0027memberUID\u0027)"},{"line_number":2143,"context_line":""},{"line_number":2144,"context_line":"    def config_files(self):"},{"line_number":2145,"context_line":"        config_files \u003d super(LDAPPosixGroupsTest, self).config_files()"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_f0d97c58","line":2142,"updated":"2016-02-17 20:33:29.000000000","message":"these can be combined.","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8820547af660c3cead99c6a50db38dfffab3843e","unresolved":false,"context_lines":[{"line_number":2139,"context_line":"        self.config_fixture.config(group\u003d\u0027identity\u0027, driver\u003d\u0027ldap\u0027)"},{"line_number":2140,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027, group_members_are_ids\u003dTrue)"},{"line_number":2141,"context_line":"        self.config_fixture.config("},{"line_number":2142,"context_line":"            group\u003d\u0027ldap\u0027, group_member_attribute\u003d\u0027memberUID\u0027)"},{"line_number":2143,"context_line":""},{"line_number":2144,"context_line":"    def config_files(self):"},{"line_number":2145,"context_line":"        config_files \u003d super(LDAPPosixGroupsTest, self).config_files()"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_84c6f197","line":2142,"in_reply_to":"dae33548_240c453a","updated":"2016-02-17 20:52:53.000000000","message":"Done","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"587c4e9ab102778139513d68e817ac9463a9ecb8","unresolved":false,"context_lines":[{"line_number":2139,"context_line":"        self.config_fixture.config(group\u003d\u0027identity\u0027, driver\u003d\u0027ldap\u0027)"},{"line_number":2140,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027, group_members_are_ids\u003dTrue)"},{"line_number":2141,"context_line":"        self.config_fixture.config("},{"line_number":2142,"context_line":"            group\u003d\u0027ldap\u0027, group_member_attribute\u003d\u0027memberUID\u0027)"},{"line_number":2143,"context_line":""},{"line_number":2144,"context_line":"    def config_files(self):"},{"line_number":2145,"context_line":"        config_files \u003d super(LDAPPosixGroupsTest, self).config_files()"}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_240c453a","line":2142,"in_reply_to":"dae33548_f0d97c58","updated":"2016-02-17 20:39:36.000000000","message":"should have said \"these 2 lines setting optionsin the \u0027ldap\u0027 group can be combined into a single call\":\n\n        self.config_fixture.config(group\u003d\u0027ldap\u0027, group_members_are_ids\u003dTrue,\n                                   group_member_attribute\u003d\u0027memberUID\u0027)","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"cfac58b1c6d37b65e042a105096aaf8c0c54c9c5","unresolved":false,"context_lines":[{"line_number":2175,"context_line":"        for x in user_refs:"},{"line_number":2176,"context_line":"            if x[\u0027id\u0027] \u003d\u003d new_user[\u0027id\u0027]:"},{"line_number":2177,"context_line":"                found \u003d True"},{"line_number":2178,"context_line":"        self.assertTrue(found)"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"class LdapIdentityWithMapping("}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_707bac28","line":2178,"updated":"2016-02-17 20:33:29.000000000","message":"to avoid complicated for / if loops:\n\n self.assertIn(new_user[\u0027id\u0027], (x[\u0027id\u0027] for x in user_refs))","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8820547af660c3cead99c6a50db38dfffab3843e","unresolved":false,"context_lines":[{"line_number":2175,"context_line":"        for x in user_refs:"},{"line_number":2176,"context_line":"            if x[\u0027id\u0027] \u003d\u003d new_user[\u0027id\u0027]:"},{"line_number":2177,"context_line":"                found \u003d True"},{"line_number":2178,"context_line":"        self.assertTrue(found)"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"class LdapIdentityWithMapping("}],"source_content_type":"text/x-python","patch_set":10,"id":"dae33548_c4bc7908","line":2178,"in_reply_to":"dae33548_707bac28","updated":"2016-02-17 20:52:53.000000000","message":"Done","commit_id":"4a4833f7742488c42ca401207c252cbbda796a6a"}],"releasenotes/notes/bug_1526462-df9a3f3974d9040f.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e415e5114046787bd1db508102b09dde55c57364","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    needs to be worded so that it does not depend on any"},{"line_number":54,"context_line":"    information only available in another section, such"},{"line_number":55,"context_line":"    as the prelude. This may mean repeating some details."},{"line_number":56,"context_line":"fixes:"},{"line_number":57,"context_line":"  - Add normal bug fixes here, or remove this section."},{"line_number":58,"context_line":"    All of the list items in this section are combined"},{"line_number":59,"context_line":"    when the release notes are rendered, so the text"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"dae33548_aa27cfb4","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":6},"updated":"2016-02-16 16:14:42.000000000","message":"you can remove all other sections, just leave this one:\n\n---\nfixes:\n  - \u003e\n    [`bug 1526462 \u003chttps://bugs.launchpad.net/keystone/+bug/1526462\u003e`_]\n    Better support for posixGroups with OpenDirectory and UNIX LDAPs.","commit_id":"8f5edec3b5dfa879a1c805ad37d29ad7909d8ace"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"6dea1027c114e509f20edbd9673727e18dfb2768","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    needs to be worded so that it does not depend on any"},{"line_number":54,"context_line":"    information only available in another section, such"},{"line_number":55,"context_line":"    as the prelude. This may mean repeating some details."},{"line_number":56,"context_line":"fixes:"},{"line_number":57,"context_line":"  - Add normal bug fixes here, or remove this section."},{"line_number":58,"context_line":"    All of the list items in this section are combined"},{"line_number":59,"context_line":"    when the release notes are rendered, so the text"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"dae33548_e1e3bd03","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":6},"in_reply_to":"dae33548_aa27cfb4","updated":"2016-02-16 16:46:34.000000000","message":"Strange. I\u0027ve done it in the online editor...","commit_id":"8f5edec3b5dfa879a1c805ad37d29ad7909d8ace"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ac21cfe090d0b2465685d486160344614141501","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1526462 \u003chttps://bugs.launchpad.net/keystone/+bug/1526462\u003e`_]"},{"line_number":5,"context_line":"    Better support for posixGroups with OpenDirectory and UNIX LDAPs."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"dae33548_d6ef2685","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":68},"updated":"2016-02-17 14:55:27.000000000","message":"change to \"when using the LDAP identity driver\".","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8ac21cfe090d0b2465685d486160344614141501","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1526462 \u003chttps://bugs.launchpad.net/keystone/+bug/1526462\u003e`_]"},{"line_number":5,"context_line":"    Better support for posixGroups with OpenDirectory and UNIX LDAPs."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"dae33548_d69606ef","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":10},"updated":"2016-02-17 14:55:27.000000000","message":"remove \"Better\"","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"38184e5cd3dfe3648459fbb40761c33c16bf78f2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1526462 \u003chttps://bugs.launchpad.net/keystone/+bug/1526462\u003e`_]"},{"line_number":5,"context_line":"    Better support for posixGroups with OpenDirectory and UNIX LDAPs."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"dae33548_f564ceb9","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":68},"in_reply_to":"dae33548_d6ef2685","updated":"2016-02-17 20:04:05.000000000","message":"Done","commit_id":"1b5b6fb09cf80099bc14e3e84f14545b0f54600b"}]}
