)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d65a4491b010ca34afe081307cf39f5709793de7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Improve forbidden checks"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Both the create_user and delete_user were checking the conf settings after other checks such as duplicate user, etc.  So to fix this, I moved the forbidden checks sooner in the callstack.  I\u0027ve also updated the unit test to detect the originally reported failure."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I9f7e56a5afd9624070fffef6672ef88cd549f210"},{"line_number":12,"context_line":"Closes-Bug: #1174451"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2FMqY%3D","line":9,"updated":"2014-01-16 14:39:59.000000000","message":"please wrap your commit message at 79 chars -- it\u0027s not very readable otherwise\n\n  https://wiki.openstack.org/wiki/GitCommitMessages\n\nit\u0027s also more helpful to focus on why you\u0027re making changes in the commit body, rather than on what you\u0027re changing, which is redundant with the patch itself.","commit_id":"707ec81c909551c797cfe3e27a541224068c9f3d"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"0f738d1a3bab83b49d6df4a6ce4be156d768ffcf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"New functions were created to check \u0027allowed\u0027 access because the previous design"},{"line_number":10,"context_line":"was checking after changes were possibly made."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Changed the unit test to use an already created user to simulate the oringal"},{"line_number":13,"context_line":"error that was reported."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9f7e56a5afd9624070fffef6672ef88cd549f210"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAUH%2F%2BhMA%3D","line":12,"updated":"2014-01-24 20:39:36.000000000","message":"typo.  oringal should be original","commit_id":"d36efc89cce5d2e55b33d8f80974d3d114a330b3"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e6ca92f765e0900e353676dc760ca3b2f3a19304","unresolved":false,"context_lines":[{"line_number":9,"context_line":"New functions were created to check \u0027allowed\u0027 access because the previous design"},{"line_number":10,"context_line":"was checking after changes were possibly made."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Changed the unit test to use an already created user to simulate the oringal"},{"line_number":13,"context_line":"error that was reported."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9f7e56a5afd9624070fffef6672ef88cd549f210"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAUH%2F%2BhFo%3D","line":12,"in_reply_to":"AAAAUH%2F%2BhMA%3D","updated":"2014-01-24 20:51:05.000000000","message":"Good eye.  Will fix.","commit_id":"d36efc89cce5d2e55b33d8f80974d3d114a330b3"}],"keystone/common/ldap/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d65a4491b010ca34afe081307cf39f5709793de7","unresolved":false,"context_lines":[{"line_number":331,"context_line":"            raise exception.ForbiddenAction(action\u003daction)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def create(self, values):"},{"line_number":334,"context_line":"        self.affirm_unique(values)"},{"line_number":335,"context_line":"        conn \u003d self.get_connection()"},{"line_number":336,"context_line":"        object_classes \u003d self.structural_classes + [self.object_class]"},{"line_number":337,"context_line":"        attrs \u003d [(\u0027objectClass\u0027, object_classes)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FMqM%3D","line":334,"updated":"2014-01-16 14:39:59.000000000","message":"this has nothing to do with the rest of the patch??","commit_id":"707ec81c909551c797cfe3e27a541224068c9f3d"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"cb2c40a8f5a8a7a7eb7a954cdb66703fd9c15ad0","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.assertRaises(exception.ForbiddenAction,"},{"line_number":96,"context_line":"                          self.identity_api.create_user,"},{"line_number":97,"context_line":"                          self.user_foo[\u0027id\u0027],"},{"line_number":98,"context_line":"                          self.user_foo)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.user_foo[\u0027password\u0027] \u003d \u0027fakepass2\u0027"},{"line_number":101,"context_line":"        self.assertRaises(exception.ForbiddenAction,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Bo3o%3D","line":98,"updated":"2014-01-23 17:04:39.000000000","message":"i\u0027d expect this to raise a 409 without seeing the configuration above -- can you introduce this as a new test, rather than rewriting an existing test? both scenarios look like valid tests and i\u0027d rather not lose the old test","commit_id":"efdca2d245aac0ec6d7ca10a70e7210353491deb"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"21d8fdc07cbb2df79a8ad62091b98be4fdb7afbd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.assertRaises(exception.ForbiddenAction,"},{"line_number":96,"context_line":"                          self.identity_api.create_user,"},{"line_number":97,"context_line":"                          self.user_foo[\u0027id\u0027],"},{"line_number":98,"context_line":"                          self.user_foo)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.user_foo[\u0027password\u0027] \u003d \u0027fakepass2\u0027"},{"line_number":101,"context_line":"        self.assertRaises(exception.ForbiddenAction,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BoRE%3D","line":98,"in_reply_to":"AAAAUH%2F%2Bo3o%3D","updated":"2014-01-24 19:56:50.000000000","message":"Will fix, thanks!","commit_id":"efdca2d245aac0ec6d7ca10a70e7210353491deb"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"0f738d1a3bab83b49d6df4a6ce4be156d768ffcf","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def test_configurable_forbidden_create_existing_user(self):"},{"line_number":116,"context_line":"        conf \u003d self.get_config(CONF.identity.default_domain_id)"},{"line_number":117,"context_line":"        conf.ldap.user_allow_create \u003d False"},{"line_number":118,"context_line":"        conf.ldap.user_allow_update \u003d False"},{"line_number":119,"context_line":"        conf.ldap.user_allow_delete \u003d False"},{"line_number":120,"context_line":"        self.reload_backends(CONF.identity.default_domain_id)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BhIc%3D","line":118,"updated":"2014-01-24 20:39:36.000000000","message":"you really are only checking create_user below so perhaps there is no need to set add conf.ldap.user_allow_update to be false and conf.ldap.user_allow_delete to be false? Unless you want to add separate unit tests for these?","commit_id":"d36efc89cce5d2e55b33d8f80974d3d114a330b3"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e6ca92f765e0900e353676dc760ca3b2f3a19304","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def test_configurable_forbidden_create_existing_user(self):"},{"line_number":116,"context_line":"        conf \u003d self.get_config(CONF.identity.default_domain_id)"},{"line_number":117,"context_line":"        conf.ldap.user_allow_create \u003d False"},{"line_number":118,"context_line":"        conf.ldap.user_allow_update \u003d False"},{"line_number":119,"context_line":"        conf.ldap.user_allow_delete \u003d False"},{"line_number":120,"context_line":"        self.reload_backends(CONF.identity.default_domain_id)"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BhFc%3D","line":118,"in_reply_to":"AAAAUH%2F%2BhIc%3D","updated":"2014-01-24 20:51:05.000000000","message":"Good point.  I\u0027ll remove update and delete.","commit_id":"d36efc89cce5d2e55b33d8f80974d3d114a330b3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a2658bf3b8bdc78fe89c3bad128ba1c65f62c8c0","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_configurable_forbidden_create_existing_user(self):"},{"line_number":116,"context_line":"        conf \u003d self.get_config(CONF.identity.default_domain_id)"},{"line_number":117,"context_line":"        conf.ldap.user_allow_create \u003d False"},{"line_number":118,"context_line":"        self.reload_backends(CONF.identity.default_domain_id)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.assertRaises(exception.ForbiddenAction,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F94iY%3D","line":117,"updated":"2014-02-02 14:39:56.000000000","message":"should use self.opt_in_group here.","commit_id":"5cc1906429c6b77bb644f8387b5507dc3a682e06"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0ac62bde90ee74df6ee609d5e198641d0e540afe","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_configurable_forbidden_create_existing_user(self):"},{"line_number":116,"context_line":"        conf \u003d self.get_config(CONF.identity.default_domain_id)"},{"line_number":117,"context_line":"        conf.ldap.user_allow_create \u003d False"},{"line_number":118,"context_line":"        self.reload_backends(CONF.identity.default_domain_id)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.assertRaises(exception.ForbiddenAction,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F9km8%3D","line":117,"in_reply_to":"AAAAUH%2F94iY%3D","updated":"2014-02-05 23:24:31.000000000","message":"++ There are a number of issues that crop up when opt_in_group is not used (especially when reloading the backend like the next line) depending on the state of the configuration files.  If you expect the value to be set, make sure it\u0027s sticky with \n\n    self.opt_in_group(\u0027ldap\u0027, user_allow_create\u003dFalse)","commit_id":"5cc1906429c6b77bb644f8387b5507dc3a682e06"}]}
