summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorLaurent Léonard <laurent@open-minds.org>2011-01-04 11:40:30 +0100
committerLaurent Léonard <laurent@open-minds.org>2011-01-04 11:40:30 +0100
commit3466195f8d67e7c91a056939478f056f769737e1 (patch)
treed52095ef982568df43a1b38dc3dff499aaa01c03 /daemon
parent3b7b682de1f743acab5daf6e987289c7da539386 (diff)
Imported Upstream version 0.8.7
Diffstat (limited to 'daemon')
-rw-r--r--daemon/Makefile.am4
-rw-r--r--daemon/Makefile.in32
-rw-r--r--daemon/event.c12
-rw-r--r--daemon/libvirtd.c52
4 files changed, 71 insertions, 29 deletions
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 72778e50a..3ffb7bee7 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -90,8 +90,8 @@ libvirtd_CFLAGS = \
-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
-DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\""
-libvirtd_LDFLAGS = \
- $(WARN_CFLAGS) \
+libvirtd_LDFLAGS = \
+ $(WARN_CFLAGS) \
$(COVERAGE_LDFLAGS)
libvirtd_LDADD = \
diff --git a/daemon/Makefile.in b/daemon/Makefile.in
index ab460963c..efb7e518c 100644
--- a/daemon/Makefile.in
+++ b/daemon/Makefile.in
@@ -20,7 +20,6 @@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
@@ -65,6 +64,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/base64.m4 \
$(top_srcdir)/gnulib/m4/canonicalize.m4 \
$(top_srcdir)/gnulib/m4/close.m4 \
+ $(top_srcdir)/gnulib/m4/configmake.m4 \
$(top_srcdir)/gnulib/m4/count-one-bits.m4 \
$(top_srcdir)/gnulib/m4/dirname.m4 \
$(top_srcdir)/gnulib/m4/dos.m4 \
@@ -112,7 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/pathmax.m4 \
$(top_srcdir)/gnulib/m4/perror.m4 \
$(top_srcdir)/gnulib/m4/physmem.m4 \
- $(top_srcdir)/gnulib/m4/po.m4 $(top_srcdir)/gnulib/m4/poll.m4 \
+ $(top_srcdir)/gnulib/m4/pipe.m4 $(top_srcdir)/gnulib/m4/po.m4 \
+ $(top_srcdir)/gnulib/m4/poll.m4 \
$(top_srcdir)/gnulib/m4/poll_h.m4 \
$(top_srcdir)/gnulib/m4/posix-shell.m4 \
$(top_srcdir)/gnulib/m4/printf.m4 \
@@ -170,6 +171,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib/m4/00gnulib.m4 \
$(top_srcdir)/gnulib/m4/usleep.m4 \
$(top_srcdir)/gnulib/m4/vasnprintf.m4 \
$(top_srcdir)/gnulib/m4/vasprintf.m4 \
+ $(top_srcdir)/gnulib/m4/waitpid.m4 \
$(top_srcdir)/gnulib/m4/warn-on-use.m4 \
$(top_srcdir)/gnulib/m4/wchar_h.m4 \
$(top_srcdir)/m4/compiler-flags.m4 $(top_srcdir)/m4/gettext.m4 \
@@ -288,6 +290,7 @@ DATA = $(augeas_DATA) $(augeastests_DATA) $(conf_DATA) $(tapset_DATA)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
ALLOCA_H = @ALLOCA_H@
@@ -466,6 +469,7 @@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
GNULIB_OPEN = @GNULIB_OPEN@
GNULIB_OPENAT = @GNULIB_OPENAT@
GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_POLL = @GNULIB_POLL@
GNULIB_POPEN = @GNULIB_POPEN@
@@ -568,11 +572,15 @@ HAVE_BTOWC = @HAVE_BTOWC@
HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
HAVE_DECL_FREEADDRINFO = @HAVE_DECL_FREEADDRINFO@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
HAVE_DECL_GAI_STRERROR = @HAVE_DECL_GAI_STRERROR@
HAVE_DECL_GETADDRINFO = @HAVE_DECL_GETADDRINFO@
HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
@@ -584,6 +592,7 @@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
@@ -592,6 +601,9 @@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_TCGETSID = @HAVE_DECL_TCGETSID@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
@@ -604,13 +616,13 @@ HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHMODAT = @HAVE_FCHMODAT@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
HAVE_FSEEKO = @HAVE_FSEEKO@
HAVE_FSTATAT = @HAVE_FSTATAT@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTELLO = @HAVE_FTELLO@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_FUTIMENS = @HAVE_FUTIMENS@
-HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
@@ -650,6 +662,7 @@ HAVE_NETDB_H = @HAVE_NETDB_H@
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
HAVE_OPENAT = @HAVE_OPENAT@
HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_POLL = @HAVE_POLL@
HAVE_POLL_H = @HAVE_POLL_H@
@@ -690,6 +703,7 @@ HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@
HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
HAVE_STRUCT_UTSNAME = @HAVE_STRUCT_UTSNAME@
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
@@ -705,15 +719,12 @@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
HAVE_SYS_UTSNAME_H = @HAVE_SYS_UTSNAME_H@
-HAVE_TCGETSID = @HAVE_TCGETSID@
HAVE_TERMIOS_H = @HAVE_TERMIOS_H@
HAVE_TIMEGM = @HAVE_TIMEGM@
-HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
HAVE_UNAME = @HAVE_UNAME@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
-HAVE_UNSETENV = @HAVE_UNSETENV@
HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
@@ -741,7 +752,9 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
+IP6TABLES_PATH = @IP6TABLES_PATH@
IPTABLES_PATH = @IPTABLES_PATH@
+IP_PATH = @IP_PATH@
ISCSIADM = @ISCSIADM@
LD = @LD@
LDFLAGS = @LDFLAGS@
@@ -792,6 +805,7 @@ MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MODPROBE = @MODPROBE@
MOUNT = @MOUNT@
+MSCOM_LIBS = @MSCOM_LIBS@
MSGFMT = @MSGFMT@
MSGMERGE = @MSGMERGE@
NETCF_CFLAGS = @NETCF_CFLAGS@
@@ -892,6 +906,7 @@ PYTHON_INCLUDES = @PYTHON_INCLUDES@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
PYTHON_VERSION = @PYTHON_VERSION@
+RADVD = @RADVD@
RANLIB = @RANLIB@
READLINE_CFLAGS = @READLINE_CFLAGS@
REMOTE_PID_FILE = @REMOTE_PID_FILE@
@@ -920,6 +935,7 @@ REPLACE_FTELLO = @REPLACE_FTELLO@
REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLINE = @REPLACE_GETLINE@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
@@ -1051,6 +1067,7 @@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
WIN32_EXTRA_CFLAGS = @WIN32_EXTRA_CFLAGS@
WINDRES = @WINDRES@
WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XDR_CFLAGS = @XDR_CFLAGS@
XEN_CFLAGS = @XEN_CFLAGS@
XEN_LIBS = @XEN_LIBS@
XGETTEXT = @XGETTEXT@
@@ -1102,6 +1119,7 @@ infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+lispdir = @lispdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
@@ -1182,7 +1200,7 @@ BUILT_SOURCES = $(am__append_16) $(am__append_18) $(am__append_19)
@WITH_LIBVIRTD_TRUE@ -DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\"" \
@WITH_LIBVIRTD_TRUE@ $(am__append_12)
@WITH_LIBVIRTD_TRUE@libvirtd_LDFLAGS = \
-@WITH_LIBVIRTD_TRUE@ $(WARN_CFLAGS) \
+@WITH_LIBVIRTD_TRUE@ $(WARN_CFLAGS) \
@WITH_LIBVIRTD_TRUE@ $(COVERAGE_LDFLAGS)
diff --git a/daemon/event.c b/daemon/event.c
index a983b353e..89ca9f081 100644
--- a/daemon/event.c
+++ b/daemon/event.c
@@ -576,13 +576,14 @@ int virEventRunOnce(void) {
retry:
EVENT_DEBUG("Poll on %d handles %p timeout %d", nfds, fds, timeout);
ret = poll(fds, nfds, timeout);
- EVENT_DEBUG("Poll got %d event", ret);
if (ret < 0) {
+ EVENT_DEBUG("Poll got error event %d", errno);
if (errno == EINTR) {
goto retry;
}
goto error_unlocked;
}
+ EVENT_DEBUG("Poll got %d event(s)", ret);
virMutexLock(&eventLoop.lock);
if (virEventDispatchTimeouts() < 0)
@@ -620,12 +621,6 @@ static void virEventHandleWakeup(int watch ATTRIBUTE_UNUSED,
virMutexUnlock(&eventLoop.lock);
}
-#ifdef WIN32
-static inline int pipe(int fd[2]) {
- return _pipe(fd, 4096, 0);
-}
-#endif
-
int virEventInit(void)
{
if (virMutexInit(&eventLoop.lock) < 0)
@@ -652,7 +647,8 @@ static int virEventInterruptLocked(void)
if (!eventLoop.running ||
virThreadIsSelf(&eventLoop.leader)) {
- VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running, (int)eventLoop.leader.thread);
+ VIR_DEBUG("Skip interrupt, %d %d", eventLoop.running,
+ virThreadID(&eventLoop.leader));
return 0;
}
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index caf51bf80..2df933727 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1410,7 +1410,7 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket
/* Client is running as root, so disable auth */
if (uid == 0) {
VIR_INFO(_("Turn off polkit auth for privileged client pid %d from %s"),
- pid, addrstr);
+ pid, client->addrstr);
client->auth = REMOTE_AUTH_NONE;
}
}
@@ -1451,7 +1451,7 @@ static int qemudDispatchServer(struct qemud_server *server, struct qemud_socket
} else {
PROBE(CLIENT_TLS_FAIL, "fd=%d", client->fd);
VIR_ERROR(_("TLS handshake failed for client %s: %s"),
- addrstr, gnutls_strerror (ret));
+ client->addrstr, gnutls_strerror (ret));
goto error;
}
}
@@ -1600,15 +1600,20 @@ static void *qemudWorker(void *data)
}
}
-static int qemudStartWorker(struct qemud_server *server,
- struct qemud_worker *worker) {
+static int
+qemudStartWorker(struct qemud_server *server,
+ struct qemud_worker *worker)
+{
pthread_attr_t attr;
- pthread_attr_init(&attr);
+ int ret = -1;
+
+ if (pthread_attr_init(&attr) != 0)
+ return -1;
/* We want to join workers, so don't detach them */
/*pthread_attr_setdetachstate(&attr, 1);*/
if (worker->hasThread)
- return -1;
+ goto cleanup;
worker->server = server;
worker->hasThread = 1;
@@ -1621,10 +1626,13 @@ static int qemudStartWorker(struct qemud_server *server,
worker) != 0) {
worker->hasThread = 0;
worker->server = NULL;
- return -1;
+ goto cleanup;
}
- return 0;
+ ret = 0;
+cleanup:
+ pthread_attr_destroy(&attr);
+ return ret;
}
@@ -2283,6 +2291,7 @@ static void qemudFreeClient(struct qemud_client *client) {
if (client->conn)
virConnectClose(client->conn);
virMutexDestroy(&client->lock);
+ VIR_FREE(client->addrstr);
VIR_FREE(client);
}
@@ -2403,15 +2412,24 @@ cleanup:
server->workers[i].hasThread = 0;
}
VIR_FREE(server->workers);
+ for (i = 0; i < server->nclients; i++)
+ qemudFreeClient(server->clients[i]);
+ server->nclients = 0;
+ VIR_SHRINK_N(server->clients, server->nclients_max, server->nclients_max);
virMutexUnlock(&server->lock);
return NULL;
}
-static int qemudStartEventLoop(struct qemud_server *server) {
+static int
+qemudStartEventLoop(struct qemud_server *server)
+{
pthread_attr_t attr;
- pthread_attr_init(&attr);
+ int ret = -1;
+
+ if (pthread_attr_init(&attr) != 0)
+ return -1;
/* We want to join the eventloop, so don't detach it */
/*pthread_attr_setdetachstate(&attr, 1);*/
@@ -2419,11 +2437,14 @@ static int qemudStartEventLoop(struct qemud_server *server) {
&attr,
qemudRunLoop,
server) != 0)
- return -1;
+ goto cleanup;
server->hasEventThread = 1;
- return 0;
+ ret = 0;
+cleanup:
+ pthread_attr_destroy(&attr);
+ return ret;
}
@@ -3154,6 +3175,13 @@ int main(int argc, char **argv) {
if (godaemon) {
char ebuf[1024];
+
+ if (chdir("/") < 0) {
+ VIR_ERROR(_("cannot change to root directory: %s"),
+ virStrerror(errno, ebuf, sizeof(ebuf)));
+ goto error;
+ }
+
if ((statuswrite = daemonForkIntoBackground()) < 0) {
VIR_ERROR(_("Failed to fork as daemon: %s"),
virStrerror(errno, ebuf, sizeof ebuf));