From f7fe78dc82b5f7d380540b1273afd35bdafb7b26 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 14 May 2008 20:57:20 +0000 Subject: [PATCH] Added listen_addr config param for daemon (Stefan de Konink) --- AUTHORS | 1 + ChangeLog | 7 +++++++ qemud/libvirtd.conf | 5 +++++ qemud/qemud.c | 23 +++++++++++++---------- src/remote_internal.h | 1 + 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/AUTHORS b/AUTHORS index 451f134610..7faff69f26 100644 --- a/AUTHORS +++ b/AUTHORS @@ -43,6 +43,7 @@ Patches have also been contributed by: Mads Chr. Olesen Cole Robinson Anton Protopopov + Stefan de Konink [....send patches to get your name here....] diff --git a/ChangeLog b/ChangeLog index f21e4d1dab..cf7d7185a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Wed May 14 15:34:43 EST 2008 Daniel P. Berrange + + * qemud/qemud.c: Add 'listen_addr' config param to control + the IP address the daemon listens on (Stefan de Konink) + * qemud/libvirtd.conf: Added example listen_addr config param + * src/remote_internal.h: #define constant for default IP addr + Wed May 14 15:34:43 EST 2008 Daniel P. Berrange * proxy/libvirt_proxy.c, src/conf.c, src/hash.c, diff --git a/qemud/libvirtd.conf b/qemud/libvirtd.conf index 3b7db4dad9..f66930111c 100644 --- a/qemud/libvirtd.conf +++ b/qemud/libvirtd.conf @@ -42,6 +42,11 @@ #tcp_port = "16509" +# Override the default configuration which binds to all network +# interfaces. This can be a numeric IPv4/6 address, or hostname +# +# ip_addr = "192.168.0.1" + # Flag toggling mDNS advertizement of the libvirt service. # diff --git a/qemud/qemud.c b/qemud/qemud.c index d308dfe2f4..0982e7299c 100644 --- a/qemud/qemud.c +++ b/qemud/qemud.c @@ -69,6 +69,7 @@ static int ipsock = 0; /* -l Listen for TCP/IP */ /* Defaults for configuration file elements */ static int listen_tls = 1; static int listen_tcp = 0; +static char *listen_addr = (char *) LIBVIRTD_LISTEN_ADDR; static char *tls_port = (char *) LIBVIRTD_TLS_PORT; static char *tcp_port = (char *) LIBVIRTD_TCP_PORT; @@ -541,7 +542,7 @@ static int qemudListenUnix(struct qemud_server *server, // See: http://people.redhat.com/drepper/userapi-ipv6.html static int -remoteMakeSockets (int *fds, int max_fds, int *nfds_r, const char *service) +remoteMakeSockets (int *fds, int max_fds, int *nfds_r, const char *node, const char *service) { struct addrinfo *ai; struct addrinfo hints; @@ -549,7 +550,7 @@ remoteMakeSockets (int *fds, int max_fds, int *nfds_r, const char *service) hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; hints.ai_socktype = SOCK_STREAM; - int e = getaddrinfo (NULL, service, &hints, &ai); + int e = getaddrinfo (node, service, &hints, &ai); if (e != 0) { qemudLog (QEMUD_ERR, _("getaddrinfo: %s\n"), gai_strerror (e)); return -1; @@ -593,6 +594,7 @@ remoteMakeSockets (int *fds, int max_fds, int *nfds_r, const char *service) */ static int remoteListenTCP (struct qemud_server *server, + const char *addr, const char *port, int type, int auth) @@ -602,7 +604,7 @@ remoteListenTCP (struct qemud_server *server, int i; struct qemud_socket *sock; - if (remoteMakeSockets (fds, 2, &nfds, port) == -1) + if (remoteMakeSockets (fds, 2, &nfds, addr, port) == -1) return -1; for (i = 0; i < nfds; ++i) { @@ -779,14 +781,14 @@ static struct qemud_server *qemudNetworkInit(struct qemud_server *server) { #endif if (ipsock) { - if (listen_tcp && remoteListenTCP (server, tcp_port, QEMUD_SOCK_TYPE_TCP, auth_tcp) < 0) + if (listen_tcp && remoteListenTCP (server, listen_addr, tcp_port, QEMUD_SOCK_TYPE_TCP, auth_tcp) < 0) goto cleanup; if (listen_tls) { if (remoteInitializeGnuTLS () < 0) goto cleanup; - if (remoteListenTCP (server, tls_port, QEMUD_SOCK_TYPE_TLS, auth_tls) < 0) + if (remoteListenTCP (server, listen_addr, tls_port, QEMUD_SOCK_TYPE_TLS, auth_tls) < 0) goto cleanup; } } @@ -1921,7 +1923,8 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) GET_CONF_INT (conf, filename, listen_tls); GET_CONF_STR (conf, filename, tls_port); GET_CONF_STR (conf, filename, tcp_port); - + GET_CONF_STR (conf, filename, listen_addr); + if (remoteConfigGetAuth(conf, "auth_unix_rw", &auth_unix_rw, filename) < 0) goto free_and_fail; #if HAVE_POLKIT @@ -2006,10 +2009,10 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) free (unix_sock_rw_perms); free (unix_sock_group); - /* Don't bother trying to free tcp_port, tls_port, key_file, cert_file, - ca_file, or crl_file, since they are initialized to non-malloc'd - strings. Besides, these are static variables, and callers are - unlikely to call this function more than once, so there wouldn't + /* Don't bother trying to free listen_addr, tcp_port, tls_port, key_file, + cert_file, ca_file, or crl_file, since they are initialized to + non-malloc'd strings. Besides, these are static variables, and callers + are unlikely to call this function more than once, so there wouldn't even be a real leak. */ if (tls_allowed_dn_list) { diff --git a/src/remote_internal.h b/src/remote_internal.h index 336b9a5d6f..ebbf3aca2b 100644 --- a/src/remote_internal.h +++ b/src/remote_internal.h @@ -32,6 +32,7 @@ extern "C" { int remoteRegister (void); +#define LIBVIRTD_LISTEN_ADDR NULL #define LIBVIRTD_TLS_PORT "16514" #define LIBVIRTD_TCP_PORT "16509" #define LIBVIRTD_PRIV_UNIX_SOCKET LOCAL_STATE_DIR "/run/libvirt/libvirt-sock" -- GitLab