)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ee0260f63b7223bdd3692658c09a411d73533f9e","unresolved":false,"context_lines":[{"line_number":843,"context_line":"#user_tree_dn\u003d\u003cNone\u003e"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"# Whether referrals should be chased for queries."},{"line_number":846,"context_line":"#chase_referrals\u003d\u003cNone\u003e"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"# LDAP search filter for users. (string value)"},{"line_number":849,"context_line":"#user_filter\u003d\u003cNone\u003e"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAAWH%2F%2FLOw%3D","line":846,"updated":"2014-03-19 17:59:00.000000000","message":"update the sample config","commit_id":"e1db68b2fb623ed3f5df5e66122537bd79e3d213"}],"keystone/common/config.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2762cee2dc27eb2b6e085fca76fcf1d419620eca","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                        \u0027back to using default dereferencing configured by \u0027"},{"line_number":407,"context_line":"                        \u0027your ldap.conf.\u0027),"},{"line_number":408,"context_line":"        cfg.BoolOpt(\u0027chase_referrals\u0027, default\u003dTrue,"},{"line_number":409,"context_line":"                    help\u003d\u0027Whether referrals should be chased for queries.\u0027),"},{"line_number":410,"context_line":"        cfg.StrOpt(\u0027user_tree_dn\u0027, default\u003dNone,"},{"line_number":411,"context_line":"                   help\u003d\u0027Search base for users.\u0027),"},{"line_number":412,"context_line":"        cfg.StrOpt(\u0027user_filter\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FG2M%3D","line":409,"updated":"2014-03-09 16:01:19.000000000","message":"Change this to default to None. If the value is none then use the system default and only override if the value is set to True or False. That way if a system is using ldap.conf to set the option then it will continue to use that.","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"151ca986d9395d7b83bb46286c32b4f670499748","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                        \u0027back to using default dereferencing configured by \u0027"},{"line_number":407,"context_line":"                        \u0027your ldap.conf.\u0027),"},{"line_number":408,"context_line":"        cfg.BoolOpt(\u0027chase_referrals\u0027, default\u003dTrue,"},{"line_number":409,"context_line":"                    help\u003d\u0027Whether referrals should be chased for queries.\u0027),"},{"line_number":410,"context_line":"        cfg.StrOpt(\u0027user_tree_dn\u0027, default\u003dNone,"},{"line_number":411,"context_line":"                   help\u003d\u0027Search base for users.\u0027),"},{"line_number":412,"context_line":"        cfg.StrOpt(\u0027user_filter\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FXck%3D","line":409,"in_reply_to":"AAAAVn%2F%2FG2M%3D","updated":"2014-03-18 11:20:37.000000000","message":"Done","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"c0d9572581da0a832fadc055ce5f4625adb914e6","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                        \u0027\"finding\" or \"default\". The \"default\" option falls \u0027"},{"line_number":417,"context_line":"                        \u0027back to using default dereferencing configured by \u0027"},{"line_number":418,"context_line":"                        \u0027your ldap.conf.\u0027),"},{"line_number":419,"context_line":"        cfg.BoolOpt(\u0027chase_referrals\u0027, default\u003dNone,"},{"line_number":420,"context_line":"                    help\u003d\u0027Override the system\\\u0027s default referral chasing \u0027"},{"line_number":421,"context_line":"                         \u0027behavior for queries.\u0027),"},{"line_number":422,"context_line":"        cfg.StrOpt(\u0027user_tree_dn\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FUkE%3D","line":419,"updated":"2014-03-18 16:34:40.000000000","message":"Is None \u003d\u003d False?  Is it ok to have None as the default for a BoolOpt?","commit_id":"57e5438ffce81ef73445d867d33e16fbe957fd73"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ae536abe66dfb3f4b3f95efb69b2c5e485d87a18","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                        \u0027\"finding\" or \"default\". The \"default\" option falls \u0027"},{"line_number":417,"context_line":"                        \u0027back to using default dereferencing configured by \u0027"},{"line_number":418,"context_line":"                        \u0027your ldap.conf.\u0027),"},{"line_number":419,"context_line":"        cfg.BoolOpt(\u0027chase_referrals\u0027, default\u003dNone,"},{"line_number":420,"context_line":"                    help\u003d\u0027Override the system\\\u0027s default referral chasing \u0027"},{"line_number":421,"context_line":"                         \u0027behavior for queries.\u0027),"},{"line_number":422,"context_line":"        cfg.StrOpt(\u0027user_tree_dn\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FTzE%3D","line":419,"in_reply_to":"AAAAWH%2F%2FUkE%3D","updated":"2014-03-18 17:54:47.000000000","message":"None does not equal False, but both are \"falsey\" if cast to a boolean first. for example, both of these are true:\n\n  None !\u003d False\n  bool(None) \u003d\u003d bool(False)\n\nand null is a reasonable default for any type of option, but users wouldn\u0027t be able to manually specify it in most cases","commit_id":"57e5438ffce81ef73445d867d33e16fbe957fd73"}],"keystone/common/ldap/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2762cee2dc27eb2b6e085fca76fcf1d419620eca","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        o \u003d []"},{"line_number":597,"context_line":"        for dn, attrs in res:"},{"line_number":598,"context_line":"            if dn is not None:"},{"line_number":599,"context_line":"                o.append((dn, dict((kind, [ldap2py(x) for x in values])"},{"line_number":600,"context_line":"                                   for kind, values in six.iteritems(attrs))))"},{"line_number":601,"context_line":"        return o"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FG2E%3D","line":598,"updated":"2014-03-09 16:01:19.000000000","message":"add a comment why we need to do this.","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"c0d9572581da0a832fadc055ce5f4625adb914e6","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        o \u003d []"},{"line_number":598,"context_line":"        for dn, attrs in res:"},{"line_number":599,"context_line":"            # NOTE(dolph, bkhudson): why would dn be None here?"},{"line_number":600,"context_line":"            if dn is not None:"},{"line_number":601,"context_line":"                o.append((dn, dict((kind, [ldap2py(x) for x in values])"},{"line_number":602,"context_line":"                                   for kind, values in six.iteritems(attrs))))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FUjo%3D","line":599,"updated":"2014-03-18 16:34:40.000000000","message":"dn is None when res is a Referral object, not an Entry object.","commit_id":"57e5438ffce81ef73445d867d33e16fbe957fd73"},{"author":{"_account_id":9983,"name":"Richard Megginson","email":"rmeggins@redhat.com","username":"rmeggins"},"change_message_id":"da4c9a5adc9ce1de8e254aaf82a30c7c15ea67e5","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        o \u003d []"},{"line_number":598,"context_line":"        for dn, attrs in res:"},{"line_number":599,"context_line":"            # NOTE(dolph, bkhudson): why would dn be None here?"},{"line_number":600,"context_line":"            if dn is not None:"},{"line_number":601,"context_line":"                o.append((dn, dict((kind, [ldap2py(x) for x in values])"},{"line_number":602,"context_line":"                                   for kind, values in six.iteritems(attrs))))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FTvY%3D","line":599,"in_reply_to":"AAAAWH%2F%2FTx4%3D","updated":"2014-03-19 17:46:53.000000000","message":"You can have mixed results containing both Entry and Referral objects.  For example, Active Directory sends back both search result entries and continuation references (referrals).  So I suppose, in the case where chasing referrals is disabled, and the search returns only referrals and no search entries, it would be useful to log a message to that effect.","commit_id":"57e5438ffce81ef73445d867d33e16fbe957fd73"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ae536abe66dfb3f4b3f95efb69b2c5e485d87a18","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        o \u003d []"},{"line_number":598,"context_line":"        for dn, attrs in res:"},{"line_number":599,"context_line":"            # NOTE(dolph, bkhudson): why would dn be None here?"},{"line_number":600,"context_line":"            if dn is not None:"},{"line_number":601,"context_line":"                o.append((dn, dict((kind, [ldap2py(x) for x in values])"},{"line_number":602,"context_line":"                                   for kind, values in six.iteritems(attrs))))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FTx4%3D","line":599,"in_reply_to":"AAAAWH%2F%2FUjo%3D","updated":"2014-03-18 17:54:47.000000000","message":"ah, that makes sense. so if you get back a referral but chasing referrals is disabled, then you essentially get no search results? should that emit a log message to warn the operator?","commit_id":"57e5438ffce81ef73445d867d33e16fbe957fd73"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"16ed6c5de5c7d1cb806e1381c6fa22b57c4194e6","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                                 tls_cacertdir\u003dNone,"},{"line_number":871,"context_line":"                                 tls_cacertfile\u003dNone,"},{"line_number":872,"context_line":"                                 tls_req_cert\u003d2,"},{"line_number":873,"context_line":"                                 #use_tls\u003dFalse).AndReturn(conn)"},{"line_number":874,"context_line":"                                 use_tls\u003dFalse,"},{"line_number":875,"context_line":"                                 chase_referrals\u003dTrue).AndReturn(conn)"},{"line_number":876,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FVB4%3D","line":873,"updated":"2014-03-06 19:50:12.000000000","message":"remove commented-out code.","commit_id":"b8acd61fafb1e7e2d91fb7d739434afcf25983fa"},{"author":{"_account_id":8340,"name":"Craig Jellick","email":"craig.jellick@gmail.com","username":"cjellick"},"change_message_id":"c04d58b6571fad6bfdf3999294626f64b2b33a76","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                                 tls_cacertdir\u003dNone,"},{"line_number":871,"context_line":"                                 tls_cacertfile\u003dNone,"},{"line_number":872,"context_line":"                                 tls_req_cert\u003d2,"},{"line_number":873,"context_line":"                                 #use_tls\u003dFalse).AndReturn(conn)"},{"line_number":874,"context_line":"                                 use_tls\u003dFalse,"},{"line_number":875,"context_line":"                                 chase_referrals\u003dTrue).AndReturn(conn)"},{"line_number":876,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FOIc%3D","line":873,"in_reply_to":"AAAAVn%2F%2FVB4%3D","updated":"2014-03-07 14:43:06.000000000","message":"Done","commit_id":"b8acd61fafb1e7e2d91fb7d739434afcf25983fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"16ed6c5de5c7d1cb806e1381c6fa22b57c4194e6","unresolved":false,"context_lines":[{"line_number":893,"context_line":"                                 tls_cacertdir\u003dNone,"},{"line_number":894,"context_line":"                                 tls_cacertfile\u003dNone,"},{"line_number":895,"context_line":"                                 tls_req_cert\u003d2,"},{"line_number":896,"context_line":"                                 #use_tls\u003dFalse).AndReturn(conn)"},{"line_number":897,"context_line":"                                 use_tls\u003dFalse,"},{"line_number":898,"context_line":"                                 chase_referrals\u003dFalse).AndReturn(conn)"},{"line_number":899,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FVBw%3D","line":896,"updated":"2014-03-06 19:50:12.000000000","message":"remove commented-out code.","commit_id":"b8acd61fafb1e7e2d91fb7d739434afcf25983fa"},{"author":{"_account_id":8340,"name":"Craig Jellick","email":"craig.jellick@gmail.com","username":"cjellick"},"change_message_id":"c04d58b6571fad6bfdf3999294626f64b2b33a76","unresolved":false,"context_lines":[{"line_number":893,"context_line":"                                 tls_cacertdir\u003dNone,"},{"line_number":894,"context_line":"                                 tls_cacertfile\u003dNone,"},{"line_number":895,"context_line":"                                 tls_req_cert\u003d2,"},{"line_number":896,"context_line":"                                 #use_tls\u003dFalse).AndReturn(conn)"},{"line_number":897,"context_line":"                                 use_tls\u003dFalse,"},{"line_number":898,"context_line":"                                 chase_referrals\u003dFalse).AndReturn(conn)"},{"line_number":899,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FOIY%3D","line":896,"in_reply_to":"AAAAVn%2F%2FVBw%3D","updated":"2014-03-07 14:43:06.000000000","message":"Done","commit_id":"b8acd61fafb1e7e2d91fb7d739434afcf25983fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2762cee2dc27eb2b6e085fca76fcf1d419620eca","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def test_chase_referrals_off(self):"},{"line_number":880,"context_line":"        self.config([tests.dirs.etc(\u0027keystone.conf.sample\u0027),"},{"line_number":881,"context_line":"                     tests.dirs.tests(\u0027test_overrides.conf\u0027)])"},{"line_number":882,"context_line":"        CONF.ldap.url \u003d \"fake://memory\""},{"line_number":883,"context_line":"        CONF.ldap.chase_referrals \u003d False"},{"line_number":884,"context_line":"        user_api \u003d identity.backends.ldap.UserApi(CONF)"},{"line_number":885,"context_line":"        self.stubs.Set(fakeldap, \u0027FakeLdap\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FG3M%3D","line":882,"updated":"2014-03-09 16:01:19.000000000","message":"use self.opt_in_group() to change config settings.","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8350261dc6000f9ca845ad8ebc3a990750068458","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def test_chase_referrals_off(self):"},{"line_number":880,"context_line":"        self.config([tests.dirs.etc(\u0027keystone.conf.sample\u0027),"},{"line_number":881,"context_line":"                     tests.dirs.tests(\u0027test_overrides.conf\u0027)])"},{"line_number":882,"context_line":"        CONF.ldap.url \u003d \"fake://memory\""},{"line_number":883,"context_line":"        CONF.ldap.chase_referrals \u003d False"},{"line_number":884,"context_line":"        user_api \u003d identity.backends.ldap.UserApi(CONF)"},{"line_number":885,"context_line":"        self.stubs.Set(fakeldap, \u0027FakeLdap\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2F7Ew%3D","line":882,"in_reply_to":"AAAAVn%2F%2B2no%3D","updated":"2014-03-12 22:21:28.000000000","message":"Related to Morgan\u0027s patch here: \n\nhttps://review.openstack.org/#/c/79525/","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0e49ba5d164b0bcbab66d9d9b13daca6b71cee0f","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def test_chase_referrals_off(self):"},{"line_number":880,"context_line":"        self.config([tests.dirs.etc(\u0027keystone.conf.sample\u0027),"},{"line_number":881,"context_line":"                     tests.dirs.tests(\u0027test_overrides.conf\u0027)])"},{"line_number":882,"context_line":"        CONF.ldap.url \u003d \"fake://memory\""},{"line_number":883,"context_line":"        CONF.ldap.chase_referrals \u003d False"},{"line_number":884,"context_line":"        user_api \u003d identity.backends.ldap.UserApi(CONF)"},{"line_number":885,"context_line":"        self.stubs.Set(fakeldap, \u0027FakeLdap\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2B2no%3D","line":882,"in_reply_to":"AAAAVn%2F%2FG3M%3D","updated":"2014-03-11 18:14:33.000000000","message":"Actually, this should now use the config fixture.","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"151ca986d9395d7b83bb46286c32b4f670499748","unresolved":false,"context_lines":[{"line_number":879,"context_line":"    def test_chase_referrals_off(self):"},{"line_number":880,"context_line":"        self.config([tests.dirs.etc(\u0027keystone.conf.sample\u0027),"},{"line_number":881,"context_line":"                     tests.dirs.tests(\u0027test_overrides.conf\u0027)])"},{"line_number":882,"context_line":"        CONF.ldap.url \u003d \"fake://memory\""},{"line_number":883,"context_line":"        CONF.ldap.chase_referrals \u003d False"},{"line_number":884,"context_line":"        user_api \u003d identity.backends.ldap.UserApi(CONF)"},{"line_number":885,"context_line":"        self.stubs.Set(fakeldap, \u0027FakeLdap\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FXMI%3D","line":882,"in_reply_to":"AAAAWH%2F%2F7Ew%3D","updated":"2014-03-18 11:20:37.000000000","message":"Done","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2762cee2dc27eb2b6e085fca76fcf1d419620eca","unresolved":false,"context_lines":[{"line_number":896,"context_line":"                                 chase_referrals\u003dFalse).AndReturn(conn)"},{"line_number":897,"context_line":"        self.mox.ReplayAll()"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        user_api.get_connection(user\u003dNone, password\u003dNone)"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    def test_wrong_ldap_scope(self):"},{"line_number":902,"context_line":"        CONF.ldap.query_scope \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FG3U%3D","line":899,"updated":"2014-03-09 16:01:19.000000000","message":"Why passing user\u003dNone, password\u003dNone? I don\u0027t think this is how keystone is typically configured. Pass a user and password.","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"151ca986d9395d7b83bb46286c32b4f670499748","unresolved":false,"context_lines":[{"line_number":896,"context_line":"                                 chase_referrals\u003dFalse).AndReturn(conn)"},{"line_number":897,"context_line":"        self.mox.ReplayAll()"},{"line_number":898,"context_line":""},{"line_number":899,"context_line":"        user_api.get_connection(user\u003dNone, password\u003dNone)"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    def test_wrong_ldap_scope(self):"},{"line_number":902,"context_line":"        CONF.ldap.query_scope \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FXMM%3D","line":899,"in_reply_to":"AAAAVn%2F%2FG3U%3D","updated":"2014-03-18 11:20:37.000000000","message":"Done","commit_id":"73cc6fda48ebf9bbc2e0a47885c24afcdf7297c1"}]}
