)]}'
{"keystone/federation/idp.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"912e3ddc3106f7d08d57dd37b0d494dc360cb785","unresolved":false,"context_lines":[{"line_number":400,"context_line":"    # absolute file path, then we should assume it\u0027s an executable (e.g."},{"line_number":401,"context_line":"    # `xmlsec1`) and verify it resolves to a path."},{"line_number":402,"context_line":"    if os.path.isabs(CONF.saml.xmlsec_binary):"},{"line_number":403,"context_line":"        if not os.path.isfile(CONF.saml.xmlsec_binary):"},{"line_number":404,"context_line":"            LOG.error(msg)"},{"line_number":405,"context_line":"    else:"},{"line_number":406,"context_line":"        process \u003d subprocess.Popen([\u0027/usr/bin/which\u0027, CONF.saml.xmlsec_binary])"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_d6d8d91e","line":403,"range":{"start_line":403,"start_character":8,"end_line":403,"end_character":55},"updated":"2018-03-16 02:07:01.000000000","message":"May be checking to see if the file is also an executable?\n\n  os.path.isfile(CONF.saml.xmlsec_binary) and os.access(CONF.saml.xmlsec, os.X_OK)","commit_id":"d77733b3654f3097d2c5b729662f34129d4eda40"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"912e3ddc3106f7d08d57dd37b0d494dc360cb785","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        if not os.path.isfile(CONF.saml.xmlsec_binary):"},{"line_number":404,"context_line":"            LOG.error(msg)"},{"line_number":405,"context_line":"    else:"},{"line_number":406,"context_line":"        process \u003d subprocess.Popen([\u0027/usr/bin/which\u0027, CONF.saml.xmlsec_binary])"},{"line_number":407,"context_line":"        process.communicate()"},{"line_number":408,"context_line":"        # If `which xmlsec1` resolved the binary to a path, the return code"},{"line_number":409,"context_line":"        # will be 0. If it\u0027s anything else, the path doesn\u0027t exist."}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_7601cd69","line":406,"updated":"2018-03-16 02:07:01.000000000","message":"Nice! Maybe this check is good enough, and we don\u0027t need to above? Operational-wise, I can\u0027t imagine xmlsec1 is not on the path if its there.","commit_id":"d77733b3654f3097d2c5b729662f34129d4eda40"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ec3e172ebc6ecd30e5cf632f99f7e59724ebf5be","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        if not os.path.isfile(CONF.saml.xmlsec_binary):"},{"line_number":404,"context_line":"            LOG.error(msg)"},{"line_number":405,"context_line":"    else:"},{"line_number":406,"context_line":"        process \u003d subprocess.Popen([\u0027/usr/bin/which\u0027, CONF.saml.xmlsec_binary])"},{"line_number":407,"context_line":"        process.communicate()"},{"line_number":408,"context_line":"        # If `which xmlsec1` resolved the binary to a path, the return code"},{"line_number":409,"context_line":"        # will be 0. If it\u0027s anything else, the path doesn\u0027t exist."}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_39124f0b","line":406,"in_reply_to":"df7087c5_7601cd69","updated":"2018-03-16 19:27:10.000000000","message":"Done","commit_id":"d77733b3654f3097d2c5b729662f34129d4eda40"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"912e3ddc3106f7d08d57dd37b0d494dc360cb785","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        # If `which xmlsec1` resolved the binary to a path, the return code"},{"line_number":409,"context_line":"        # will be 0. If it\u0027s anything else, the path doesn\u0027t exist."},{"line_number":410,"context_line":"        if process.returncode:"},{"line_number":411,"context_line":"            LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"def _sign_assertion(assertion):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_b630c557","line":411,"updated":"2018-03-16 02:07:01.000000000","message":"Maybe we should raise SMALSigningError here. There\u0027s no point in continuing if the binary is not there.","commit_id":"d77733b3654f3097d2c5b729662f34129d4eda40"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ec3e172ebc6ecd30e5cf632f99f7e59724ebf5be","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        # If `which xmlsec1` resolved the binary to a path, the return code"},{"line_number":409,"context_line":"        # will be 0. If it\u0027s anything else, the path doesn\u0027t exist."},{"line_number":410,"context_line":"        if process.returncode:"},{"line_number":411,"context_line":"            LOG.error(msg)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"def _sign_assertion(assertion):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_d9f6b3d9","line":411,"in_reply_to":"df7087c5_b630c557","updated":"2018-03-16 19:27:10.000000000","message":"Done","commit_id":"d77733b3654f3097d2c5b729662f34129d4eda40"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"9a80e4fc0813c70ab3294a6d9f96e875648a4b97","unresolved":false,"context_lines":[{"line_number":4047,"context_line":"        # between py3.6 and lower python version."},{"line_number":4048,"context_line":"        expected_log \u003d ("},{"line_number":4049,"context_line":"            \"Error when signing assertion, reason: Command \u0027%s\u0027 returned \""},{"line_number":4050,"context_line":"            \"non-zero exit status %s\\.? %s\\n\" %"},{"line_number":4051,"context_line":"            (CONF.saml.xmlsec1_binary, sample_returncode, sample_output))"},{"line_number":4052,"context_line":""},{"line_number":4053,"context_line":"        self.assertRegex(logger_fixture.output,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_f03378f5","side":"PARENT","line":4050,"updated":"2018-03-19 03:07:58.000000000","message":"this should not be removed, otherwise the test will fail again under py3.6\nhttps://review.openstack.org/#/c/553712/","commit_id":"230d0cfc6c5f6d497fc4751cae1832d4903e0352"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"98f22bbb5e9421aad778e2dd3dd7627620f7ac41","unresolved":false,"context_lines":[{"line_number":4047,"context_line":"        # between py3.6 and lower python version."},{"line_number":4048,"context_line":"        expected_log \u003d ("},{"line_number":4049,"context_line":"            \"Error when signing assertion, reason: Command \u0027%s\u0027 returned \""},{"line_number":4050,"context_line":"            \"non-zero exit status %s\\.? %s\\n\" %"},{"line_number":4051,"context_line":"            (CONF.saml.xmlsec1_binary, sample_returncode, sample_output))"},{"line_number":4052,"context_line":""},{"line_number":4053,"context_line":"        self.assertRegex(logger_fixture.output,"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_95230006","side":"PARENT","line":4050,"in_reply_to":"df7087c5_f03378f5","updated":"2018-03-19 14:01:48.000000000","message":"Done","commit_id":"230d0cfc6c5f6d497fc4751cae1832d4903e0352"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"9a80e4fc0813c70ab3294a6d9f96e875648a4b97","unresolved":false,"context_lines":[{"line_number":4057,"context_line":"                \"Error when signing assertion, reason: Command \u0027%s\u0027 returned \""},{"line_number":4058,"context_line":"                \"non-zero exit status %s %s\\n\" %"},{"line_number":4059,"context_line":"                (CONF.saml.xmlsec1_binary, sample_returncode, sample_output))"},{"line_number":4060,"context_line":"            self.assertEqual(expected_log, logger_fixture.output)"},{"line_number":4061,"context_line":"            self.assertRegex(logger_fixture.output,"},{"line_number":4062,"context_line":"                             re.compile(r\u0027%s\u0027 % expected_log))"},{"line_number":4063,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_10314ced","line":4060,"updated":"2018-03-19 03:07:58.000000000","message":"L4061 has covered L4060, this line can be removed.","commit_id":"45ea384728ff3ca8114a28ab2394d9ab815dda09"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"98f22bbb5e9421aad778e2dd3dd7627620f7ac41","unresolved":false,"context_lines":[{"line_number":4057,"context_line":"                \"Error when signing assertion, reason: Command \u0027%s\u0027 returned \""},{"line_number":4058,"context_line":"                \"non-zero exit status %s %s\\n\" %"},{"line_number":4059,"context_line":"                (CONF.saml.xmlsec1_binary, sample_returncode, sample_output))"},{"line_number":4060,"context_line":"            self.assertEqual(expected_log, logger_fixture.output)"},{"line_number":4061,"context_line":"            self.assertRegex(logger_fixture.output,"},{"line_number":4062,"context_line":"                             re.compile(r\u0027%s\u0027 % expected_log))"},{"line_number":4063,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_3520f4f7","line":4060,"in_reply_to":"df7087c5_10314ced","updated":"2018-03-19 14:01:48.000000000","message":"Done","commit_id":"45ea384728ff3ca8114a28ab2394d9ab815dda09"}]}
