2006-05-14 14:07:53 +02:00
|
|
|
# Makefile for QEMU.
|
|
|
|
|
2006-04-16 14:41:07 +02:00
|
|
|
include config-host.mak
|
2009-01-21 19:12:52 +01:00
|
|
|
include $(SRC_PATH)/rules.mak
|
2003-02-19 00:35:48 +01:00
|
|
|
|
2008-09-24 03:13:40 +02:00
|
|
|
.PHONY: all clean cscope distclean dvi html info install install-doc \
|
|
|
|
recurse-all speed tar tarbin test
|
2006-05-14 14:07:53 +02:00
|
|
|
|
2007-11-18 22:12:37 +01:00
|
|
|
VPATH=$(SRC_PATH):$(SRC_PATH)/hw
|
|
|
|
|
2009-01-21 19:12:52 +01:00
|
|
|
|
2008-01-31 12:32:10 +01:00
|
|
|
CFLAGS += $(OS_CFLAGS) $(ARCH_CFLAGS)
|
|
|
|
LDFLAGS += $(OS_LDFLAGS) $(ARCH_LDFLAGS)
|
2007-04-16 20:27:06 +02:00
|
|
|
|
2008-07-02 23:16:22 +02:00
|
|
|
CPPFLAGS += -I. -I$(SRC_PATH) -MMD -MP -MT $@
|
2007-11-07 20:24:02 +01:00
|
|
|
CPPFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
2003-02-19 00:35:48 +01:00
|
|
|
LIBS=
|
2004-05-08 16:44:43 +02:00
|
|
|
ifdef CONFIG_STATIC
|
2008-01-31 12:32:10 +01:00
|
|
|
LDFLAGS += -static
|
2004-05-08 16:44:43 +02:00
|
|
|
endif
|
2006-04-23 19:57:59 +02:00
|
|
|
ifdef BUILD_DOCS
|
2008-05-27 23:13:40 +02:00
|
|
|
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8
|
2006-04-23 19:57:59 +02:00
|
|
|
else
|
|
|
|
DOCS=
|
|
|
|
endif
|
2003-05-25 18:41:18 +02:00
|
|
|
|
2007-03-17 16:00:37 +01:00
|
|
|
LIBS+=$(AIOLIBS)
|
2006-08-01 18:21:11 +02:00
|
|
|
|
2008-08-02 03:57:02 +02:00
|
|
|
ifdef CONFIG_SOLARIS
|
|
|
|
LIBS+=-lsocket -lnsl -lresolv
|
|
|
|
endif
|
|
|
|
|
2008-09-15 17:51:35 +02:00
|
|
|
ifdef CONFIG_WIN32
|
|
|
|
LIBS+=-lwinmm -lws2_32 -liphlpapi
|
|
|
|
endif
|
|
|
|
|
2008-09-24 03:13:40 +02:00
|
|
|
all: $(TOOLS) $(DOCS) recurse-all
|
2006-05-13 18:54:03 +02:00
|
|
|
|
2008-05-28 18:44:57 +02:00
|
|
|
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
|
|
|
|
|
2008-12-07 16:21:23 +01:00
|
|
|
subdir-%:
|
2009-01-26 18:07:46 +01:00
|
|
|
$(call quiet-command,$(MAKE) -C $* V="$(V)" TARGET_DIR="$*/" all,)
|
2006-05-13 15:55:08 +02:00
|
|
|
|
2008-05-28 18:44:57 +02:00
|
|
|
$(filter %-softmmu,$(SUBDIR_RULES)): libqemu_common.a
|
|
|
|
$(filter %-user,$(SUBDIR_RULES)): libqemu_user.a
|
|
|
|
|
|
|
|
recurse-all: $(SUBDIR_RULES)
|
2006-08-01 18:21:11 +02:00
|
|
|
|
2007-11-11 03:51:17 +01:00
|
|
|
#######################################################################
|
|
|
|
# BLOCK_OBJS is code used by both qemu system emulation and qemu-img
|
|
|
|
|
2008-06-09 15:47:45 +02:00
|
|
|
BLOCK_OBJS=cutils.o qemu-malloc.o
|
2007-11-11 03:51:17 +01:00
|
|
|
BLOCK_OBJS+=block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o
|
|
|
|
BLOCK_OBJS+=block-dmg.o block-bochs.o block-vpc.o block-vvfat.o
|
2008-09-15 17:51:35 +02:00
|
|
|
BLOCK_OBJS+=block-qcow2.o block-parallels.o block-nbd.o
|
2008-09-22 21:17:18 +02:00
|
|
|
BLOCK_OBJS+=nbd.o block.o aio.o
|
2008-09-15 17:51:35 +02:00
|
|
|
|
|
|
|
ifdef CONFIG_WIN32
|
|
|
|
BLOCK_OBJS += block-raw-win32.o
|
|
|
|
else
|
2008-12-12 17:41:40 +01:00
|
|
|
ifdef CONFIG_AIO
|
|
|
|
BLOCK_OBJS += posix-aio-compat.o
|
|
|
|
endif
|
2008-09-15 17:51:35 +02:00
|
|
|
BLOCK_OBJS += block-raw-posix.o
|
|
|
|
endif
|
|
|
|
|
2007-11-07 20:24:02 +01:00
|
|
|
######################################################################
|
2008-02-01 11:02:52 +01:00
|
|
|
# libqemu_common.a: Target independent part of system emulation. The
|
2007-11-07 20:24:02 +01:00
|
|
|
# long term path is to suppress *all* target specific code in case of
|
|
|
|
# system emulation, i.e. a single QEMU executable should support all
|
|
|
|
# CPUs and machines.
|
2004-05-17 22:06:42 +02:00
|
|
|
|
2008-08-21 21:25:45 +02:00
|
|
|
OBJS=$(BLOCK_OBJS)
|
2007-11-17 18:14:51 +01:00
|
|
|
OBJS+=readline.o console.o
|
2008-08-21 21:25:45 +02:00
|
|
|
|
2007-11-17 18:14:51 +01:00
|
|
|
OBJS+=irq.o
|
|
|
|
OBJS+=i2c.o smbus.o smbus_eeprom.o max7310.o max111x.o wm8750.o
|
2008-04-14 23:57:44 +02:00
|
|
|
OBJS+=ssd0303.o ssd0323.o ads7846.o stellaris_input.o twl92230.o
|
2008-05-10 00:16:11 +02:00
|
|
|
OBJS+=tmp105.o lm832x.o
|
2007-11-17 18:14:51 +01:00
|
|
|
OBJS+=scsi-disk.o cdrom.o
|
2007-12-24 17:10:43 +01:00
|
|
|
OBJS+=scsi-generic.o
|
2008-11-22 22:03:55 +01:00
|
|
|
OBJS+=usb.o usb-hub.o usb-$(HOST_USB).o usb-hid.o usb-msd.o usb-wacom.o
|
2008-07-17 22:47:13 +02:00
|
|
|
OBJS+=usb-serial.o usb-net.o
|
2007-11-25 00:35:08 +01:00
|
|
|
OBJS+=sd.o ssi-sd.o
|
2008-09-29 02:40:44 +02:00
|
|
|
OBJS+=bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o
|
2008-11-11 22:20:14 +01:00
|
|
|
OBJS+=buffered_file.o migration.o migration-tcp.o net.o qemu-sockets.o
|
2008-12-10 20:18:40 +01:00
|
|
|
OBJS+=qemu-char.o aio.o net-checksum.o savevm.o cache-utils.o
|
2007-11-17 18:14:51 +01:00
|
|
|
|
2008-04-08 08:01:02 +02:00
|
|
|
ifdef CONFIG_BRLAPI
|
|
|
|
OBJS+= baum.o
|
|
|
|
LIBS+=-lbrlapi
|
|
|
|
endif
|
|
|
|
|
2007-11-07 20:24:02 +01:00
|
|
|
ifdef CONFIG_WIN32
|
|
|
|
OBJS+=tap-win32.o
|
2008-11-11 22:20:14 +01:00
|
|
|
else
|
|
|
|
OBJS+=migration-exec.o
|
2007-11-07 20:24:02 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
AUDIO_OBJS = audio.o noaudio.o wavaudio.o mixeng.o
|
|
|
|
ifdef CONFIG_SDL
|
|
|
|
AUDIO_OBJS += sdlaudio.o
|
|
|
|
endif
|
|
|
|
ifdef CONFIG_OSS
|
|
|
|
AUDIO_OBJS += ossaudio.o
|
|
|
|
endif
|
|
|
|
ifdef CONFIG_COREAUDIO
|
|
|
|
AUDIO_OBJS += coreaudio.o
|
2008-01-14 05:24:29 +01:00
|
|
|
AUDIO_PT = yes
|
2007-11-07 20:24:02 +01:00
|
|
|
endif
|
|
|
|
ifdef CONFIG_ALSA
|
|
|
|
AUDIO_OBJS += alsaaudio.o
|
|
|
|
endif
|
|
|
|
ifdef CONFIG_DSOUND
|
|
|
|
AUDIO_OBJS += dsoundaudio.o
|
|
|
|
endif
|
|
|
|
ifdef CONFIG_FMOD
|
|
|
|
AUDIO_OBJS += fmodaudio.o
|
|
|
|
audio/audio.o audio/fmodaudio.o: CPPFLAGS := -I$(CONFIG_FMOD_INC) $(CPPFLAGS)
|
|
|
|
endif
|
2008-01-14 05:24:29 +01:00
|
|
|
ifdef CONFIG_ESD
|
|
|
|
AUDIO_PT = yes
|
|
|
|
AUDIO_PT_INT = yes
|
|
|
|
AUDIO_OBJS += esdaudio.o
|
|
|
|
endif
|
2008-07-02 23:03:08 +02:00
|
|
|
ifdef CONFIG_PA
|
|
|
|
AUDIO_PT = yes
|
|
|
|
AUDIO_PT_INT = yes
|
|
|
|
AUDIO_OBJS += paaudio.o
|
|
|
|
endif
|
2008-01-14 05:24:29 +01:00
|
|
|
ifdef AUDIO_PT
|
|
|
|
LDFLAGS += -pthread
|
|
|
|
endif
|
|
|
|
ifdef AUDIO_PT_INT
|
|
|
|
AUDIO_OBJS += audio_pt_int.o
|
|
|
|
endif
|
2007-11-07 20:24:02 +01:00
|
|
|
AUDIO_OBJS+= wavcapture.o
|
|
|
|
OBJS+=$(addprefix audio/, $(AUDIO_OBJS))
|
|
|
|
|
2009-03-06 21:27:10 +01:00
|
|
|
OBJS+=keymaps.o
|
2007-11-07 20:24:02 +01:00
|
|
|
ifdef CONFIG_SDL
|
|
|
|
OBJS+=sdl.o x_keymap.o
|
|
|
|
endif
|
2008-02-10 17:33:14 +01:00
|
|
|
ifdef CONFIG_CURSES
|
|
|
|
OBJS+=curses.o
|
|
|
|
endif
|
Support ACLs for controlling VNC access ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6726 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:37 +01:00
|
|
|
OBJS+=vnc.o acl.o d3des.o
|
2009-03-06 21:27:23 +01:00
|
|
|
ifdef CONFIG_VNC_TLS
|
|
|
|
OBJS+=vnc-tls.o vnc-auth-vencrypt.o
|
|
|
|
endif
|
Add SASL authentication support ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:28 +01:00
|
|
|
ifdef CONFIG_VNC_SASL
|
|
|
|
OBJS+=vnc-auth-sasl.o
|
|
|
|
endif
|
2007-11-07 20:24:02 +01:00
|
|
|
|
|
|
|
ifdef CONFIG_COCOA
|
|
|
|
OBJS+=cocoa.o
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef CONFIG_SLIRP
|
|
|
|
CPPFLAGS+=-I$(SRC_PATH)/slirp
|
|
|
|
SLIRP_OBJS=cksum.o if.o ip_icmp.o ip_input.o ip_output.o \
|
|
|
|
slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o \
|
|
|
|
tcp_subr.o tcp_timer.o udp.o bootp.o debug.o tftp.o
|
|
|
|
OBJS+=$(addprefix slirp/, $(SLIRP_OBJS))
|
|
|
|
endif
|
|
|
|
|
2008-07-19 11:56:24 +02:00
|
|
|
LIBS+=$(VDE_LIBS)
|
|
|
|
|
2007-11-07 20:24:02 +01:00
|
|
|
cocoa.o: cocoa.m
|
|
|
|
|
2009-03-06 21:27:10 +01:00
|
|
|
keymaps.o: keymaps.c keymaps.h
|
|
|
|
|
|
|
|
sdl.o: sdl.c keymaps.h sdl_keysym.h
|
2009-01-21 19:12:44 +01:00
|
|
|
|
|
|
|
sdl.o audio/sdlaudio.o: CFLAGS += $(SDL_CFLAGS)
|
2007-11-07 20:24:02 +01:00
|
|
|
|
Support ACLs for controlling VNC access ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6726 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:37 +01:00
|
|
|
acl.o: acl.h acl.c
|
|
|
|
|
Add SASL authentication support ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:28 +01:00
|
|
|
vnc.h: vnc-tls.h vnc-auth-vencrypt.h vnc-auth-sasl.h keymaps.h
|
2009-03-06 21:27:23 +01:00
|
|
|
|
Support ACLs for controlling VNC access ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6726 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:37 +01:00
|
|
|
vnc.o: vnc.c vnc.h vnc_keysym.h vnchextile.h d3des.c d3des.h acl.h
|
2007-11-07 20:24:02 +01:00
|
|
|
|
2009-01-21 19:12:44 +01:00
|
|
|
vnc.o: CFLAGS += $(CONFIG_VNC_TLS_CFLAGS)
|
2008-02-10 17:33:14 +01:00
|
|
|
|
2009-03-06 21:27:23 +01:00
|
|
|
vnc-tls.o: vnc-tls.c vnc.h
|
|
|
|
|
|
|
|
vnc-auth-vencrypt.o: vnc-auth-vencrypt.c vnc.h
|
|
|
|
|
Add SASL authentication support ("Daniel P. Berrange")
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: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-06 21:27:28 +01:00
|
|
|
vnc-auth-sasl.o: vnc-auth-sasl.c vnc.h
|
|
|
|
|
2009-03-06 21:27:10 +01:00
|
|
|
curses.o: curses.c keymaps.h curses_keys.h
|
2008-09-29 01:49:55 +02:00
|
|
|
|
2009-01-21 19:12:44 +01:00
|
|
|
bt-host.o: CFLAGS += $(CONFIG_BLUEZ_CFLAGS)
|
2007-11-07 20:24:02 +01:00
|
|
|
|
|
|
|
libqemu_common.a: $(OBJS)
|
|
|
|
|
2008-05-28 18:44:57 +02:00
|
|
|
#######################################################################
|
|
|
|
# USER_OBJS is code used by qemu userspace emulation
|
2008-12-10 20:18:40 +01:00
|
|
|
USER_OBJS=cutils.o cache-utils.o
|
2008-05-28 18:44:57 +02:00
|
|
|
|
|
|
|
libqemu_user.a: $(USER_OBJS)
|
|
|
|
|
2007-11-07 20:24:02 +01:00
|
|
|
######################################################################
|
|
|
|
|
2008-09-15 17:51:35 +02:00
|
|
|
qemu-img$(EXESUF): qemu-img.o qemu-tool.o osdep.o $(BLOCK_OBJS)
|
2007-11-07 20:24:02 +01:00
|
|
|
|
2008-09-15 17:51:35 +02:00
|
|
|
qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o osdep.o $(BLOCK_OBJS)
|
2009-01-21 19:13:02 +01:00
|
|
|
|
|
|
|
qemu-img$(EXESUF) qemu-nbd$(EXESUF): LIBS += -lz
|
2008-05-27 23:13:40 +02:00
|
|
|
|
2003-02-18 23:55:36 +01:00
|
|
|
clean:
|
2003-08-12 01:01:33 +02:00
|
|
|
# avoid old build problems by removing potentially incorrect old files
|
2007-09-16 23:08:06 +02:00
|
|
|
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
|
2008-12-07 16:21:23 +01:00
|
|
|
rm -f *.o *.d *.a $(TOOLS) TAGS cscope.* *.pod *~ */*~
|
2007-11-07 20:24:02 +01:00
|
|
|
rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d
|
2004-05-12 21:32:15 +02:00
|
|
|
$(MAKE) -C tests clean
|
2003-08-10 23:39:31 +02:00
|
|
|
for d in $(TARGET_DIRS); do \
|
2004-05-12 21:32:15 +02:00
|
|
|
$(MAKE) -C $$d $@ || exit 1 ; \
|
2003-08-10 23:39:31 +02:00
|
|
|
done
|
2003-02-18 23:55:36 +01:00
|
|
|
|
2003-03-07 00:23:54 +01:00
|
|
|
distclean: clean
|
2006-04-23 19:57:59 +02:00
|
|
|
rm -f config-host.mak config-host.h $(DOCS)
|
2006-05-14 14:07:53 +02:00
|
|
|
rm -f qemu-{doc,tech}.{info,aux,cp,dvi,fn,info,ky,log,pg,toc,tp,vr}
|
2003-08-11 01:41:46 +02:00
|
|
|
for d in $(TARGET_DIRS); do \
|
2003-10-28 01:12:52 +01:00
|
|
|
rm -rf $$d || exit 1 ; \
|
2003-08-11 01:41:46 +02:00
|
|
|
done
|
2003-03-07 00:23:54 +01:00
|
|
|
|
2004-12-12 23:18:34 +01:00
|
|
|
KEYMAPS=da en-gb et fr fr-ch is lt modifiers no pt-br sv \
|
|
|
|
ar de en-us fi fr-be hr it lv nl pl ru th \
|
|
|
|
common de-ch es fo fr-ca hu ja mk nl-be pt sl tr
|
|
|
|
|
2008-11-27 16:45:16 +01:00
|
|
|
ifdef INSTALL_BLOBS
|
|
|
|
BLOBS=bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
|
2009-01-09 12:01:31 +01:00
|
|
|
video.x openbios-sparc32 openbios-sparc64 openbios-ppc \
|
|
|
|
pxe-ne2k_pci.bin pxe-rtl8139.bin pxe-pcnet.bin pxe-e1000.bin \
|
|
|
|
bamboo.dtb
|
2008-11-27 16:45:16 +01:00
|
|
|
else
|
|
|
|
BLOBS=
|
|
|
|
endif
|
|
|
|
|
2006-05-01 01:54:18 +02:00
|
|
|
install-doc: $(DOCS)
|
|
|
|
mkdir -p "$(DESTDIR)$(docdir)"
|
|
|
|
$(INSTALL) -m 644 qemu-doc.html qemu-tech.html "$(DESTDIR)$(docdir)"
|
|
|
|
ifndef CONFIG_WIN32
|
|
|
|
mkdir -p "$(DESTDIR)$(mandir)/man1"
|
2009-01-22 18:15:21 +01:00
|
|
|
$(INSTALL) -m 644 qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1"
|
2008-05-27 23:13:40 +02:00
|
|
|
mkdir -p "$(DESTDIR)$(mandir)/man8"
|
2009-01-22 18:15:21 +01:00
|
|
|
$(INSTALL) -m 644 qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
|
2006-05-01 01:54:18 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
install: all $(if $(BUILD_DOCS),install-doc)
|
2006-04-09 22:47:35 +02:00
|
|
|
mkdir -p "$(DESTDIR)$(bindir)"
|
2007-10-20 20:29:34 +02:00
|
|
|
ifneq ($(TOOLS),)
|
2006-04-17 15:57:12 +02:00
|
|
|
$(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
|
2007-10-20 20:29:34 +02:00
|
|
|
endif
|
2008-11-27 16:45:16 +01:00
|
|
|
ifneq ($(BLOBS),)
|
2006-04-09 22:47:35 +02:00
|
|
|
mkdir -p "$(DESTDIR)$(datadir)"
|
2008-11-27 16:45:16 +01:00
|
|
|
set -e; for x in $(BLOBS); do \
|
2006-04-17 15:57:12 +02:00
|
|
|
$(INSTALL) -m 644 $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \
|
2006-04-16 14:41:07 +02:00
|
|
|
done
|
2008-11-27 16:45:16 +01:00
|
|
|
endif
|
2004-04-02 22:55:59 +02:00
|
|
|
ifndef CONFIG_WIN32
|
2006-04-09 22:47:35 +02:00
|
|
|
mkdir -p "$(DESTDIR)$(datadir)/keymaps"
|
2008-03-05 19:16:09 +01:00
|
|
|
set -e; for x in $(KEYMAPS); do \
|
2006-04-17 15:57:12 +02:00
|
|
|
$(INSTALL) -m 644 $(SRC_PATH)/keymaps/$$x "$(DESTDIR)$(datadir)/keymaps"; \
|
2006-04-16 14:41:07 +02:00
|
|
|
done
|
2004-04-02 22:55:59 +02:00
|
|
|
endif
|
2003-08-10 23:39:31 +02:00
|
|
|
for d in $(TARGET_DIRS); do \
|
2004-05-12 21:32:15 +02:00
|
|
|
$(MAKE) -C $$d $@ || exit 1 ; \
|
2003-08-10 23:39:31 +02:00
|
|
|
done
|
2003-03-22 18:31:19 +01:00
|
|
|
|
2003-03-01 18:13:26 +01:00
|
|
|
# various test targets
|
2007-11-14 11:34:57 +01:00
|
|
|
test speed: all
|
2004-05-12 21:32:15 +02:00
|
|
|
$(MAKE) -C tests $@
|
2003-02-18 23:55:36 +01:00
|
|
|
|
2007-09-16 23:08:06 +02:00
|
|
|
TAGS:
|
2003-04-29 22:41:16 +02:00
|
|
|
etags *.[ch] tests/*.[ch]
|
2003-02-18 23:55:36 +01:00
|
|
|
|
2005-08-21 11:23:39 +02:00
|
|
|
cscope:
|
|
|
|
rm -f ./cscope.*
|
2008-10-01 23:46:58 +02:00
|
|
|
find . -name "*.[ch]" -print | sed 's,^\./,,' > ./cscope.files
|
2005-08-21 11:23:39 +02:00
|
|
|
cscope -b
|
|
|
|
|
2003-03-23 21:17:16 +01:00
|
|
|
# documentation
|
2004-04-04 17:21:17 +02:00
|
|
|
%.html: %.texi
|
2003-03-23 21:17:16 +01:00
|
|
|
texi2html -monolithic -number $<
|
|
|
|
|
2006-05-01 00:51:54 +02:00
|
|
|
%.info: %.texi
|
|
|
|
makeinfo $< -o $@
|
|
|
|
|
|
|
|
%.dvi: %.texi
|
|
|
|
texi2dvi $<
|
|
|
|
|
2003-10-01 02:13:48 +02:00
|
|
|
qemu.1: qemu-doc.texi
|
2006-04-16 14:41:07 +02:00
|
|
|
$(SRC_PATH)/texi2pod.pl $< qemu.pod
|
2003-10-01 02:13:48 +02:00
|
|
|
pod2man --section=1 --center=" " --release=" " qemu.pod > $@
|
|
|
|
|
2004-11-15 23:57:26 +01:00
|
|
|
qemu-img.1: qemu-img.texi
|
2006-04-16 14:41:07 +02:00
|
|
|
$(SRC_PATH)/texi2pod.pl $< qemu-img.pod
|
2004-11-15 23:57:26 +01:00
|
|
|
pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@
|
|
|
|
|
2008-05-27 23:13:40 +02:00
|
|
|
qemu-nbd.8: qemu-nbd.texi
|
|
|
|
$(SRC_PATH)/texi2pod.pl $< qemu-nbd.pod
|
|
|
|
pod2man --section=8 --center=" " --release=" " qemu-nbd.pod > $@
|
|
|
|
|
2006-05-14 14:07:53 +02:00
|
|
|
info: qemu-doc.info qemu-tech.info
|
|
|
|
|
|
|
|
dvi: qemu-doc.dvi qemu-tech.dvi
|
|
|
|
|
|
|
|
html: qemu-doc.html qemu-tech.html
|
|
|
|
|
2008-09-24 03:13:40 +02:00
|
|
|
qemu-doc.dvi qemu-doc.html qemu-doc.info: qemu-img.texi qemu-nbd.texi
|
|
|
|
|
2007-01-24 23:56:36 +01:00
|
|
|
VERSION ?= $(shell cat VERSION)
|
|
|
|
FILE = qemu-$(VERSION)
|
2003-03-03 16:02:29 +01:00
|
|
|
|
2003-09-30 22:54:24 +02:00
|
|
|
# tar release (use 'make -k tar' on a checkouted tree)
|
2003-03-03 16:02:29 +01:00
|
|
|
tar:
|
|
|
|
rm -rf /tmp/$(FILE)
|
2003-09-30 22:54:24 +02:00
|
|
|
cp -r . /tmp/$(FILE)
|
2008-04-22 22:45:30 +02:00
|
|
|
cd /tmp && tar zcvf ~/$(FILE).tar.gz $(FILE) --exclude CVS --exclude .git --exclude .svn
|
2003-03-03 16:02:29 +01:00
|
|
|
rm -rf /tmp/$(FILE)
|
|
|
|
|
2003-10-28 01:47:44 +01:00
|
|
|
# generate a binary distribution
|
2003-03-24 22:58:34 +01:00
|
|
|
tarbin:
|
2008-03-05 19:16:09 +01:00
|
|
|
cd / && tar zcvf ~/qemu-$(VERSION)-$(ARCH).tar.gz \
|
2005-04-27 22:49:23 +02:00
|
|
|
$(bindir)/qemu \
|
|
|
|
$(bindir)/qemu-system-x86_64 \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(bindir)/qemu-system-arm \
|
|
|
|
$(bindir)/qemu-system-cris \
|
|
|
|
$(bindir)/qemu-system-m68k \
|
2005-07-24 20:44:35 +02:00
|
|
|
$(bindir)/qemu-system-mips \
|
2006-03-11 15:51:13 +01:00
|
|
|
$(bindir)/qemu-system-mipsel \
|
2007-04-01 13:16:48 +02:00
|
|
|
$(bindir)/qemu-system-mips64 \
|
|
|
|
$(bindir)/qemu-system-mips64el \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(bindir)/qemu-system-ppc \
|
|
|
|
$(bindir)/qemu-system-ppcemb \
|
|
|
|
$(bindir)/qemu-system-ppc64 \
|
2007-09-29 23:18:26 +02:00
|
|
|
$(bindir)/qemu-system-sh4 \
|
2007-12-09 06:10:03 +01:00
|
|
|
$(bindir)/qemu-system-sh4eb \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(bindir)/qemu-system-sparc \
|
2004-05-12 20:54:06 +02:00
|
|
|
$(bindir)/qemu-i386 \
|
2008-01-06 19:27:12 +01:00
|
|
|
$(bindir)/qemu-x86_64 \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(bindir)/qemu-alpha \
|
|
|
|
$(bindir)/qemu-arm \
|
|
|
|
$(bindir)/qemu-armeb \
|
|
|
|
$(bindir)/qemu-cris \
|
|
|
|
$(bindir)/qemu-m68k \
|
|
|
|
$(bindir)/qemu-mips \
|
|
|
|
$(bindir)/qemu-mipsel \
|
|
|
|
$(bindir)/qemu-ppc \
|
|
|
|
$(bindir)/qemu-ppc64 \
|
|
|
|
$(bindir)/qemu-ppc64abi32 \
|
|
|
|
$(bindir)/qemu-sh4 \
|
|
|
|
$(bindir)/qemu-sh4eb \
|
|
|
|
$(bindir)/qemu-sparc \
|
|
|
|
$(bindir)/qemu-sparc64 \
|
|
|
|
$(bindir)/qemu-sparc32plus \
|
|
|
|
$(bindir)/qemu-img \
|
|
|
|
$(bindir)/qemu-nbd \
|
2004-05-12 20:54:06 +02:00
|
|
|
$(datadir)/bios.bin \
|
|
|
|
$(datadir)/vgabios.bin \
|
2004-06-06 17:50:03 +02:00
|
|
|
$(datadir)/vgabios-cirrus.bin \
|
2004-06-21 21:54:47 +02:00
|
|
|
$(datadir)/ppc_rom.bin \
|
2005-07-03 16:00:51 +02:00
|
|
|
$(datadir)/video.x \
|
2006-06-14 14:36:32 +02:00
|
|
|
$(datadir)/openbios-sparc32 \
|
2008-04-23 21:38:07 +02:00
|
|
|
$(datadir)/openbios-sparc64 \
|
2009-01-09 12:01:31 +01:00
|
|
|
$(datadir)/openbios-ppc \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(datadir)/pxe-ne2k_pci.bin \
|
2007-02-05 22:22:42 +01:00
|
|
|
$(datadir)/pxe-rtl8139.bin \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(datadir)/pxe-pcnet.bin \
|
2008-07-26 18:53:22 +02:00
|
|
|
$(datadir)/pxe-e1000.bin \
|
2004-05-08 16:44:43 +02:00
|
|
|
$(docdir)/qemu-doc.html \
|
|
|
|
$(docdir)/qemu-tech.html \
|
2009-01-03 13:35:57 +01:00
|
|
|
$(mandir)/man1/qemu.1 \
|
|
|
|
$(mandir)/man1/qemu-img.1 \
|
2008-05-27 23:13:40 +02:00
|
|
|
$(mandir)/man8/qemu-nbd.8
|
2003-03-24 22:58:34 +01:00
|
|
|
|
2007-11-07 20:24:02 +01:00
|
|
|
# Include automatically generated dependency files
|
|
|
|
-include $(wildcard *.d audio/*.d slirp/*.d)
|