)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Some LDAP servers support disabling accounts via a boolean \"lock\""},{"line_number":10,"context_line":"attribute. For these servers, a value in LDAP of \"True\" means that"},{"line_number":11,"context_line":"the account is locked, while a value of \"False\" means the account"},{"line_number":12,"context_line":"is active. Keystone currently expects a boolean \"enabled\" attribute"},{"line_number":13,"context_line":"where \"True\" means the account is enabled and \"False\" means the"},{"line_number":14,"context_line":"account is disabled."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_d45a74f1","line":12,"updated":"2014-07-17 01:13:35.000000000","message":"enabled isn\u0027t expected to be a boolean if user_enabled_mask is not 0, see http://git.openstack.org/cgit/openstack/keystone/tree/etc/keystone.conf.sample#n936","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Some LDAP servers support disabling accounts via a boolean \"lock\""},{"line_number":10,"context_line":"attribute. For these servers, a value in LDAP of \"True\" means that"},{"line_number":11,"context_line":"the account is locked, while a value of \"False\" means the account"},{"line_number":12,"context_line":"is active. Keystone currently expects a boolean \"enabled\" attribute"},{"line_number":13,"context_line":"where \"True\" means the account is enabled and \"False\" means the"},{"line_number":14,"context_line":"account is disabled."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_1caae7d1","line":12,"in_reply_to":"baada198_d40c5fef","updated":"2014-08-02 01:33:24.000000000","message":"Done","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Some LDAP servers support disabling accounts via a boolean \"lock\""},{"line_number":10,"context_line":"attribute. For these servers, a value in LDAP of \"True\" means that"},{"line_number":11,"context_line":"the account is locked, while a value of \"False\" means the account"},{"line_number":12,"context_line":"is active. Keystone currently expects a boolean \"enabled\" attribute"},{"line_number":13,"context_line":"where \"True\" means the account is enabled and \"False\" means the"},{"line_number":14,"context_line":"account is disabled."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_d40c5fef","line":12,"in_reply_to":"baada198_d45a74f1","updated":"2014-07-22 14:56:55.000000000","message":"Ok, I can mention that it expects a boolean attribute unless the user_enabled_mask option is being used.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"To support LDAP account lock attributes, we need a way to tell"},{"line_number":17,"context_line":"Keystone that the boolean values from LDAP are inverted. This"},{"line_number":18,"context_line":"adds a new \"user_enabled_invert\" setting that allows the enabled"},{"line_number":19,"context_line":"boolean logic to be inverted in the resource (LDAP), while leaving"},{"line_number":20,"context_line":"the logic as-is in the model (Keystone user object).  The existing"},{"line_number":21,"context_line":"default behavior remains as-is."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_d4119405","line":18,"updated":"2014-07-17 01:13:35.000000000","message":"Might as well use the \"user_enabled_mask\" option. If it\u0027s set to invert then invert the value.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"To support LDAP account lock attributes, we need a way to tell"},{"line_number":17,"context_line":"Keystone that the boolean values from LDAP are inverted. This"},{"line_number":18,"context_line":"adds a new \"user_enabled_invert\" setting that allows the enabled"},{"line_number":19,"context_line":"boolean logic to be inverted in the resource (LDAP), while leaving"},{"line_number":20,"context_line":"the logic as-is in the model (Keystone user object).  The existing"},{"line_number":21,"context_line":"default behavior remains as-is."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_146fb794","line":18,"in_reply_to":"baada198_d4119405","updated":"2014-07-22 14:56:55.000000000","message":"I\u0027m not sure I like the approach of overloading the mask option, which is really intended for integer values as used by Active Directory (see my other comment for additional details).","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2a2055810efd284a64a4f5bd81e3b31530949fea","unresolved":false,"context_lines":[{"line_number":20,"context_line":"boolean logic to be inverted in the resource (LDAP), while leaving"},{"line_number":21,"context_line":"the logic as-is in the model (Keystone user object).  The existing"},{"line_number":22,"context_line":"default behavior remains as-is."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I2a89d4b98c854e68e1bb10f53b8b29d92f945f60"},{"line_number":25,"context_line":"Closes-bug: #1337029"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_39b32b0a","line":23,"updated":"2014-08-03 15:40:03.000000000","message":"Probably should have a DocImpact since the config options have changed.","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"01c4c31db5d4de4a7ce3395bb5159ce88ede0e8a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"boolean logic to be inverted in the resource (LDAP), while leaving"},{"line_number":21,"context_line":"the logic as-is in the model (Keystone user object).  The existing"},{"line_number":22,"context_line":"default behavior remains as-is."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I2a89d4b98c854e68e1bb10f53b8b29d92f945f60"},{"line_number":25,"context_line":"Closes-bug: #1337029"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_64c97a59","line":23,"in_reply_to":"baada198_39b32b0a","updated":"2014-08-03 17:48:10.000000000","message":"Done","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"}],"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":925,"context_line":"# When this is set to \"True\", the \"user_enabled_default\" value"},{"line_number":926,"context_line":"# should be set to the default value that is desired as stored"},{"line_number":927,"context_line":"# in the LDAP server."},{"line_number":928,"context_line":"#user_enabled_invert\u003dFalse"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# List of attributes stripped off the user on update. (list"},{"line_number":931,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_94bc7cdd","line":928,"updated":"2014-07-17 01:13:35.000000000","message":"I\u0027m pretty sure the sample config wasn\u0027t rebuilt using \"tox -e sample_config\".","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":925,"context_line":"# When this is set to \"True\", the \"user_enabled_default\" value"},{"line_number":926,"context_line":"# should be set to the default value that is desired as stored"},{"line_number":927,"context_line":"# in the LDAP server."},{"line_number":928,"context_line":"#user_enabled_invert\u003dFalse"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# List of attributes stripped off the user on update. (list"},{"line_number":931,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_7cd1232e","line":928,"in_reply_to":"baada198_0bab5f88","updated":"2014-08-02 01:33:24.000000000","message":"Done","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":925,"context_line":"# When this is set to \"True\", the \"user_enabled_default\" value"},{"line_number":926,"context_line":"# should be set to the default value that is desired as stored"},{"line_number":927,"context_line":"# in the LDAP server."},{"line_number":928,"context_line":"#user_enabled_invert\u003dFalse"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# List of attributes stripped off the user on update. (list"},{"line_number":931,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_b439aba5","line":928,"in_reply_to":"baada198_94bc7cdd","updated":"2014-07-22 14:56:55.000000000","message":"Are you saying that this will be generated automatically, and that I don\u0027t need to edit this myself?  Am I supposed to run \"tox -e sample_config\" prior to committing my patch?","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b54f2287b2d24a3af4f2cc997c44a9322e47c7ec","unresolved":false,"context_lines":[{"line_number":925,"context_line":"# When this is set to \"True\", the \"user_enabled_default\" value"},{"line_number":926,"context_line":"# should be set to the default value that is desired as stored"},{"line_number":927,"context_line":"# in the LDAP server."},{"line_number":928,"context_line":"#user_enabled_invert\u003dFalse"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"# List of attributes stripped off the user on update. (list"},{"line_number":931,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_0bab5f88","line":928,"in_reply_to":"baada198_b439aba5","updated":"2014-07-28 03:19:04.000000000","message":"Yes, don\u0027t edit it yourself, run \"tox -e sample_config\"","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"}],"keystone/common/config.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":488,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":489,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":490,"context_line":"                         \u0027attributes to be used.\u0027),"},{"line_number":491,"context_line":"        cfg.IntOpt(\u0027user_enabled_mask\u0027, default\u003d0,"},{"line_number":492,"context_line":"                   help\u003d\u0027Bitmask integer to indicate the bit that the enabled \u0027"},{"line_number":493,"context_line":"                        \u0027value is stored in if the LDAP server represents \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_34c73066","line":490,"updated":"2014-07-17 01:13:35.000000000","message":"re-use user_enabled_default or user_enabled_mask instead since they can\u0027t be used with this anyways.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":488,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":489,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":490,"context_line":"                         \u0027attributes to be used.\u0027),"},{"line_number":491,"context_line":"        cfg.IntOpt(\u0027user_enabled_mask\u0027, default\u003d0,"},{"line_number":492,"context_line":"                   help\u003d\u0027Bitmask integer to indicate the bit that the enabled \u0027"},{"line_number":493,"context_line":"                        \u0027value is stored in if the LDAP server represents \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_f12255a2","line":490,"in_reply_to":"baada198_34c73066","updated":"2014-07-22 14:56:55.000000000","message":"Reusing user_enabled_mask would require changing it to a string type since we would need to aloow it to be set to some value such as \"invert\".  It seems messy to overload this config setting.\n\nThe user_enabled_default setting does work with the new user_enabled_invert setting that I proposed.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":488,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":489,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":490,"context_line":"                         \u0027attributes to be used.\u0027),"},{"line_number":491,"context_line":"        cfg.IntOpt(\u0027user_enabled_mask\u0027, default\u003d0,"},{"line_number":492,"context_line":"                   help\u003d\u0027Bitmask integer to indicate the bit that the enabled \u0027"},{"line_number":493,"context_line":"                        \u0027value is stored in if the LDAP server represents \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_5917119d","line":490,"in_reply_to":"baada198_6b9bfb72","updated":"2014-08-02 01:33:24.000000000","message":"Done","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b54f2287b2d24a3af4f2cc997c44a9322e47c7ec","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":488,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":489,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":490,"context_line":"                         \u0027attributes to be used.\u0027),"},{"line_number":491,"context_line":"        cfg.IntOpt(\u0027user_enabled_mask\u0027, default\u003d0,"},{"line_number":492,"context_line":"                   help\u003d\u0027Bitmask integer to indicate the bit that the enabled \u0027"},{"line_number":493,"context_line":"                        \u0027value is stored in if the LDAP server represents \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6b9bfb72","line":490,"in_reply_to":"baada198_f12255a2","updated":"2014-07-28 03:19:04.000000000","message":"According to the code this option is ignored if user_enabled_mask isn\u0027t 0. This should be mentioned in the help text.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2a2055810efd284a64a4f5bd81e3b31530949fea","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                   help\u003d\u0027LDAP attribute mapped to user enabled flag.\u0027),"},{"line_number":519,"context_line":"        cfg.BoolOpt(\u0027user_enabled_invert\u0027, default\u003dFalse,"},{"line_number":520,"context_line":"                    help\u003d\u0027Invert the meaning of the boolean enabled values. \u0027"},{"line_number":521,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":522,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":523,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":524,"context_line":"                         \u0027attributes to be used. This setting will have no \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_d98eaf26","line":521,"updated":"2014-08-03 15:40:03.000000000","message":"change \"user\" to \"use\"","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"01c4c31db5d4de4a7ce3395bb5159ce88ede0e8a","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                   help\u003d\u0027LDAP attribute mapped to user enabled flag.\u0027),"},{"line_number":519,"context_line":"        cfg.BoolOpt(\u0027user_enabled_invert\u0027, default\u003dFalse,"},{"line_number":520,"context_line":"                    help\u003d\u0027Invert the meaning of the boolean enabled values. \u0027"},{"line_number":521,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":522,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":523,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":524,"context_line":"                         \u0027attributes to be used. This setting will have no \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_24ace287","line":521,"in_reply_to":"baada198_d98eaf26","updated":"2014-08-03 17:48:10.000000000","message":"Done","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2a2055810efd284a64a4f5bd81e3b31530949fea","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                    help\u003d\u0027Invert the meaning of the boolean enabled values. \u0027"},{"line_number":521,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":522,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":523,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":524,"context_line":"                         \u0027attributes to be used. This setting will have no \u0027"},{"line_number":525,"context_line":"                         \u0027effect if \"user_enabled_mask\" or \u0027"},{"line_number":526,"context_line":"                         \u0027\"user_enabled_emulation\" settings are in use.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_59a29f9a","line":523,"updated":"2014-08-03 15:40:03.000000000","message":"change \"True\" to \"true\" to match the capitalization in the sample config.","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"01c4c31db5d4de4a7ce3395bb5159ce88ede0e8a","unresolved":false,"context_lines":[{"line_number":520,"context_line":"                    help\u003d\u0027Invert the meaning of the boolean enabled values. \u0027"},{"line_number":521,"context_line":"                         \u0027Some LDAP servers user a boolean lock attribute \u0027"},{"line_number":522,"context_line":"                         \u0027where \"True\" means an account is disabled. Setting \u0027"},{"line_number":523,"context_line":"                         \u0027\"user_enabled_invert \u003d True\" will allow these lock \u0027"},{"line_number":524,"context_line":"                         \u0027attributes to be used. This setting will have no \u0027"},{"line_number":525,"context_line":"                         \u0027effect if \"user_enabled_mask\" or \u0027"},{"line_number":526,"context_line":"                         \u0027\"user_enabled_emulation\" settings are in use.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_44af167c","line":523,"in_reply_to":"baada198_59a29f9a","updated":"2014-08-03 17:48:10.000000000","message":"Done","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"}],"keystone/identity/backends/ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if self.user.enabled_mask:"},{"line_number":103,"context_line":"            self.user.mask_enabled_attribute(user)"},{"line_number":104,"context_line":"        elif self.user.enabled_invert:"},{"line_number":105,"context_line":"            # We need to invert the enabled value for the old model object"},{"line_number":106,"context_line":"            # to prevent the LDAP update code from thinking that the enabled"},{"line_number":107,"context_line":"            # values are already equal."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d4ad149d","line":104,"updated":"2014-07-17 01:13:35.000000000","message":"the docs for the enabled_invert config option need to say that this is ignored if enabled_mask is not 0.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if self.user.enabled_mask:"},{"line_number":103,"context_line":"            self.user.mask_enabled_attribute(user)"},{"line_number":104,"context_line":"        elif self.user.enabled_invert:"},{"line_number":105,"context_line":"            # We need to invert the enabled value for the old model object"},{"line_number":106,"context_line":"            # to prevent the LDAP update code from thinking that the enabled"},{"line_number":107,"context_line":"            # values are already equal."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_39f6dd5e","line":104,"in_reply_to":"baada198_113ee9b9","updated":"2014-08-02 01:33:24.000000000","message":"Done in the config documenation.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if self.user.enabled_mask:"},{"line_number":103,"context_line":"            self.user.mask_enabled_attribute(user)"},{"line_number":104,"context_line":"        elif self.user.enabled_invert:"},{"line_number":105,"context_line":"            # We need to invert the enabled value for the old model object"},{"line_number":106,"context_line":"            # to prevent the LDAP update code from thinking that the enabled"},{"line_number":107,"context_line":"            # values are already equal."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_113ee9b9","line":104,"in_reply_to":"baada198_d4ad149d","updated":"2014-07-22 14:56:55.000000000","message":"Ok, I can add that.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        # Ensure that the LDAP attribute is False for a newly created"},{"line_number":1114,"context_line":"        # enabled user."},{"line_number":1115,"context_line":"        user_ref \u003d self.identity_api.create_user(user1)"},{"line_number":1116,"context_line":"        self.assertIs(user_ref[\u0027enabled\u0027], True)"},{"line_number":1117,"context_line":"        enabled_vals \u003d get_enabled_vals(user_ref)"},{"line_number":1118,"context_line":"        self.assertEqual([False], enabled_vals)"},{"line_number":1119,"context_line":"        user_ref \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d484340d","line":1116,"updated":"2014-07-17 01:13:35.000000000","message":"the order of arguments is expected and then observed... this is typically done correctly in these changes, so it\u0027s just the `assertIs`s I think.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        # Ensure that the LDAP attribute is False for a newly created"},{"line_number":1114,"context_line":"        # enabled user."},{"line_number":1115,"context_line":"        user_ref \u003d self.identity_api.create_user(user1)"},{"line_number":1116,"context_line":"        self.assertIs(user_ref[\u0027enabled\u0027], True)"},{"line_number":1117,"context_line":"        enabled_vals \u003d get_enabled_vals(user_ref)"},{"line_number":1118,"context_line":"        self.assertEqual([False], enabled_vals)"},{"line_number":1119,"context_line":"        user_ref \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_39297d9c","line":1116,"in_reply_to":"baada198_ab88b322","updated":"2014-08-02 01:33:24.000000000","message":"Done","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b54f2287b2d24a3af4f2cc997c44a9322e47c7ec","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        # Ensure that the LDAP attribute is False for a newly created"},{"line_number":1114,"context_line":"        # enabled user."},{"line_number":1115,"context_line":"        user_ref \u003d self.identity_api.create_user(user1)"},{"line_number":1116,"context_line":"        self.assertIs(user_ref[\u0027enabled\u0027], True)"},{"line_number":1117,"context_line":"        enabled_vals \u003d get_enabled_vals(user_ref)"},{"line_number":1118,"context_line":"        self.assertEqual([False], enabled_vals)"},{"line_number":1119,"context_line":"        user_ref \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ab88b322","line":1116,"in_reply_to":"baada198_d4545f00","updated":"2014-07-28 03:19:04.000000000","message":"This line should be \n\n self.assertIs(True, user_ref[\u0027enabled\u0027])\n\nsince True is the exected value.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"9f3ed8baf0e2ea28260aee12473503c25206d9f3","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        # Ensure that the LDAP attribute is False for a newly created"},{"line_number":1114,"context_line":"        # enabled user."},{"line_number":1115,"context_line":"        user_ref \u003d self.identity_api.create_user(user1)"},{"line_number":1116,"context_line":"        self.assertIs(user_ref[\u0027enabled\u0027], True)"},{"line_number":1117,"context_line":"        enabled_vals \u003d get_enabled_vals(user_ref)"},{"line_number":1118,"context_line":"        self.assertEqual([False], enabled_vals)"},{"line_number":1119,"context_line":"        user_ref \u003d self.identity_api.get_user(user_ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_d4545f00","line":1116,"in_reply_to":"baada198_d484340d","updated":"2014-07-22 14:56:55.000000000","message":"I\u0027m not sure I understand what you are pointing out.  This test is ensuring that the create call has the expected result for both the resource and model representations of the user.  It then checks that retrieving the user has the expected result in the model as well since that\u0027s a different code path for model creation.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66d87f4e2d9dc85476850462931f647f2b79f7aa","unresolved":false,"context_lines":[{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"    def test_user_enabled_invert(self):"},{"line_number":1703,"context_line":"        self.skipTest("},{"line_number":1704,"context_line":"            \"Enabled emulation conflicts with enabled invert\")"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def test_user_enabled_invert_no_enabled_value(self):"},{"line_number":1707,"context_line":"        self.skipTest("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9491dc48","line":1704,"updated":"2014-07-17 01:13:35.000000000","message":"rather than skipping show show what the behavior is. this way if the behavior is changed (to fix make it do something instead) then we\u0027ll know that the behavior changed and this test needs to be removed or changed.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"f0a534db808e1f14bef28c96e92120b567da409c","unresolved":false,"context_lines":[{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"    def test_user_enabled_invert(self):"},{"line_number":1703,"context_line":"        self.skipTest("},{"line_number":1704,"context_line":"            \"Enabled emulation conflicts with enabled invert\")"},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"    def test_user_enabled_invert_no_enabled_value(self):"},{"line_number":1707,"context_line":"        self.skipTest("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_df1f8158","line":1704,"in_reply_to":"baada198_9491dc48","updated":"2014-08-02 01:33:24.000000000","message":"This makes sense for this test, but it\u0027s not really possible for the test_user_enabled_invert_no_enabled_value test, as we can\u0027t mock _ldap_get() since multiple searches will be performed for different entries (the user and the enabled emulation group).  I think we will still need to skip this one test.","commit_id":"94aeea43622379dfcfbf3dc7590e8c9f94a9af64"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2a2055810efd284a64a4f5bd81e3b31530949fea","unresolved":false,"context_lines":[{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        ldap_ \u003d self.identity_api.driver.user.get_connection()"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        def get_enabled_vals(user):"},{"line_number":1149,"context_line":"            user_dn \u003d ("},{"line_number":1150,"context_line":"                self.identity_api.driver.user._id_to_dn_string(user[\u0027id\u0027]))"},{"line_number":1151,"context_line":"            enabled_attr_name \u003d CONF.ldap.user_enabled_attribute"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_f9061384","line":1148,"updated":"2014-08-03 15:40:03.000000000","message":"rather than copy-pasting this function move it to a common place.","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"01c4c31db5d4de4a7ce3395bb5159ce88ede0e8a","unresolved":false,"context_lines":[{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        ldap_ \u003d self.identity_api.driver.user.get_connection()"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        def get_enabled_vals(user):"},{"line_number":1149,"context_line":"            user_dn \u003d ("},{"line_number":1150,"context_line":"                self.identity_api.driver.user._id_to_dn_string(user[\u0027id\u0027]))"},{"line_number":1151,"context_line":"            enabled_attr_name \u003d CONF.ldap.user_enabled_attribute"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_c4a32699","line":1148,"in_reply_to":"baada198_f9061384","updated":"2014-08-03 17:48:10.000000000","message":"Done","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2a2055810efd284a64a4f5bd81e3b31530949fea","unresolved":false,"context_lines":[{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        ldap_ \u003d self.identity_api.driver.user.get_connection()"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"        def get_enabled_vals(user):"},{"line_number":1766,"context_line":"            user_dn \u003d ("},{"line_number":1767,"context_line":"                self.identity_api.driver.user._id_to_dn_string(user[\u0027id\u0027]))"},{"line_number":1768,"context_line":"            enabled_attr_name \u003d CONF.ldap.user_enabled_attribute"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_59f7ff8b","line":1765,"updated":"2014-08-03 15:40:03.000000000","message":"rather than copy-pasting this function move it to a common place.","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"01c4c31db5d4de4a7ce3395bb5159ce88ede0e8a","unresolved":false,"context_lines":[{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        ldap_ \u003d self.identity_api.driver.user.get_connection()"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"        def get_enabled_vals(user):"},{"line_number":1766,"context_line":"            user_dn \u003d ("},{"line_number":1767,"context_line":"                self.identity_api.driver.user._id_to_dn_string(user[\u0027id\u0027]))"},{"line_number":1768,"context_line":"            enabled_attr_name \u003d CONF.ldap.user_enabled_attribute"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e4b58ad0","line":1765,"in_reply_to":"baada198_59f7ff8b","updated":"2014-08-03 17:48:10.000000000","message":"Done","commit_id":"76034de90e05c74fb79841d8b47ab057d3c84355"}]}
