Skip to content
  • Daniel P. Berrange's avatar
    Introduce a 'client_add' monitor command accepting an open FD · 13661089
    Daniel P. Berrange authored
    
    
    Allow client connections for VNC and socket based character
    devices to be passed in over the monitor using SCM_RIGHTS.
    
    One intended usage scenario is to start QEMU with VNC on a
    UNIX domain socket. An unprivileged user which cannot access
    the UNIX domain socket, can then connect to QEMU's VNC server
    by passing an open FD to libvirt, which passes it onto QEMU.
    
     { "execute": "get_fd", "arguments": { "fdname": "myclient" } }
     { "return": {} }
     { "execute": "add_client", "arguments": { "protocol": "vnc",
                                               "fdname": "myclient",
                                               "skipauth": true } }
     { "return": {} }
    
    In this case 'protocol' can be 'vnc' or 'spice', or the name
    of a character device (eg from -chardev id=XXXX)
    
    The 'skipauth' parameter can be used to skip any configured
    VNC authentication scheme, which is useful if the mgmt layer
    talking to the monitor has already authenticated the client
    in another way.
    
    * console.h: Define 'vnc_display_add_client' method
    * monitor.c: Implement 'client_add' command
    * qemu-char.c, qemu-char.h: Add 'qemu_char_add_client' method
    * qerror.c, qerror.h: Add QERR_ADD_CLIENT_FAILED
    * qmp-commands.hx: Declare 'client_add' command
    * ui/vnc.c: Implement 'vnc_display_add_client' method
    
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
    13661089