From: Anthony Liguori <anthony@codemonkey.ws>
To: "Daniel P. Berrange" <berrange@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] PATCH: 2/7: Push VncState struct into vnc.h
Date: Sat, 14 Feb 2009 16:09:31 -0600 [thread overview]
Message-ID: <4997411B.9030805@codemonkey.ws> (raw)
In-Reply-To: <20090212150205.GR9894@redhat.com>
Daniel P. Berrange wrote:
> This patch moves the declaration for the VncState struct out of the
> vnc.c file and into vnc.h. This is to prepare for next patches which
> have the auth mechanisms implementated in separate vnc-auth-vencrypt.c
> and vnc-auth-sasl.c files
>
> In doing this, I discovered that there is a pile of duplicated keymap
> code statically compiled into all the console frontends. A couple of
> trivial 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.
>
It would be better if you split the keymap cleanup into a different patch.
Regards,
Anthony Liguori
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
>
>
> 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 | 101 ++---------------------------------------
> vnc.h | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
> vnc_keysym.h | 5 --
> 10 files changed, 235 insertions(+), 147 deletions(-)
>
>
> Daniel
>
>
> diff -r 1e8d80609fe1 Makefile
> --- a/Makefile Wed Feb 11 17:31:30 2009 +0000
> +++ b/Makefile Wed Feb 11 17:31:34 2009 +0000
> @@ -137,6 +137,7 @@ endif
> AUDIO_OBJS+= wavcapture.o
> OBJS+=$(addprefix audio/, $(AUDIO_OBJS))
>
> +OBJS+=keymaps.o
> ifdef CONFIG_SDL
> OBJS+=sdl.o x_keymap.o
> endif
> @@ -161,15 +162,17 @@ LIBS+=$(VDE_LIBS)
>
> cocoa.o: cocoa.m
>
> -sdl.o: sdl.c keymaps.c sdl_keysym.h
> +keymaps.o: keymaps.c keymaps.h
> +
> +sdl.o: sdl.c keymaps.h sdl_keysym.h
>
> sdl.o audio/sdlaudio.o: CFLAGS += $(SDL_CFLAGS)
>
> -vnc.o: vnc.c keymaps.c sdl_keysym.h vnchextile.h d3des.c d3des.h
> +vnc.o: vnc.c keymaps.h sdl_keysym.h vnchextile.h d3des.c d3des.h
>
> vnc.o: CFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
>
> -curses.o: curses.c keymaps.c curses_keys.h
> +curses.o: curses.c keymaps.h curses_keys.h
>
> bt-host.o: CFLAGS += $(CONFIG_BLUEZ_CFLAGS)
>
> diff -r 1e8d80609fe1 curses.c
> --- a/curses.c Wed Feb 11 17:31:30 2009 +0000
> +++ b/curses.c Wed Feb 11 17:31:34 2009 +0000
> @@ -158,7 +158,6 @@ static void curses_cursor_position(Displ
> /* generic keyboard conversion */
>
> #include "curses_keys.h"
> -#include "keymaps.c"
>
> static kbd_layout_t *kbd_layout = 0;
> static int keycode2keysym[CURSES_KEYS];
> @@ -311,7 +310,7 @@ static void curses_keyboard_setup(void)
> keyboard_layout = "en-us";
> #endif
> if(keyboard_layout) {
> - kbd_layout = init_keyboard_layout(keyboard_layout);
> + kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
> if (!kbd_layout)
> exit(1);
> }
> diff -r 1e8d80609fe1 curses_keys.h
> --- a/curses_keys.h Wed Feb 11 17:31:30 2009 +0000
> +++ b/curses_keys.h Wed Feb 11 17:31:34 2009 +0000
> @@ -21,6 +21,10 @@
> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> * THE SOFTWARE.
> */
> +
> +#include "keymaps.h"
> +
> +
> #define KEY_RELEASE 0x80
> #define KEY_MASK 0x7f
> #define SHIFT_CODE 0x2a
> @@ -239,11 +243,6 @@ static const int curses2keysym[CURSES_KE
>
> };
>
> -typedef struct {
> - const char* name;
> - int keysym;
> -} name2keysym_t;
> -
> static const name2keysym_t name2keysym[] = {
> /* Plain ASCII */
> { "space", 0x020 },
> diff -r 1e8d80609fe1 keymaps.c
> --- a/keymaps.c Wed Feb 11 17:31:30 2009 +0000
> +++ b/keymaps.c Wed Feb 11 17:31:34 2009 +0000
> @@ -22,34 +22,20 @@
> * THE SOFTWARE.
> */
>
> -static int get_keysym(const char *name)
> +#include "keymaps.h"
> +#include "sysemu.h"
> +
> +static int get_keysym(const name2keysym_t *table,
> + const char *name)
> {
> const name2keysym_t *p;
> - for(p = name2keysym; p->name != NULL; p++) {
> + for(p = table; p->name != NULL; p++) {
> if (!strcmp(p->name, name))
> return p->keysym;
> }
> return 0;
> }
>
> -struct key_range {
> - int start;
> - int end;
> - struct key_range *next;
> -};
> -
> -#define MAX_NORMAL_KEYCODE 512
> -#define MAX_EXTRA_COUNT 256
> -typedef struct {
> - uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];
> - struct {
> - int keysym;
> - uint16_t keycode;
> - } keysym2keycode_extra[MAX_EXTRA_COUNT];
> - int extra_count;
> - struct key_range *keypad_range;
> - struct key_range *numlock_range;
> -} kbd_layout_t;
>
> static void add_to_key_range(struct key_range **krp, int code) {
> struct key_range *kr;
> @@ -73,7 +59,8 @@ static void add_to_key_range(struct key_
> }
> }
>
> -static kbd_layout_t *parse_keyboard_layout(const char *language,
> +static kbd_layout_t *parse_keyboard_layout(const name2keysym_t *table,
> + const char *language,
> kbd_layout_t * k)
> {
> FILE *f;
> @@ -102,7 +89,7 @@ static kbd_layout_t *parse_keyboard_layo
> if (!strncmp(line, "map ", 4))
> continue;
> if (!strncmp(line, "include ", 8)) {
> - parse_keyboard_layout(line + 8, k);
> + parse_keyboard_layout(table, line + 8, k);
> } else {
> char *end_of_keysym = line;
> while (*end_of_keysym != 0 && *end_of_keysym != ' ')
> @@ -110,7 +97,7 @@ static kbd_layout_t *parse_keyboard_layo
> if (*end_of_keysym) {
> int keysym;
> *end_of_keysym = 0;
> - keysym = get_keysym(line);
> + keysym = get_keysym(table, line);
> if (keysym == 0) {
> // fprintf(stderr, "Warning: unknown keysym %s\n", line);
> } else {
> @@ -154,12 +141,14 @@ static kbd_layout_t *parse_keyboard_layo
> return k;
> }
>
> -static void *init_keyboard_layout(const char *language)
> +
> +void *init_keyboard_layout(const name2keysym_t *table, const char *language)
> {
> - return parse_keyboard_layout(language, 0);
> + return parse_keyboard_layout(table, language, 0);
> }
>
> -static int keysym2scancode(void *kbd_layout, int keysym)
> +
> +int keysym2scancode(void *kbd_layout, int keysym)
> {
> kbd_layout_t *k = kbd_layout;
> if (keysym < MAX_NORMAL_KEYCODE) {
> @@ -180,7 +169,7 @@ static int keysym2scancode(void *kbd_lay
> return 0;
> }
>
> -static inline int keycode_is_keypad(void *kbd_layout, int keycode)
> +int keycode_is_keypad(void *kbd_layout, int keycode)
> {
> kbd_layout_t *k = kbd_layout;
> struct key_range *kr;
> @@ -191,7 +180,7 @@ static inline int keycode_is_keypad(void
> return 0;
> }
>
> -static inline int keysym_is_numlock(void *kbd_layout, int keysym)
> +int keysym_is_numlock(void *kbd_layout, int keysym)
> {
> kbd_layout_t *k = kbd_layout;
> struct key_range *kr;
> diff -r 1e8d80609fe1 keymaps.h
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/keymaps.h Wed Feb 11 17:31:34 2009 +0000
> @@ -0,0 +1,60 @@
> +/*
> + * QEMU keysym to keycode conversion using rdesktop keymaps
> + *
> + * Copyright (c) 2004 Johannes Schindelin
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#ifndef __QEMU_KEYMAPS_H__
> +#define __QEMU_KEYMAPS_H__
> +
> +#include "qemu-common.h"
> +
> +typedef struct {
> + const char* name;
> + int keysym;
> +} name2keysym_t;
> +
> +struct key_range {
> + int start;
> + int end;
> + struct key_range *next;
> +};
> +
> +#define MAX_NORMAL_KEYCODE 512
> +#define MAX_EXTRA_COUNT 256
> +typedef struct {
> + uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];
> + struct {
> + int keysym;
> + uint16_t keycode;
> + } keysym2keycode_extra[MAX_EXTRA_COUNT];
> + int extra_count;
> + struct key_range *keypad_range;
> + struct key_range *numlock_range;
> +} kbd_layout_t;
> +
> +
> +void *init_keyboard_layout(const name2keysym_t *table, const char *language);
> +int keysym2scancode(void *kbd_layout, int keysym);
> +int keycode_is_keypad(void *kbd_layout, int keycode);
> +int keysym_is_numlock(void *kbd_layout, int keysym);
> +
> +#endif /* __QEMU_KEYMAPS_H__ */
> diff -r 1e8d80609fe1 sdl.c
> --- a/sdl.c Wed Feb 11 17:31:30 2009 +0000
> +++ b/sdl.c Wed Feb 11 17:31:34 2009 +0000
> @@ -107,7 +107,6 @@ static void sdl_resize(DisplayState *ds)
> /* generic keyboard conversion */
>
> #include "sdl_keysym.h"
> -#include "keymaps.c"
>
> static kbd_layout_t *kbd_layout = NULL;
>
> @@ -623,7 +622,7 @@ void sdl_display_init(DisplayState *ds,
> keyboard_layout = "en-us";
> #endif
> if(keyboard_layout) {
> - kbd_layout = init_keyboard_layout(keyboard_layout);
> + kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
> if (!kbd_layout)
> exit(1);
> }
> diff -r 1e8d80609fe1 sdl_keysym.h
> --- a/sdl_keysym.h Wed Feb 11 17:31:30 2009 +0000
> +++ b/sdl_keysym.h Wed Feb 11 17:31:34 2009 +0000
> @@ -1,7 +1,6 @@
> -typedef struct {
> - const char* name;
> - int keysym;
> -} name2keysym_t;
> +
> +#include "keymaps.h"
> +
> static const name2keysym_t name2keysym[]={
> /* ascii */
> { "space", 0x020},
> diff -r 1e8d80609fe1 vnc.c
> --- a/vnc.c Wed Feb 11 17:31:30 2009 +0000
> +++ b/vnc.c Wed Feb 11 17:31:34 2009 +0000
> @@ -3,6 +3,7 @@
> *
> * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
> * Copyright (C) 2006 Fabrice Bellard
> + * Copyright (C) 2009 Red Hat, Inc.
> *
> * Permission is hereby granted, free of charge, to any person obtaining a copy
> * of this software and associated documentation files (the "Software"), to deal
> @@ -23,26 +24,17 @@
> * THE SOFTWARE.
> */
>
> -#include "qemu-common.h"
> -#include "console.h"
> +#include "vnc.h"
> +
> #include "sysemu.h"
> #include "qemu_socket.h"
> #include "qemu-timer.h"
> -#include "audio/audio.h"
> -#include <zlib.h>
>
> #define VNC_REFRESH_INTERVAL (1000 / 30)
>
> -#include "vnc.h"
> #include "vnc_keysym.h"
> -#include "keymaps.c"
> #include "d3des.h"
>
> -#ifdef CONFIG_VNC_TLS
> -#include <gnutls/gnutls.h>
> -#include <gnutls/x509.h>
> -#endif /* CONFIG_VNC_TLS */
> -
> // #define _VNC_DEBUG 1
>
> #ifdef _VNC_DEBUG
> @@ -65,91 +57,8 @@ static void vnc_debug_gnutls_log(int lev
> } \
> }
>
> -typedef struct Buffer
> -{
> - size_t capacity;
> - size_t offset;
> - uint8_t *buffer;
> -} Buffer;
>
> -typedef struct VncState VncState;
>
> -typedef int VncReadEvent(VncState *vs, uint8_t *data, size_t len);
> -
> -typedef void VncWritePixels(VncState *vs, void *data, int size);
> -
> -typedef void VncSendHextileTile(VncState *vs,
> - int x, int y, int w, int h,
> - void *last_bg,
> - void *last_fg,
> - int *has_bg, int *has_fg);
> -
> -#define VNC_MAX_WIDTH 2048
> -#define VNC_MAX_HEIGHT 2048
> -#define VNC_DIRTY_WORDS (VNC_MAX_WIDTH / (16 * 32))
> -
> -#define VNC_AUTH_CHALLENGE_SIZE 16
> -
> -struct VncState
> -{
> - QEMUTimer *timer;
> - int lsock;
> - int csock;
> - DisplayState *ds;
> - int need_update;
> - uint32_t dirty_row[VNC_MAX_HEIGHT][VNC_DIRTY_WORDS];
> - char *old_data;
> - uint32_t features;
> - int absolute;
> - int last_x;
> - int last_y;
> -
> - uint32_t vnc_encoding;
> - uint8_t tight_quality;
> - uint8_t tight_compression;
> -
> - int major;
> - int minor;
> -
> - char *display;
> - char *password;
> - int auth;
> -#ifdef CONFIG_VNC_TLS
> - int subauth;
> - int x509verify;
> -
> - char *x509cacert;
> - char *x509cacrl;
> - char *x509cert;
> - char *x509key;
> -#endif
> - char challenge[VNC_AUTH_CHALLENGE_SIZE];
> -
> -#ifdef CONFIG_VNC_TLS
> - int wiremode;
> - gnutls_session_t tls_session;
> -#endif
> -
> - Buffer output;
> - Buffer input;
> - kbd_layout_t *kbd_layout;
> - /* current output mode information */
> - VncWritePixels *write_pixels;
> - VncSendHextileTile *send_hextile_tile;
> - DisplaySurface clientds, serverds;
> -
> - CaptureVoiceOut *audio_cap;
> - struct audsettings as;
> -
> - VncReadEvent *read_handler;
> - size_t read_handler_expect;
> - /* input */
> - uint8_t modifiers_state[256];
> -
> - Buffer zlib;
> - Buffer zlib_tmp;
> - z_stream zlib_stream[4];
> -};
>
> static VncState *vnc_state; /* needed for info vnc */
> static DisplayChangeListener *dcl;
> @@ -2352,9 +2261,9 @@ void vnc_display_init(DisplayState *ds)
> vs->ds = ds;
>
> if (keyboard_layout)
> - vs->kbd_layout = init_keyboard_layout(keyboard_layout);
> + vs->kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout);
> else
> - vs->kbd_layout = init_keyboard_layout("en-us");
> + vs->kbd_layout = init_keyboard_layout(name2keysym, "en-us");
>
> if (!vs->kbd_layout)
> exit(1);
> diff -r 1e8d80609fe1 vnc.h
> --- a/vnc.h Wed Feb 11 17:31:30 2009 +0000
> +++ b/vnc.h Wed Feb 11 17:31:34 2009 +0000
> @@ -1,5 +1,139 @@
> -#ifndef __VNCTIGHT_H
> -#define __VNCTIGHT_H
> +/*
> + * QEMU VNC display driver
> + *
> + * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
> + * Copyright (C) 2006 Fabrice Bellard
> + * Copyright (C) 2009 Red Hat, Inc.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#ifndef __VNC_H
> +#define __VNC_H
> +
> +
> +#include "qemu-common.h"
> +#include "console.h"
> +#include "audio/audio.h"
> +#include <zlib.h>
> +
> +#ifdef CONFIG_VNC_TLS
> +#include <gnutls/gnutls.h>
> +#include <gnutls/x509.h>
> +#endif /* CONFIG_VNC_TLS */
> +
> +#include "keymaps.h"
> +
> +
> +/*****************************************************************************
> + *
> + * Core data structures
> + *
> + *****************************************************************************/
> +
> +
> +#define VNC_MAX_WIDTH 2048
> +#define VNC_MAX_HEIGHT 2048
> +#define VNC_DIRTY_WORDS (VNC_MAX_WIDTH / (16 * 32))
> +
> +#define VNC_AUTH_CHALLENGE_SIZE 16
> +
> +typedef struct VncState VncState;
> +
> +typedef int VncReadEvent(VncState *vs, uint8_t *data, size_t len);
> +
> +typedef void VncWritePixels(VncState *vs, void *data, int size);
> +
> +typedef void VncSendHextileTile(VncState *vs,
> + int x, int y, int w, int h,
> + void *last_bg,
> + void *last_fg,
> + int *has_bg, int *has_fg);
> +
> +
> +typedef struct Buffer
> +{
> + size_t capacity;
> + size_t offset;
> + uint8_t *buffer;
> +} Buffer;
> +
> +struct VncState
> +{
> + QEMUTimer *timer;
> + int lsock;
> + int csock;
> + DisplayState *ds;
> + int need_update;
> + uint32_t dirty_row[VNC_MAX_HEIGHT][VNC_DIRTY_WORDS];
> + char *old_data;
> + uint32_t features;
> + int absolute;
> + int last_x;
> + int last_y;
> +
> + uint32_t vnc_encoding;
> + uint8_t tight_quality;
> + uint8_t tight_compression;
> +
> + int major;
> + int minor;
> +
> + char *display;
> + char *password;
> + int auth;
> +#ifdef CONFIG_VNC_TLS
> + int subauth;
> + int x509verify;
> +
> + char *x509cacert;
> + char *x509cacrl;
> + char *x509cert;
> + char *x509key;
> +#endif
> + char challenge[VNC_AUTH_CHALLENGE_SIZE];
> +
> +#ifdef CONFIG_VNC_TLS
> + int wiremode;
> + gnutls_session_t tls_session;
> +#endif
> +
> + Buffer output;
> + Buffer input;
> + kbd_layout_t *kbd_layout;
> + /* current output mode information */
> + VncWritePixels *write_pixels;
> + VncSendHextileTile *send_hextile_tile;
> + DisplaySurface clientds, serverds;
> +
> + CaptureVoiceOut *audio_cap;
> + struct audsettings as;
> +
> + VncReadEvent *read_handler;
> + size_t read_handler_expect;
> + /* input */
> + uint8_t modifiers_state[256];
> +
> + Buffer zlib;
> + Buffer zlib_tmp;
> + z_stream zlib_stream[4];
> +};
>
> /*****************************************************************************
> *
> @@ -109,4 +243,4 @@ enum {
> #define VNC_FEATURE_TIGHT_MASK (1 << VNC_FEATURE_TIGHT)
> #define VNC_FEATURE_ZLIB_MASK (1 << VNC_FEATURE_ZLIB)
>
> -#endif /* __VNCTIGHT_H */
> +#endif /* __VNC_H */
> diff -r 1e8d80609fe1 vnc_keysym.h
> --- a/vnc_keysym.h Wed Feb 11 17:31:30 2009 +0000
> +++ b/vnc_keysym.h Wed Feb 11 17:31:34 2009 +0000
> @@ -1,7 +1,4 @@
> -typedef struct {
> - const char* name;
> - int keysym;
> -} name2keysym_t;
> +
> static const name2keysym_t name2keysym[]={
> /* ascii */
> { "space", 0x020},
>
>
next prev parent reply other threads:[~2009-02-14 22:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-12 14:53 [Qemu-devel] PATCH: 0/7: Support SASL authentication in VNC server Daniel P. Berrange
2009-02-12 15:01 ` [Qemu-devel] PATCH: 1/7: Extend 'info vnc' output to show client Daniel P. Berrange
2009-02-13 18:30 ` Anthony Liguori
2009-02-15 11:43 ` Daniel P. Berrange
2009-02-15 18:22 ` Anthony Liguori
2009-02-18 21:10 ` [Qemu-devel] " Mike Day
2009-02-12 15:02 ` [Qemu-devel] PATCH: 2/7: Push VncState struct into vnc.h Daniel P. Berrange
2009-02-14 22:09 ` Anthony Liguori [this message]
2009-02-15 11:43 ` Daniel P. Berrange
2009-02-12 15:02 ` [Qemu-devel] PATCH: 3/7: Split out VNC TLS auth code to separate file Daniel P. Berrange
2009-02-12 15:03 ` [Qemu-devel] PATCH: 4/7: Add SASL authentication extension to VNC Daniel P. Berrange
2009-02-12 15:03 ` [Qemu-devel] PATCH: 5/7: Include auth credentials in 'info vnc' Daniel P. Berrange
2009-02-12 15:04 ` [Qemu-devel] PATCH: 6/7: Support simple ACL for client authorization Daniel P. Berrange
2009-02-14 22:14 ` Anthony Liguori
2009-02-12 15:04 ` [Qemu-devel] PATCH: 7/7: Add external persistent ACL file Daniel P. Berrange
2009-02-14 22:16 ` Anthony Liguori
2009-02-15 11:28 ` Daniel P. Berrange
2009-02-12 15:43 ` [Qemu-devel] PATCH: 0/7: Support SASL authentication in VNC server Daniel P. Berrange
2009-02-14 22:17 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4997411B.9030805@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).