)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":145,"context_line":"# user_allow_update \u003d True"},{"line_number":146,"context_line":"# user_allow_delete \u003d True"},{"line_number":147,"context_line":"# user_enabled_emulation \u003d False"},{"line_number":148,"context_line":"# user_enabled_emulation_dn \u003d"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# tenant_tree_dn \u003d ou\u003dGroups,dc\u003dexample,dc\u003dcom"},{"line_number":151,"context_line":"# tenant_filter \u003d"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAM3%2F%2BzL0%3D","line":148,"updated":"2013-02-19 00:21:12.000000000","message":"suggest use a single config option, user_enabled_emulation_dn, where if it\u0027s set to anything then it\u0027s enabled.\n\nsimilar suggestion for tenant_enabled_emulation_dn","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"# user_allow_update \u003d True"},{"line_number":146,"context_line":"# user_allow_delete \u003d True"},{"line_number":147,"context_line":"# user_enabled_emulation \u003d False"},{"line_number":148,"context_line":"# user_enabled_emulation_dn \u003d"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"# tenant_tree_dn \u003d ou\u003dGroups,dc\u003dexample,dc\u003dcom"},{"line_number":151,"context_line":"# tenant_filter \u003d"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAM3%2F%2BylQ%3D","line":148,"in_reply_to":"AAAAM3%2F%2BzL0%3D","updated":"2013-02-19 08:08:32.000000000","message":"I believe, most users should be satisfied with default DN choice. This way we allow user to just flip the switch and try it on without selecting another DN. We have the same setup for dumb member.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"}],"keystone/common/ldap/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.enabled_emulation_dn \u003d getattr(conf.ldap, enabled_emulation_dn)"},{"line_number":416,"context_line":"        if not self.enabled_emulation_dn:"},{"line_number":417,"context_line":"            self.enabled_emulation_dn \u003d \u0027cn\u003denabled_%ss,%s\u0027\\"},{"line_number":418,"context_line":"                % (self.options_name, self.tree_dn)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzHs%3D","line":418,"updated":"2013-02-19 00:21:12.000000000","message":"safer to escape options_name so that it\u0027s valid for a DN.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.enabled_emulation_dn \u003d getattr(conf.ldap, enabled_emulation_dn)"},{"line_number":416,"context_line":"        if not self.enabled_emulation_dn:"},{"line_number":417,"context_line":"            self.enabled_emulation_dn \u003d \u0027cn\u003denabled_%ss,%s\u0027\\"},{"line_number":418,"context_line":"                % (self.options_name, self.tree_dn)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2ByiY%3D","line":418,"in_reply_to":"AAAAM3%2F%2BzHs%3D","updated":"2013-02-19 08:08:32.000000000","message":"options_name is provided by developer not by user, so considered safe. It\u0027s never been escaped (see BaseLdap.__init__).","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"},{"line_number":422,"context_line":"        dn \u003d self._id_to_dn(object_id)"},{"line_number":423,"context_line":"        query \u003d \u0027(member\u003d%s)\u0027 % dn"},{"line_number":424,"context_line":"        try:"},{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzIA%3D","line":423,"updated":"2013-02-19 00:21:12.000000000","message":"should escape dn so that it\u0027s valid for an ldap filter.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"},{"line_number":422,"context_line":"        dn \u003d self._id_to_dn(object_id)"},{"line_number":423,"context_line":"        query \u003d \u0027(member\u003d%s)\u0027 % dn"},{"line_number":424,"context_line":"        try:"},{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Byh0%3D","line":423,"in_reply_to":"AAAAM3%2F%2BzIA%3D","updated":"2013-02-19 08:08:32.000000000","message":"DN is already properly escaped by _id_to_dn.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        try:"},{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"},{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzIM%3D","line":427,"updated":"2013-02-19 00:21:12.000000000","message":"change this to request no attributes (1.1), for efficiency.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        try:"},{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"},{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Byhc%3D","line":427,"in_reply_to":"AAAAM3%2F%2BzIM%3D","updated":"2013-02-19 08:08:32.000000000","message":"Premature optimization is the root of all evil. We never used attribute list limitation.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"},{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            if enabled_value:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzLE%3D","line":428,"updated":"2013-02-19 00:21:12.000000000","message":"is this raised only if self.enabled_emulation_dn doesn\u0027t exist? should log the misconfiguration somewhere.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            enabled_value \u003d conn.search_s(self.enabled_emulation_dn,"},{"line_number":426,"context_line":"                                          ldap.SCOPE_BASE,"},{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            if enabled_value:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2ByhU%3D","line":428,"in_reply_to":"AAAAM3%2F%2BzLE%3D","updated":"2013-02-19 08:08:32.000000000","message":"Yes, and it\u0027s not considered as misconfiguration. If we never created this entry means we never enabled any objects.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            if enabled_value:"},{"line_number":432,"context_line":"                return True"},{"line_number":433,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzKc%3D","line":430,"updated":"2013-02-19 00:21:12.000000000","message":"suggest remove this line.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                                          query)"},{"line_number":428,"context_line":"        except ldap.NO_SUCH_OBJECT:"},{"line_number":429,"context_line":"            return False"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            if enabled_value:"},{"line_number":432,"context_line":"                return True"},{"line_number":433,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2ByhM%3D","line":430,"in_reply_to":"AAAAM3%2F%2BzKc%3D","updated":"2013-02-19 08:08:32.000000000","message":"Makes control flow clear.\n\n    if smth:\n        return one\n    else:\n        return two\n\nis better than\n\n    if smth:\n        return one\n    return two","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            if enabled_value:"},{"line_number":432,"context_line":"                return True"},{"line_number":433,"context_line":"            else:"},{"line_number":434,"context_line":"                return False"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def _add_enabled(self, object_id):"},{"line_number":437,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzKM%3D","line":434,"updated":"2013-02-19 00:21:12.000000000","message":"change 4 lines to \"return enabled_value\".","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            if enabled_value:"},{"line_number":432,"context_line":"                return True"},{"line_number":433,"context_line":"            else:"},{"line_number":434,"context_line":"                return False"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def _add_enabled(self, object_id):"},{"line_number":437,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Byg8%3D","line":434,"in_reply_to":"AAAAM3%2F%2BzKM%3D","updated":"2013-02-19 08:08:32.000000000","message":"enabled_value is a list of pairs describing LDAP objects. We don\u0027t need to return it, we need only simple boolean value.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                         [self._id_to_dn(object_id)])]"},{"line_number":447,"context_line":"            if self.use_dumb_member:"},{"line_number":448,"context_line":"                attr_list[1][1].append(self.dumb_member)"},{"line_number":449,"context_line":"            conn.add_s(self.enabled_emulation_dn, attr_list)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _remove_enabled(self, object_id):"},{"line_number":452,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzGM%3D","line":449,"updated":"2013-02-19 00:21:12.000000000","message":"it seems incredibly strange to me to attempt to add some random entry to my ldap server.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                         [self._id_to_dn(object_id)])]"},{"line_number":447,"context_line":"            if self.use_dumb_member:"},{"line_number":448,"context_line":"                attr_list[1][1].append(self.dumb_member)"},{"line_number":449,"context_line":"            conn.add_s(self.enabled_emulation_dn, attr_list)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def _remove_enabled(self, object_id):"},{"line_number":452,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Byg0%3D","line":449,"in_reply_to":"AAAAM3%2F%2BzGM%3D","updated":"2013-02-19 08:08:32.000000000","message":"It\u0027s not random and it won\u0027t be created unless you ask for enabled attribute emulation and don\u0027t create it by hand.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"58d277bd898c4ed7082eee0fe20bd18d744bfc67","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        if self.enabled_emulation:"},{"line_number":463,"context_line":"            enabled_value \u003d values.pop(\u0027enabled\u0027, True)"},{"line_number":464,"context_line":"            ref \u003d super(EnabledEmuMixIn, self).create(values)"},{"line_number":465,"context_line":"            if \u0027enabled\u0027 not in self.attribute_ignore:"},{"line_number":466,"context_line":"                if enabled_value:"},{"line_number":467,"context_line":"                    self._add_enabled(ref[\u0027id\u0027])"},{"line_number":468,"context_line":"                ref[\u0027enabled\u0027] \u003d enabled_value"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BzFw%3D","line":465,"updated":"2013-02-19 00:21:12.000000000","message":"would it be better to set self.enabled_emulation to False in __init__ if \u0027enabled\u0027 is in self.attribute_ignore?","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"40c0a327ef9c9f9befaea5ffc987d86b86fe96c3","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        if self.enabled_emulation:"},{"line_number":463,"context_line":"            enabled_value \u003d values.pop(\u0027enabled\u0027, True)"},{"line_number":464,"context_line":"            ref \u003d super(EnabledEmuMixIn, self).create(values)"},{"line_number":465,"context_line":"            if \u0027enabled\u0027 not in self.attribute_ignore:"},{"line_number":466,"context_line":"                if enabled_value:"},{"line_number":467,"context_line":"                    self._add_enabled(ref[\u0027id\u0027])"},{"line_number":468,"context_line":"                ref[\u0027enabled\u0027] \u003d enabled_value"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bygw%3D","line":465,"in_reply_to":"AAAAM3%2F%2BzFw%3D","updated":"2013-02-19 08:08:32.000000000","message":"Unfortunately, attribute_ignore is filled by leaf class after all parent initialization is finished, so we can\u0027t catch it there.","commit_id":"e78d557fb069f916ff006f49993c31965222882f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4ac0e6c643ee259016e4f76dcd011814a59dbe51","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.enabled_emulation_dn \u003d getattr(conf.ldap, enabled_emulation_dn)"},{"line_number":416,"context_line":"        if not self.enabled_emulation_dn:"},{"line_number":417,"context_line":"            self.enabled_emulation_dn \u003d \u0027cn\u003denabled_%ss,%s\u0027\\"},{"line_number":418,"context_line":"                % (self.options_name, self.tree_dn)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2Bxh4%3D","line":418,"updated":"2013-02-19 15:35:48.000000000","message":"use () to continue a line rather than \\. See https://github.com/openstack/keystone/blame/master/HACKING.rst#L14","commit_id":"8dd204b51f058d81bfbb749c5efb1b9a265ba11a"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"38f265978547b62ca84ba7a1698dd995e0d4513b","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.enabled_emulation_dn \u003d getattr(conf.ldap, enabled_emulation_dn)"},{"line_number":416,"context_line":"        if not self.enabled_emulation_dn:"},{"line_number":417,"context_line":"            self.enabled_emulation_dn \u003d \u0027cn\u003denabled_%ss,%s\u0027\\"},{"line_number":418,"context_line":"                % (self.options_name, self.tree_dn)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def _get_enabled(self, object_id):"},{"line_number":421,"context_line":"        conn \u003d self.get_connection()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2BxYA%3D","line":418,"in_reply_to":"AAAAM3%2F%2Bxh4%3D","updated":"2013-02-19 16:07:52.000000000","message":"Done","commit_id":"8dd204b51f058d81bfbb749c5efb1b9a265ba11a"}],"keystone/config.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"031a083482e4f72e06b5fd4c1f19daf70d785838","unresolved":false,"context_lines":[{"line_number":205,"context_line":"register_bool(\u0027user_allow_create\u0027, group\u003d\u0027ldap\u0027, default\u003dTrue)"},{"line_number":206,"context_line":"register_bool(\u0027user_allow_update\u0027, group\u003d\u0027ldap\u0027, default\u003dTrue)"},{"line_number":207,"context_line":"register_bool(\u0027user_allow_delete\u0027, group\u003d\u0027ldap\u0027, default\u003dTrue)"},{"line_number":208,"context_line":"register_bool(\u0027user_enabled_emulation\u0027, group\u003d\u0027ldap\u0027, default\u003dFalse)"},{"line_number":209,"context_line":"register_str(\u0027user_enabled_emulation_dn\u0027, group\u003d\u0027ldap\u0027, default\u003dNone)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"register_str(\u0027tenant_tree_dn\u0027, group\u003d\u0027ldap\u0027, default\u003dNone)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPWI%3D","line":208,"updated":"2013-01-31 20:15:01.000000000","message":"document these in etc/keystone.conf.sample","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"}],"tests/test_backend_ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"031a083482e4f72e06b5fd4c1f19daf70d785838","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        pass"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"class LDAPIdentityEnabledEmulation(LDAPIdentity):"},{"line_number":448,"context_line":"    def setUp(self):"},{"line_number":449,"context_line":"        super(LDAPIdentityEnabledEmulation, self).setUp()"},{"line_number":450,"context_line":"        self.config([test.etcdir(\u0027keystone.conf.sample\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPWg%3D","line":447,"updated":"2013-01-31 20:15:01.000000000","message":"this will run all of the tests in LDAPIdentity under a slightly different configuration... I assume that\u0027s not intended?","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"a2cfbf7dca1a70e2e1b788b1053c3eb21c35375f","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        pass"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"class LDAPIdentityEnabledEmulation(LDAPIdentity):"},{"line_number":448,"context_line":"    def setUp(self):"},{"line_number":449,"context_line":"        super(LDAPIdentityEnabledEmulation, self).setUp()"},{"line_number":450,"context_line":"        self.config([test.etcdir(\u0027keystone.conf.sample\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPU0%3D","line":447,"in_reply_to":"AAAAM3%2F%2FPWg%3D","updated":"2013-01-31 20:37:52.000000000","message":"This is exactly what\u0027s intended - to run all the same tests with emulation turned on.","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"031a083482e4f72e06b5fd4c1f19daf70d785838","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                    self.user_two, self.user_badguy]:"},{"line_number":460,"context_line":"            obj.setdefault(\u0027enabled\u0027, True)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def test_authenticate_no_metadata(self):"},{"line_number":463,"context_line":"        user \u003d {"},{"line_number":464,"context_line":"            \u0027id\u0027: \u0027no_meta\u0027,"},{"line_number":465,"context_line":"            \u0027name\u0027: \u0027NO_META\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPWc%3D","line":462,"updated":"2013-01-31 20:15:01.000000000","message":"is there anything special about this test to ldap? can it live in test_backend instead?","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"bdedd7315cb27ce1397649d22510c7fbdbfd353b","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                    self.user_two, self.user_badguy]:"},{"line_number":460,"context_line":"            obj.setdefault(\u0027enabled\u0027, True)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def test_authenticate_no_metadata(self):"},{"line_number":463,"context_line":"        user \u003d {"},{"line_number":464,"context_line":"            \u0027id\u0027: \u0027no_meta\u0027,"},{"line_number":465,"context_line":"            \u0027name\u0027: \u0027NO_META\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNxY%3D","line":462,"in_reply_to":"AAAAM3%2F%2FNz4%3D","updated":"2013-02-01 21:17:30.000000000","message":"If there\u0027s no \u0027enabled\u0027 field when the object is created, mixin adds the object to the list of enabled ones thus setting \u0027enabled\u0027 to True. So when another call retrieves the object, it will always have \u0027enabled\u0027 field.\n\nThis test used to create user using a dict without \u0027enabled\u0027 field, and tried to compare the ref returned by backend with this dict. The comparison failed because backend inserted \u0027enabled\u0027: True into it.\n\nSo, it\u0027s only the test was failing, no need to do any changes in controllers.","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"26e59983d089d6c7eaf90a73d291f4ff4710378d","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                    self.user_two, self.user_badguy]:"},{"line_number":460,"context_line":"            obj.setdefault(\u0027enabled\u0027, True)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def test_authenticate_no_metadata(self):"},{"line_number":463,"context_line":"        user \u003d {"},{"line_number":464,"context_line":"            \u0027id\u0027: \u0027no_meta\u0027,"},{"line_number":465,"context_line":"            \u0027name\u0027: \u0027NO_META\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FNz4%3D","line":462,"in_reply_to":"AAAAM3%2F%2FPUk%3D","updated":"2013-02-01 20:42:09.000000000","message":"hmm, if enabled is not specified, it should be assumed to be true from an API perspective.\n\nIf a client does not specify enabled when creating a user on the API with the LDAP backend, would this change cause it to fail? If so, perhaps we should default enabled to True at the controller  level in both v2 and v3?","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"},{"author":{"_account_id":708,"name":"Yuriy Taraday","email":"yuriy@taraday.nl","username":"yorik-sar"},"change_message_id":"a2cfbf7dca1a70e2e1b788b1053c3eb21c35375f","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                    self.user_two, self.user_badguy]:"},{"line_number":460,"context_line":"            obj.setdefault(\u0027enabled\u0027, True)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def test_authenticate_no_metadata(self):"},{"line_number":463,"context_line":"        user \u003d {"},{"line_number":464,"context_line":"            \u0027id\u0027: \u0027no_meta\u0027,"},{"line_number":465,"context_line":"            \u0027name\u0027: \u0027NO_META\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPUk%3D","line":462,"in_reply_to":"AAAAM3%2F%2FPWc%3D","updated":"2013-01-31 20:37:52.000000000","message":"We had to add enabled\u003dTrue to every user and tenant because our emulation can not hold None (or empty) value and so all comparisons with predefined dicts without \u0027enabled\u0027 keys failed.","commit_id":"6e77ccca48bd3ee6164b109262bc8071880b6c32"}]}
