)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a0042bbe327cc13555811b92ef06fe7b46cf8f04","unresolved":false,"context_lines":[{"line_number":10,"context_line":"python library. WORK IN PROGRESS, INITIAL PROTOTYPE."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ibaf354f4d44a36d76e1d37410341aeb9f7ed0a9b"},{"line_number":13,"context_line":"Implements: keystone-specs/specs/backlog/ldap3.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba0121b8_a6a9fa7d","line":13,"range":{"start_line":13,"start_character":12,"end_line":13,"end_character":51},"updated":"2016-03-29 17:26:42.000000000","message":"change this to:\n\n  implements: bp ldap3","commit_id":"a8aa9c48e6fc2eaa38c12b17b842b6e92d7fa373"}],"keystone/identity/backends/ldap3.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"93fe0e78da6f26b06d11d8148b73dcc90ed48e8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fa0719c6_01e21a9f","updated":"2016-03-22 22:35:14.000000000","message":"Suggest naming the file ldap3_identity so absolute_import isn\u0027t needed.","commit_id":"41a12eafddcada9c37cd1b1aaa3cd458481c9774"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"05ee2405f4b7ba85d8f9a44b2b6925505f33ddb6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_c9b16891","line":1,"updated":"2016-03-23 00:58:13.000000000","message":"2016","commit_id":"41a12eafddcada9c37cd1b1aaa3cd458481c9774"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"93fe0e78da6f26b06d11d8148b73dcc90ed48e8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_c1fe6237","line":1,"updated":"2016-03-22 22:35:14.000000000","message":"This is new code, do not attribute copyright to the foundation (either remove this or attribute copyright to your company/you personally)","commit_id":"41a12eafddcada9c37cd1b1aaa3cd458481c9774"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c8e4b07cc12977a4f19c17ea253e4e1fcb54465e","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    # Note(knikolla): Driver is read only so methods below are not supported."},{"line_number":145,"context_line":"    def create_user(self, user_id, user):"},{"line_number":146,"context_line":"        raise NotImplementedError"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def update_user(self, user_id, user):"},{"line_number":149,"context_line":"        raise NotImplementedError"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_c1aca237","line":146,"updated":"2016-03-22 22:37:51.000000000","message":"These are likely needing to be a 403, as this will raise a 500 ISE. Best bet is to make this explicitly raise a 403 Forbidden (because no matter what configuration/what is requested, the requestor has no permission to write to the LDAP server).\n\nThis applies to all write methods.","commit_id":"41a12eafddcada9c37cd1b1aaa3cd458481c9774"}],"keystone/identity/backends/ldap_identity.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"028a3701ed931b27c2d4a0512ef5b32e3b9be3fd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import uuid"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from ldap3 import Connection, LDAPBindError, ALL_ATTRIBUTES, AttrDef, \\"},{"line_number":16,"context_line":"    ObjectDef, Reader"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from oslo_log import versionutils"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_326f792c","line":16,"updated":"2016-03-23 18:38:32.000000000","message":"Pep8 may complain about this (import only modules, see comment below)","commit_id":"d19904d045159dbb53323d0ebac42714f85af59a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"028a3701ed931b27c2d4a0512ef5b32e3b9be3fd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone.common import clean"},{"line_number":23,"context_line":"from keystone.common import driver_hints"},{"line_number":24,"context_line":"from keystone.common import models"},{"line_number":25,"context_line":"from keystone.exception import Forbidden"},{"line_number":26,"context_line":"from keystone.i18n import _"},{"line_number":27,"context_line":"from keystone import identity"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa0719c6_721e11bc","line":25,"updated":"2016-03-23 18:38:32.000000000","message":"Pep8 will complain about this, be sure to import only modules and then:\n\n  raise exception.Forbidden(_(\"\u003cdriver name\u003e does not support write operations\"))\n\nor something similar.","commit_id":"d19904d045159dbb53323d0ebac42714f85af59a"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4d6baf2d89a837d7b96ea1506d99b2bb3c45850d","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        else:"},{"line_number":195,"context_line":"            user \u003d None"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        conn \u003d ldap3.Connection("},{"line_number":198,"context_line":"            self.conf.ldap.url,"},{"line_number":199,"context_line":"            auto_bind\u003dTrue,"},{"line_number":200,"context_line":"            user\u003duser,"},{"line_number":201,"context_line":"            password\u003dpassword,"},{"line_number":202,"context_line":"            check_names\u003dTrue,"},{"line_number":203,"context_line":"            read_only\u003dTrue"},{"line_number":204,"context_line":"        )"},{"line_number":205,"context_line":"        return conn"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _construct_user_tree_dn(self, user_id):"},{"line_number":208,"context_line":"        return \u0027%s\u003d%s, %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_0367ed25","line":205,"range":{"start_line":197,"start_character":0,"end_line":205,"end_character":19},"updated":"2016-03-26 23:40:30.000000000","message":"Ldap3 has the connection pool stuff built in, before this is finalized we should consider supporting the connection pools.","commit_id":"a8aa9c48e6fc2eaa38c12b17b842b6e92d7fa373"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4d6baf2d89a837d7b96ea1506d99b2bb3c45850d","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    # Note(knikolla): Driver is read only so methods below are not supported."},{"line_number":274,"context_line":"    def create_user(self, user_id, user):"},{"line_number":275,"context_line":"        raise exception.Forbidden(_(\"LDAP does not support write operations\"))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def update_user(self, user_id, user):"},{"line_number":278,"context_line":"        raise exception.Forbidden(_(\"LDAP does not support write operations\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"da0c15f0_4371e5df","line":275,"updated":"2016-03-26 23:40:30.000000000","message":"(NIT, to be fixed down the road): Just define _() once as a msg variable (probably global to the module) and then do:\n\n  raise exception.Forbidden(read_only_ldap_error_msg)\n\nor similar.","commit_id":"a8aa9c48e6fc2eaa38c12b17b842b6e92d7fa373"}]}
