)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"447c61342c478602194010c6764ce5e1e1e36ad4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wangxiyuan \u003cwangxiyuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-10-27 09:22:18 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Drop unhash password column"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The unhash password column in Password table can be dropped"},{"line_number":10,"context_line":"safely now."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_7639cc9f","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":11},"updated":"2018-10-28 11:13:47.000000000","message":"this is not dropping unhashed column, it is dropping the compatiblility (less secure) hash column for the passwords. The commit message should not indicate that unhashed passwords are/were stored in keystone.","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8b14b80d61d1d465958459f55d733b51d5aa8311","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     wangxiyuan \u003cwangxiyuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-10-27 09:22:18 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Drop unhash password column"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The unhash password column in Password table can be dropped"},{"line_number":10,"context_line":"safely now."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_e4bd2667","line":7,"range":{"start_line":7,"start_character":5,"end_line":7,"end_character":11},"in_reply_to":"3f79a3b5_7639cc9f","updated":"2018-10-29 03:00:05.000000000","message":"Oh yeah.","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"}],"keystone/identity/backends/sql_model.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"447c61342c478602194010c6764ce5e1e1e36ad4","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        hashed_compat \u003d None"},{"line_number":153,"context_line":"        if value is not None:"},{"line_number":154,"context_line":"            # NOTE(notmorgan): hash the passwords, never directly bind the"},{"line_number":155,"context_line":"            # \"value\" in the unhashed form to hashed_passwd or hashed_compat"},{"line_number":156,"context_line":"            # to ensure the unhashed password cannot end up in the db. If an"},{"line_number":157,"context_line":"            # unhashed password ends up in the DB, it cannot be used for auth,"},{"line_number":158,"context_line":"            # it is however incorrect and could leak user credentials (due to"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_76c46c94","side":"PARENT","line":155,"range":{"start_line":155,"start_character":59,"end_line":155,"end_character":76},"updated":"2018-10-28 11:13:47.000000000","message":"Remove just this part, the rest of the comment should remain the same. The old password column was not an unhashed password column, it was a column using a less-secure hashing mechanism.","commit_id":"da7c7ceec9a24f549097ef8d87b21f013c3e0936"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8b14b80d61d1d465958459f55d733b51d5aa8311","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        hashed_compat \u003d None"},{"line_number":153,"context_line":"        if value is not None:"},{"line_number":154,"context_line":"            # NOTE(notmorgan): hash the passwords, never directly bind the"},{"line_number":155,"context_line":"            # \"value\" in the unhashed form to hashed_passwd or hashed_compat"},{"line_number":156,"context_line":"            # to ensure the unhashed password cannot end up in the db. If an"},{"line_number":157,"context_line":"            # unhashed password ends up in the DB, it cannot be used for auth,"},{"line_number":158,"context_line":"            # it is however incorrect and could leak user credentials (due to"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c45fca4a","side":"PARENT","line":155,"range":{"start_line":155,"start_character":59,"end_line":155,"end_character":76},"in_reply_to":"3f79a3b5_76c46c94","updated":"2018-10-29 03:00:05.000000000","message":"Done","commit_id":"da7c7ceec9a24f549097ef8d87b21f013c3e0936"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"447c61342c478602194010c6764ce5e1e1e36ad4","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @hybrid_property"},{"line_number":105,"context_line":"    def password(self):"},{"line_number":106,"context_line":"        \"\"\"Return the current password.\"\"\""},{"line_number":107,"context_line":"        if self.password_ref and self.password_ref.password_hash is not None:"},{"line_number":108,"context_line":"            return self.password_ref.password_hash"},{"line_number":109,"context_line":"        return None"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_16b3b836","line":107,"range":{"start_line":107,"start_character":33,"end_line":107,"end_character":76},"updated":"2018-10-28 11:13:47.000000000","message":"This check is not needed. It was added as part of the migration to the new hashing algorithms, see https://github.com/openstack/keystone/blob/5f31868c0bae584f999036bdeb0123f70e5d85d9/keystone/identity/backends/sql_model.py#L103-L108 which is the previous version prior to the hashing algorithm update.","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8b14b80d61d1d465958459f55d733b51d5aa8311","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @hybrid_property"},{"line_number":105,"context_line":"    def password(self):"},{"line_number":106,"context_line":"        \"\"\"Return the current password.\"\"\""},{"line_number":107,"context_line":"        if self.password_ref and self.password_ref.password_hash is not None:"},{"line_number":108,"context_line":"            return self.password_ref.password_hash"},{"line_number":109,"context_line":"        return None"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e4620615","line":107,"range":{"start_line":107,"start_character":33,"end_line":107,"end_character":76},"in_reply_to":"3f79a3b5_16b3b836","updated":"2018-10-29 03:00:05.000000000","message":"Done","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"447c61342c478602194010c6764ce5e1e1e36ad4","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @password.expression"},{"line_number":181,"context_line":"    def password(cls):"},{"line_number":182,"context_line":"        return Password.password_hash"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # NOTE(stevemar): we use a hybrid property here because we leverage the"},{"line_number":185,"context_line":"    # expression method, see `@enabled.expression` and `User._enabled` below."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_56bdb000","line":182,"updated":"2018-10-28 11:13:47.000000000","message":"There is a potential bug here we should chase down, I believe this is an incorrect use of .expression. This does\u0027t impact this change explicitly, but may be worth looking at since we\u0027re deep into this code already.\n\nhttps://bugs.launchpad.net/keystone/+bug/1735250","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8b14b80d61d1d465958459f55d733b51d5aa8311","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @password.expression"},{"line_number":181,"context_line":"    def password(cls):"},{"line_number":182,"context_line":"        return Password.password_hash"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # NOTE(stevemar): we use a hybrid property here because we leverage the"},{"line_number":185,"context_line":"    # expression method, see `@enabled.expression` and `User._enabled` below."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_bf2ad72b","line":182,"in_reply_to":"3f79a3b5_56bdb000","updated":"2018-10-29 03:00:05.000000000","message":"Add comment in Launchpad. This can be deal with a new patch.","commit_id":"e6d4a32332d7769e0cdecc652d09476ffc3a36cc"}],"keystone/tests/unit/identity/test_backend_sql.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"447c61342c478602194010c6764ce5e1e1e36ad4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.config_fixture.config(group\u003d\u0027identity\u0027,"},{"line_number":62,"context_line":"                                   password_hash_algorithm\u003d\u0027scrypt\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_password_hashing_compat_not_set_used(self):"},{"line_number":65,"context_line":"        with sql.session_for_read() as session:"},{"line_number":66,"context_line":"            user_ref \u003d PROVIDERS.identity_api._get_user("},{"line_number":67,"context_line":"                session, self.user_foo[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3647d420","side":"PARENT","line":64,"updated":"2018-10-28 11:13:47.000000000","message":"This whole test case can be removed. It was only ever used when we were doing the compat \"testing\" where we would hash both new and old forms. This case ensured that when compat testing was disabled we didn\u0027t populate the old column.","commit_id":"da7c7ceec9a24f549097ef8d87b21f013c3e0936"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"8b14b80d61d1d465958459f55d733b51d5aa8311","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.config_fixture.config(group\u003d\u0027identity\u0027,"},{"line_number":62,"context_line":"                                   password_hash_algorithm\u003d\u0027scrypt\u0027)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_password_hashing_compat_not_set_used(self):"},{"line_number":65,"context_line":"        with sql.session_for_read() as session:"},{"line_number":66,"context_line":"            user_ref \u003d PROVIDERS.identity_api._get_user("},{"line_number":67,"context_line":"                session, self.user_foo[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_3ff567cc","side":"PARENT","line":64,"in_reply_to":"3f79a3b5_3647d420","updated":"2018-10-29 03:00:05.000000000","message":"Done","commit_id":"da7c7ceec9a24f549097ef8d87b21f013c3e0936"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e6e1d9a7759cc5d9e43f8cab1bc129812c8b3f7e","unresolved":false,"context_lines":[{"line_number":3199,"context_line":"        self.assertTableColumns("},{"line_number":3200,"context_line":"            password_table,"},{"line_number":3201,"context_line":"            [\u0027id\u0027, \u0027local_user_id\u0027, \u0027password_hash\u0027, \u0027self_service\u0027,"},{"line_number":3202,"context_line":"             \u0027created_at_int\u0027, \u0027created_at\u0027, \u0027expires_at_int\u0027, \u0027expires_at\u0027]"},{"line_number":3203,"context_line":"        )"},{"line_number":3204,"context_line":""},{"line_number":3205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6005cdc0","line":3202,"range":{"start_line":3202,"start_character":64,"end_line":3202,"end_character":74},"updated":"2018-11-06 20:10:24.000000000","message":"I wonder if we can ever drop these?","commit_id":"3d084e644614e8e5ec6ced63dbe0ee1b1cad8e90"}]}
