1. 17 3月, 2009 1 次提交
  2. 13 3月, 2009 1 次提交
  3. 07 3月, 2009 9 次提交
    • A
      Remove tabs introduced from VNC ACL series · 28a76be8
      aliguori 提交于
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6727 c046a42c-6fe2-441c-8c8c-71466251a162
      28a76be8
    • A
      Support ACLs for controlling VNC access ("Daniel P. Berrange") · 76655d6d
      aliguori 提交于
      This patch introduces a generic internal API for access control lists
      to be used by network servers in QEMU. It adds support for checking
      these ACL in the VNC server, in two places. The first ACL is for the
      SASL authentication mechanism, checking the SASL username. This ACL
      is called 'vnc.username'. The second is for the TLS authentication
      mechanism, when x509 client certificates are turned on, checking against
      the Distinguished Name of the client. This ACL is called 'vnc.x509dname'
      
      The internal API provides for an ACL with the following characteristics
      
       - A unique name, eg  vnc.username, and vnc.x509dname.
       - A default policy, allow or deny
       - An ordered series of match rules, with allow or deny policy
      
      If none of the match rules apply, then the default policy is
      used.
      
      There is a monitor API to manipulate the ACLs, which I'll describe via
      examples
      
        (qemu) acl show vnc.username
        policy: allow
        (qemu) acl policy vnc.username denya
        acl: policy set to 'deny'
        (qemu) acl allow vnc.username fred
        acl: added rule at position 1
        (qemu) acl allow vnc.username bob
        acl: added rule at position 2
        (qemu) acl allow vnc.username joe 1
        acl: added rule at position 1
        (qemu) acl show vnc.username
        policy: deny
        0: allow fred
        1: allow joe
        2: allow bob
      
      
        (qemu) acl show vnc.x509dname
        policy: allow
        (qemu) acl policy vnc.x509dname deny
        acl: policy set to 'deny'
        (qemu) acl allow vnc.x509dname C=GB,O=ACME,L=London,CN=*
        acl: added rule at position 1
        (qemu) acl allow vnc.x509dname C=GB,O=ACME,L=Boston,CN=bob
        acl: added rule at position 2
        (qemu) acl show vnc.x509dname
        policy: deny
        0: allow C=GB,O=ACME,L=London,CN=*
        1: allow C=GB,O=ACME,L=Boston,CN=bob
      
      By default the VNC server will not use any ACLs, allowing access to
      the server if the user successfully authenticates. To enable use of
      ACLs to restrict user access, the ',acl' flag should be given when
      starting QEMU. The initial ACL activated will be a 'deny all' policy
      and should be customized using monitor commands.
      
      eg enable SASL auth and ACLs
      
          qemu ....  -vnc localhost:1,sasl,acl
      
      The next patch will provide a way to load a pre-defined ACL when
      starting up
      
      
       Makefile        |    6 +
       b/acl.c         |  185 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       b/acl.h         |   74 ++++++++++++++++++++++
       configure       |   18 +++++
       monitor.c       |   95 ++++++++++++++++++++++++++++
       qemu-doc.texi   |   49 ++++++++++++++
       vnc-auth-sasl.c |   16 +++-
       vnc-auth-sasl.h |    7 ++
       vnc-tls.c       |   19 +++++
       vnc-tls.h       |    3 
       vnc.c           |   21 ++++++
       vnc.h           |    3 
       12 files changed, 491 insertions(+), 5 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6726 c046a42c-6fe2-441c-8c8c-71466251a162
      76655d6d
    • A
      Include auth credentials in 'info vnc' ("Daniel P. Berrange") · 1263b7d6
      aliguori 提交于
      This patch extends the 'info vnc' monitor output to include information
      about the VNC client authentication credentials.
      
      For clients authenticated using SASL, this will output the username.
      
      For clients authenticated using x509 certificates, this will output
      the x509 distinguished name.
      
      Auth can be stacked, so both username & x509 dname may be shown.
      
          Server:
               address: 0.0.0.0:5902
                  auth: vencrypt+x509+sasl
          Client:
               address: 10.33.6.67:38621
            x509 dname: C=GB,O=ACME,L=London,ST=London,CN=localhost
              username: admin
          Client:
               address: 10.33.6.63:38620
            x509 dname: C=GB,O=ACME,L=London,ST=London,CN=localhost
              username: admin
      
      
      
       vnc-tls.c |   17 +++++++++++++++++
       vnc-tls.h |    3 +++
       vnc.c     |   19 +++++++++++++++++--
       3 files changed, 37 insertions(+), 2 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6725 c046a42c-6fe2-441c-8c8c-71466251a162
      1263b7d6
    • A
      Add SASL authentication support ("Daniel P. Berrange") · 2f9606b3
      aliguori 提交于
      This patch adds the new SASL authentication protocol to the VNC server.
      
      It is enabled by setting the 'sasl' flag when launching VNC. SASL can
      optionally provide encryption via its SSF layer, if a suitable mechanism
      is configured (eg, GSSAPI/Kerberos, or Digest-MD5).  If an SSF layer is
      not available, then it should be combined with the x509 VNC authentication
      protocol which provides encryption.
      
      eg, if using GSSAPI
      
         qemu -vnc localhost:1,sasl
      
      eg if using  TLS/x509 for encryption
      
         qemu -vnc localhost:1,sasl,tls,x509
      
      
      By default the Cyrus SASL library will look for its configuration in
      the file /etc/sasl2/qemu.conf.  For non-root users, this can be overridden
      by setting the SASL_CONF_PATH environment variable, eg to make it look in
      $HOME/.sasl2.  NB unprivileged users may not have access to the full range
      of SASL mechanisms, since some of them require some administrative privileges
      to configure. The patch includes an example SASL configuration file which
      illustrates config for GSSAPI and Digest-MD5, though it should be noted that
      the latter is not really considered secure any more.
      
      Most of the SASL authentication code is located in a separate source file,
      vnc-auth-sasl.c.  The main vnc.c file only contains minimal integration
      glue, specifically parsing of command line flags / setup, and calls to
      start the SASL auth process, to do encoding/decoding for data.
      
      There are several possible stacks for reading & writing of data, depending
      on the combo of VNC authentication methods in use
      
       - Clear.    read/write straight to socket
       - TLS.      read/write via GNUTLS helpers
       - SASL.     encode/decode via SASL SSF layer, then read/write to socket
       - SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
      
      Hence, the vnc_client_read & vnc_client_write methods have been refactored
      a little.
      
         vnc_client_read:  main entry point for reading, calls either
      
             - vnc_client_read_plain   reading, with no intermediate decoding
             - vnc_client_read_sasl    reading, with SASL SSF decoding
      
         These two methods, then call vnc_client_read_buf(). This decides
         whether to write to the socket directly or write via GNUTLS.
      
      The situation is the same for writing data. More extensive comments
      have been added in the code / patch. The vnc_client_read_sasl and
      vnc_client_write_sasl method implementations live in the separate
      vnc-auth-sasl.c file.
      
      The state required for the SASL auth mechanism is kept in a separate
      VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
      main VncState.
      
      The configure script probes for SASL and automatically enables it
      if found, unless --disable-vnc-sasl was given to override it.
      
      
       Makefile            |    7 
       Makefile.target     |    5 
       b/qemu.sasl         |   34 ++
       b/vnc-auth-sasl.c   |  626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
       b/vnc-auth-sasl.h   |   67 +++++
       configure           |   34 ++
       qemu-doc.texi       |   97 ++++++++
       vnc-auth-vencrypt.c |   12 
       vnc.c               |  249 ++++++++++++++++++--
       vnc.h               |   31 ++
       10 files changed, 1129 insertions(+), 33 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
      2f9606b3
    • A
      Move TLS auth into separate file ("Daniel P. Berrange") · 5fb6c7a8
      aliguori 提交于
      This patch refactors the existing TLS code to make the main VNC code
      more managable. The code moves to two new files
      
       - vnc-tls.c: generic helpers for TLS handshake & credential setup
       - vnc-auth-vencrypt.c: the actual VNC TLS authentication mechanism.
      
      The reason for this split is that there are other TLS based auth
      mechanisms which we may like to use in the future. These can all
      share the same vnc-tls.c routines. In addition this will facilitate
      anyone who may want to port the vnc-tls.c file to allow for choice
      of GNUTLS & NSS for impl.
      
      The TLS state is moved out of the VncState struct, and into a separate
      VncStateTLS struct, defined in vnc-tls.h. This is then referenced from
      the main VncState. End size of the struct is the same, but it keeps
      things a little more managable.
      
      The vnc.h file gains a bunch more function prototypes, for functions
      in vnc.c that were previously static, but now need to be accessed
      from the separate auth code files.
      
      The only TLS related code still in the main vl.c is the command line
      argument handling / setup, and the low level I/O routines calling
      gnutls_send/recv.
      
      
       Makefile              |   11 
       b/vnc-auth-vencrypt.c |  167 ++++++++++++++
       b/vnc-auth-vencrypt.h |   33 ++
       b/vnc-tls.c           |  414 +++++++++++++++++++++++++++++++++++
       b/vnc-tls.h           |   70 ++++++
       vnc.c                 |  581 +++-----------------------------------------------
       vnc.h                 |   76 ++++--
       7 files changed, 780 insertions(+), 572 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6723 c046a42c-6fe2-441c-8c8c-71466251a162
      5fb6c7a8
    • A
      Move VNC structs into header file ("Daniel P. Berrange") · 19a490bf
      aliguori 提交于
      This patch moves the definitions of VncState and VncDisplay structs
      out into a vnc.h header file. This is to allow the code for TLS
      and SASL auth mechanisms to be moved out of the main vnc.c file.
      
      
       vnc.c |  109 ------------------------------------------------
       vnc.h |  149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
       2 files changed, 148 insertions(+), 110 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6722 c046a42c-6fe2-441c-8c8c-71466251a162
      19a490bf
    • A
      Refactor keymap code to avoid duplication ("Daniel P. Berrange") · 0483755a
      aliguori 提交于
      Each of the graphical frontends #include a .c file, for keymap code
      resulting in duplicated definitions & duplicated compiled code. A
      couple of small changes allowed this to be sanitized, so instead of
      doing a #include "keymaps.c", duplicating all code, we can have a
      shared keymaps.h file, and only compile code once. This allows the
      next patch to move the VncState struct out into a header file without
      causing clashing definitions.
      
      
       Makefile      |    9 +++++---
       b/keymaps.h   |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       curses.c      |    3 --
       curses_keys.h |    9 +++-----
       keymaps.c     |   45 ++++++++++++++++---------------------------
       sdl.c         |    3 --
       sdl_keysym.h  |    7 ++----
       vnc.c         |    5 +---
       vnc_keysym.h  |    7 ++----
       9 files changed, 97 insertions(+), 51 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6721 c046a42c-6fe2-441c-8c8c-71466251a162
      0483755a
    • A
      Enhance 'info vnc' monitor output ("Daniel P. Berrange") · 1ff7df1a
      aliguori 提交于
      The current 'info vnc' monitor output just displays the VNC server address
      as provided by the -vnc command line flag. This isn't particularly useful
      since it doesn't tell you what VNC is actually listening on. eg, if you
      use '-vnc :1' it is useful to know whether this translated to '0.0.0.0:5901'
      or chose IPv6 ':::5901'.  It is also useful to know the address of the
      client that is currently connected. It is also useful to know the active
      authentication (if any).
      
      This patch tweaks the monitor output to look like:
      
         (qemu) info vnc
          Server:
               address: 0.0.0.0:5902
                  auth: vencrypt+x509
          Client: none
      
      And when 2 clients are connected
      
         (qemu) info vnc
          Server:
               address: 0.0.0.0:5902
                  auth: vencrypt+x509
          Client:
               address: 10.33.6.67:38621
          Client:
               address: 10.33.6.63:38620
      
      More data will be added to this later in the patch series...
      
      The 'addr_to_string' helper method in this patch is overly generic
      for the needs of this patch alone. This is because it will be re-used
      by the later SASL patches in this series, where the flexibility is
      important.
      
      
       vnc.c |  137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
       1 file changed, 127 insertions(+), 10 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6720 c046a42c-6fe2-441c-8c8c-71466251a162
      1ff7df1a
    • A
      Fix bug in TLS authentication ("Daniel P. Berrange") · adc5ec85
      aliguori 提交于
      This patch was previously posted here:
      
        http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg00820.html
      
      In the case where the TLS handshake does *not* block on I/O, QEMU
      sends the next 'start sub-auth' message twice. This seriously confuses
      the VNC client :-) Fortunately the chances of the handshake not blocking
      are close to zero for a TCP socket, which is why it has not been noticed
      thus far. Even with both client & server on localhost, I can only hit the
      bug 1 time in 20.
      
      NB, the diff context here is not too informative. If you look at the
      full code you'll see that a few lines early we called vnc_start_tls()
      which called vnc_continue_handshake() which called the method
      start_auth_vencrypt_subauth(). Hence, fixing the bug, just involves
      removing the 2nd bogus call to start_auth_vencrypt_subauth() as per
      this patch.
      
      
       vnc.c |    8 --------
       1 file changed, 8 deletions(-)
      Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6719 c046a42c-6fe2-441c-8c8c-71466251a162
      adc5ec85
  4. 06 3月, 2009 1 次提交
    • A
      monitor: Rework API (Jan Kiszka) · 376253ec
      aliguori 提交于
      Refactor the monitor API and prepare it for decoupled terminals:
      term_print functions are renamed to monitor_* and all monitor services
      gain a new parameter (mon) that will once refer to the monitor instance
      the output is supposed to appear on. However, the argument remains
      unused for now. All monitor command callbacks are also extended by a mon
      parameter so that command handlers are able to pass an appropriate
      reference to monitor output services.
      
      For the case that monitor outputs so far happen without clearly
      identifiable context, the global variable cur_mon is introduced that
      shall once provide a pointer either to the current active monitor (while
      processing commands) or to the default one. On the mid or long term,
      those use case will be obsoleted so that this variable can be removed
      again.
      
      Due to the broad usage of the monitor interface, this patch mostly deals
      with converting users of the monitor API. A few of them are already
      extended to pass 'mon' from the command handler further down to internal
      functions that invoke monitor_printf.
      
      At this chance, monitor-related prototypes are moved from console.h to
      a new monitor.h. The same is done for the readline API.
      Signed-off-by: NJan Kiszka <jan.kiszka@siemens.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6711 c046a42c-6fe2-441c-8c8c-71466251a162
      376253ec
  5. 16 2月, 2009 1 次提交
  6. 12 2月, 2009 1 次提交
  7. 06 2月, 2009 1 次提交
  8. 02 2月, 2009 7 次提交
  9. 26 1月, 2009 1 次提交
  10. 16 1月, 2009 2 次提交
    • A
      exploiting the new interface in vnc.c (Stefano Stabellini) · 6cec5487
      aliguori 提交于
      This patch exploits the new DisplaySurface and PixelFormat structures in
      vnc, making the code easier to read allowing further improvements.
      
      Compared to the last version I fixed a bug that prevented the hextile
      encoding from working properly.
      Signed-off-by: NStefano Stabellini <stefano.stabellini@eu.citrix.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6337 c046a42c-6fe2-441c-8c8c-71466251a162
      6cec5487
    • A
      DisplayState interface change (Stefano Stabellini) · 7d957bd8
      aliguori 提交于
      This patch changes the DisplayState interface adding support for
      multiple frontends at the same time (sdl and vnc) and implements most
      of the benefit of the shared_buf patch without the added complexity.
      
      Currently DisplayState is managed by sdl (or vnc) and sdl (or vnc) is
      also responsible for allocating the data and setting the depth.
      Vga.c (or another backend) will do any necessary conversion.
      
      The idea is to change it so that is vga.c (or another backend) together
      with console.c that fully manage the DisplayState interface allocating
      data and setting the depth (either 16 or 32 bit, if the guest uses a
      different resolution or is in text mode, vga.c (or another backend) is
      in charge of doing the conversion seamlessly).
      
      The other idea is that DisplayState supports *multiple* frontends
      like sdl and vnc; each of them can register some callbacks to be called
      when a display event occurs.
      
      The interesting changes are:
      
      - the new structures and related functions in console.h and console.c
      
      in particular the following functions are very helpful to manage a
      DisplaySurface:
      
      qemu_create_displaysurface
      qemu_resize_displaysurface
      qemu_create_displaysurface_from
      qemu_free_displaysurface
      
      - console_select and qemu_console_resize in console.c
      this two functions manage multiple consoles on a single host display
      
      - moving code around in hw/vga.c
      as for the shared_buf patch this is necessary to be able to handle a dynamic
      DisplaySurface bpp
      
      - changes to vga_draw_graphic in hw/vga.c
      this is the place where the DisplaySurface buffer is shared with the
      videoram, when possible;
      
      
      Compared to the last version the only changes are:
      
      - do not remove support to dpy_copy in cirrus_vga
      - change the name of the displaysurface handling functions
      Signed-off-by: NStefano Stabellini <stefano.stabellini@eu.citrix.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      
      
      
      git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6336 c046a42c-6fe2-441c-8c8c-71466251a162
      7d957bd8
  11. 15 1月, 2009 1 次提交
  12. 23 12月, 2008 1 次提交
  13. 14 12月, 2008 1 次提交
  14. 04 12月, 2008 1 次提交
  15. 03 12月, 2008 1 次提交
  16. 02 12月, 2008 2 次提交
  17. 01 12月, 2008 1 次提交
  18. 25 11月, 2008 1 次提交
  19. 13 11月, 2008 1 次提交
  20. 12 11月, 2008 1 次提交
  21. 25 10月, 2008 1 次提交
  22. 24 9月, 2008 1 次提交
  23. 16 9月, 2008 2 次提交