All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches
@ 2019-03-11  8:26 Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 1/5] Reduce curses escdelay from 1s to 25ms Gerd Hoffmann
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann, Markus Armbruster

The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:

  Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)

are available in the Git repository at:

  git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request

for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:

  monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)

----------------------------------------------------------------
curses: wide char input support.
vnc: acl update, stall fix.

----------------------------------------------------------------

Daniel P. Berrangé (2):
  vnc: allow specifying a custom authorization object name
  monitor: deprecate acl_show, acl_reset, acl_policy, acl_add,
    acl_remove

Gerd Hoffmann (1):
  vnc: fix update stalls

Samuel Thibault (2):
  Reduce curses escdelay from 1s to 25ms
  curses: support wide input

 ui/curses_keys.h     | 113 +++++++++++++++++++++++++------------------
 monitor.c            |  23 +++++++++
 ui/curses.c          |  79 ++++++++++++++++++++++++------
 ui/vnc.c             |  64 ++++++++++++++++++++----
 qemu-deprecated.texi |  11 +++++
 qemu-options.hx      |  35 ++++++++++----
 6 files changed, 243 insertions(+), 82 deletions(-)

-- 
2.18.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PULL 1/5] Reduce curses escdelay from 1s to 25ms
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
@ 2019-03-11  8:26 ` Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 2/5] curses: support wide input Gerd Hoffmann
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann,
	Markus Armbruster, Samuel Thibault

From: Samuel Thibault <samuel.thibault@ens-lyon.org>

By default, curses will only report single ESC key event after 1s delay,
since ESC is also used for keypad escape sequences. This however makes
users believe that ESC is not working. Reducing to 25ms provides good user
experience, while still allowing 25ms for keypad sequences to get in, which
should be enough.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Message-Id: <20190303172557.17139-1-samuel.thibault@ens-lyon.org>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/curses.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ui/curses.c b/ui/curses.c
index 6e0091c3b286..870273de51a9 100644
--- a/ui/curses.c
+++ b/ui/curses.c
@@ -231,7 +231,7 @@ static void curses_refresh(DisplayChangeListener *dcl)
         keycode = curses2keycode[chr];
         keycode_alt = 0;
 
-        /* alt key */
+        /* alt or esc key */
         if (keycode == 1) {
             int nextchr = getch();
 
@@ -361,6 +361,7 @@ static void curses_setup(void)
     initscr(); noecho(); intrflush(stdscr, FALSE);
     nodelay(stdscr, TRUE); nonl(); keypad(stdscr, TRUE);
     start_color(); raw(); scrollok(stdscr, FALSE);
+    set_escdelay(25);
 
     /* Make color pair to match color format (3bits bg:3bits fg) */
     for (i = 0; i < 64; i++) {
-- 
2.18.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PULL 2/5] curses: support wide input
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 1/5] Reduce curses escdelay from 1s to 25ms Gerd Hoffmann
@ 2019-03-11  8:26 ` Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 3/5] vnc: fix update stalls Gerd Hoffmann
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann,
	Markus Armbruster, Samuel Thibault

From: Samuel Thibault <samuel.thibault@ens-lyon.org>

This makes use of wide curses functions instead of 8bit functions. This
allows to type e.g. accented letters.

Unfortunately, key codes are then returned with values that could be
confused with wide characters by ncurses, so we need to add a maybe_keycode
variable to know whether the returned value is a key code or a character
(curses with wide support), or possibly both (curses without wide support).

The translation tables thus also need to be separated into key code
translation and character translation.  The curses2foo helper makes it easier
to use them.

Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Message-id: 20190304210532.7840-1-samuel.thibault@ens-lyon.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/curses_keys.h | 113 +++++++++++++++++++++++++++--------------------
 ui/curses.c      |  76 +++++++++++++++++++++++++------
 2 files changed, 127 insertions(+), 62 deletions(-)

diff --git a/ui/curses_keys.h b/ui/curses_keys.h
index e9195a167192..71e04acdc756 100644
--- a/ui/curses_keys.h
+++ b/ui/curses_keys.h
@@ -49,22 +49,28 @@
 /* curses won't detect a Control + Alt + 1, so use Alt + 1 */
 #define QEMU_KEY_CONSOLE0   (2 | ALT)   /* (curses2keycode['1'] | ALT) */
 
+#define CURSES_CHARS        0x100       /* Support latin1 only */
 #define CURSES_KEYS         KEY_MAX     /* KEY_MAX defined in <curses.h> */
 
-static const int curses2keysym[CURSES_KEYS] = {
-    [0 ... (CURSES_KEYS - 1)] = -1,
+static const int _curses2keysym[CURSES_CHARS] = {
+    [0 ... (CURSES_CHARS - 1)] = -1,
 
     [0x7f] = KEY_BACKSPACE,
     ['\r'] = KEY_ENTER,
     ['\n'] = KEY_ENTER,
     [27] = 27,
+};
+
+static const int _curseskey2keysym[CURSES_KEYS] = {
+    [0 ... (CURSES_KEYS - 1)] = -1,
+
     [KEY_BTAB] = '\t' | KEYSYM_SHIFT,
     [KEY_SPREVIOUS] = KEY_PPAGE | KEYSYM_SHIFT,
     [KEY_SNEXT] = KEY_NPAGE | KEYSYM_SHIFT,
 };
 
-static const int curses2keycode[CURSES_KEYS] = {
-    [0 ... (CURSES_KEYS - 1)] = -1,
+static const int _curses2keycode[CURSES_CHARS] = {
+    [0 ... (CURSES_CHARS - 1)] = -1,
 
     [0x01b] = 1, /* Escape */
     ['1'] = 2,
@@ -80,7 +86,6 @@ static const int curses2keycode[CURSES_KEYS] = {
     ['-'] = 12,
     ['='] = 13,
     [0x07f] = 14, /* Backspace */
-    [KEY_BACKSPACE] = 14, /* Backspace */
 
     ['\t'] = 15, /* Tab */
     ['q'] = 16,
@@ -97,7 +102,6 @@ static const int curses2keycode[CURSES_KEYS] = {
     [']'] = 27,
     ['\n'] = 28, /* Return */
     ['\r'] = 28, /* Return */
-    [KEY_ENTER] = 28, /* Return */
 
     ['a'] = 30,
     ['s'] = 31,
@@ -126,33 +130,6 @@ static const int curses2keycode[CURSES_KEYS] = {
 
     [' '] = 57,
 
-    [KEY_F(1)] = 59, /* Function Key 1 */
-    [KEY_F(2)] = 60, /* Function Key 2 */
-    [KEY_F(3)] = 61, /* Function Key 3 */
-    [KEY_F(4)] = 62, /* Function Key 4 */
-    [KEY_F(5)] = 63, /* Function Key 5 */
-    [KEY_F(6)] = 64, /* Function Key 6 */
-    [KEY_F(7)] = 65, /* Function Key 7 */
-    [KEY_F(8)] = 66, /* Function Key 8 */
-    [KEY_F(9)] = 67, /* Function Key 9 */
-    [KEY_F(10)] = 68, /* Function Key 10 */
-    [KEY_F(11)] = 87, /* Function Key 11 */
-    [KEY_F(12)] = 88, /* Function Key 12 */
-
-    [KEY_HOME] = 71 | GREY, /* Home */
-    [KEY_UP] = 72 | GREY, /* Up Arrow */
-    [KEY_PPAGE] = 73 | GREY, /* Page Up */
-    [KEY_LEFT] = 75 | GREY, /* Left Arrow */
-    [KEY_RIGHT] = 77 | GREY, /* Right Arrow */
-    [KEY_END] = 79 | GREY, /* End */
-    [KEY_DOWN] = 80 | GREY, /* Down Arrow */
-    [KEY_NPAGE] = 81 | GREY, /* Page Down */
-    [KEY_IC] = 82 | GREY, /* Insert */
-    [KEY_DC] = 83 | GREY, /* Delete */
-
-    [KEY_SPREVIOUS] = 73 | GREY | SHIFT, /* Shift + Page Up */
-    [KEY_SNEXT] = 81 | GREY | SHIFT, /* Shift + Page Down */
-
     ['!'] = 2 | SHIFT,
     ['@'] = 3 | SHIFT,
     ['#'] = 4 | SHIFT,
@@ -166,7 +143,6 @@ static const int curses2keycode[CURSES_KEYS] = {
     ['_'] = 12 | SHIFT,
     ['+'] = 13 | SHIFT,
 
-    [KEY_BTAB] = 15 | SHIFT, /* Shift + Tab */
     ['Q'] = 16 | SHIFT,
     ['W'] = 17 | SHIFT,
     ['E'] = 18 | SHIFT,
@@ -205,19 +181,6 @@ static const int curses2keycode[CURSES_KEYS] = {
     ['>'] = 52 | SHIFT,
     ['?'] = 53 | SHIFT,
 
-    [KEY_F(13)] = 59 | SHIFT, /* Shift + Function Key 1 */
-    [KEY_F(14)] = 60 | SHIFT, /* Shift + Function Key 2 */
-    [KEY_F(15)] = 61 | SHIFT, /* Shift + Function Key 3 */
-    [KEY_F(16)] = 62 | SHIFT, /* Shift + Function Key 4 */
-    [KEY_F(17)] = 63 | SHIFT, /* Shift + Function Key 5 */
-    [KEY_F(18)] = 64 | SHIFT, /* Shift + Function Key 6 */
-    [KEY_F(19)] = 65 | SHIFT, /* Shift + Function Key 7 */
-    [KEY_F(20)] = 66 | SHIFT, /* Shift + Function Key 8 */
-    [KEY_F(21)] = 67 | SHIFT, /* Shift + Function Key 9 */
-    [KEY_F(22)] = 68 | SHIFT, /* Shift + Function Key 10 */
-    [KEY_F(23)] = 69 | SHIFT, /* Shift + Function Key 11 */
-    [KEY_F(24)] = 70 | SHIFT, /* Shift + Function Key 12 */
-
     ['Q' - '@'] = 16 | CNTRL, /* Control + q */
     ['W' - '@'] = 17 | CNTRL, /* Control + w */
     ['E' - '@'] = 18 | CNTRL, /* Control + e */
@@ -249,13 +212,67 @@ static const int curses2keycode[CURSES_KEYS] = {
 
 };
 
-static const int curses2qemu[CURSES_KEYS] = {
+static const int _curseskey2keycode[CURSES_KEYS] = {
     [0 ... (CURSES_KEYS - 1)] = -1,
 
+    [KEY_BACKSPACE] = 14, /* Backspace */
+
+    [KEY_ENTER] = 28, /* Return */
+
+    [KEY_F(1)] = 59, /* Function Key 1 */
+    [KEY_F(2)] = 60, /* Function Key 2 */
+    [KEY_F(3)] = 61, /* Function Key 3 */
+    [KEY_F(4)] = 62, /* Function Key 4 */
+    [KEY_F(5)] = 63, /* Function Key 5 */
+    [KEY_F(6)] = 64, /* Function Key 6 */
+    [KEY_F(7)] = 65, /* Function Key 7 */
+    [KEY_F(8)] = 66, /* Function Key 8 */
+    [KEY_F(9)] = 67, /* Function Key 9 */
+    [KEY_F(10)] = 68, /* Function Key 10 */
+    [KEY_F(11)] = 87, /* Function Key 11 */
+    [KEY_F(12)] = 88, /* Function Key 12 */
+
+    [KEY_HOME] = 71 | GREY, /* Home */
+    [KEY_UP] = 72 | GREY, /* Up Arrow */
+    [KEY_PPAGE] = 73 | GREY, /* Page Up */
+    [KEY_LEFT] = 75 | GREY, /* Left Arrow */
+    [KEY_RIGHT] = 77 | GREY, /* Right Arrow */
+    [KEY_END] = 79 | GREY, /* End */
+    [KEY_DOWN] = 80 | GREY, /* Down Arrow */
+    [KEY_NPAGE] = 81 | GREY, /* Page Down */
+    [KEY_IC] = 82 | GREY, /* Insert */
+    [KEY_DC] = 83 | GREY, /* Delete */
+
+    [KEY_SPREVIOUS] = 73 | GREY | SHIFT, /* Shift + Page Up */
+    [KEY_SNEXT] = 81 | GREY | SHIFT, /* Shift + Page Down */
+
+    [KEY_BTAB] = 15 | SHIFT, /* Shift + Tab */
+
+    [KEY_F(13)] = 59 | SHIFT, /* Shift + Function Key 1 */
+    [KEY_F(14)] = 60 | SHIFT, /* Shift + Function Key 2 */
+    [KEY_F(15)] = 61 | SHIFT, /* Shift + Function Key 3 */
+    [KEY_F(16)] = 62 | SHIFT, /* Shift + Function Key 4 */
+    [KEY_F(17)] = 63 | SHIFT, /* Shift + Function Key 5 */
+    [KEY_F(18)] = 64 | SHIFT, /* Shift + Function Key 6 */
+    [KEY_F(19)] = 65 | SHIFT, /* Shift + Function Key 7 */
+    [KEY_F(20)] = 66 | SHIFT, /* Shift + Function Key 8 */
+    [KEY_F(21)] = 67 | SHIFT, /* Shift + Function Key 9 */
+    [KEY_F(22)] = 68 | SHIFT, /* Shift + Function Key 10 */
+    [KEY_F(23)] = 69 | SHIFT, /* Shift + Function Key 11 */
+    [KEY_F(24)] = 70 | SHIFT, /* Shift + Function Key 12 */
+};
+
+static const int _curses2qemu[CURSES_CHARS] = {
+    [0 ... (CURSES_CHARS - 1)] = -1,
+
     ['\n'] = '\n',
     ['\r'] = '\n',
 
     [0x07f] = QEMU_KEY_BACKSPACE,
+};
+
+static const int _curseskey2qemu[CURSES_KEYS] = {
+    [0 ... (CURSES_KEYS - 1)] = -1,
 
     [KEY_DOWN] = QEMU_KEY_DOWN,
     [KEY_UP] = QEMU_KEY_UP,
diff --git a/ui/curses.c b/ui/curses.c
index 870273de51a9..37954ce1b046 100644
--- a/ui/curses.c
+++ b/ui/curses.c
@@ -42,6 +42,12 @@
 #define FONT_HEIGHT 16
 #define FONT_WIDTH 8
 
+enum maybe_keycode {
+    CURSES_KEYCODE,
+    CURSES_CHAR,
+    CURSES_CHAR_OR_KEYCODE,
+};
+
 static DisplayChangeListener *dcl;
 static console_ch_t screen[160 * 100];
 static WINDOW *screenpad = NULL;
@@ -194,9 +200,54 @@ static void curses_cursor_position(DisplayChangeListener *dcl,
 
 static kbd_layout_t *kbd_layout = NULL;
 
+static wint_t console_getch(enum maybe_keycode *maybe_keycode)
+{
+    wint_t ret;
+    switch (get_wch(&ret)) {
+    case KEY_CODE_YES:
+        *maybe_keycode = CURSES_KEYCODE;
+        break;
+    case OK:
+        *maybe_keycode = CURSES_CHAR;
+        break;
+    case ERR:
+        ret = -1;
+        break;
+    }
+    return ret;
+}
+
+static int curses2foo(const int _curses2foo[], const int _curseskey2foo[],
+                      int chr, enum maybe_keycode maybe_keycode)
+{
+    int ret = -1;
+    if (maybe_keycode == CURSES_CHAR) {
+        if (chr < CURSES_CHARS) {
+            ret = _curses2foo[chr];
+        }
+    } else {
+        if (chr < CURSES_KEYS) {
+            ret = _curseskey2foo[chr];
+        }
+        if (ret == -1 && maybe_keycode == CURSES_CHAR_OR_KEYCODE &&
+            chr < CURSES_CHARS) {
+            ret = _curses2foo[chr];
+        }
+    }
+    return ret;
+}
+
+#define curses2keycode(chr, maybe_keycode) \
+    curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode)
+#define curses2keysym(chr, maybe_keycode) \
+    curses2foo(_curses2keysym, _curseskey2keysym, chr, maybe_keycode)
+#define curses2qemu(chr, maybe_keycode) \
+    curses2foo(_curses2qemu, _curseskey2qemu, chr, maybe_keycode)
+
 static void curses_refresh(DisplayChangeListener *dcl)
 {
     int chr, keysym, keycode, keycode_alt;
+    enum maybe_keycode maybe_keycode;
 
     curses_winch_check();
 
@@ -212,14 +263,14 @@ static void curses_refresh(DisplayChangeListener *dcl)
 
     while (1) {
         /* while there are any pending key strokes to process */
-        chr = getch();
+        chr = console_getch(&maybe_keycode);
 
-        if (chr == ERR)
+        if (chr == -1)
             break;
 
 #ifdef KEY_RESIZE
         /* this shouldn't occur when we use a custom SIGWINCH handler */
-        if (chr == KEY_RESIZE) {
+        if (maybe_keycode != CURSES_CHAR && chr == KEY_RESIZE) {
             clear();
             refresh();
             curses_calc_pad();
@@ -228,17 +279,19 @@ static void curses_refresh(DisplayChangeListener *dcl)
         }
 #endif
 
-        keycode = curses2keycode[chr];
+        keycode = curses2keycode(chr, maybe_keycode);
         keycode_alt = 0;
 
         /* alt or esc key */
         if (keycode == 1) {
-            int nextchr = getch();
+            enum maybe_keycode next_maybe_keycode;
+            int nextchr = console_getch(&next_maybe_keycode);
 
-            if (nextchr != ERR) {
+            if (nextchr != -1) {
                 chr = nextchr;
+                maybe_keycode = next_maybe_keycode;
                 keycode_alt = ALT;
-                keycode = curses2keycode[chr];
+                keycode = curses2keycode(chr, maybe_keycode);
 
                 if (keycode != -1) {
                     keycode |= ALT;
@@ -258,9 +311,7 @@ static void curses_refresh(DisplayChangeListener *dcl)
         }
 
         if (kbd_layout) {
-            keysym = -1;
-            if (chr < CURSES_KEYS)
-                keysym = curses2keysym[chr];
+            keysym = curses2keysym(chr, maybe_keycode);
 
             if (keysym == -1) {
                 if (chr < ' ') {
@@ -326,10 +377,7 @@ static void curses_refresh(DisplayChangeListener *dcl)
                 qemu_input_event_send_key_delay(0);
             }
         } else {
-            keysym = -1;
-            if (chr < CURSES_KEYS) {
-                keysym = curses2qemu[chr];
-            }
+            keysym = curses2qemu(chr, maybe_keycode);
             if (keysym == -1)
                 keysym = chr;
 
-- 
2.18.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PULL 3/5] vnc: fix update stalls
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 1/5] Reduce curses escdelay from 1s to 25ms Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 2/5] curses: support wide input Gerd Hoffmann
@ 2019-03-11  8:26 ` Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 4/5] vnc: allow specifying a custom authorization object name Gerd Hoffmann
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann, Markus Armbruster

vnc aborts display update jobs on video mode switches and page flips.
That can cause vnc update stalls in case an unfinished vnc job gets
aborted.  The vnc client will never receive the requested update then.
Fix that by copying the state from job_update back to update in that
case.

Reports complain about stalls with two or more clients being connected
at the same time, on some but not all connections.  I suspect it can
also happen with a single connection, multiple connections only make
this more much likely to happen.

Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1662260
Reported-by: Ying Fang <fangying1@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Ying Fang <fangying1@huawei.com>
Message-id: 20190305130930.24516-1-kraxel@redhat.com
---
 ui/vnc.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/ui/vnc.c b/ui/vnc.c
index da4a21d4ce94..2f2ab62fcf71 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -700,6 +700,12 @@ static void vnc_abort_display_jobs(VncDisplay *vd)
     }
     QTAILQ_FOREACH(vs, &vd->clients, next) {
         vnc_lock_output(vs);
+        if (vs->update == VNC_STATE_UPDATE_NONE &&
+            vs->job_update != VNC_STATE_UPDATE_NONE) {
+            /* job aborted before completion */
+            vs->update = vs->job_update;
+            vs->job_update = VNC_STATE_UPDATE_NONE;
+        }
         vs->abort = false;
         vnc_unlock_output(vs);
     }
-- 
2.18.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PULL 4/5] vnc: allow specifying a custom authorization object name
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2019-03-11  8:26 ` [Qemu-devel] [PULL 3/5] vnc: fix update stalls Gerd Hoffmann
@ 2019-03-11  8:26 ` Gerd Hoffmann
  2019-03-11  8:26 ` [Qemu-devel] [PULL 5/5] monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove Gerd Hoffmann
  2019-03-11 13:45 ` [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Peter Maydell
  5 siblings, 0 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann,
	Markus Armbruster, Daniel P. Berrange

From: "Daniel P. Berrange" <berrange@redhat.com>

The VNC server has historically had support for ACLs to check both the
SASL username and the TLS x509 distinguished name. The VNC server was
responsible for creating the initial ACL, and the client app was then
responsible for populating it with rules using the HMP 'acl_add' command.

This is not satisfactory for a variety of reasons. There is no way to
populate the ACLs from the command line, users are forced to use the
HMP. With multiple network services all supporting TLS and ACLs now, it
is desirable to be able to define a single ACL that is referenced by all
services.

To address these limitations, two new options are added to the VNC
server CLI. The 'tls-authz' option takes the ID of a QAuthZ object to
use for checking TLS x509 distinguished names, and the 'sasl-authz'
option takes the ID of another object to use for checking SASL usernames.

In this example, we setup two authorization rules. The first allows any
client with a certificate issued by the 'RedHat' organization in the
'London' locality. The second ACL allows clients with either the
'joe@REDHAT.COM' or  'fred@REDHAT.COM' kerberos usernames. Both checks
must pass for the user to be allowed.

    $QEMU -object tls-creds-x509,id=tls0,dir=/home/berrange/qemutls,\
                  endpoint=server,verify-peer=yes \
          -object authz-simple,id=authz0,policy=deny,\
                  rules.0.match=O=RedHat,,L=London,rules.0.policy=allow \
          -object authz-simple,id=authz1,policy=deny,\
                  rules.0.match=fred@REDHAT.COM,rules.0.policy=allow \
                  rules.0.match=joe@REDHAT.COM,rules.0.policy=allow \
          -vnc 0.0.0.0:1,tls-creds=tls0,tls-authz=authz0,
	       sasl,sasl-authz=authz1 \
          ...other QEMU args...

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 20190227145755.26556-2-berrange@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c             | 58 +++++++++++++++++++++++++++++++++++++-------
 qemu-deprecated.texi |  5 ++++
 qemu-options.hx      | 35 ++++++++++++++++++--------
 3 files changed, 79 insertions(+), 19 deletions(-)

diff --git a/ui/vnc.c b/ui/vnc.c
index 2f2ab62fcf71..2d9e8f43b09b 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3363,6 +3363,12 @@ static QemuOptsList qemu_vnc_opts = {
         },{
             .name = "acl",
             .type = QEMU_OPT_BOOL,
+        },{
+            .name = "tls-authz",
+            .type = QEMU_OPT_STRING,
+        },{
+            .name = "sasl-authz",
+            .type = QEMU_OPT_STRING,
         },{
             .name = "lossy",
             .type = QEMU_OPT_BOOL,
@@ -3802,6 +3808,8 @@ void vnc_display_open(const char *id, Error **errp)
     const char *credid;
     bool sasl = false;
     int acl = 0;
+    const char *tlsauthz;
+    const char *saslauthz;
     int lock_key_sync = 1;
     int key_delay_ms;
 
@@ -3873,7 +3881,33 @@ void vnc_display_open(const char *id, Error **errp)
             goto fail;
         }
     }
+    if (qemu_opt_get(opts, "acl")) {
+        error_report("The 'acl' option to -vnc is deprecated. "
+                     "Please use the 'tls-authz' and 'sasl-authz' "
+                     "options instead");
+    }
     acl = qemu_opt_get_bool(opts, "acl", false);
+    tlsauthz = qemu_opt_get(opts, "tls-authz");
+    if (acl && tlsauthz) {
+        error_setg(errp, "'acl' option is mutually exclusive with the "
+                   "'tls-authz' option");
+        goto fail;
+    }
+    if (tlsauthz && !vd->tlscreds) {
+        error_setg(errp, "'tls-authz' provided but TLS is not enabled");
+        goto fail;
+    }
+
+    saslauthz = qemu_opt_get(opts, "sasl-authz");
+    if (acl && saslauthz) {
+        error_setg(errp, "'acl' option is mutually exclusive with the "
+                   "'sasl-authz' option");
+        goto fail;
+    }
+    if (saslauthz && !sasl) {
+        error_setg(errp, "'sasl-authz' provided but SASL auth is not enabled");
+        goto fail;
+    }
 
     share = qemu_opt_get(opts, "share");
     if (share) {
@@ -3903,7 +3937,9 @@ void vnc_display_open(const char *id, Error **errp)
         vd->non_adaptive = true;
     }
 
-    if (acl) {
+    if (tlsauthz) {
+        vd->tlsauthzid = g_strdup(tlsauthz);
+    } else if (acl) {
         if (strcmp(vd->id, "default") == 0) {
             vd->tlsauthzid = g_strdup("vnc.x509dname");
         } else {
@@ -3914,15 +3950,19 @@ void vnc_display_open(const char *id, Error **errp)
                                               &error_abort));
     }
 #ifdef CONFIG_VNC_SASL
-    if (acl && sasl) {
-        if (strcmp(vd->id, "default") == 0) {
-            vd->sasl.authzid = g_strdup("vnc.username");
-        } else {
-            vd->sasl.authzid = g_strdup_printf("vnc.%s.username", vd->id);
+    if (sasl) {
+        if (saslauthz) {
+            vd->sasl.authzid = g_strdup(saslauthz);
+        } else if (acl) {
+            if (strcmp(vd->id, "default") == 0) {
+                vd->sasl.authzid = g_strdup("vnc.username");
+            } else {
+                vd->sasl.authzid = g_strdup_printf("vnc.%s.username", vd->id);
+            }
+            vd->sasl.authz = QAUTHZ(qauthz_list_new(vd->sasl.authzid,
+                                                    QAUTHZ_LIST_POLICY_DENY,
+                                                    &error_abort));
         }
-        vd->sasl.authz = QAUTHZ(qauthz_list_new(vd->sasl.authzid,
-                                                QAUTHZ_LIST_POLICY_DENY,
-                                                &error_abort));
     }
 #endif
 
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index 45c57952da56..1258da479535 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -60,6 +60,11 @@ Support for invalid topologies will be removed, the user must ensure
 topologies described with -smp include all possible cpus, i.e.
   @math{@var{sockets} * @var{cores} * @var{threads} = @var{maxcpus}}.
 
+@subsection -vnc acl (since 4.0.0)
+
+The @code{acl} option to the @code{-vnc} argument has been replaced
+by the @code{tls-authz} and @code{sasl-authz} options.
+
 @section QEMU Machine Protocol (QMP) commands
 
 @subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0)
diff --git a/qemu-options.hx b/qemu-options.hx
index 1cf9aac1fe35..c74f99b2653a 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1624,6 +1624,14 @@ will cause the VNC server socket to enable the VeNCrypt auth
 mechanism.  The credentials should have been previously created
 using the @option{-object tls-creds} argument.
 
+@item tls-authz=@var{ID}
+
+Provides the ID of the QAuthZ authorization object against which
+the client's x509 distinguished name will validated. This object is
+only resolved at time of use, so can be deleted and recreated on the
+fly while the VNC server is active. If missing, it will default
+to denying access.
+
 @item sasl
 
 Require that the client use SASL to authenticate with the VNC server.
@@ -1639,18 +1647,25 @@ ensures a data encryption preventing compromise of authentication
 credentials. See the @ref{vnc_security} section for details on using
 SASL authentication.
 
+@item sasl-authz=@var{ID}
+
+Provides the ID of the QAuthZ authorization object against which
+the client's SASL username will validated. This object is
+only resolved at time of use, so can be deleted and recreated on the
+fly while the VNC server is active. If missing, it will default
+to denying access.
+
 @item acl
 
-Turn on access control lists for checking of the x509 client certificate
-and SASL party. For x509 certs, the ACL check is made against the
-certificate's distinguished name. This is something that looks like
-@code{C=GB,O=ACME,L=Boston,CN=bob}. For SASL party, the ACL check is
-made against the username, which depending on the SASL plugin, may
-include a realm component, eg @code{bob} or @code{bob@@EXAMPLE.COM}.
-When the @option{acl} flag is set, the initial access list will be
-empty, with a @code{deny} policy. Thus no one will be allowed to
-use the VNC server until the ACLs have been loaded. This can be
-achieved using the @code{acl} monitor command.
+Legacy method for enabling authorization of clients against the
+x509 distinguished name and SASL username. It results in the creation
+of two @code{authz-list} objects with IDs of @code{vnc.username} and
+@code{vnc.x509dname}. The rules for these objects must be configured
+with the HMP ACL commands.
+
+This option is deprecated and should no longer be used. The new
+@option{sasl-authz} and @option{tls-authz} options are a
+replacement.
 
 @item lossy
 
-- 
2.18.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Qemu-devel] [PULL 5/5] monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2019-03-11  8:26 ` [Qemu-devel] [PULL 4/5] vnc: allow specifying a custom authorization object name Gerd Hoffmann
@ 2019-03-11  8:26 ` Gerd Hoffmann
  2019-03-11 13:45 ` [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Peter Maydell
  5 siblings, 0 replies; 11+ messages in thread
From: Gerd Hoffmann @ 2019-03-11  8:26 UTC (permalink / raw)
  To: qemu-devel
  Cc: libvir-list, Dr. David Alan Gilbert, Gerd Hoffmann,
	Markus Armbruster, Daniel P. Berrangé

From: Daniel P. Berrangé <berrange@redhat.com>

The various ACL related commands are obsolete now that the QAuthZ
framework for authorization is fully integrated throughout QEMU network
services. These only ever worked with VNC and were never used by libvirt.
Mark it as deprecated with no direct replacement to be provided.

Authorization is now provided by using 'object_add' together with
the 'tls-authz' or 'sasl-authz' parameters to the VNC server, and
equivalent for other network services.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-id: 20190227145755.26556-3-berrange@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 monitor.c            | 23 +++++++++++++++++++++++
 qemu-deprecated.texi |  6 ++++++
 2 files changed, 29 insertions(+)

diff --git a/monitor.c b/monitor.c
index defa129319b0..72061d5baeb4 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2032,6 +2032,19 @@ static QAuthZList *find_auth(Monitor *mon, const char *name)
     return QAUTHZ_LIST(obj);
 }
 
+static bool warn_acl;
+static void hmp_warn_acl(void)
+{
+    if (warn_acl) {
+        return;
+    }
+    error_report("The acl_show, acl_reset, acl_policy, acl_add, acl_remove "
+                 "commands are deprecated with no replacement. Authorization "
+                 "for VNC should be performed using the pluggable QAuthZ "
+                 "objects");
+    warn_acl = true;
+}
+
 static void hmp_acl_show(Monitor *mon, const QDict *qdict)
 {
     const char *aclname = qdict_get_str(qdict, "aclname");
@@ -2039,6 +2052,8 @@ static void hmp_acl_show(Monitor *mon, const QDict *qdict)
     QAuthZListRuleList *rules;
     size_t i = 0;
 
+    hmp_warn_acl();
+
     if (!auth) {
         return;
     }
@@ -2062,6 +2077,8 @@ static void hmp_acl_reset(Monitor *mon, const QDict *qdict)
     const char *aclname = qdict_get_str(qdict, "aclname");
     QAuthZList *auth = find_auth(mon, aclname);
 
+    hmp_warn_acl();
+
     if (!auth) {
         return;
     }
@@ -2080,6 +2097,8 @@ static void hmp_acl_policy(Monitor *mon, const QDict *qdict)
     int val;
     Error *err = NULL;
 
+    hmp_warn_acl();
+
     if (!auth) {
         return;
     }
@@ -2124,6 +2143,8 @@ static void hmp_acl_add(Monitor *mon, const QDict *qdict)
     QAuthZListFormat format;
     size_t i = 0;
 
+    hmp_warn_acl();
+
     if (!auth) {
         return;
     }
@@ -2169,6 +2190,8 @@ static void hmp_acl_remove(Monitor *mon, const QDict *qdict)
     QAuthZList *auth = find_auth(mon, aclname);
     ssize_t i = 0;
 
+    hmp_warn_acl();
+
     if (!auth) {
         return;
     }
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index 1258da479535..1e15f57e9cc9 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -104,6 +104,12 @@ The @option{[hub_id name]} parameter tuple of the 'hostfwd_add' and
 Use ``device_add'' for hotplugging vCPUs instead of ``cpu-add''.  See
 documentation of ``query-hotpluggable-cpus'' for additional details.
 
+@subsection acl_show, acl_reset, acl_policy, acl_add, acl_remove (since 4.0.0)
+
+The ``acl_show'', ``acl_reset'', ``acl_policy'', ``acl_add'', and
+``acl_remove'' commands are deprecated with no replacement. Authorization
+for VNC should be performed using the pluggable QAuthZ objects.
+
 @section System emulator devices
 
 @subsection bluetooth (since 3.1)
-- 
2.18.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches
  2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2019-03-11  8:26 ` [Qemu-devel] [PULL 5/5] monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove Gerd Hoffmann
@ 2019-03-11 13:45 ` Peter Maydell
  2019-03-11 13:51   ` [Qemu-devel] [libvirt] " Daniel P. Berrangé
  5 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2019-03-11 13:45 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: QEMU Developers, Libvirt, Markus Armbruster, Dr. David Alan Gilbert

On Mon, 11 Mar 2019 at 08:40, Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:
>
>   Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)
>
> are available in the Git repository at:
>
>   git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request
>
> for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:
>
>   monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)
>
> ----------------------------------------------------------------
> curses: wide char input support.
> vnc: acl update, stall fix.
>
> ----------------------------------------------------------------

Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
for any user-visible changes.

-- PMM

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [libvirt]  [PULL 0/5] Ui 20190311 v2 patches
  2019-03-11 13:45 ` [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Peter Maydell
@ 2019-03-11 13:51   ` Daniel P. Berrangé
  2019-03-11 14:08     ` Samuel Thibault
  0 siblings, 1 reply; 11+ messages in thread
From: Daniel P. Berrangé @ 2019-03-11 13:51 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Gerd Hoffmann, Libvirt, QEMU Developers, Dr. David Alan Gilbert

On Mon, Mar 11, 2019 at 01:45:13PM +0000, Peter Maydell wrote:
> On Mon, 11 Mar 2019 at 08:40, Gerd Hoffmann <kraxel@redhat.com> wrote:
> >
> > The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:
> >
> >   Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)
> >
> > are available in the Git repository at:
> >
> >   git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request
> >
> > for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:
> >
> >   monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)
> >
> > ----------------------------------------------------------------
> > curses: wide char input support.
> > vnc: acl update, stall fix.
> >
> > ----------------------------------------------------------------
> 
> Applied, thanks.
> 
> Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
> for any user-visible changes.

Gerd, I'll take care of updating the changelog for the auth / acl
related parts of the pull request


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [libvirt]  [PULL 0/5] Ui 20190311 v2 patches
  2019-03-11 13:51   ` [Qemu-devel] [libvirt] " Daniel P. Berrangé
@ 2019-03-11 14:08     ` Samuel Thibault
  2019-03-11 14:12       ` Daniel P. Berrangé
  2019-03-11 14:22       ` Samuel Thibault
  0 siblings, 2 replies; 11+ messages in thread
From: Samuel Thibault @ 2019-03-11 14:08 UTC (permalink / raw)
  To: Daniel P. Berrangé; +Cc: Peter Maydell, Gerd Hoffmann, QEMU Developers

Daniel P. Berrangé, le lun. 11 mars 2019 13:51:16 +0000, a ecrit:
> On Mon, Mar 11, 2019 at 01:45:13PM +0000, Peter Maydell wrote:
> > On Mon, 11 Mar 2019 at 08:40, Gerd Hoffmann <kraxel@redhat.com> wrote:
> > >
> > > The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:
> > >
> > >   Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)
> > >
> > > are available in the Git repository at:
> > >
> > >   git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request
> > >
> > > for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:
> > >
> > >   monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)
> > >
> > > ----------------------------------------------------------------
> > > curses: wide char input support.
> > > vnc: acl update, stall fix.
> > >
> > > ----------------------------------------------------------------
> > 
> > Applied, thanks.
> > 
> > Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
> > for any user-visible changes.
> 
> Gerd, I'll take care of updating the changelog for the auth / acl
> related parts of the pull request

I wanted to do the same for the curses part but I don't seem to have a
wiki account, could somebody create one for me?

Samuel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [libvirt]  [PULL 0/5] Ui 20190311 v2 patches
  2019-03-11 14:08     ` Samuel Thibault
@ 2019-03-11 14:12       ` Daniel P. Berrangé
  2019-03-11 14:22       ` Samuel Thibault
  1 sibling, 0 replies; 11+ messages in thread
From: Daniel P. Berrangé @ 2019-03-11 14:12 UTC (permalink / raw)
  To: Samuel Thibault; +Cc: Peter Maydell, Gerd Hoffmann, QEMU Developers

On Mon, Mar 11, 2019 at 03:08:16PM +0100, Samuel Thibault wrote:
> Daniel P. Berrangé, le lun. 11 mars 2019 13:51:16 +0000, a ecrit:
> > On Mon, Mar 11, 2019 at 01:45:13PM +0000, Peter Maydell wrote:
> > > On Mon, 11 Mar 2019 at 08:40, Gerd Hoffmann <kraxel@redhat.com> wrote:
> > > >
> > > > The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:
> > > >
> > > >   Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)
> > > >
> > > > are available in the Git repository at:
> > > >
> > > >   git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request
> > > >
> > > > for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:
> > > >
> > > >   monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)
> > > >
> > > > ----------------------------------------------------------------
> > > > curses: wide char input support.
> > > > vnc: acl update, stall fix.
> > > >
> > > > ----------------------------------------------------------------
> > > 
> > > Applied, thanks.
> > > 
> > > Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
> > > for any user-visible changes.
> > 
> > Gerd, I'll take care of updating the changelog for the auth / acl
> > related parts of the pull request
> 
> I wanted to do the same for the curses part but I don't seem to have a
> wiki account, could somebody create one for me?

Sure, I can create you an account. Will message you offlist...

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Qemu-devel] [libvirt]  [PULL 0/5] Ui 20190311 v2 patches
  2019-03-11 14:08     ` Samuel Thibault
  2019-03-11 14:12       ` Daniel P. Berrangé
@ 2019-03-11 14:22       ` Samuel Thibault
  1 sibling, 0 replies; 11+ messages in thread
From: Samuel Thibault @ 2019-03-11 14:22 UTC (permalink / raw)
  To: Daniel P. Berrangé; +Cc: Peter Maydell, Gerd Hoffmann, QEMU Developers

Samuel Thibault, le lun. 11 mars 2019 15:08:16 +0100, a ecrit:
> Daniel P. Berrangé, le lun. 11 mars 2019 13:51:16 +0000, a ecrit:
> > On Mon, Mar 11, 2019 at 01:45:13PM +0000, Peter Maydell wrote:
> > > On Mon, 11 Mar 2019 at 08:40, Gerd Hoffmann <kraxel@redhat.com> wrote:
> > > >
> > > > The following changes since commit e2a18635a400b0e68679614132e9ef6316105590:
> > > >
> > > >   Merge remote-tracking branch 'remotes/ericb/tags/pull-nbd-2019-03-08' into staging (2019-03-09 20:55:44 +0000)
> > > >
> > > > are available in the Git repository at:
> > > >
> > > >   git://git.kraxel.org/qemu tags/ui-20190311-v2-pull-request
> > > >
> > > > for you to fetch changes up to 0143840771548e8ffece831398d745880ddfa080:
> > > >
> > > >   monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove (2019-03-11 08:39:02 +0100)
> > > >
> > > > ----------------------------------------------------------------
> > > > curses: wide char input support.
> > > > vnc: acl update, stall fix.
> > > >
> > > > ----------------------------------------------------------------
> > > 
> > > Applied, thanks.
> > > 
> > > Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
> > > for any user-visible changes.
> > 
> > Gerd, I'll take care of updating the changelog for the auth / acl
> > related parts of the pull request
> 
> I wanted to do the same for the curses part but I don't seem to have a
> wiki account, could somebody create one for me?

Done so, and thus Gerd: done so :)

Samuel

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-03-11 14:22 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-11  8:26 [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Gerd Hoffmann
2019-03-11  8:26 ` [Qemu-devel] [PULL 1/5] Reduce curses escdelay from 1s to 25ms Gerd Hoffmann
2019-03-11  8:26 ` [Qemu-devel] [PULL 2/5] curses: support wide input Gerd Hoffmann
2019-03-11  8:26 ` [Qemu-devel] [PULL 3/5] vnc: fix update stalls Gerd Hoffmann
2019-03-11  8:26 ` [Qemu-devel] [PULL 4/5] vnc: allow specifying a custom authorization object name Gerd Hoffmann
2019-03-11  8:26 ` [Qemu-devel] [PULL 5/5] monitor: deprecate acl_show, acl_reset, acl_policy, acl_add, acl_remove Gerd Hoffmann
2019-03-11 13:45 ` [Qemu-devel] [PULL 0/5] Ui 20190311 v2 patches Peter Maydell
2019-03-11 13:51   ` [Qemu-devel] [libvirt] " Daniel P. Berrangé
2019-03-11 14:08     ` Samuel Thibault
2019-03-11 14:12       ` Daniel P. Berrangé
2019-03-11 14:22       ` Samuel Thibault

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.