)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"with the compute node that is distinct from that used"},{"line_number":14,"context_line":"by the tenant."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Based on earlier work by Solly Ross \u003csross@redhat.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Implements bp: websocket-proxy-to-host-security"},{"line_number":19,"context_line":"Change-Id: I9cc9a380500715e60bd05aa5c29ee46bc6f8d6c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a74a57a_8d1f195a","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":54},"updated":"2016-11-28 15:33:30.000000000","message":"I don\u0027t have the context, but would \u0027Co-authored-by\u0027 be appropriate here?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"}],"nova/cmd/novncproxy.py":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"90c2239aec9586507d128b006b017691ff8a218f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    baseproxy.proxy("},{"line_number":41,"context_line":"        host\u003dCONF.vnc.novncproxy_host,"},{"line_number":42,"context_line":"        port\u003dCONF.vnc.novncproxy_port,"},{"line_number":43,"context_line":"        security_proxy\u003drfb.RFBSecurityProxy())"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_b598601d","line":43,"updated":"2016-12-02 09:44:00.000000000","message":"The RFBAuthSchemeList raises an exception if it has a wrong configuration and that exception is never caught:\n\n        for name in CONF.vnc.auth_schemes:\n            if name not in self.AUTH_SCHEME_MAP:\n                raise exception.RFBAuthSchemeInvalid(name\u003dname)\n\nThis means the \"novncproxy\" service will not come up. Just to be sure here, this behavior is by intention, right? It is *not* intended to let the novncproxy do its work with a wrongly configured securityproxy, right?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    baseproxy.proxy("},{"line_number":41,"context_line":"        host\u003dCONF.vnc.novncproxy_host,"},{"line_number":42,"context_line":"        port\u003dCONF.vnc.novncproxy_port,"},{"line_number":43,"context_line":"        security_proxy\u003drfb.RFBSecurityProxy())"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_cddbec4d","line":43,"in_reply_to":"5a74a57a_b598601d","updated":"2017-01-05 12:45:42.000000000","message":"I think this would be correct behavior, yes. We don\u0027t want folks using this service thinking they had encryption enabled when a simple typo had meant they did not. Better to fail fast.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"0fe5031418d9a5d705fa207727e76850912dee69","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    baseproxy.proxy("},{"line_number":41,"context_line":"        host\u003dCONF.vnc.novncproxy_host,"},{"line_number":42,"context_line":"        port\u003dCONF.vnc.novncproxy_port,"},{"line_number":43,"context_line":"        security_proxy\u003drfb.RFBSecurityProxy())"}],"source_content_type":"text/x-python","patch_set":33,"id":"df87a7cf_0490ab42","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":45},"updated":"2017-12-18 17:20:18.000000000","message":"I think this is what\u0027s making the code always go through the security_proxy (and thus require RFB version 3.8). Unfortunately I don\u0027t know if that was intended in the design, that is, is this security_proxy supposed to be always-on or toggled by a config option. Because the way the series is now is that the security_proxy is always-on but the auth scheme is changeable and defaults to None (no encryption).","commit_id":"7418ac04e822720d1a5c958162f777ee1e0f995e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ade7bedb93bff8c6ddbe973f8102b077d679fa38","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    baseproxy.proxy("},{"line_number":41,"context_line":"        host\u003dCONF.vnc.novncproxy_host,"},{"line_number":42,"context_line":"        port\u003dCONF.vnc.novncproxy_port,"},{"line_number":43,"context_line":"        security_proxy\u003drfb.RFBSecurityProxy())"}],"source_content_type":"text/x-python","patch_set":33,"id":"df87a7cf_64709709","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":45},"in_reply_to":"df87a7cf_0490ab42","updated":"2017-12-18 17:29:12.000000000","message":"So we might want to only instantiate this RFBSecurityProxy object if CONF.vnc.auth_schemes !\u003d [\u0027none\u0027] or something like that.","commit_id":"7418ac04e822720d1a5c958162f777ee1e0f995e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9c0075dd60fde3f7d5850ed5d5f7a8c75c892c2e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    baseproxy.proxy("},{"line_number":41,"context_line":"        host\u003dCONF.vnc.novncproxy_host,"},{"line_number":42,"context_line":"        port\u003dCONF.vnc.novncproxy_port,"},{"line_number":43,"context_line":"        security_proxy\u003drfb.RFBSecurityProxy())"}],"source_content_type":"text/x-python","patch_set":33,"id":"df87a7cf_cc888ec7","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":45},"in_reply_to":"df87a7cf_64709709","updated":"2017-12-19 17:04:42.000000000","message":"I instead fellback to checking the compute_driver, given that there was no way this would ever work with Xen. Hopefully that\u0027s ok","commit_id":"7418ac04e822720d1a5c958162f777ee1e0f995e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2dc7dbfde3e88b77f60a04cfbbfc055c9a35ad7f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # TODO(stephenfin): Always enable the security proxy once we support RFB"},{"line_number":41,"context_line":"    # version 3.3, as used in XenServer."},{"line_number":42,"context_line":"    security_proxy \u003d None"},{"line_number":43,"context_line":"    if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":44,"context_line":"        security_proxy \u003d rfb.RFBSecurityProxy()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    baseproxy.proxy("}],"source_content_type":"text/x-python","patch_set":34,"id":"df87a7cf_01c2b834","line":43,"updated":"2017-12-19 23:35:35.000000000","message":"Does this feature really only work for the libvirt driver? Generally, when we add a new driver feature, the gate for going forward is if it will work for at least two drivers and if other drivers are willing and able to support it.\n\nIf it works for other drivers, this should instead be to go along with the TODO:\n\n if CONF.compute_driver !\u003d \u0027xenapi.XenAPIDriver\u0027:","commit_id":"bd2486658c6aa24ddda65c3b6e3278ad6f6f4811"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4090eda07d11c2dca0e21575a33791f29c1645fe","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # TODO(stephenfin): Always enable the security proxy once we support RFB"},{"line_number":41,"context_line":"    # version 3.3, as used in XenServer."},{"line_number":42,"context_line":"    security_proxy \u003d None"},{"line_number":43,"context_line":"    if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":44,"context_line":"        security_proxy \u003d rfb.RFBSecurityProxy()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    baseproxy.proxy("}],"source_content_type":"text/x-python","patch_set":34,"id":"bf8cb3f7_da9a256d","line":43,"in_reply_to":"bf8cb3f7_2334544a","updated":"2017-12-20 17:41:59.000000000","message":"Okay. I just went through and checked the other 3rd party CI jobs and it looks like they all work with the security_proxy object except HyperV which disables VNC altogether in nova.conf. So it seems like this is the right way to go.","commit_id":"bd2486658c6aa24ddda65c3b6e3278ad6f6f4811"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c75b35863874524e5f9db9c1aba50865f7b54a2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # TODO(stephenfin): Always enable the security proxy once we support RFB"},{"line_number":41,"context_line":"    # version 3.3, as used in XenServer."},{"line_number":42,"context_line":"    security_proxy \u003d None"},{"line_number":43,"context_line":"    if CONF.compute_driver \u003d\u003d \u0027libvirt.LibvirtDriver\u0027:"},{"line_number":44,"context_line":"        security_proxy \u003d rfb.RFBSecurityProxy()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    baseproxy.proxy("}],"source_content_type":"text/x-python","patch_set":34,"id":"bf8cb3f7_2334544a","line":43,"in_reply_to":"df87a7cf_01c2b834","updated":"2017-12-20 14:11:14.000000000","message":"I put this hear because the spec only stated explicit support for libvirt. However, on further inspection it seems at least PowerVM supports this [1]. Modified as suggested.\n\n[1] https://dal05.objectstorage.softlayer.net/v1/AUTH_3d8e6ecb-f597-448c-8ec2-164e9f710dd6/pkvmci/nova/99/345399/33/check/tempest-dsvm-full-xenial/77ba5c4/screen-n-novnc.txt.gz","commit_id":"bd2486658c6aa24ddda65c3b6e3278ad6f6f4811"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # TODO(stephenfin): Always enable the security proxy once we support RFB"},{"line_number":41,"context_line":"    # version 3.3, as used in XenServer."},{"line_number":42,"context_line":"    security_proxy \u003d None"},{"line_number":43,"context_line":"    if CONF.compute_driver !\u003d \u0027xenapi.XenAPIDriver\u0027:"},{"line_number":44,"context_line":"        security_proxy \u003d rfb.RFBSecurityProxy()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    baseproxy.proxy("}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_5fb80f75","line":43,"updated":"2018-01-12 17:13:35.000000000","message":"What if compute_driver is None? Is that possible when running this service?\n\nAlso, is this asserting that all non-xen compute drivers are cool with this RFB stuff?","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # TODO(stephenfin): Always enable the security proxy once we support RFB"},{"line_number":41,"context_line":"    # version 3.3, as used in XenServer."},{"line_number":42,"context_line":"    security_proxy \u003d None"},{"line_number":43,"context_line":"    if CONF.compute_driver !\u003d \u0027xenapi.XenAPIDriver\u0027:"},{"line_number":44,"context_line":"        security_proxy \u003d rfb.RFBSecurityProxy()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    baseproxy.proxy("}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_6a41870b","line":43,"in_reply_to":"7f96bb07_5fb80f75","updated":"2018-01-12 17:30:43.000000000","message":"It\u0027s asserting that all non-Xen compute drivers _that support VNC_ are cool with the RFB stuff. If they don\u0027t support VNC (e.g. Hyper-V), this code will never be triggered. As a result, \u0027computer_driver\u003dNone\u0027 isn\u0027t a concern.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"}],"nova/console/securityproxy/rfb.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1a95cdbc_0eddd2df","updated":"2016-10-07 15:35:09.000000000","message":"For some strange reason, this code reminds me of my days hacking the TI CC2540 [1] :)\n\n[1] https://github.com/stephenfin/pyblehci","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def _fail(self, tenant_sock, compute_sock, rfb_version, message):"},{"line_number":64,"context_line":"        # Tell the client there\u0027s been a problem"},{"line_number":65,"context_line":"        result_code \u003d struct.pack(\"!I\", 1)"},{"line_number":66,"context_line":"        if rfb_version \u003e\u003d 3.8:"},{"line_number":67,"context_line":"            tenant_sock.sendall(result_code + self._make_var_str(message))"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            tenant_sock.sendall(result_code)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if compute_sock is not None:"},{"line_number":72,"context_line":"            # Tell the server that there\u0027s been a problem"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_eee986b8","line":69,"range":{"start_line":66,"start_character":0,"end_line":69,"end_character":44},"updated":"2016-10-07 15:35:09.000000000","message":"What changed in 3.8 that allowed us to send the more detailed message. Could you document it?","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        def recv(sock, num):"},{"line_number":94,"context_line":"            b \u003d sock.recv(num)"},{"line_number":95,"context_line":"            if len(b) !\u003d num:"},{"line_number":96,"context_line":"                reason \u003d _(\"Short read from socket, wanted \""},{"line_number":97,"context_line":"                           \"%(wanted)d bytes but got %(got)d\") % {"},{"line_number":98,"context_line":"                               \u0027wanted\u0027: num, \u0027got\u0027: len(b)}"},{"line_number":99,"context_line":"                raise exception.RFBAuthHandshakeFailed(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_ae313e5c","line":96,"range":{"start_line":96,"start_character":25,"end_line":96,"end_character":26},"updated":"2016-10-07 15:35:09.000000000","message":"nit: Do we translate raw exceptions (i.e. unlogged)?","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            reason_str \u003d _(\"Security proxying requires RFB protocol \""},{"line_number":121,"context_line":"                           \"version 3.7 or above\")"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            tenant_sock.sendall(constants.AUTH_STATUS_FAIL +"},{"line_number":124,"context_line":"                                     self._make_var_str(reason_str))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_ee6fc6f9","line":123,"range":{"start_line":123,"start_character":32,"end_line":123,"end_character":57},"updated":"2016-10-07 15:35:09.000000000","message":"Why don\u0027t we need to pack this like the return code on L65?","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            tenant_sock.sendall(constants.AUTH_STATUS_FAIL +"},{"line_number":124,"context_line":"                                     self._make_var_str(reason_str))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""},{"line_number":127,"context_line":"                       \"version 3.7 or above, but the client and server \""},{"line_number":128,"context_line":"                       \"decided on version %s\") % rfb_version"},{"line_number":129,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_6e53b639","line":126,"range":{"start_line":126,"start_character":21,"end_line":126,"end_character":23},"updated":"2016-10-07 15:35:09.000000000","message":"Ditto - translation: yay or nay?","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        f \u003d recv(compute_sock, permitted_auth_types_cnt)"},{"line_number":145,"context_line":"        permitted_auth_types \u003d []"},{"line_number":146,"context_line":"        for auth_type in f:"},{"line_number":147,"context_line":"            if type(auth_type) \u003d\u003d str:"},{"line_number":148,"context_line":"                auth_type \u003d ord(auth_type)"},{"line_number":149,"context_line":"            permitted_auth_types.append(auth_type)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_0e2792ca","line":147,"range":{"start_line":147,"start_character":15,"end_line":147,"end_character":38},"updated":"2016-10-07 15:35:09.000000000","message":"Is this Python 3 compatible?","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014-2016 Red Hat, Inc"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_262c4298","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-11-18 21:08:16.000000000","message":"New file so shouldn\u0027t have 2014 here.","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class RFBSecurityProxy(base.SecurityProxy):"},{"line_number":35,"context_line":"    \"\"\"RFB Security Proxy Negotiation Helper."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    This class proxies the initial setup of the RFB"},{"line_number":38,"context_line":"    connection between the client and the server."},{"line_number":39,"context_line":"    Then, when the RFB security negotiation step"},{"line_number":40,"context_line":"    arrives, it intercepts the communication,"},{"line_number":41,"context_line":"    posing as a server with the \"None\" authentication"},{"line_number":42,"context_line":"    type to the client, and acting as a client"},{"line_number":43,"context_line":"    (via the methods below) to the server."},{"line_number":44,"context_line":"    After security negotiation, normal proxying can"},{"line_number":45,"context_line":"    be used."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    Note: this code mandates RFB version 3.8, since"},{"line_number":48,"context_line":"    this is supported by any client and server impl"},{"line_number":49,"context_line":"    written in the past 10+ years."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    See the general RFB specification at:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_c6b8ee2c","line":49,"range":{"start_line":37,"start_character":0,"end_line":49,"end_character":34},"updated":"2016-11-18 21:08:16.000000000","message":"nit: A lot of space can be used in the right margin before hitting the 80 character limit.","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":77,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return float(\"%d.%d\" % (int(maj_str, base\u003d10),"},{"line_number":80,"context_line":"                                int(min_str, base\u003d10)))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def connect(self, tenant_sock, compute_sock):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_6628fa33","line":79,"range":{"start_line":79,"start_character":45,"end_line":79,"end_character":52},"updated":"2016-11-18 21:08:16.000000000","message":"The default for int is base 10, so this is redundant in my opinion.","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        return float(\"%d.%d\" % (int(maj_str, base\u003d10),"},{"line_number":80,"context_line":"                                int(min_str, base\u003d10)))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def connect(self, tenant_sock, compute_sock):"},{"line_number":83,"context_line":"        \"\"\"Initiate the RFB connection process."}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_86235655","line":80,"range":{"start_line":80,"start_character":45,"end_line":80,"end_character":52},"updated":"2016-11-18 21:08:16.000000000","message":"The default for int is base 10, so this is redundant in my opinion.","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        This method performs the initial ProtocolVersion"},{"line_number":86,"context_line":"        and Security messaging, and returns the socket-like"},{"line_number":87,"context_line":"        object to use to communicate with the server securely."},{"line_number":88,"context_line":"        If an error occurs RFBSecurityNegotiationFailed"},{"line_number":89,"context_line":"        will be raised."},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_26a7e2bd","line":88,"range":{"start_line":88,"start_character":27,"end_line":88,"end_character":55},"updated":"2016-11-18 21:08:16.000000000","message":"SecurityProxyNegotiationFailed, right?","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from compute node\","},{"line_number":104,"context_line":"                  compute_version[:-1])"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":107,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""},{"line_number":108,"context_line":"                       \"version 3.8, but server sent %s\"), compute_version[:-1]"},{"line_number":109,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_66cc7abb","line":106,"range":{"start_line":106,"start_character":51,"end_line":106,"end_character":54},"updated":"2016-11-18 21:08:16.000000000","message":"Is it possible to have a version higher than 3.8?","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from tenant\","},{"line_number":116,"context_line":"                  tenant_version[:-1])"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if self._parse_version(tenant_version) !\u003d 3.8:"},{"line_number":119,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol version \""},{"line_number":120,"context_line":"                       \"3.8, but tenant asked for %s\"), tenant_version[:-1]"},{"line_number":121,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_86c7d694","line":118,"range":{"start_line":118,"start_character":50,"end_line":118,"end_character":53},"updated":"2016-11-18 21:08:16.000000000","message":"Is it possible to have a version higher than 3.8?","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        # Negotiate security with client before we say \"ok\" to the server"},{"line_number":146,"context_line":"        # send 1:[None]"},{"line_number":147,"context_line":"        tenant_sock.sendall(constants.AUTH_STATUS_PASS +"},{"line_number":148,"context_line":"                                 six.int2byte(constants.AUTH_TYPE_NONE))"},{"line_number":149,"context_line":"        client_auth \u003d six.byte2int(recv(tenant_sock, 1))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        if client_auth !\u003d constants.AUTH_TYPE_NONE:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_46569e06","line":148,"range":{"start_line":148,"start_character":28,"end_line":148,"end_character":33},"updated":"2016-11-18 21:08:16.000000000","message":"over indented","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import struct"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.console.rfb import auth"},{"line_number":24,"context_line":"from nova.console.rfb import constants"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_ad593537","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":35},"updated":"2016-11-28 15:33:30.000000000","message":"femto nit: Don\u0027t think you need that extra newline there","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import struct"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from nova.console.rfb import auth"},{"line_number":24,"context_line":"from nova.console.rfb import constants"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_ede0b0fc","line":21,"range":{"start_line":18,"start_character":0,"end_line":21,"end_character":35},"in_reply_to":"5a74a57a_ad593537","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    See the general RFB specification at:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"      https://tools.ietf.org/html/rfc6143"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self):"},{"line_number":53,"context_line":"        self.auth_schemes \u003d auth.RFBAuthSchemeList()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_0ee9aa80","line":50,"updated":"2016-12-02 16:34:58.000000000","message":"I really really love it that you spent effort on writing a proper docstring.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return message_len + message_bytes"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _fail(self, tenant_sock, compute_sock, message):"},{"line_number":62,"context_line":"        # Tell the client there\u0027s been a problem"},{"line_number":63,"context_line":"        result_code \u003d struct.pack(\"!I\", 1)"},{"line_number":64,"context_line":"        tenant_sock.sendall(result_code + self._make_var_str(message))"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_50bd9ad6","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":48},"updated":"2016-11-28 15:33:30.000000000","message":"nit: this could probably be a docstring","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if compute_sock is not None:"},{"line_number":67,"context_line":"            # Tell the server that there\u0027s been a problem"},{"line_number":68,"context_line":"            # by sending the \"Invalid\" security type"},{"line_number":69,"context_line":"            compute_sock.sendall(constants.AUTH_STATUS_FAIL)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _parse_version(self, version_str):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_2ece66b4","line":68,"range":{"start_line":68,"start_character":29,"end_line":68,"end_character":47},"updated":"2016-12-02 16:34:58.000000000","message":"do you mean: \u0027\"FAIL\" status type\u0027?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":73,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return float(\"%d.%d\" % (int(maj_str), int(min_str)))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def connect(self, tenant_sock, compute_sock):"},{"line_number":78,"context_line":"        \"\"\"Initiate the RFB connection process."}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_813282a5","line":75,"range":{"start_line":75,"start_character":15,"end_line":75,"end_character":60},"updated":"2016-11-28 15:33:30.000000000","message":"Could you return a tuple instead because that seems to be the Python convention for version info","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ed463415ee42d6d67f24eb48e437ad76d1534981","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":73,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return float(\"%d.%d\" % (int(maj_str), int(min_str)))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def connect(self, tenant_sock, compute_sock):"},{"line_number":78,"context_line":"        \"\"\"Initiate the RFB connection process."}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_9348f3cd","line":75,"range":{"start_line":75,"start_character":15,"end_line":75,"end_character":60},"in_reply_to":"5a74a57a_813282a5","updated":"2016-11-29 09:58:57.000000000","message":"IMHO that isn\u0027t useful from the caller POV","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":73,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        return float(\"%d.%d\" % (int(maj_str), int(min_str)))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def connect(self, tenant_sock, compute_sock):"},{"line_number":78,"context_line":"        \"\"\"Initiate the RFB connection process."}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_4eb00244","line":75,"range":{"start_line":75,"start_character":15,"end_line":75,"end_character":60},"in_reply_to":"5a74a57a_9348f3cd","updated":"2016-12-02 16:34:58.000000000","message":"nit: Maybe it makes sense to have a small class for version information. It could do the parsing and pretty printing (line 103) and maybe also the querying of the version based on a given socket (lines 97 + 109).","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        and Security messaging, and returns the socket-like"},{"line_number":82,"context_line":"        object to use to communicate with the server securely."},{"line_number":83,"context_line":"        If an error occurs SecurityProxyNegotiationFailed"},{"line_number":84,"context_line":"        will be raised."},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        def recv(sock, num):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_ee638e3f","line":84,"updated":"2016-12-02 16:34:58.000000000","message":"Really, thanks a lot for writing proper docstrings.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # Negotiate version with compute server"},{"line_number":97,"context_line":"        compute_version \u003d recv(compute_sock, constants.VERSION_LENGTH)"},{"line_number":98,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from compute node\","},{"line_number":99,"context_line":"                  compute_version[:-1])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":102,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_610806db","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":38},"updated":"2016-11-28 15:33:30.000000000","message":"Why does this need to be reversed, yet it isn\u0027t reversed in \u0027_parse_version\u0027?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"21e30128306c80f75ea96f1b964595fda45bb13c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # Negotiate version with compute server"},{"line_number":97,"context_line":"        compute_version \u003d recv(compute_sock, constants.VERSION_LENGTH)"},{"line_number":98,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from compute node\","},{"line_number":99,"context_line":"                  compute_version[:-1])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":102,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_b86135ab","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":38},"in_reply_to":"5a74a57a_138223c8","updated":"2017-01-04 14:09:23.000000000","message":"I read that as \u0027::-1\u0027 - my bad.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ed463415ee42d6d67f24eb48e437ad76d1534981","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        # Negotiate version with compute server"},{"line_number":97,"context_line":"        compute_version \u003d recv(compute_sock, constants.VERSION_LENGTH)"},{"line_number":98,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from compute node\","},{"line_number":99,"context_line":"                  compute_version[:-1])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":102,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_138223c8","line":99,"range":{"start_line":99,"start_character":33,"end_line":99,"end_character":38},"in_reply_to":"5a74a57a_610806db","updated":"2016-11-29 09:58:57.000000000","message":"Err, this isn\u0027t reversing anything - the \u0027:-1\u0027 is chopping off the trailing newline character.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":102,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""},{"line_number":103,"context_line":"                       \"version 3.8, but server sent %s\"), compute_version[:-1]"},{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_41c30a57","line":103,"range":{"start_line":103,"start_character":59,"end_line":103,"end_character":79},"updated":"2016-11-28 15:33:30.000000000","message":"Any advantage to using the parsed version here?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ed463415ee42d6d67f24eb48e437ad76d1534981","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self._parse_version(compute_version) !\u003d 3.8:"},{"line_number":102,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol \""},{"line_number":103,"context_line":"                       \"version 3.8, but server sent %s\"), compute_version[:-1]"},{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_934d53c6","line":103,"range":{"start_line":103,"start_character":59,"end_line":103,"end_character":79},"in_reply_to":"5a74a57a_41c30a57","updated":"2016-11-29 09:58:57.000000000","message":"I want the logs to show the raw string from the server which ought to be \"RFB 003.008\", rather than what we parsed","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Negotiate version with tenant"},{"line_number":108,"context_line":"        tenant_sock.sendall(compute_version)"},{"line_number":109,"context_line":"        tenant_version \u003d recv(tenant_sock, constants.VERSION_LENGTH)"},{"line_number":110,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from tenant\","},{"line_number":111,"context_line":"                  tenant_version[:-1])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if self._parse_version(tenant_version) !\u003d 3.8:"},{"line_number":114,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol version \""},{"line_number":115,"context_line":"                       \"3.8, but tenant asked for %s\"), tenant_version[:-1]"},{"line_number":116,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_e9854859","line":116,"range":{"start_line":107,"start_character":0,"end_line":116,"end_character":73},"updated":"2016-12-02 16:34:58.000000000","message":"This could be a new method \"_ensure_protocol_version(sock)\" which can be also used for the lines 96-104","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Negotiate version with tenant"},{"line_number":108,"context_line":"        tenant_sock.sendall(compute_version)"},{"line_number":109,"context_line":"        tenant_version \u003d recv(tenant_sock, constants.VERSION_LENGTH)"},{"line_number":110,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from tenant\","},{"line_number":111,"context_line":"                  tenant_version[:-1])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if self._parse_version(tenant_version) !\u003d 3.8:"},{"line_number":114,"context_line":"            reason \u003d _(\"Security proxying requires RFB protocol version \""},{"line_number":115,"context_line":"                       \"3.8, but tenant asked for %s\"), tenant_version[:-1]"},{"line_number":116,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_6d4a00ae","line":116,"range":{"start_line":107,"start_character":0,"end_line":116,"end_character":73},"in_reply_to":"3a71b18c_e9854859","updated":"2017-01-05 12:45:42.000000000","message":"I agree, but the logs are different and centralizing this would involve losing a bit of clarity in said logs. Open to suggestions though","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_6115669a","line":122,"updated":"2016-11-28 15:33:30.000000000","message":"A small comment explaining what\u0027s happening here would be appreciated","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ed463415ee42d6d67f24eb48e437ad76d1534981","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_33a1df46","line":122,"in_reply_to":"5a74a57a_6115669a","updated":"2016-11-29 09:58:57.000000000","message":"This ought to be read alongside a copy of the RFB protocol really as that explains the requirements of the protocol negotiation best  https://tools.ietf.org/html/rfc6143","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        f \u003d recv(compute_sock, permitted_auth_types_cnt)"},{"line_number":132,"context_line":"        permitted_auth_types \u003d []"},{"line_number":133,"context_line":"        for auth_type in f:"},{"line_number":134,"context_line":"            if type(auth_type) \u003d\u003d str:"},{"line_number":135,"context_line":"                auth_type \u003d ord(auth_type)"},{"line_number":136,"context_line":"            permitted_auth_types.append(auth_type)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_501bda80","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":38},"updated":"2016-11-28 15:33:30.000000000","message":"I need to check, but is this Python 3 compatible or does six need to be used?","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        f \u003d recv(compute_sock, permitted_auth_types_cnt)"},{"line_number":132,"context_line":"        permitted_auth_types \u003d []"},{"line_number":133,"context_line":"        for auth_type in f:"},{"line_number":134,"context_line":"            if type(auth_type) \u003d\u003d str:"},{"line_number":135,"context_line":"                auth_type \u003d ord(auth_type)"},{"line_number":136,"context_line":"            permitted_auth_types.append(auth_type)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_4de45cab","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":38},"in_reply_to":"3a71b18c_6e913e52","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ed463415ee42d6d67f24eb48e437ad76d1534981","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        f \u003d recv(compute_sock, permitted_auth_types_cnt)"},{"line_number":132,"context_line":"        permitted_auth_types \u003d []"},{"line_number":133,"context_line":"        for auth_type in f:"},{"line_number":134,"context_line":"            if type(auth_type) \u003d\u003d str:"},{"line_number":135,"context_line":"                auth_type \u003d ord(auth_type)"},{"line_number":136,"context_line":"            permitted_auth_types.append(auth_type)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a74a57a_f36847f7","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":38},"in_reply_to":"5a74a57a_501bda80","updated":"2016-11-29 09:58:57.000000000","message":"Not sure to be honest","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        f \u003d recv(compute_sock, permitted_auth_types_cnt)"},{"line_number":132,"context_line":"        permitted_auth_types \u003d []"},{"line_number":133,"context_line":"        for auth_type in f:"},{"line_number":134,"context_line":"            if type(auth_type) \u003d\u003d str:"},{"line_number":135,"context_line":"                auth_type \u003d ord(auth_type)"},{"line_number":136,"context_line":"            permitted_auth_types.append(auth_type)"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_6e913e52","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":38},"in_reply_to":"5a74a57a_f36847f7","updated":"2016-12-02 16:34:58.000000000","message":"Most probably this needs to be \"six.text_type\"","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # Negotiate security with client before we say \"ok\" to the server"},{"line_number":141,"context_line":"        # send 1:[None]"},{"line_number":142,"context_line":"        tenant_sock.sendall(constants.AUTH_STATUS_PASS +"},{"line_number":143,"context_line":"                            six.int2byte(constants.AUTH_TYPE_NONE))"},{"line_number":144,"context_line":"        client_auth \u003d six.byte2int(recv(tenant_sock, 1))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        if client_auth !\u003d constants.AUTH_TYPE_NONE:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_69cdb85c","line":143,"range":{"start_line":142,"start_character":0,"end_line":143,"end_character":67},"updated":"2016-12-02 16:34:58.000000000","message":"Does it make sense to move such methods into the socket-like class \"TenantSock\" (and maybe a new class \"ComputeSock too)? Or maybe a derived \"class RfbTenantSock(TenantSock):\"? There\u0027s a lot of socket knowledge necessary in this method and also version/security negotiation. What I\u0027m trying to say is, personally, I think that this method has a more responsibilites/knowledge than it should have.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.debug(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                  \"mode using secured socket\")"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        # we can just proxy the security result -- if the server security"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_a9eef0b1","line":184,"range":{"start_line":184,"start_character":12,"end_line":184,"end_character":17},"updated":"2016-12-02 16:34:58.000000000","message":"nit: maybe INFO? Not sure if an operator would be interested in such things.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.debug(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                  \"mode using secured socket\")"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        # we can just proxy the security result -- if the server security"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_0d05f444","line":184,"range":{"start_line":184,"start_character":12,"end_line":184,"end_character":17},"in_reply_to":"3a71b18c_a9eef0b1","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"b175ecfcf4691bad0cb6b689ab8d4bea03a265d1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    the methods below) to the server. After security negotiation, normal"},{"line_number":41,"context_line":"    proxying can be used."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Note: this code mandates RFB version 3.8, since this is supported by any"},{"line_number":44,"context_line":"    client and server impl written in the past 10+ years."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    See the general RFB specification at:"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f287b81_2fed0f25","line":44,"range":{"start_line":43,"start_character":4,"end_line":44,"end_character":57},"updated":"2017-09-04 02:13:20.000000000","message":"This assumption is incorrect in XenServer which is still using RFB 3.3.\nSee the following error:\n\"\nSecurityProxyNegotiationFailed: Failed to negotiate security type with server: (u\u0027Security proxying requires RFB protocol version 3.8, but server sent %s\u0027, \u0027RFB 003.003\u0027)\n\"\n\nfrom the XenServer CI log:\nhttp://dd6b71949550285df7dc-dda4e480e005aaa13ec303551d2d8155.r49.cf1.rackcdn.com/99/345399/27/check/dsvm-tempest-neutron-network/49b3d9f/logs/screen-n-novnc.txt.gz\n\nIn tempest tests, both RFB3.8 and RFB3.3 are handled accordingly:\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_novnc.py#L102","commit_id":"57ef4393cad7a2cdf45e14c078e1fa406f8beef4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7371eb4674d122add99d8e43daa5f64dc3619f4c","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        if client_auth !\u003d auth.AuthType.NONE:"},{"line_number":147,"context_line":"            self._fail(tenant_sock, compute_sock,"},{"line_number":148,"context_line":"                       _(\"Only the security type None (%d) is supported\") %"},{"line_number":149,"context_line":"                       auth.AuthType.NONE)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            reason \u003d _(\"Client requested a security type other than \""}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_ed0c50ed","line":148,"updated":"2017-10-13 20:35:37.000000000","message":"So this seems weird to me (aren\u0027t we supposed to encrypt the traffic from the tenant as well?) but presumably this will all be explained as a I get to the lower patches.","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        if client_auth !\u003d auth.AuthType.NONE:"},{"line_number":147,"context_line":"            self._fail(tenant_sock, compute_sock,"},{"line_number":148,"context_line":"                       _(\"Only the security type None (%d) is supported\") %"},{"line_number":149,"context_line":"                       auth.AuthType.NONE)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            reason \u003d _(\"Client requested a security type other than \""}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_d73b78e8","line":148,"in_reply_to":"5f4e5783_ed0c50ed","updated":"2017-12-08 16:07:02.000000000","message":"Yeah, but you need to use None until you establish the connection, then you switch to what you actually do want","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7371eb4674d122add99d8e43daa5f64dc3619f4c","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        LOG.debug(\"Using security type %d with server, None with client\","},{"line_number":171,"context_line":"                  scheme.security_type())"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        try:"},{"line_number":174,"context_line":"            compute_sock \u003d scheme.security_handshake(compute_sock)"},{"line_number":175,"context_line":"        except exception.RFBAuthHandshakeFailed as e:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_6d9ce069","line":172,"updated":"2017-10-13 20:35:37.000000000","message":"Up until here this follows the RFC [1] as far as I can tell...\n\n[1] https://tools.ietf.org/html/rfc6143#section-7.1","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"fb79c00012c0296b05713243e4cd3b3f1c442942","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    the methods below) to the server. After security negotiation, normal"},{"line_number":41,"context_line":"    proxying can be used."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Note: this code mandates RFB version 3.8, since this is supported by any"},{"line_number":44,"context_line":"    client and server impl written in the past 10+ years."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    See the general RFB specification at:"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"df87a7cf_67cd9db5","line":44,"range":{"start_line":43,"start_character":4,"end_line":44,"end_character":57},"updated":"2017-12-12 01:56:54.000000000","message":"As I mentioned in PS27: we need make it compatible with RFB 3.3 which is stilled used by XenServer.\n\nSee the following error:\n\"\nSecurityProxyNegotiationFailed: Failed to negotiate security type with server: (u\u0027Security proxying requires RFB protocol version 3.8, but server sent %s\u0027, \u0027RFB 003.003\u0027)\n\"\nfrom the XenServer CI log:\nhttp://dd6b71949550285df7dc-dda4e480e005aaa13ec303551d2d8155.r49.cf1.rackcdn.com/99/345399/27/check/dsvm-tempest-neutron-network/49b3d9f/logs/screen-n-novnc.txt.gz\nIn tempest tests, both RFB3.8 and RFB3.3 are handled accordingly:\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_novnc.py#L102","commit_id":"7418ac04e822720d1a5c958162f777ee1e0f995e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8d3be337d74c5fe6a03560c4fcc0d1a4582dc996","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    the methods below) to the server. After security negotiation, normal"},{"line_number":41,"context_line":"    proxying can be used."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Note: this code mandates RFB version 3.8, since this is supported by any"},{"line_number":44,"context_line":"    client and server impl written in the past 10+ years."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    See the general RFB specification at:"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"df87a7cf_bec11e83","line":44,"range":{"start_line":43,"start_character":4,"end_line":44,"end_character":57},"in_reply_to":"df87a7cf_67cd9db5","updated":"2017-12-14 18:28:10.000000000","message":"Aye, but this will only affect you if you want to use encryption. If you don\u0027t enable it then nothing will change.\n\nIs this something I can fix as a follow-up?","commit_id":"7418ac04e822720d1a5c958162f777ee1e0f995e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b9078c39cd62304718bfdebf34199fe8859bb0e5","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _make_var_str(self, message):"},{"line_number":55,"context_line":"        message_str \u003d six.text_type(message)"},{"line_number":56,"context_line":"        message_bytes \u003d message_str.encode(\u0027utf-8\u0027)"},{"line_number":57,"context_line":"        message_len \u003d struct.pack(\"!I\", len(message_bytes))"},{"line_number":58,"context_line":"        return message_len + message_bytes"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"9f91af0f_6e5091d5","line":56,"updated":"2018-01-05 15:30:39.000000000","message":"I think we\u0027re blowing up here:\n\nhttp://logs.openstack.org/50/530950/1/check/legacy-tempest-dsvm-py35/f814425/logs/screen-n-novnc.txt.gz?level\u003dTRACE#_Jan_04_17_19_48_242679\n\nSeems you should use oslo.utils encodeutils.safe_encode?\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/encodeutils.py#L66","commit_id":"a1390e0f51ca584eb1a903d954ffd1d31440a3e1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.console.rfb import auths"},{"line_number":24,"context_line":"from nova.console.securityproxy import base"},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova.i18n import _, _LI"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_dfabbf1a","line":26,"range":{"start_line":26,"start_character":25,"end_line":26,"end_character":28},"updated":"2018-01-12 17:13:35.000000000","message":"We don\u0027t use these anymore.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.console.rfb import auths"},{"line_number":24,"context_line":"from nova.console.securityproxy import base"},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova.i18n import _, _LI"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_5103f4b8","line":26,"range":{"start_line":26,"start_character":25,"end_line":26,"end_character":28},"in_reply_to":"7f96bb07_ca63fbb0","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.console.rfb import auths"},{"line_number":24,"context_line":"from nova.console.securityproxy import base"},{"line_number":25,"context_line":"from nova import exception"},{"line_number":26,"context_line":"from nova.i18n import _, _LI"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ca63fbb0","line":26,"range":{"start_line":26,"start_character":25,"end_line":26,"end_character":28},"in_reply_to":"7f96bb07_dfabbf1a","updated":"2018-01-12 17:30:43.000000000","message":"Damn, old\u0027ish code. I can address in a cleanup","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            # by sending the \"Invalid\" security type"},{"line_number":68,"context_line":"            compute_sock.sendall(auth.AUTH_STATUS_FAIL)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _parse_version(self, version_str):"},{"line_number":71,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":72,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_9f4c579f","line":70,"updated":"2018-01-12 17:13:35.000000000","message":"Would be nice to have a comment about what these version strings look like given the splicing going on here.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            # by sending the \"Invalid\" security type"},{"line_number":68,"context_line":"            compute_sock.sendall(auth.AUTH_STATUS_FAIL)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _parse_version(self, version_str):"},{"line_number":71,"context_line":"        maj_str \u003d version_str[4:7]"},{"line_number":72,"context_line":"        min_str \u003d version_str[8:11]"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_719ab06e","line":70,"in_reply_to":"7f96bb07_9f4c579f","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        will be raised."},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        def recv(sock, num):"},{"line_number":87,"context_line":"            b \u003d sock.recv(num)"},{"line_number":88,"context_line":"            if len(b) !\u003d num:"},{"line_number":89,"context_line":"                reason \u003d _(\"Incorrect read from socket, wanted %(wanted)d \""},{"line_number":90,"context_line":"                           \"bytes but got %(got)d. Socket returned \""},{"line_number":91,"context_line":"                           \"%(result)r\") % {\u0027wanted\u0027: num, \u0027got\u0027: len(b),"},{"line_number":92,"context_line":"                                            \u0027result\u0027: b}"},{"line_number":93,"context_line":"                raise exception.RFBAuthHandshakeFailed(reason\u003dreason)"},{"line_number":94,"context_line":"            return b"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Negotiate version with compute server"},{"line_number":97,"context_line":"        compute_version \u003d recv(compute_sock, auth.VERSION_LENGTH)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_9f31b70e","line":94,"range":{"start_line":86,"start_character":8,"end_line":94,"end_character":20},"updated":"2018-01-12 17:13:35.000000000","message":"This is copied from the authvencrypt class right? Maybe we should move this into the base class.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        will be raised."},{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        def recv(sock, num):"},{"line_number":87,"context_line":"            b \u003d sock.recv(num)"},{"line_number":88,"context_line":"            if len(b) !\u003d num:"},{"line_number":89,"context_line":"                reason \u003d _(\"Incorrect read from socket, wanted %(wanted)d \""},{"line_number":90,"context_line":"                           \"bytes but got %(got)d. Socket returned \""},{"line_number":91,"context_line":"                           \"%(result)r\") % {\u0027wanted\u0027: num, \u0027got\u0027: len(b),"},{"line_number":92,"context_line":"                                            \u0027result\u0027: b}"},{"line_number":93,"context_line":"                raise exception.RFBAuthHandshakeFailed(reason\u003dreason)"},{"line_number":94,"context_line":"            return b"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Negotiate version with compute server"},{"line_number":97,"context_line":"        compute_version \u003d recv(compute_sock, auth.VERSION_LENGTH)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b19ef851","line":94,"range":{"start_line":86,"start_character":8,"end_line":94,"end_character":20},"in_reply_to":"7f96bb07_9f31b70e","updated":"2018-01-16 14:44:31.000000000","message":"What base class? This doesn\u0027t share anything with \u0027nova.console.rfb.authvencrypt.RFBAuthSchemeVeNCrypt\u0027","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Negotiate version with tenant"},{"line_number":108,"context_line":"        tenant_sock.sendall(compute_version)"},{"line_number":109,"context_line":"        tenant_version \u003d recv(tenant_sock, auth.VERSION_LENGTH)"},{"line_number":110,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from tenant\","}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_5f148f4e","line":107,"updated":"2018-01-12 17:13:35.000000000","message":"Is this all just done on a new connection but won\u0027t happen every time the proxy is used? I think so but wanted to check understanding.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            raise exception.SecurityProxyNegotiationFailed(reason\u003dreason)"},{"line_number":105,"context_line":"        compute_sock.sendall(compute_version)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Negotiate version with tenant"},{"line_number":108,"context_line":"        tenant_sock.sendall(compute_version)"},{"line_number":109,"context_line":"        tenant_version \u003d recv(tenant_sock, auth.VERSION_LENGTH)"},{"line_number":110,"context_line":"        LOG.debug(\"Got version string \u0027%s\u0027 from tenant\","}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ea1b5718","line":107,"in_reply_to":"7f96bb07_5f148f4e","updated":"2018-01-12 17:30:43.000000000","message":"Correct. This is only for the initialization. Basically we\u0027re upgrading our connection here and, once establish, will use what we created here.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_1f0e073b","line":121,"updated":"2018-01-12 17:13:35.000000000","message":"OK so 0 is fail code and the rest of this is parsing out a reason why...","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_aa8f8f21","line":121,"in_reply_to":"7f96bb07_1f0e073b","updated":"2018-01-12 17:30:43.000000000","message":"Correct. It\u0027s heavy reading but the RFC is probably worth looking at here if you\u0027re really interested. This correspons to section 7.1 [1].\n\n \u003e If number-of-security-types is zero, then for some reason the\n \u003e connection failed (e.g., the server cannot support the desired\n \u003e protocol version).  This is followed by a string describing the\n \u003e reason (where a string is specified as a length followed by that many\n \u003e ASCII characters):\n\n     +---------------+--------------+---------------+\n     | No. of bytes  | Type [Value] | Description   |\n     +---------------+--------------+---------------+\n     | 4             | U32          | reason-length |\n     | reason-length | U8 array     | reason-string |\n     +---------------+--------------+---------------+\n\n[1] https://tools.ietf.org/html/rfc6143#section-7.1","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b1c7d845","line":121,"in_reply_to":"7f96bb07_9044441d","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f94d9bfdca357cbb5ca92dfbb8a9dd1c730d2d03","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # Negotiate security with server"},{"line_number":119,"context_line":"        permitted_auth_types_cnt \u003d six.byte2int(recv(compute_sock, 1))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if permitted_auth_types_cnt \u003d\u003d 0:"},{"line_number":122,"context_line":"            reason_len_raw \u003d recv(compute_sock, 4)"},{"line_number":123,"context_line":"            reason_len \u003d struct.unpack(\u0027!I\u0027, reason_len_raw)[0]"},{"line_number":124,"context_line":"            reason \u003d recv(compute_sock, reason_len)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_9044441d","line":121,"in_reply_to":"7f96bb07_aa8f8f21","updated":"2018-01-12 18:46:58.000000000","message":"Would be good to link that in as a comment later.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                       auth.AuthType.NONE)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            reason \u003d _(\"Client requested a security type other than \""},{"line_number":152,"context_line":"                       \" None (%(none_code)d): \""},{"line_number":153,"context_line":"                       \"%(auth_type)s\") % {"},{"line_number":154,"context_line":"                           \u0027auth_type\u0027: client_auth,"},{"line_number":155,"context_line":"                           \u0027none_code\u0027: auth.AuthType.NONE}"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_df073f1c","line":152,"range":{"start_line":152,"start_character":24,"end_line":152,"end_character":25},"updated":"2018-01-12 17:13:35.000000000","message":"one too many spaces","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                       auth.AuthType.NONE)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"            reason \u003d _(\"Client requested a security type other than \""},{"line_number":152,"context_line":"                       \" None (%(none_code)d): \""},{"line_number":153,"context_line":"                       \"%(auth_type)s\") % {"},{"line_number":154,"context_line":"                           \u0027auth_type\u0027: client_auth,"},{"line_number":155,"context_line":"                           \u0027none_code\u0027: auth.AuthType.NONE}"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_31e188d1","line":152,"range":{"start_line":152,"start_character":24,"end_line":152,"end_character":25},"in_reply_to":"7f96bb07_df073f1c","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                       _(\"Unable to negotiate security with server\"))"},{"line_number":180,"context_line":"            LOG.debug(\"Auth failed %s\", six.text_type(e))"},{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.info(_LI(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                     \"mode using secured socket\"))"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_aaff8fff","line":182,"range":{"start_line":182,"start_character":23,"end_line":182,"end_character":46},"updated":"2018-01-12 17:13:35.000000000","message":"nit: you didn\u0027t _() this but the stuff above does.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                       _(\"Unable to negotiate security with server\"))"},{"line_number":180,"context_line":"            LOG.debug(\"Auth failed %s\", six.text_type(e))"},{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.info(_LI(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                     \"mode using secured socket\"))"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_f1ea40aa","line":182,"range":{"start_line":182,"start_character":23,"end_line":182,"end_character":46},"in_reply_to":"7f96bb07_aaff8fff","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.info(_LI(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                     \"mode using secured socket\"))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        # we can just proxy the security result -- if the server security"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ca021b0a","line":184,"range":{"start_line":184,"start_character":17,"end_line":184,"end_character":20},"updated":"2018-01-12 17:13:35.000000000","message":"We don\u0027t use these anymore.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            raise exception.SecurityProxyNegotiationFailed("},{"line_number":182,"context_line":"                reason\u003d\"Auth handshake failed\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        LOG.info(_LI(\"Finished security handshake, resuming normal proxy \""},{"line_number":185,"context_line":"                     \"mode using secured socket\"))"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        # we can just proxy the security result -- if the server security"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_91d17cfe","line":184,"range":{"start_line":184,"start_character":17,"end_line":184,"end_character":20},"in_reply_to":"7f96bb07_ca021b0a","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"}],"nova/console/websocketproxy.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.reqhandler.send_frames([data])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def finish_up(self):"},{"line_number":82,"context_line":"        self.reqhandler.send_frames([b\u0027\u0027.join(self.queue)])"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def close(self):"},{"line_number":85,"context_line":"        self.finish_up()"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_3734adfb","line":82,"updated":"2017-10-17 20:41:51.000000000","message":"Why is this being changed here? Why not have this directly in the first patch that introduces websocketproxy.py?","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.reqhandler.send_frames([data])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def finish_up(self):"},{"line_number":82,"context_line":"        self.reqhandler.send_frames([b\u0027\u0027.join(self.queue)])"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def close(self):"},{"line_number":85,"context_line":"        self.finish_up()"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_b717dc51","line":82,"in_reply_to":"5f4e5783_3734adfb","updated":"2017-12-08 16:07:02.000000000","message":"The patch that initially adds this was incorrect but untested. This is now tested so we see the issue. Unfortunately that patch is now merged so it\u0027s too late to fix it there, I\u0027m afraid","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.reqhandler.send_frames([encodeutils.safe_encode(data)])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def finish_up(self):"},{"line_number":83,"context_line":"        self.reqhandler.send_frames([b\u0027\u0027.join(self.queue)])"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def close(self):"},{"line_number":86,"context_line":"        self.finish_up()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_2a137f5e","line":83,"updated":"2018-01-12 17:13:35.000000000","message":"I guess an unrelated cleanup?","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        self.reqhandler.send_frames([encodeutils.safe_encode(data)])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def finish_up(self):"},{"line_number":83,"context_line":"        self.reqhandler.send_frames([b\u0027\u0027.join(self.queue)])"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def close(self):"},{"line_number":86,"context_line":"        self.finish_up()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_6ae747e6","line":83,"in_reply_to":"7f96bb07_2a137f5e","updated":"2018-01-12 17:30:43.000000000","message":"Rather, a bug from an earlier patch [1] that was spotted after said patch merged. We fix it here because this patch introduces the first user of the code. \n\n[1] Ifb9360be73864ab45129c758bd1323a9bab8e48c","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"}],"nova/tests/unit/console/securityproxy/test_rfb.py":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"bc56e99aa245e4c68f83b64d7c24f4c268294d7e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014-2016 Red Hat, Inc"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a77a97e_c6546ecb","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-11-18 21:08:16.000000000","message":"Should just be 2016 since this is a new file","commit_id":"d084192068893649fa93db7291bedccd96c96a27"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def _version_handshake(self):"},{"line_number":55,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self._expect_compute_recv(12, full_version_str)"},{"line_number":58,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_894f74bc","line":57,"range":{"start_line":57,"start_character":34,"end_line":57,"end_character":36},"updated":"2016-12-02 16:34:58.000000000","message":"Maybe use the constants.VERSION_LENGTH","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def _version_handshake(self):"},{"line_number":55,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self._expect_compute_recv(12, full_version_str)"},{"line_number":58,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_4dfb7c47","line":57,"range":{"start_line":57,"start_character":34,"end_line":57,"end_character":36},"in_reply_to":"3a71b18c_894f74bc","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            list(self.tenant_sock.recv.side_effect) + [ret_val])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _expect_compute_recv(self, amt, ret_val):"},{"line_number":81,"context_line":"        if type(ret_val) !\u003d six.binary_type:"},{"line_number":82,"context_line":"            ret_val \u003d six.binary_type(ret_val, \u0027utf-8\u0027)"},{"line_number":83,"context_line":"        self.expected_compute_calls.append(mock.call.recv(amt))"},{"line_number":84,"context_line":"        self.compute_sock.recv.side_effect \u003d ("},{"line_number":85,"context_line":"            list(self.compute_sock.recv.side_effect) + [ret_val])"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_c9316c0d","line":82,"range":{"start_line":81,"start_character":0,"end_line":82,"end_character":55},"updated":"2016-12-02 16:34:58.000000000","message":"nit: maybe introduce a \"_to_binary(val)\" method, to have:\n\n    ret_val \u003d self._to_binary(ret_val)\n\nIt\u0027s 4 times the same code in the methods above.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            list(self.tenant_sock.recv.side_effect) + [ret_val])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _expect_compute_recv(self, amt, ret_val):"},{"line_number":81,"context_line":"        if type(ret_val) !\u003d six.binary_type:"},{"line_number":82,"context_line":"            ret_val \u003d six.binary_type(ret_val, \u0027utf-8\u0027)"},{"line_number":83,"context_line":"        self.expected_compute_calls.append(mock.call.recv(amt))"},{"line_number":84,"context_line":"        self.compute_sock.recv.side_effect \u003d ("},{"line_number":85,"context_line":"            list(self.compute_sock.recv.side_effect) + [ret_val])"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_8dbe4463","line":82,"range":{"start_line":81,"start_character":0,"end_line":82,"end_character":55},"in_reply_to":"3a71b18c_c9316c0d","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                          self.compute_sock)"},{"line_number":115,"context_line":"        self._assert_expected_calls()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_fails_on_tenant_version_too_low(self):"},{"line_number":118,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":119,"context_line":"        full_version_str_low \u003d \"RFB 003.007\\n\""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_641cfd13","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":44},"updated":"2016-12-02 16:34:58.000000000","message":"The functional method checks for !\u003d 3.8 so maybe it makes sense to have a \"test_fails_on_tenant_version_too_high\" test case.","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                          self.compute_sock)"},{"line_number":115,"context_line":"        self._assert_expected_calls()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_fails_on_tenant_version_too_low(self):"},{"line_number":118,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":119,"context_line":"        full_version_str_low \u003d \"RFB 003.007\\n\""},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba5201f7_ad514838","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":44},"in_reply_to":"3a71b18c_641cfd13","updated":"2017-01-05 12:45:42.000000000","message":"Good call. Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _version_handshake(self):"},{"line_number":56,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self._expect_compute_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":59,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_797b3427","line":58,"range":{"start_line":58,"start_character":34,"end_line":58,"end_character":53},"updated":"2017-10-17 20:41:51.000000000","message":"Is the use of VERSION_LENGTH as opposed to 12 (see \"here\" comments below) intentional? I think there are arguments for both (hardcoding 12 vs using a variable from the code being tested), but shouldn\u0027t we be consistent?","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _version_handshake(self):"},{"line_number":56,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self._expect_compute_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":59,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_c909a02c","line":58,"range":{"start_line":58,"start_character":34,"end_line":58,"end_character":53},"in_reply_to":"5f4e5783_797b3427","updated":"2017-12-08 16:07:02.000000000","message":"We should. Fixed.","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self._expect_tenant_send(full_version_str)"},{"line_number":62,"context_line":"        self._expect_tenant_recv(12, full_version_str)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _to_binary(self, val):"},{"line_number":65,"context_line":"        if type(val) !\u003d six.binary_type:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_39713c45","line":62,"range":{"start_line":62,"start_character":33,"end_line":62,"end_character":35},"updated":"2017-10-17 20:41:51.000000000","message":"... here","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self._expect_compute_send(full_version_str)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self._expect_tenant_send(full_version_str)"},{"line_number":62,"context_line":"        self._expect_tenant_recv(12, full_version_str)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _to_binary(self, val):"},{"line_number":65,"context_line":"        if type(val) !\u003d six.binary_type:"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_29183473","line":62,"range":{"start_line":62,"start_character":33,"end_line":62,"end_character":35},"in_reply_to":"5f4e5783_39713c45","updated":"2017-12-08 16:07:02.000000000","message":"Done","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self._assert_expected_calls()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_fail_server_message(self):"},{"line_number":97,"context_line":"        self._expect_tenant_send(\"\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x04blah\")"},{"line_number":98,"context_line":"        self._expect_compute_send(\"\\x00\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.proxy._fail(self.tenant_sock, self.compute_sock, \u0027blah\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_be7192aa","line":97,"range":{"start_line":97,"start_character":63,"end_line":97,"end_character":70},"updated":"2017-10-17 20:41:51.000000000","message":"I suppose we can use this second test to test reason-lengths other than 4. Or have a separate test just for _make_var_str.","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def test_fails_on_compute_version(self):"},{"line_number":109,"context_line":"        for full_version_str in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":110,"context_line":"            self._expect_compute_recv(12, full_version_str)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":113,"context_line":"                              self.proxy.connect,"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_f994c438","line":110,"range":{"start_line":110,"start_character":38,"end_line":110,"end_character":40},"updated":"2017-10-17 20:41:51.000000000","message":"... and here","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def test_fails_on_compute_version(self):"},{"line_number":109,"context_line":"        for full_version_str in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":110,"context_line":"            self._expect_compute_recv(12, full_version_str)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":113,"context_line":"                              self.proxy.connect,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_c9576002","line":110,"range":{"start_line":110,"start_character":38,"end_line":110,"end_character":40},"in_reply_to":"5f4e5783_f994c438","updated":"2017-12-08 16:07:02.000000000","message":"Done","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        for full_version_str_invalid in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":122,"context_line":"            self._expect_compute_recv(12, full_version_str)"},{"line_number":123,"context_line":"            self._expect_compute_send(full_version_str)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_b99acc5e","line":122,"range":{"start_line":122,"start_character":38,"end_line":122,"end_character":40},"updated":"2017-10-17 20:41:51.000000000","message":"... and here","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        full_version_str \u003d \"RFB 003.008\\n\""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        for full_version_str_invalid in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":122,"context_line":"            self._expect_compute_recv(12, full_version_str)"},{"line_number":123,"context_line":"            self._expect_compute_send(full_version_str)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self._expect_tenant_send(full_version_str)"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_a95ae426","line":122,"range":{"start_line":122,"start_character":38,"end_line":122,"end_character":40},"in_reply_to":"5f4e5783_b99acc5e","updated":"2017-12-08 16:07:02.000000000","message":"Done","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"801c466c0084bd50fc88d198d8d1a14d3d89b089","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            self._expect_compute_send(full_version_str)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self._expect_tenant_send(full_version_str)"},{"line_number":126,"context_line":"            self._expect_tenant_recv(12, full_version_str_invalid)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":129,"context_line":"                              self.proxy.connect,"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f4e5783_79a0d490","line":126,"range":{"start_line":126,"start_character":37,"end_line":126,"end_character":39},"updated":"2017-10-17 20:41:51.000000000","message":"... and finally here.","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb56cf4acf93570133318f50cf402f4667b70342","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            self._expect_compute_send(full_version_str)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            self._expect_tenant_send(full_version_str)"},{"line_number":126,"context_line":"            self._expect_tenant_recv(12, full_version_str_invalid)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":129,"context_line":"                              self.proxy.connect,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3f4b6375_8941683c","line":126,"range":{"start_line":126,"start_character":37,"end_line":126,"end_character":39},"in_reply_to":"5f4e5783_79a0d490","updated":"2017-12-08 16:07:02.000000000","message":"Done","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Tests the Console Security Proxy Framework.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_aa28ef85","line":16,"range":{"start_line":16,"start_character":13,"end_line":16,"end_character":20},"updated":"2018-01-12 17:13:35.000000000","message":"RFB?","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Tests the Console Security Proxy Framework.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_aa06af85","line":16,"range":{"start_line":16,"start_character":13,"end_line":16,"end_character":20},"in_reply_to":"7f96bb07_aa28ef85","updated":"2018-01-12 17:30:43.000000000","message":"Eh, probably. RFB is what\u0027s used to implement the console.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self._expect_tenant_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _to_binary(self, val):"},{"line_number":65,"context_line":"        if type(val) !\u003d six.binary_type:"},{"line_number":66,"context_line":"            val \u003d six.binary_type(val, \u0027utf-8\u0027)"},{"line_number":67,"context_line":"        return val"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_8a25f3ad","line":65,"range":{"start_line":65,"start_character":11,"end_line":65,"end_character":39},"updated":"2018-01-12 17:13:35.000000000","message":"Why not:\n\nif not isinstance(val, six.binary_type)?","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self._expect_tenant_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _to_binary(self, val):"},{"line_number":65,"context_line":"        if type(val) !\u003d six.binary_type:"},{"line_number":66,"context_line":"            val \u003d six.binary_type(val, \u0027utf-8\u0027)"},{"line_number":67,"context_line":"        return val"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_71d630f4","line":65,"range":{"start_line":65,"start_character":11,"end_line":65,"end_character":39},"in_reply_to":"7f96bb07_8a03b373","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self._expect_tenant_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _to_binary(self, val):"},{"line_number":65,"context_line":"        if type(val) !\u003d six.binary_type:"},{"line_number":66,"context_line":"            val \u003d six.binary_type(val, \u0027utf-8\u0027)"},{"line_number":67,"context_line":"        return val"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_8a03b373","line":65,"range":{"start_line":65,"start_character":11,"end_line":65,"end_character":39},"in_reply_to":"7f96bb07_8a25f3ad","updated":"2018-01-12 17:30:43.000000000","message":"It should be. I can correct","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        for full_version_str in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":110,"context_line":"            self._expect_compute_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":113,"context_line":"                              self.proxy.connect,"},{"line_number":114,"context_line":"                              self.tenant_sock,"},{"line_number":115,"context_line":"                              self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_4a37ebe4","line":112,"updated":"2018-01-12 17:13:35.000000000","message":"nit: save the exception out of this and assert it\u0027s failing on the thing you expect, e.g.:\n\nex \u003d self.assertRaises(...)\nself.assertIn(\u0027the error message i expect\u0027, six.text_type(ex))","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        for full_version_str in [\"RFB 003.007\\n\", \"RFB 003.009\\n\"]:"},{"line_number":110,"context_line":"            self._expect_compute_recv(auth.VERSION_LENGTH, full_version_str)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":113,"context_line":"                              self.proxy.connect,"},{"line_number":114,"context_line":"                              self.tenant_sock,"},{"line_number":115,"context_line":"                              self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_91289ce2","line":112,"in_reply_to":"7f96bb07_4a37ebe4","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            self._expect_tenant_recv(auth.VERSION_LENGTH,"},{"line_number":127,"context_line":"                                     full_version_str_invalid)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":130,"context_line":"                              self.proxy.connect,"},{"line_number":131,"context_line":"                              self.tenant_sock,"},{"line_number":132,"context_line":"                              self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ea3597db","line":129,"updated":"2018-01-12 17:13:35.000000000","message":"same","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            self._expect_tenant_recv(auth.VERSION_LENGTH,"},{"line_number":127,"context_line":"                                     full_version_str_invalid)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":130,"context_line":"                              self.proxy.connect,"},{"line_number":131,"context_line":"                              self.tenant_sock,"},{"line_number":132,"context_line":"                              self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b1235805","line":129,"in_reply_to":"7f96bb07_ea3597db","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self._expect_compute_recv(6, \"cheese\")"},{"line_number":143,"context_line":"        self._expect_tenant_send(\"\\x00\\x00\\x00\\x00\\x06cheese\")"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":146,"context_line":"                          self.proxy.connect,"},{"line_number":147,"context_line":"                          self.tenant_sock,"},{"line_number":148,"context_line":"                          self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_0a31e3ec","line":145,"updated":"2018-01-12 17:13:35.000000000","message":"same","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self._expect_compute_recv(6, \"cheese\")"},{"line_number":143,"context_line":"        self._expect_tenant_send(\"\\x00\\x00\\x00\\x00\\x06cheese\")"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.assertRaises(exception.SecurityProxyNegotiationFailed,"},{"line_number":146,"context_line":"                          self.proxy.connect,"},{"line_number":147,"context_line":"                          self.tenant_sock,"},{"line_number":148,"context_line":"                          self.compute_sock)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b1683821","line":145,"in_reply_to":"7f96bb07_0a31e3ec","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mock_handshake.assert_called_once_with(self.compute_sock)"},{"line_number":171,"context_line":"        self._assert_expected_calls()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_client_auth_invalid_fails(self):"},{"line_number":174,"context_line":"        self.proxy._fail \u003d self.manager.proxy._fail"},{"line_number":175,"context_line":"        self.proxy.security_handshake \u003d self.manager.proxy.security_handshake"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_2a413f3a","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":38},"updated":"2018-01-12 17:13:35.000000000","message":"Short descriptions of what these tests are testing would be valuable, here and elsewhere.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mock_handshake.assert_called_once_with(self.compute_sock)"},{"line_number":171,"context_line":"        self._assert_expected_calls()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_client_auth_invalid_fails(self):"},{"line_number":174,"context_line":"        self.proxy._fail \u003d self.manager.proxy._fail"},{"line_number":175,"context_line":"        self.proxy.security_handshake \u003d self.manager.proxy.security_handshake"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b13fb4b2","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":38},"in_reply_to":"7f96bb07_2a413f3a","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"}],"releasenotes/notes/Improved-security-between-novncproxy-and-the-compute-hosts-3aa702b4025984c1.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Replace this text with content to appear at the"},{"line_number":4,"context_line":"    top of the section for this release. All of the"},{"line_number":5,"context_line":"    prelude content is merged together and then rendered"},{"line_number":6,"context_line":"    separately from the items listed in other parts of"},{"line_number":7,"context_line":"    the file, so the text needs to be worded so that"},{"line_number":8,"context_line":"    both the prelude and the other items make sense"},{"line_number":9,"context_line":"    when read independently. This may mean repeating"},{"line_number":10,"context_line":"    some details. Not every release note"},{"line_number":11,"context_line":"    requires a prelude. Usually only notes describing"},{"line_number":12,"context_line":"    major features or adding release theme details should"},{"line_number":13,"context_line":"    have a prelude."},{"line_number":14,"context_line":"features:"},{"line_number":15,"context_line":"  - The nova-novncproxy server can now be configured"},{"line_number":16,"context_line":"    to do a security negotiation with the compute node"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1a95cdbc_4ec6fa68","line":13,"range":{"start_line":2,"start_character":0,"end_line":13,"end_character":18},"updated":"2016-10-07 15:35:09.000000000","message":"This shouldn\u0027t be here","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    major features or adding release theme details should"},{"line_number":13,"context_line":"    have a prelude."},{"line_number":14,"context_line":"features:"},{"line_number":15,"context_line":"  - The nova-novncproxy server can now be configured"},{"line_number":16,"context_line":"    to do a security negotiation with the compute node"},{"line_number":17,"context_line":"    VNC server. If the VeNCrypt auth scheme is enabled"},{"line_number":18,"context_line":"    this establishes a TLS session to provide encryption"},{"line_number":19,"context_line":"    of all data. The proxy will validate the x509 certs"},{"line_number":20,"context_line":"    issued by the remote server to ensure it is connecting"},{"line_number":21,"context_line":"    to a valid compute node. The proxy can also send its"},{"line_number":22,"context_line":"    own x509 cert to allow the compute node to validate"},{"line_number":23,"context_line":"    that the connection comes from the official proxy"},{"line_number":24,"context_line":"    server."},{"line_number":25,"context_line":"upgrade:"},{"line_number":26,"context_line":"  - To make use of VeNCrypt, requires configuration steps"},{"line_number":27,"context_line":"    for both the nova-novncproxy service and with libvirt"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1a95cdbc_ae8e9e2b","line":24,"range":{"start_line":15,"start_character":0,"end_line":24,"end_character":11},"updated":"2016-10-07 15:35:09.000000000","message":"Does emacs not support sane text wrapping? :P","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d9b5d3de4026cd2589cb0dc13a324d235fb28d16","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    that the connection comes from the official proxy"},{"line_number":24,"context_line":"    server."},{"line_number":25,"context_line":"upgrade:"},{"line_number":26,"context_line":"  - To make use of VeNCrypt, requires configuration steps"},{"line_number":27,"context_line":"    for both the nova-novncproxy service and with libvirt"},{"line_number":28,"context_line":"    on all the compute nodes. The /etc/libvirt/qemu.conf"},{"line_number":29,"context_line":"    file should be modified to set the \u0027vnc_tls\u0027 option"},{"line_number":30,"context_line":"    to \u00271\u0027, and optionally the \u0027vnc_tls_x509_verify\u0027"},{"line_number":31,"context_line":"    option to \u00271\u0027. Certificates must also be deployed on"},{"line_number":32,"context_line":"    the compute node."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    The nova.conf file should have the \u0027auth_schemes\u0027"},{"line_number":35,"context_line":"    parameter in the \u0027console_rfb\u0027 group set. If there"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1a95cdbc_314aef26","line":32,"range":{"start_line":26,"start_character":0,"end_line":32,"end_character":21},"updated":"2016-10-07 15:35:09.000000000","message":"nit: If you escape this you can pretty format (use ``code``, etc.). Helps the readability of the release notes. For example:\n\n    upgrade:\n      - |\n        To make use of...\n        ...\n        file should be modified to set the ``vnc_tls_x509_verify``\n        ...","commit_id":"feeee4c7fea36e2b6b8b4304cd9875803732e2f6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The nova-novncproxy server can now be configured"},{"line_number":4,"context_line":"    to do a security negotiation with the compute node"},{"line_number":5,"context_line":"    VNC server. If the VeNCrypt auth scheme is enabled"},{"line_number":6,"context_line":"    this establishes a TLS session to provide encryption"},{"line_number":7,"context_line":"    of all data. The proxy will validate the x509 certs"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5a74a57a_21b9ae2e","line":4,"range":{"start_line":3,"start_character":0,"end_line":4,"end_character":54},"updated":"2016-11-28 15:33:30.000000000","message":"Does emacs not do text wrapping? :P","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - The nova-novncproxy server can now be configured"},{"line_number":4,"context_line":"    to do a security negotiation with the compute node"},{"line_number":5,"context_line":"    VNC server. If the VeNCrypt auth scheme is enabled"},{"line_number":6,"context_line":"    this establishes a TLS session to provide encryption"},{"line_number":7,"context_line":"    of all data. The proxy will validate the x509 certs"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ba5201f7_ad3868f0","line":4,"range":{"start_line":3,"start_character":0,"end_line":4,"end_character":54},"in_reply_to":"5a74a57a_21b9ae2e","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67d470afa1eae0f97280f60a655aee6f0cebbb8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  - To make use of VeNCrypt, requires configuration steps"},{"line_number":15,"context_line":"    for both the nova-novncproxy service and with libvirt"},{"line_number":16,"context_line":"    on all the compute nodes. The /etc/libvirt/qemu.conf"},{"line_number":17,"context_line":"    file should be modified to set the \u0027vnc_tls\u0027 option"},{"line_number":18,"context_line":"    to \u00271\u0027, and optionally the \u0027vnc_tls_x509_verify\u0027"},{"line_number":19,"context_line":"    option to \u00271\u0027. Certificates must also be deployed on"},{"line_number":20,"context_line":"    the compute node."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5a74a57a_619e46ba","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":48},"updated":"2016-11-28 15:33:30.000000000","message":"nit: these seem like something that should be formatted as ``code``. You might need to prefix the body first though:\n\n    - |\n      To make use of...","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  - To make use of VeNCrypt, requires configuration steps"},{"line_number":15,"context_line":"    for both the nova-novncproxy service and with libvirt"},{"line_number":16,"context_line":"    on all the compute nodes. The /etc/libvirt/qemu.conf"},{"line_number":17,"context_line":"    file should be modified to set the \u0027vnc_tls\u0027 option"},{"line_number":18,"context_line":"    to \u00271\u0027, and optionally the \u0027vnc_tls_x509_verify\u0027"},{"line_number":19,"context_line":"    option to \u00271\u0027. Certificates must also be deployed on"},{"line_number":20,"context_line":"    the compute node."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ba5201f7_8d33a413","line":17,"range":{"start_line":17,"start_character":39,"end_line":17,"end_character":48},"in_reply_to":"5a74a57a_619e46ba","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    The nova.conf file should have the \u0027auth_schemes\u0027"},{"line_number":23,"context_line":"    parameter in the \u0027vnc\u0027 group set. If there"},{"line_number":24,"context_line":"    are a mix of compute nodes, since with VeNCrypt"},{"line_number":25,"context_line":"    enabled and others with it disabled, then the"},{"line_number":26,"context_line":"    \u0027auth_schemes\u0027 shoudl be set to [\"vencrypt\", \"none\"]."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3a71b18c_84ae7983","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":7},"updated":"2016-12-02 16:34:58.000000000","message":"s/are/is/ ??? (not sure, TBH)","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    The nova.conf file should have the \u0027auth_schemes\u0027"},{"line_number":23,"context_line":"    parameter in the \u0027vnc\u0027 group set. If there"},{"line_number":24,"context_line":"    are a mix of compute nodes, since with VeNCrypt"},{"line_number":25,"context_line":"    enabled and others with it disabled, then the"},{"line_number":26,"context_line":"    \u0027auth_schemes\u0027 shoudl be set to [\"vencrypt\", \"none\"]."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3a71b18c_e42e4df9","line":24,"range":{"start_line":24,"start_character":32,"end_line":24,"end_character":38},"updated":"2016-12-02 16:34:58.000000000","message":"s/since/some/ ???","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    The nova.conf file should have the \u0027auth_schemes\u0027"},{"line_number":23,"context_line":"    parameter in the \u0027vnc\u0027 group set. If there"},{"line_number":24,"context_line":"    are a mix of compute nodes, since with VeNCrypt"},{"line_number":25,"context_line":"    enabled and others with it disabled, then the"},{"line_number":26,"context_line":"    \u0027auth_schemes\u0027 shoudl be set to [\"vencrypt\", \"none\"]."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ba5201f7_0d289499","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":7},"in_reply_to":"3a71b18c_84ae7983","updated":"2017-01-05 12:45:42.000000000","message":"are would be correct here","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b7dc62b847d20bb218c39a2009f19f9cac3e2d68","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    The nova.conf file should have the \u0027auth_schemes\u0027"},{"line_number":23,"context_line":"    parameter in the \u0027vnc\u0027 group set. If there"},{"line_number":24,"context_line":"    are a mix of compute nodes, since with VeNCrypt"},{"line_number":25,"context_line":"    enabled and others with it disabled, then the"},{"line_number":26,"context_line":"    \u0027auth_schemes\u0027 shoudl be set to [\"vencrypt\", \"none\"]."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ba5201f7_2d2558c0","line":24,"range":{"start_line":24,"start_character":32,"end_line":24,"end_character":38},"in_reply_to":"3a71b18c_e42e4df9","updated":"2017-01-05 12:45:42.000000000","message":"Done","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e7ffd13506c64cd8580b5554209803d983d5775d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    parameter in the \u0027vnc\u0027 group set. If there"},{"line_number":24,"context_line":"    are a mix of compute nodes, since with VeNCrypt"},{"line_number":25,"context_line":"    enabled and others with it disabled, then the"},{"line_number":26,"context_line":"    \u0027auth_schemes\u0027 shoudl be set to [\"vencrypt\", \"none\"]."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Once all compute nodes have VeNCrypt enabled, the"},{"line_number":29,"context_line":"    \u0027auth_schemes\u0027 parameter can be set to just"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3a71b18c_04e8a9b3","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":25},"updated":"2016-12-02 16:34:58.000000000","message":"s/shoudl/should/","commit_id":"044153a6eec04811df290002c1b70677303d7a23"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7371eb4674d122add99d8e43daa5f64dc3619f4c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    comes from the official proxy server."},{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - |"},{"line_number":12,"context_line":"    To make use of VeNCrypt, requires configuration steps for both the"},{"line_number":13,"context_line":"    nova-novncproxy service and with libvirt on all the compute nodes. The"},{"line_number":14,"context_line":"    ``/etc/libvirt/qemu.conf`` file should be modified to set the ``vnc_tls``"},{"line_number":15,"context_line":"    option to ``1``, and optionally the ``vnc_tls_x509_verify`` option to"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f4e5783_92729d7a","line":12,"range":{"start_line":12,"start_character":4,"end_line":12,"end_character":57},"updated":"2017-10-13 20:35:37.000000000","message":"nit: \u0027Making use of VeNCrypt requires configuration steps\u0027 - or - \u0027To make use of VeNCrypt, configuration steps are required\u0027","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7371eb4674d122add99d8e43daa5f64dc3619f4c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    The ``nova.conf`` file should have the ``auth_schemes`` parameter in the"},{"line_number":19,"context_line":"    ``vnc`` group set. If there are a mix of compute nodes, some with VeNCrypt"},{"line_number":20,"context_line":"    enabled and others with it disabled, then the ``auth_schemes`` should be"},{"line_number":21,"context_line":"    set to ``[\"vencrypt\", \"none\"]``."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Once all compute nodes have VeNCrypt enabled, the ``auth_schemes``"}],"source_content_type":"text/x-yaml","patch_set":29,"id":"5f4e5783_b2fa39ba","line":20,"range":{"start_line":20,"start_character":46,"end_line":20,"end_character":66},"updated":"2017-10-13 20:35:37.000000000","message":"nit: \u0027the ``auth_schemes`` parameter\u0027 - or just - ``auth_schemes``","commit_id":"5a94ef372a88e242a1be5546d42eddbac7d26f08"}],"releasenotes/notes/websocket-proxy-to-host-security-c3eca0647b0cbc02.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ensure it is connecting to a valid compute node. The proxy can also send"},{"line_number":18,"context_line":"    its own x509 cert to allow the compute node to validate that the connection"},{"line_number":19,"context_line":"    comes from the official proxy server."},{"line_number":20,"context_line":"upgrade:"},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    To make use of VeNCrypt, configuration steps are required for both the"},{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_6a70a7a6","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":7},"updated":"2018-01-12 17:13:35.000000000","message":"Does this really warrant an upgrade impact if not doing anything just means things work as they did today? Seems this should be part of the feature documentation.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ensure it is connecting to a valid compute node. The proxy can also send"},{"line_number":18,"context_line":"    its own x509 cert to allow the compute node to validate that the connection"},{"line_number":19,"context_line":"    comes from the official proxy server."},{"line_number":20,"context_line":"upgrade:"},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    To make use of VeNCrypt, configuration steps are required for both the"},{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_aa2b0fe9","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":7},"in_reply_to":"7f96bb07_6a70a7a6","updated":"2018-01-12 17:30:43.000000000","message":"I\u0027m not sure. It\u0027s \u0027upgrade\u0027 because operators have to do something for this to work and it seemed important enough to recommend everyone do it. I can drop this though.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f94d9bfdca357cbb5ca92dfbb8a9dd1c730d2d03","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ensure it is connecting to a valid compute node. The proxy can also send"},{"line_number":18,"context_line":"    its own x509 cert to allow the compute node to validate that the connection"},{"line_number":19,"context_line":"    comes from the official proxy server."},{"line_number":20,"context_line":"upgrade:"},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    To make use of VeNCrypt, configuration steps are required for both the"},{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_f054a8cc","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":7},"in_reply_to":"7f96bb07_aa2b0fe9","updated":"2018-01-12 18:46:58.000000000","message":"It\u0027s not upgrade though if not doing anything doesn\u0027t break you. Just roll it into the feature note.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ensure it is connecting to a valid compute node. The proxy can also send"},{"line_number":18,"context_line":"    its own x509 cert to allow the compute node to validate that the connection"},{"line_number":19,"context_line":"    comes from the official proxy server."},{"line_number":20,"context_line":"upgrade:"},{"line_number":21,"context_line":"  - |"},{"line_number":22,"context_line":"    To make use of VeNCrypt, configuration steps are required for both the"},{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_566bc683","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":7},"in_reply_to":"7f96bb07_f054a8cc","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e699c2f9217b96bc474e39f68d08606ae714042c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"},{"line_number":24,"context_line":"    ``/etc/libvirt/qemu.conf`` file should be modified to set the ``vnc_tls``"},{"line_number":25,"context_line":"    option to ``1``, and optionally the ``vnc_tls_x509_verify`` option to"},{"line_number":26,"context_line":"    ``1``. Certificates must also be deployed on the compute node."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    The ``nova.conf`` file should have the ``auth_schemes`` parameter in the"},{"line_number":29,"context_line":"    ``vnc`` group set. If there are a mix of compute nodes, some with VeNCrypt"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_8a73b3b1","line":26,"range":{"start_line":26,"start_character":11,"end_line":26,"end_character":66},"updated":"2018-01-12 17:13:35.000000000","message":"I don\u0027t think the vencrypt options said the certs options had to be set?\n\nhttps://review.openstack.org/#/c/345398/36/nova/conf/vnc.py","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c44e825bcfd173a4933498563ee1dda5ce60f6c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"},{"line_number":24,"context_line":"    ``/etc/libvirt/qemu.conf`` file should be modified to set the ``vnc_tls``"},{"line_number":25,"context_line":"    option to ``1``, and optionally the ``vnc_tls_x509_verify`` option to"},{"line_number":26,"context_line":"    ``1``. Certificates must also be deployed on the compute node."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    The ``nova.conf`` file should have the ``auth_schemes`` parameter in the"},{"line_number":29,"context_line":"    ``vnc`` group set. If there are a mix of compute nodes, some with VeNCrypt"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_d625965d","line":26,"range":{"start_line":26,"start_character":11,"end_line":26,"end_character":66},"in_reply_to":"7f96bb07_8a38933d","updated":"2018-01-16 14:44:31.000000000","message":"Done","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1245b8e6cca86ff8b9b885b50ad9a58e36e968d7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    `nova-novncproxy` service and libvirt on all the compute nodes. The"},{"line_number":24,"context_line":"    ``/etc/libvirt/qemu.conf`` file should be modified to set the ``vnc_tls``"},{"line_number":25,"context_line":"    option to ``1``, and optionally the ``vnc_tls_x509_verify`` option to"},{"line_number":26,"context_line":"    ``1``. Certificates must also be deployed on the compute node."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    The ``nova.conf`` file should have the ``auth_schemes`` parameter in the"},{"line_number":29,"context_line":"    ``vnc`` group set. If there are a mix of compute nodes, some with VeNCrypt"}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7f96bb07_8a38933d","line":26,"range":{"start_line":26,"start_character":11,"end_line":26,"end_character":66},"in_reply_to":"7f96bb07_8a73b3b1","updated":"2018-01-12 17:30:43.000000000","message":"They should have. Will correct.","commit_id":"30ceaaff5db79746944cd596c4ed3743dc0f46af"}]}
