[libvirt] PATCH: Implement virKill for Windows
by Daniel P. Berrange
The addition of virKill to src/util.c breaks Windows build which lacks the
kill() function. Now we technically don't have any code which runs virKill
when built on Windows, but after the 2 weeks holiday I'm very motivated so
wrote a basic implement of virKill() which is a starting point for Win32
in case we need it based on the recommendations in this thread
http://www.nabble.com/kill-signal-td149789.html
Seems Perl does much the same for its kill() implement on Win32 (and is
even more thorough/complete), though we can't just use the Perl code
directly since its GPL licensed. So I've done a minimal stub
Daniel
Index: src/util.c
===================================================================
RCS file: /data/cvs/libvirt/src/util.c,v
retrieving revision 1.78
diff -u -p -u -p -r1.78 util.c
--- src/util.c 6 Jan 2009 17:46:46 -0000 1.78
+++ src/util.c 6 Jan 2009 20:47:09 -0000
@@ -1346,5 +1346,50 @@ int virKillProcess(pid_t pid, int sig)
return -1;
}
+#ifdef WIN32
+ /* Mingw / Windows don't have many signals (AFAIK) */
+ switch (sig) {
+ case SIGINT:
+ /* This does a Ctrl+C equiv */
+ if (!GenerateConsoleCtrlEvent(CTRL_C_EVENT, pid)) {
+ errno = ESRCH;
+ return -1;
+ }
+ break;
+
+ case SIGTERM:
+ /* Since TerminateProcess is closer to SIG_KILL, we do
+ * a Ctrl+Break equiv which is more pleasant like the
+ * good old unix SIGTERM/HUP
+ */
+ if (!GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, pid)) {
+ errno = ESRCH;
+ return -1;
+ }
+ break;
+
+ default:
+ {
+ HANDLE proc;
+ proc = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
+ if (!proc) {
+ errno = ESRCH; /* Not entirely accurate, but close enough */
+ return -1;
+ }
+
+ /*
+ * TerminateProcess is more or less equiv to SIG_KILL, in that
+ * a process can't trap / block it
+ */
+ if (!TerminateProcess(proc, sig)) {
+ errno = ESRCH;
+ return -1;
+ }
+ CloseHandle(proc);
+ }
+ }
+ return 0;
+#else
return kill(pid, sig);
+#endif
}
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
15 years, 10 months
[libvirt] PATCH: Fix Windows / mingw32 build
by Daniel P. Berrange
There are a number of problems breaking the windows / mingw
build currently.
- Use of 'close' without importing unistd.h
- Use of non-existant localtime_r
- ERROR macro from logging.h clashes with a symbol imported
from windows.h
So this patch does
- Adds the missing unistd.h include
- Uses localtime() if localtime_r() is missing (as checked from
configure)
- Adds a VIR_ prefix onto all logging macros, keeping
DEBUG() around because its just used in sooooo many
places
The use of localtime() on Windows is OK, because the MicroSoft
implementation of this uses thread-local storage:
http://msdn.microsoft.com/en-us/library/a442x3ye.aspx
And all other OS we care about have localtime_r
Finally I fix a few compile warnings, so that Mingw can now be
built with --enable-compile-warnings=error to detect these
problems more quickly in future.
configure.in | 3
qemud/qemud.c | 206 ++++++++++++++++++++++++------------------------
qemud/remote.c | 104 ++++++++++++------------
qemud/remote_protocol.c | 4
qemud/rpcgen_fix.pl | 1
src/logging.c | 20 +++-
src/logging.h | 57 +++++++------
src/test.c | 5 +
tests/nodeinfotest.c | 2
9 files changed, 212 insertions(+), 190 deletions(-)
Daniel
diff --git a/configure.in b/configure.in
--- a/configure.in
+++ b/configure.in
@@ -73,6 +73,9 @@ AC_SYS_LARGEFILE
dnl Availability of various common functions (non-fatal if missing).
AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid])
+
+dnl Availablility of threadsafe functions - fallback to non-threadsafe if missing
+AC_CHECK_FUNCS([localtime_r])
dnl Availability of various common headers (non-fatal if missing).
AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/syslimits.h sys/utsname.h sys/wait.h winsock2.h sched.h termios.h sys/poll.h syslog.h])
diff --git a/qemud/qemud.c b/qemud/qemud.c
--- a/qemud/qemud.c
+++ b/qemud/qemud.c
@@ -171,7 +171,7 @@ remoteCheckCertFile(const char *type, co
{
struct stat sb;
if (stat(file, &sb) < 0) {
- ERROR(_("Cannot access %s '%s': %s (%d)"),
+ VIR_ERROR(_("Cannot access %s '%s': %s (%d)"),
type, file, strerror(errno), errno);
return -1;
}
@@ -188,7 +188,7 @@ remoteInitializeGnuTLS (void)
err = gnutls_certificate_allocate_credentials (&x509_cred);
if (err) {
- ERROR(_("gnutls_certificate_allocate_credentials: %s"),
+ VIR_ERROR(_("gnutls_certificate_allocate_credentials: %s"),
gnutls_strerror (err));
return -1;
}
@@ -201,7 +201,7 @@ remoteInitializeGnuTLS (void)
err = gnutls_certificate_set_x509_trust_file (x509_cred, ca_file,
GNUTLS_X509_FMT_PEM);
if (err < 0) {
- ERROR(_("gnutls_certificate_set_x509_trust_file: %s"),
+ VIR_ERROR(_("gnutls_certificate_set_x509_trust_file: %s"),
gnutls_strerror (err));
return -1;
}
@@ -215,7 +215,7 @@ remoteInitializeGnuTLS (void)
err = gnutls_certificate_set_x509_crl_file (x509_cred, crl_file,
GNUTLS_X509_FMT_PEM);
if (err < 0) {
- ERROR(_("gnutls_certificate_set_x509_crl_file: %s"),
+ VIR_ERROR(_("gnutls_certificate_set_x509_crl_file: %s"),
gnutls_strerror (err));
return -1;
}
@@ -232,7 +232,7 @@ remoteInitializeGnuTLS (void)
cert_file, key_file,
GNUTLS_X509_FMT_PEM);
if (err < 0) {
- ERROR(_("gnutls_certificate_set_x509_key_file: %s"),
+ VIR_ERROR(_("gnutls_certificate_set_x509_key_file: %s"),
gnutls_strerror (err));
return -1;
}
@@ -245,12 +245,12 @@ remoteInitializeGnuTLS (void)
*/
err = gnutls_dh_params_init (&dh_params);
if (err < 0) {
- ERROR(_("gnutls_dh_params_init: %s"), gnutls_strerror (err));
+ VIR_ERROR(_("gnutls_dh_params_init: %s"), gnutls_strerror (err));
return -1;
}
err = gnutls_dh_params_generate2 (dh_params, DH_BITS);
if (err < 0) {
- ERROR(_("gnutls_dh_params_generate2: %s"), gnutls_strerror (err));
+ VIR_ERROR(_("gnutls_dh_params_generate2: %s"), gnutls_strerror (err));
return -1;
}
@@ -271,7 +271,7 @@ qemudDispatchSignalEvent(int watch ATTRI
pthread_mutex_lock(&server->lock);
if (saferead(server->sigread, &siginfo, sizeof(siginfo)) != sizeof(siginfo)) {
- ERROR(_("Failed to read from signal pipe: %s"), strerror(errno));
+ VIR_ERROR(_("Failed to read from signal pipe: %s"), strerror(errno));
pthread_mutex_unlock(&server->lock);
return;
}
@@ -280,20 +280,20 @@ qemudDispatchSignalEvent(int watch ATTRI
switch (siginfo.si_signo) {
case SIGHUP:
- INFO0(_("Reloading configuration on SIGHUP"));
+ VIR_INFO0(_("Reloading configuration on SIGHUP"));
if (virStateReload() < 0)
- WARN0(_("Error while reloading drivers"));
+ VIR_WARN0(_("Error while reloading drivers"));
break;
case SIGINT:
case SIGQUIT:
case SIGTERM:
- WARN(_("Shutting down on signal %d"), siginfo.si_signo);
+ VIR_WARN(_("Shutting down on signal %d"), siginfo.si_signo);
server->shutdown = 1;
break;
default:
- INFO(_("Received unexpected signal %d"), siginfo.si_signo);
+ VIR_INFO(_("Received unexpected signal %d"), siginfo.si_signo);
break;
}
@@ -312,7 +312,7 @@ int qemudSetCloseExec(int fd) {
goto error;
return 0;
error:
- ERROR0(_("Failed to set close-on-exec file descriptor flag"));
+ VIR_ERROR0(_("Failed to set close-on-exec file descriptor flag"));
return -1;
}
@@ -326,7 +326,7 @@ int qemudSetNonBlock(int fd) {
goto error;
return 0;
error:
- ERROR0(_("Failed to set non-blocking file descriptor flag"));
+ VIR_ERROR0(_("Failed to set non-blocking file descriptor flag"));
return -1;
}
@@ -404,28 +404,28 @@ static int qemudWritePidFile(const char
return 0;
if ((fd = open(pidFile, O_WRONLY|O_CREAT|O_EXCL, 0644)) < 0) {
- ERROR(_("Failed to open pid file '%s' : %s"),
- pidFile, strerror(errno));
+ VIR_ERROR(_("Failed to open pid file '%s' : %s"),
+ pidFile, strerror(errno));
return -1;
}
if (!(fh = fdopen(fd, "w"))) {
- ERROR(_("Failed to fdopen pid file '%s' : %s"),
- pidFile, strerror(errno));
+ VIR_ERROR(_("Failed to fdopen pid file '%s' : %s"),
+ pidFile, strerror(errno));
close(fd);
return -1;
}
if (fprintf(fh, "%lu\n", (unsigned long)getpid()) < 0) {
- ERROR(_("Failed to write to pid file '%s' : %s"),
- pidFile, strerror(errno));
+ VIR_ERROR(_("Failed to write to pid file '%s' : %s"),
+ pidFile, strerror(errno));
close(fd);
return -1;
}
if (fclose(fh) == EOF) {
- ERROR(_("Failed to close pid file '%s' : %s"),
- pidFile, strerror(errno));
+ VIR_ERROR(_("Failed to close pid file '%s' : %s"),
+ pidFile, strerror(errno));
return -1;
}
@@ -440,7 +440,7 @@ static int qemudListenUnix(struct qemud_
gid_t oldgrp;
if (VIR_ALLOC(sock) < 0) {
- ERROR("%s", _("Failed to allocate memory for struct qemud_socket"));
+ VIR_ERROR("%s", _("Failed to allocate memory for struct qemud_socket"));
return -1;
}
@@ -450,8 +450,8 @@ static int qemudListenUnix(struct qemud_
sock->auth = auth;
if ((sock->fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
- ERROR(_("Failed to create socket: %s"),
- strerror(errno));
+ VIR_ERROR(_("Failed to create socket: %s"),
+ strerror(errno));
goto cleanup;
}
@@ -472,8 +472,8 @@ static int qemudListenUnix(struct qemud_
setgid(unix_sock_gid);
if (bind(sock->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
- ERROR(_("Failed to bind socket to '%s': %s"),
- path, strerror(errno));
+ VIR_ERROR(_("Failed to bind socket to '%s': %s"),
+ path, strerror(errno));
goto cleanup;
}
umask(oldmask);
@@ -481,8 +481,8 @@ static int qemudListenUnix(struct qemud_
setgid(oldgrp);
if (listen(sock->fd, 30) < 0) {
- ERROR(_("Failed to listen for connections on '%s': %s"),
- path, strerror(errno));
+ VIR_ERROR(_("Failed to listen for connections on '%s': %s"),
+ path, strerror(errno));
goto cleanup;
}
@@ -492,7 +492,7 @@ static int qemudListenUnix(struct qemud_
VIR_EVENT_HANDLE_HANGUP,
qemudDispatchServerEvent,
server, NULL)) < 0) {
- ERROR0(_("Failed to add server event callback"));
+ VIR_ERROR0(_("Failed to add server event callback"));
goto cleanup;
}
@@ -521,7 +521,7 @@ remoteMakeSockets (int *fds, int max_fds
int e = getaddrinfo (node, service, &hints, &ai);
if (e != 0) {
- ERROR(_("getaddrinfo: %s\n"), gai_strerror (e));
+ VIR_ERROR(_("getaddrinfo: %s\n"), gai_strerror (e));
return -1;
}
@@ -530,7 +530,7 @@ remoteMakeSockets (int *fds, int max_fds
fds[*nfds_r] = socket (runp->ai_family, runp->ai_socktype,
runp->ai_protocol);
if (fds[*nfds_r] == -1) {
- ERROR(_("socket: %s"), strerror (errno));
+ VIR_ERROR(_("socket: %s"), strerror (errno));
return -1;
}
@@ -539,14 +539,14 @@ remoteMakeSockets (int *fds, int max_fds
if (bind (fds[*nfds_r], runp->ai_addr, runp->ai_addrlen) == -1) {
if (errno != EADDRINUSE) {
- ERROR(_("bind: %s"), strerror (errno));
+ VIR_ERROR(_("bind: %s"), strerror (errno));
return -1;
}
close (fds[*nfds_r]);
}
else {
if (listen (fds[*nfds_r], SOMAXCONN) == -1) {
- ERROR(_("listen: %s"), strerror (errno));
+ VIR_ERROR(_("listen: %s"), strerror (errno));
return -1;
}
++*nfds_r;
@@ -581,7 +581,7 @@ remoteListenTCP (struct qemud_server *se
socklen_t salen = sizeof(sa);
if (VIR_ALLOC(sock) < 0) {
- ERROR(_("remoteListenTCP: calloc: %s"), strerror (errno));
+ VIR_ERROR(_("remoteListenTCP: calloc: %s"), strerror (errno));
goto cleanup;
}
@@ -611,7 +611,7 @@ remoteListenTCP (struct qemud_server *se
goto cleanup;
if (listen (sock->fd, 30) < 0) {
- ERROR(_("remoteListenTCP: listen: %s"), strerror (errno));
+ VIR_ERROR(_("remoteListenTCP: listen: %s"), strerror (errno));
goto cleanup;
}
@@ -621,7 +621,7 @@ remoteListenTCP (struct qemud_server *se
VIR_EVENT_HANDLE_HANGUP,
qemudDispatchServerEvent,
server, NULL)) < 0) {
- ERROR0(_("Failed to add server event callback"));
+ VIR_ERROR0(_("Failed to add server event callback"));
goto cleanup;
}
@@ -660,7 +660,7 @@ static int qemudInitPaths(struct qemud_s
struct passwd *pw;
if (!(pw = getpwuid(uid))) {
- ERROR(_("Failed to find user record for uid '%d': %s"),
+ VIR_ERROR(_("Failed to find user record for uid '%d': %s"),
uid, strerror(errno));
return -1;
}
@@ -676,7 +676,7 @@ static int qemudInitPaths(struct qemud_s
return 0;
snprintf_error:
- ERROR("%s", _("Resulting path too long for buffer in qemudInitPaths()"));
+ VIR_ERROR("%s", _("Resulting path too long for buffer in qemudInitPaths()"));
return -1;
}
@@ -684,7 +684,7 @@ static struct qemud_server *qemudInitial
struct qemud_server *server;
if (VIR_ALLOC(server) < 0) {
- ERROR0(_("Failed to allocate struct qemud_server"));
+ VIR_ERROR0(_("Failed to allocate struct qemud_server"));
return NULL;
}
@@ -696,7 +696,7 @@ static struct qemud_server *qemudInitial
server->sigread = sigread;
if (virEventInit() < 0) {
- ERROR0(_("Failed to initialize event system"));
+ VIR_ERROR0(_("Failed to initialize event system"));
VIR_FREE(server);
return NULL;
}
@@ -781,8 +781,8 @@ static struct qemud_server *qemudNetwork
auth_tcp == REMOTE_AUTH_SASL ||
auth_tls == REMOTE_AUTH_SASL) {
if ((err = sasl_server_init(NULL, "libvirt")) != SASL_OK) {
- ERROR(_("Failed to initialize SASL authentication %s"),
- sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("Failed to initialize SASL authentication %s"),
+ sasl_errstring(err, NULL, NULL));
goto cleanup;
}
}
@@ -795,8 +795,8 @@ static struct qemud_server *qemudNetwork
dbus_error_init(&derr);
server->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
if (!(server->sysbus)) {
- ERROR(_("Failed to connect to system bus for PolicyKit auth: %s"),
- derr.message);
+ VIR_ERROR(_("Failed to connect to system bus for PolicyKit auth: %s"),
+ derr.message);
dbus_error_free(&derr);
goto cleanup;
}
@@ -906,7 +906,7 @@ remoteInitializeTLSSession (void)
return session;
failed:
- ERROR(_("remoteInitializeTLSSession: %s"),
+ VIR_ERROR(_("remoteInitializeTLSSession: %s"),
gnutls_strerror (err));
return NULL;
}
@@ -922,7 +922,7 @@ remoteCheckDN (gnutls_x509_crt_t cert)
err = gnutls_x509_crt_get_dn (cert, name, &namesize);
if (err != 0) {
- ERROR(_("remoteCheckDN: gnutls_x509_cert_get_dn: %s"),
+ VIR_ERROR(_("remoteCheckDN: gnutls_x509_cert_get_dn: %s"),
gnutls_strerror (err));
return 0;
}
@@ -954,40 +954,40 @@ remoteCheckCertificate (gnutls_session_t
time_t now;
if ((ret = gnutls_certificate_verify_peers2 (session, &status)) < 0){
- ERROR(_("remoteCheckCertificate: verify failed: %s"),
+ VIR_ERROR(_("remoteCheckCertificate: verify failed: %s"),
gnutls_strerror (ret));
return -1;
}
if (status != 0) {
if (status & GNUTLS_CERT_INVALID)
- ERROR0(_("remoteCheckCertificate: "
- "the client certificate is not trusted."));
+ VIR_ERROR0(_("remoteCheckCertificate: "
+ "the client certificate is not trusted."));
if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
- ERROR0(_("remoteCheckCertificate: the client "
- "certificate has unknown issuer."));
+ VIR_ERROR0(_("remoteCheckCertificate: the client "
+ "certificate has unknown issuer."));
if (status & GNUTLS_CERT_REVOKED)
- ERROR0(_("remoteCheckCertificate: "
- "the client certificate has been revoked."));
+ VIR_ERROR0(_("remoteCheckCertificate: "
+ "the client certificate has been revoked."));
#ifndef GNUTLS_1_0_COMPAT
if (status & GNUTLS_CERT_INSECURE_ALGORITHM)
- ERROR0(_("remoteCheckCertificate: the client certificate"
- " uses an insecure algorithm."));
+ VIR_ERROR0(_("remoteCheckCertificate: the client certificate"
+ " uses an insecure algorithm."));
#endif
return -1;
}
if (gnutls_certificate_type_get (session) != GNUTLS_CRT_X509) {
- ERROR0(_("remoteCheckCertificate: certificate is not X.509"));
+ VIR_ERROR0(_("remoteCheckCertificate: certificate is not X.509"));
return -1;
}
if (!(certs = gnutls_certificate_get_peers(session, &nCerts))) {
- ERROR0(_("remoteCheckCertificate: no peers"));
+ VIR_ERROR0(_("remoteCheckCertificate: no peers"));
return -1;
}
@@ -997,7 +997,7 @@ remoteCheckCertificate (gnutls_session_t
gnutls_x509_crt_t cert;
if (gnutls_x509_crt_init (&cert) < 0) {
- ERROR0(_("remoteCheckCertificate: gnutls_x509_crt_init failed"));
+ VIR_ERROR0(_("remoteCheckCertificate: gnutls_x509_crt_init failed"));
return -1;
}
@@ -1007,15 +1007,15 @@ remoteCheckCertificate (gnutls_session_t
}
if (gnutls_x509_crt_get_expiration_time (cert) < now) {
- ERROR0(_("remoteCheckCertificate: "
- "the client certificate has expired"));
+ VIR_ERROR0(_("remoteCheckCertificate: "
+ "the client certificate has expired"));
gnutls_x509_crt_deinit (cert);
return -1;
}
if (gnutls_x509_crt_get_activation_time (cert) > now) {
- ERROR0(_("remoteCheckCertificate: the client "
- "certificate is not yet activated"));
+ VIR_ERROR0(_("remoteCheckCertificate: the client "
+ "certificate is not yet activated"));
gnutls_x509_crt_deinit (cert);
return -1;
}
@@ -1023,7 +1023,7 @@ remoteCheckCertificate (gnutls_session_t
if (i == 0) {
if (!remoteCheckDN (cert)) {
/* This is the most common error: make it informative. */
- ERROR0(_("remoteCheckCertificate: client's Distinguished Name is not on the list of allowed clients (tls_allowed_dn_list). Use 'openssl x509 -in clientcert.pem -text' to view the Distinguished Name field in the client certificate, or run this daemon with --verbose option."));
+ VIR_ERROR0(_("remoteCheckCertificate: client's Distinguished Name is not on the list of allowed clients (tls_allowed_dn_list). Use 'openssl x509 -in clientcert.pem -text' to view the Distinguished Name field in the client certificate, or run this daemon with --verbose option."));
gnutls_x509_crt_deinit (cert);
return -1;
}
@@ -1039,11 +1039,11 @@ remoteCheckAccess (struct qemud_client *
{
/* Verify client certificate. */
if (remoteCheckCertificate (client->tlssession) == -1) {
- ERROR0(_("remoteCheckCertificate: "
- "failed to verify client's certificate"));
+ VIR_ERROR0(_("remoteCheckCertificate: "
+ "failed to verify client's certificate"));
if (!tls_no_verify_certificate) return -1;
- else INFO0(_("remoteCheckCertificate: tls_no_verify_certificate "
- "is set so the bad certificate is ignored"));
+ else VIR_INFO0(_("remoteCheckCertificate: tls_no_verify_certificate "
+ "is set so the bad certificate is ignored"));
}
/* Checks have succeeded. Write a '\1' byte back to the client to
@@ -1064,8 +1064,8 @@ int qemudGetSocketIdentity(int fd, uid_t
unsigned int cr_len = sizeof (cr);
if (getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) < 0) {
- ERROR(_("Failed to verify client credentials: %s"),
- strerror(errno));
+ VIR_ERROR(_("Failed to verify client credentials: %s"),
+ strerror(errno));
return -1;
}
@@ -1089,18 +1089,18 @@ static int qemudDispatchServer(struct qe
if ((fd = accept(sock->fd, (struct sockaddr *)&addr, &addrlen)) < 0) {
if (errno == EAGAIN)
return 0;
- ERROR(_("Failed to accept connection: %s"), strerror(errno));
+ VIR_ERROR(_("Failed to accept connection: %s"), strerror(errno));
return -1;
}
if (server->nclients >= max_clients) {
- ERROR0(_("Too many active clients, dropping connection"));
+ VIR_ERROR0(_("Too many active clients, dropping connection"));
close(fd);
return -1;
}
if (VIR_REALLOC_N(server->clients, server->nclients+1) < 0) {
- ERROR0(_("Out of memory allocating clients"));
+ VIR_ERROR0(_("Out of memory allocating clients"));
close(fd);
return -1;
}
@@ -1143,7 +1143,7 @@ static int qemudDispatchServer(struct qe
/* Client is running as root, so disable auth */
if (uid == 0) {
- INFO(_("Turn off polkit auth for privileged client %d"), pid);
+ VIR_INFO(_("Turn off polkit auth for privileged client %d"), pid);
client->auth = REMOTE_AUTH_NONE;
}
}
@@ -1182,7 +1182,7 @@ static int qemudDispatchServer(struct qe
if (qemudRegisterClientEvent (server, client, 0) < 0)
goto cleanup;
} else {
- ERROR(_("TLS handshake failed: %s"),
+ VIR_ERROR(_("TLS handshake failed: %s"),
gnutls_strerror (ret));
goto cleanup;
}
@@ -1288,7 +1288,7 @@ static int qemudClientReadBuf(struct qem
if ((ret = read (client->fd, data, len)) <= 0) {
if (ret == 0 || errno != EAGAIN) {
if (ret != 0)
- ERROR(_("read: %s"), strerror (errno));
+ VIR_ERROR(_("read: %s"), strerror (errno));
qemudDispatchClientFailure(server, client);
}
return -1;
@@ -1301,7 +1301,7 @@ static int qemudClientReadBuf(struct qem
if (ret == 0 || (ret != GNUTLS_E_AGAIN &&
ret != GNUTLS_E_INTERRUPTED)) {
if (ret != 0)
- ERROR(_("gnutls_record_recv: %s"),
+ VIR_ERROR(_("gnutls_record_recv: %s"),
gnutls_strerror (ret));
qemudDispatchClientFailure (server, client);
}
@@ -1461,7 +1461,7 @@ static void qemudDispatchClientRead(stru
else if (qemudRegisterClientEvent (server, client, 1) < 0)
qemudDispatchClientFailure (server, client);
} else if (ret != GNUTLS_E_AGAIN && ret != GNUTLS_E_INTERRUPTED) {
- ERROR(_("TLS handshake failed: %s"),
+ VIR_ERROR(_("TLS handshake failed: %s"),
gnutls_strerror (ret));
qemudDispatchClientFailure (server, client);
} else {
@@ -1485,7 +1485,7 @@ static int qemudClientWriteBuf(struct qe
int ret;
if (!client->tlssession) {
if ((ret = safewrite(client->fd, data, len)) == -1) {
- ERROR(_("write: %s"), strerror (errno));
+ VIR_ERROR(_("write: %s"), strerror (errno));
qemudDispatchClientFailure(server, client);
return -1;
}
@@ -1495,7 +1495,7 @@ static int qemudClientWriteBuf(struct qe
qemudDispatchClientFailure (server, client);
else if (ret < 0) {
if (ret != GNUTLS_E_INTERRUPTED && ret != GNUTLS_E_AGAIN) {
- ERROR(_("gnutls_record_send: %s"), gnutls_strerror (ret));
+ VIR_ERROR(_("gnutls_record_send: %s"), gnutls_strerror (ret));
qemudDispatchClientFailure (server, client);
}
return -1;
@@ -1604,7 +1604,7 @@ qemudDispatchClientWrite(struct qemud_se
else if (qemudRegisterClientEvent (server, client, 1))
qemudDispatchClientFailure (server, client);
} else if (ret != GNUTLS_E_AGAIN && ret != GNUTLS_E_INTERRUPTED) {
- ERROR(_("TLS handshake failed: %s"), gnutls_strerror (ret));
+ VIR_ERROR(_("TLS handshake failed: %s"), gnutls_strerror (ret));
qemudDispatchClientFailure (server, client);
} else {
if (qemudRegisterClientEvent (server, client, 1))
@@ -1731,7 +1731,7 @@ static int qemudOneLoop(void) {
errors = sig_errors;
if (errors) {
sig_errors -= errors;
- ERROR(_("Signal handler reported %d errors: last error: %s"),
+ VIR_ERROR(_("Signal handler reported %d errors: last error: %s"),
errors, strerror (sig_lasterrno));
return -1;
}
@@ -1756,7 +1756,7 @@ static int qemudRunLoop(struct qemud_ser
server->nworkers = min_workers;
if (VIR_ALLOC_N(server->workers, server->nworkers) < 0) {
- ERROR0(_("Failed to allocate workers"));
+ VIR_ERROR0(_("Failed to allocate workers"));
return -1;
}
@@ -1882,13 +1882,13 @@ remoteConfigGetStringList(virConfPtr con
switch (p->type) {
case VIR_CONF_STRING:
if (VIR_ALLOC_N(list, 2) < 0) {
- ERROR(_("failed to allocate memory for %s config list"), key);
+ VIR_ERROR(_("failed to allocate memory for %s config list"), key);
return -1;
}
list[0] = strdup (p->str);
list[1] = NULL;
if (list[0] == NULL) {
- ERROR(_("failed to allocate memory for %s config list value"),
+ VIR_ERROR(_("failed to allocate memory for %s config list value"),
key);
VIR_FREE(list);
return -1;
@@ -1901,13 +1901,13 @@ remoteConfigGetStringList(virConfPtr con
for (pp = p->list; pp; pp = pp->next)
len++;
if (VIR_ALLOC_N(list, 1+len) < 0) {
- ERROR(_("failed to allocate memory for %s config list"), key);
+ VIR_ERROR(_("failed to allocate memory for %s config list"), key);
return -1;
}
for (i = 0, pp = p->list; pp; ++i, pp = pp->next) {
if (pp->type != VIR_CONF_STRING) {
- ERROR(_("remoteReadConfigFile: %s: %s:"
- " must be a string or list of strings\n"),
+ VIR_ERROR(_("remoteReadConfigFile: %s: %s:"
+ " must be a string or list of strings\n"),
filename, key);
VIR_FREE(list);
return -1;
@@ -1918,8 +1918,8 @@ remoteConfigGetStringList(virConfPtr con
for (j = 0 ; j < i ; j++)
VIR_FREE(list[j]);
VIR_FREE(list);
- ERROR(_("failed to allocate memory for %s config list value"),
- key);
+ VIR_ERROR(_("failed to allocate memory for %s config list value"),
+ key);
return -1;
}
@@ -1929,8 +1929,8 @@ remoteConfigGetStringList(virConfPtr con
}
default:
- ERROR(_("remoteReadConfigFile: %s: %s:"
- " must be a string or list of strings\n"),
+ VIR_ERROR(_("remoteReadConfigFile: %s: %s:"
+ " must be a string or list of strings\n"),
filename, key);
return -1;
}
@@ -1945,7 +1945,7 @@ checkType (virConfValuePtr p, const char
const char *key, virConfType required_type)
{
if (p->type != required_type) {
- ERROR(_("remoteReadConfigFile: %s: %s: invalid type:"
+ VIR_ERROR(_("remoteReadConfigFile: %s: %s: invalid type:"
" got %s; expected %s\n"), filename, key,
virConfTypeName (p->type),
virConfTypeName (required_type));
@@ -1966,7 +1966,7 @@ checkType (virConfValuePtr p, const char
goto free_and_fail; \
(var_name) = strdup (p->str); \
if ((var_name) == NULL) { \
- ERROR(_("remoteReadConfigFile: %s\n"),strerror (errno));\
+ VIR_ERROR(_("remoteReadConfigFile: %s\n"),strerror (errno)); \
goto free_and_fail; \
} \
} \
@@ -2008,7 +2008,7 @@ static int remoteConfigGetAuth(virConfPt
*auth = REMOTE_AUTH_POLKIT;
#endif
} else {
- ERROR(_("remoteReadConfigFile: %s: %s: unsupported auth %s\n"),
+ VIR_ERROR(_("remoteReadConfigFile: %s: %s: unsupported auth %s\n"),
filename, key, p->str);
return -1;
}
@@ -2155,11 +2155,11 @@ remoteReadConfigFile (struct qemud_serve
GET_CONF_STR (conf, filename, unix_sock_group);
if (unix_sock_group) {
if (getuid() != 0) {
- WARN0(_("Cannot set group when not running as root"));
+ VIR_WARN0(_("Cannot set group when not running as root"));
} else {
struct group *grp = getgrnam(unix_sock_group);
if (!grp) {
- ERROR(_("Failed to lookup group '%s'"), unix_sock_group);
+ VIR_ERROR(_("Failed to lookup group '%s'"), unix_sock_group);
goto free_and_fail;
}
unix_sock_gid = grp->gr_gid;
@@ -2171,7 +2171,7 @@ remoteReadConfigFile (struct qemud_serve
GET_CONF_STR (conf, filename, unix_sock_ro_perms);
if (unix_sock_ro_perms) {
if (virStrToLong_i (unix_sock_ro_perms, NULL, 8, &unix_sock_ro_mask) != 0) {
- ERROR(_("Failed to parse mode '%s'"), unix_sock_ro_perms);
+ VIR_ERROR(_("Failed to parse mode '%s'"), unix_sock_ro_perms);
goto free_and_fail;
}
free (unix_sock_ro_perms);
@@ -2181,7 +2181,7 @@ remoteReadConfigFile (struct qemud_serve
GET_CONF_STR (conf, filename, unix_sock_rw_perms);
if (unix_sock_rw_perms) {
if (virStrToLong_i (unix_sock_rw_perms, NULL, 8, &unix_sock_rw_mask) != 0) {
- ERROR(_("Failed to parse mode '%s'"), unix_sock_rw_perms);
+ VIR_ERROR(_("Failed to parse mode '%s'"), unix_sock_rw_perms);
goto free_and_fail;
}
free (unix_sock_rw_perms);
@@ -2374,7 +2374,7 @@ int main(int argc, char **argv) {
if (godaemon) {
if (qemudGoDaemon() < 0) {
- ERROR(_("Failed to fork as daemon: %s"), strerror(errno));
+ VIR_ERROR(_("Failed to fork as daemon: %s"), strerror(errno));
goto error1;
}
}
@@ -2395,7 +2395,7 @@ int main(int argc, char **argv) {
qemudSetNonBlock(sigpipe[1]) < 0 ||
qemudSetCloseExec(sigpipe[0]) < 0 ||
qemudSetCloseExec(sigpipe[1]) < 0) {
- ERROR(_("Failed to create pipe: %s"), strerror(errno));
+ VIR_ERROR(_("Failed to create pipe: %s"), strerror(errno));
goto error2;
}
sigwrite = sigpipe[1];
@@ -2427,14 +2427,14 @@ int main(int argc, char **argv) {
const char *sockdirname = LOCAL_STATE_DIR "/run/libvirt";
if (chown(sockdirname, -1, unix_sock_gid) < 0)
- ERROR(_("Failed to change group ownership of %s"), sockdirname);
+ VIR_ERROR(_("Failed to change group ownership of %s"), sockdirname);
}
if (virEventAddHandleImpl(sigpipe[0],
VIR_EVENT_HANDLE_READABLE,
qemudDispatchSignalEvent,
server, NULL) < 0) {
- ERROR0(_("Failed to register callback for signal pipe"));
+ VIR_ERROR0(_("Failed to register callback for signal pipe"));
ret = 3;
goto error2;
}
diff --git a/qemud/remote.c b/qemud/remote.c
--- a/qemud/remote.c
+++ b/qemud/remote.c
@@ -2542,7 +2542,7 @@ remoteDispatchAuthSaslInit (struct qemud
REMOTE_DEBUG("Initialize SASL auth %d", client->fd);
if (client->auth != REMOTE_AUTH_SASL ||
client->saslconn != NULL) {
- ERROR0(_("client tried invalid SASL init request"));
+ VIR_ERROR0(_("client tried invalid SASL init request"));
goto authfail;
}
@@ -2582,8 +2582,8 @@ remoteDispatchAuthSaslInit (struct qemud
VIR_FREE(localAddr);
VIR_FREE(remoteAddr);
if (err != SASL_OK) {
- ERROR(_("sasl context setup failed %d (%s)"),
- err, sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("sasl context setup failed %d (%s)"),
+ err, sasl_errstring(err, NULL, NULL));
client->saslconn = NULL;
goto authfail;
}
@@ -2595,7 +2595,7 @@ remoteDispatchAuthSaslInit (struct qemud
cipher = gnutls_cipher_get(client->tlssession);
if (!(ssf = (sasl_ssf_t)gnutls_cipher_get_key_size(cipher))) {
- ERROR0(_("cannot TLS get cipher size"));
+ VIR_ERROR0(_("cannot TLS get cipher size"));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2604,8 +2604,8 @@ remoteDispatchAuthSaslInit (struct qemud
err = sasl_setprop(client->saslconn, SASL_SSF_EXTERNAL, &ssf);
if (err != SASL_OK) {
- ERROR(_("cannot set SASL external SSF %d (%s)"),
- err, sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("cannot set SASL external SSF %d (%s)"),
+ err, sasl_errstring(err, NULL, NULL));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2632,8 +2632,8 @@ remoteDispatchAuthSaslInit (struct qemud
err = sasl_setprop(client->saslconn, SASL_SEC_PROPS, &secprops);
if (err != SASL_OK) {
- ERROR(_("cannot set SASL security props %d (%s)"),
- err, sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("cannot set SASL security props %d (%s)"),
+ err, sasl_errstring(err, NULL, NULL));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2648,8 +2648,8 @@ remoteDispatchAuthSaslInit (struct qemud
NULL,
NULL);
if (err != SASL_OK) {
- ERROR(_("cannot list SASL mechanisms %d (%s)"),
- err, sasl_errdetail(client->saslconn));
+ VIR_ERROR(_("cannot list SASL mechanisms %d (%s)"),
+ err, sasl_errdetail(client->saslconn));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2657,7 +2657,7 @@ remoteDispatchAuthSaslInit (struct qemud
REMOTE_DEBUG("Available mechanisms for client: '%s'", mechlist);
ret->mechlist = strdup(mechlist);
if (!ret->mechlist) {
- ERROR0(_("cannot allocate mechlist"));
+ VIR_ERROR0(_("cannot allocate mechlist"));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2688,8 +2688,8 @@ remoteSASLCheckSSF (struct qemud_client
err = sasl_getprop(client->saslconn, SASL_SSF, &val);
if (err != SASL_OK) {
- ERROR(_("cannot query SASL ssf on connection %d (%s)"),
- err, sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("cannot query SASL ssf on connection %d (%s)"),
+ err, sasl_errstring(err, NULL, NULL));
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
@@ -2698,7 +2698,7 @@ remoteSASLCheckSSF (struct qemud_client
ssf = *(const int *)val;
REMOTE_DEBUG("negotiated an SSF of %d", ssf);
if (ssf < 56) { /* 56 is good for Kerberos */
- ERROR(_("negotiated SSF %d was not strong enough"), ssf);
+ VIR_ERROR(_("negotiated SSF %d was not strong enough"), ssf);
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
@@ -2727,15 +2727,15 @@ remoteSASLCheckAccess (struct qemud_serv
err = sasl_getprop(client->saslconn, SASL_USERNAME, &val);
if (err != SASL_OK) {
- ERROR(_("cannot query SASL username on connection %d (%s)"),
- err, sasl_errstring(err, NULL, NULL));
+ VIR_ERROR(_("cannot query SASL username on connection %d (%s)"),
+ err, sasl_errstring(err, NULL, NULL));
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
return -1;
}
if (val == NULL) {
- ERROR0(_("no client username was found"));
+ VIR_ERROR0(_("no client username was found"));
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
@@ -2745,7 +2745,7 @@ remoteSASLCheckAccess (struct qemud_serv
client->saslUsername = strdup((const char*)val);
if (client->saslUsername == NULL) {
- ERROR0(_("out of memory copying username"));
+ VIR_ERROR0(_("out of memory copying username"));
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
@@ -2764,7 +2764,7 @@ remoteSASLCheckAccess (struct qemud_serv
}
/* Denied */
- ERROR(_("SASL client %s not allowed in whitelist"), client->saslUsername);
+ VIR_ERROR(_("SASL client %s not allowed in whitelist"), client->saslUsername);
remoteDispatchAuthError(rerr);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
@@ -2794,7 +2794,7 @@ remoteDispatchAuthSaslStart (struct qemu
REMOTE_DEBUG("Start SASL auth %d", client->fd);
if (client->auth != REMOTE_AUTH_SASL ||
client->saslconn == NULL) {
- ERROR0(_("client tried invalid SASL start request"));
+ VIR_ERROR0(_("client tried invalid SASL start request"));
goto authfail;
}
@@ -2809,14 +2809,14 @@ remoteDispatchAuthSaslStart (struct qemu
&serveroutlen);
if (err != SASL_OK &&
err != SASL_CONTINUE) {
- ERROR(_("sasl start failed %d (%s)"),
- err, sasl_errdetail(client->saslconn));
+ VIR_ERROR(_("sasl start failed %d (%s)"),
+ err, sasl_errdetail(client->saslconn));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
}
if (serveroutlen > REMOTE_AUTH_SASL_DATA_MAX) {
- ERROR(_("sasl start reply data too long %d"), serveroutlen);
+ VIR_ERROR(_("sasl start reply data too long %d"), serveroutlen);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2881,7 +2881,7 @@ remoteDispatchAuthSaslStep (struct qemud
REMOTE_DEBUG("Step SASL auth %d", client->fd);
if (client->auth != REMOTE_AUTH_SASL ||
client->saslconn == NULL) {
- ERROR0(_("client tried invalid SASL start request"));
+ VIR_ERROR0(_("client tried invalid SASL start request"));
goto authfail;
}
@@ -2895,16 +2895,16 @@ remoteDispatchAuthSaslStep (struct qemud
&serveroutlen);
if (err != SASL_OK &&
err != SASL_CONTINUE) {
- ERROR(_("sasl step failed %d (%s)"),
- err, sasl_errdetail(client->saslconn));
+ VIR_ERROR(_("sasl step failed %d (%s)"),
+ err, sasl_errdetail(client->saslconn));
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
}
if (serveroutlen > REMOTE_AUTH_SASL_DATA_MAX) {
- ERROR(_("sasl step reply data too long %d"),
- serveroutlen);
+ VIR_ERROR(_("sasl step reply data too long %d"),
+ serveroutlen);
sasl_dispose(&client->saslconn);
client->saslconn = NULL;
goto authfail;
@@ -2959,7 +2959,7 @@ remoteDispatchAuthSaslInit (struct qemud
void *args ATTRIBUTE_UNUSED,
remote_auth_sasl_init_ret *ret ATTRIBUTE_UNUSED)
{
- ERROR0(_("client tried unsupported SASL init request"));
+ VIR_ERROR0(_("client tried unsupported SASL init request"));
remoteDispatchAuthError(rerr);
return -1;
}
@@ -2972,7 +2972,7 @@ remoteDispatchAuthSaslStart (struct qemu
remote_auth_sasl_start_args *args ATTRIBUTE_UNUSED,
remote_auth_sasl_start_ret *ret ATTRIBUTE_UNUSED)
{
- ERROR0(_("client tried unsupported SASL start request"));
+ VIR_ERROR0(_("client tried unsupported SASL start request"));
remoteDispatchAuthError(rerr);
return -1;
}
@@ -2985,7 +2985,7 @@ remoteDispatchAuthSaslStep (struct qemud
remote_auth_sasl_step_args *args ATTRIBUTE_UNUSED,
remote_auth_sasl_step_ret *ret ATTRIBUTE_UNUSED)
{
- ERROR0(_("client tried unsupported SASL step request"));
+ VIR_ERROR0(_("client tried unsupported SASL step request"));
remoteDispatchAuthError(rerr);
return -1;
}
@@ -3021,26 +3021,26 @@ remoteDispatchAuthPolkit (struct qemud_s
REMOTE_DEBUG("Start PolicyKit auth %d", client->fd);
if (client->auth != REMOTE_AUTH_POLKIT) {
- ERROR0(_("client tried invalid PolicyKit init request"));
+ VIR_ERROR0(_("client tried invalid PolicyKit init request"));
goto authfail;
}
if (qemudGetSocketIdentity(client->fd, &callerUid, &callerPid) < 0) {
- ERROR0(_("cannot get peer socket identity"));
- goto authfail;
- }
-
- INFO(_("Checking PID %d running as %d"), callerPid, callerUid);
+ VIR_ERROR0(_("cannot get peer socket identity"));
+ goto authfail;
+ }
+
+ VIR_INFO(_("Checking PID %d running as %d"), callerPid, callerUid);
dbus_error_init(&err);
if (!(pkcaller = polkit_caller_new_from_pid(server->sysbus,
callerPid, &err))) {
- ERROR(_("Failed to lookup policy kit caller: %s"), err.message);
+ VIR_ERROR(_("Failed to lookup policy kit caller: %s"), err.message);
dbus_error_free(&err);
goto authfail;
}
if (!(pkaction = polkit_action_new())) {
- ERROR(_("Failed to create polkit action %s\n"), strerror(errno));
+ VIR_ERROR(_("Failed to create polkit action %s\n"), strerror(errno));
polkit_caller_unref(pkcaller);
goto authfail;
}
@@ -3048,9 +3048,9 @@ remoteDispatchAuthPolkit (struct qemud_s
if (!(pkcontext = polkit_context_new()) ||
!polkit_context_init(pkcontext, &pkerr)) {
- ERROR(_("Failed to create polkit context %s\n"),
- (pkerr ? polkit_error_get_error_message(pkerr)
- : strerror(errno)));
+ VIR_ERROR(_("Failed to create polkit context %s\n"),
+ (pkerr ? polkit_error_get_error_message(pkerr)
+ : strerror(errno)));
if (pkerr)
polkit_error_free(pkerr);
polkit_caller_unref(pkcaller);
@@ -3066,9 +3066,9 @@ remoteDispatchAuthPolkit (struct qemud_s
0,
&pkerr);
if (pkerr && polkit_error_is_set(pkerr)) {
- ERROR(_("Policy kit failed to check authorization %d %s"),
- polkit_error_get_error_code(pkerr),
- polkit_error_get_error_message(pkerr));
+ VIR_ERROR(_("Policy kit failed to check authorization %d %s"),
+ polkit_error_get_error_code(pkerr),
+ polkit_error_get_error_message(pkerr));
goto authfail;
}
#else
@@ -3080,12 +3080,12 @@ remoteDispatchAuthPolkit (struct qemud_s
polkit_caller_unref(pkcaller);
polkit_action_unref(pkaction);
if (pkresult != POLKIT_RESULT_YES) {
- ERROR(_("Policy kit denied action %s from pid %d, uid %d, result: %s\n"),
- action, callerPid, callerUid,
- polkit_result_to_string_representation(pkresult));
- goto authfail;
- }
- INFO(_("Policy allowed action %s from pid %d, uid %d, result %s"),
+ VIR_ERROR(_("Policy kit denied action %s from pid %d, uid %d, result: %s\n"),
+ action, callerPid, callerUid,
+ polkit_result_to_string_representation(pkresult));
+ goto authfail;
+ }
+ VIR_INFO(_("Policy allowed action %s from pid %d, uid %d, result %s"),
action, callerPid, callerUid,
polkit_result_to_string_representation(pkresult));
ret->complete = 1;
@@ -3110,7 +3110,7 @@ remoteDispatchAuthPolkit (struct qemud_s
void *args ATTRIBUTE_UNUSED,
remote_auth_polkit_ret *ret ATTRIBUTE_UNUSED)
{
- ERROR0(_("client tried unsupported PolicyKit init request"));
+ VIR_ERROR0(_("client tried unsupported PolicyKit init request"));
remoteDispatchAuthError(rerr);
return -1;
}
diff --git a/qemud/remote_protocol.c b/qemud/remote_protocol.c
--- a/qemud/remote_protocol.c
+++ b/qemud/remote_protocol.c
@@ -332,7 +332,7 @@ xdr_remote_node_get_info_ret (XDR *xdrs,
return FALSE;
if (!xdr_quad_t (xdrs, &objp->memory))
return FALSE;
- buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
+ buf = (int32_t*)XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
if (buf == NULL) {
if (!xdr_int (xdrs, &objp->cpus))
return FALSE;
@@ -361,7 +361,7 @@ xdr_remote_node_get_info_ret (XDR *xdrs,
return FALSE;
if (!xdr_quad_t (xdrs, &objp->memory))
return FALSE;
- buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
+ buf = (int32_t*)XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
if (buf == NULL) {
if (!xdr_int (xdrs, &objp->cpus))
return FALSE;
diff --git a/qemud/rpcgen_fix.pl b/qemud/rpcgen_fix.pl
--- a/qemud/rpcgen_fix.pl
+++ b/qemud/rpcgen_fix.pl
@@ -68,6 +68,7 @@ while (<>) {
# be ignored. Correct both these mistakes.
@function =
map { s/\bIXDR_PUT_((U_)?)LONG\b/(void)IXDR_PUT_$1INT32/; $_ }
+ map { s/\bXDR_INLINE\b/(int32_t*)XDR_INLINE/; $_ }
@function;
print (join ("", @function));
diff --git a/src/logging.c b/src/logging.c
--- a/src/logging.c
+++ b/src/logging.c
@@ -29,6 +29,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <unistd.h>
#if HAVE_SYSLOG_H
#include <syslog.h>
#endif
@@ -483,7 +484,10 @@ void virLogMessage(const char *category,
char *str = NULL;
char *msg;
struct timeval cur_time;
- struct tm time_info;
+#if HAVE_LOCALTIME_R
+ struct tm tmdata;
+#endif
+ struct tm *tm;
int len, fprio, i, ret;
if (!virLogInitialized)
@@ -509,17 +513,21 @@ void virLogMessage(const char *category,
if (str == NULL)
return;
gettimeofday(&cur_time, NULL);
- localtime_r(&cur_time.tv_sec, &time_info);
+#if HAVE_LOCALTIME_R
+ tm = localtime_r(&cur_time.tv_sec, &tmdata);
+#else
+ tm = localtime(&cur_time.tv_sec);
+#endif
if ((funcname != NULL) && (priority == VIR_LOG_DEBUG)) {
ret = virAsprintf(&msg, "%02d:%02d:%02d.%03d: %s : %s:%lld : %s\n",
- time_info.tm_hour, time_info.tm_min,
- time_info.tm_sec, (int) cur_time.tv_usec / 1000,
+ tm->tm_hour, tm->tm_min,
+ tm->tm_sec, (int) cur_time.tv_usec / 1000,
virLogPriorityString(priority), funcname, linenr, str);
} else {
ret = virAsprintf(&msg, "%02d:%02d:%02d.%03d: %s : %s\n",
- time_info.tm_hour, time_info.tm_min,
- time_info.tm_sec, (int) cur_time.tv_usec / 1000,
+ tm->tm_hour, tm->tm_min,
+ tm->tm_sec, (int) cur_time.tv_usec / 1000,
virLogPriorityString(priority), str);
}
VIR_FREE(str);
diff --git a/src/logging.h b/src/logging.h
--- a/src/logging.h
+++ b/src/logging.h
@@ -30,48 +30,53 @@
* defined at runtime of from the libvirt daemon configuration file
*/
#ifdef ENABLE_DEBUG
-#define VIR_DEBUG(category, f, l, fmt,...) \
+#define VIR_DEBUG_INT(category, f, l, fmt,...) \
virLogMessage(category, VIR_LOG_DEBUG, f, l, 0, fmt, __VA_ARGS__)
-#define VIR_INFO(category, f, l, fmt,...) \
+#define VIR_INFO_INT(category, f, l, fmt,...) \
virLogMessage(category, VIR_LOG_INFO, f, l, 0, fmt, __VA_ARGS__)
-#define VIR_WARN(category, f, l, fmt,...) \
+#define VIR_WARN_INT(category, f, l, fmt,...) \
virLogMessage(category, VIR_LOG_WARN, f, l, 0, fmt, __VA_ARGS__)
-#define VIR_ERROR(category, f, l, fmt,...) \
+#define VIR_ERROR_INT(category, f, l, fmt,...) \
virLogMessage(category, VIR_LOG_ERROR, f, l, 0, fmt, __VA_ARGS__)
#else
-#define VIR_DEBUG(category, f, l, fmt,...) \
+#define VIR_DEBUG_INT(category, f, l, fmt,...) \
do { } while (0)
-#define VIR_INFO(category, f, l, fmt,...) \
+#define VIR_INFO_INT(category, f, l, fmt,...) \
do { } while (0)
-#define VIR_WARN(category, f, l, fmt,...) \
+#define VIR_WARN_INT(category, f, l, fmt,...) \
do { } while (0)
-#define VIR_ERROR(category, f, l, fmt,...) \
+#define VIR_ERROR_INT(category, f, l, fmt,...) \
do { } while (0)
-#define VIR_INFO(category, fmt,...) \
+#define VIR_INFO_INT(category, fmt,...) \
do { } while (0)
-#define VIR_WARN(category, fmt,...) \
+#define VIR_WARN_INT(category, fmt,...) \
do { } while (0)
-#define VIR_ERROR(category, fmt,...) \
+#define VIR_ERROR_INT(category, fmt,...) \
do { } while (0)
#endif /* !ENABLE_DEBUG */
+#define VIR_DEBUG(fmt,...) \
+ VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
+#define VIR_DEBUG0(msg) \
+ VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, "%s", msg)
+#define VIR_INFO(fmt,...) \
+ VIR_INFO_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
+#define VIR_INFO0(msg) \
+ VIR_INFO_INT("file." __FILE__, __func__, __LINE__, "%s", msg)
+#define VIR_WARN(fmt,...) \
+ VIR_WARN_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
+#define VIR_WARN0(msg) \
+ VIR_WARN_INT("file." __FILE__, __func__, __LINE__, "%s", msg)
+#define VIR_ERROR(fmt,...) \
+ VIR_ERROR_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
+#define VIR_ERROR0(msg) \
+ VIR_ERROR_INT("file." __FILE__, __func__, __LINE__, "%s", msg)
+
+/* Legacy compat */
#define DEBUG(fmt,...) \
- VIR_DEBUG("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
+ VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
#define DEBUG0(msg) \
- VIR_DEBUG("file." __FILE__, __func__, __LINE__, "%s", msg)
-#define INFO(fmt,...) \
- VIR_INFO("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
-#define INFO0(msg) \
- VIR_INFO("file." __FILE__, __func__, __LINE__, "%s", msg)
-#define WARN(fmt,...) \
- VIR_WARN("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
-#define WARN0(msg) \
- VIR_WARN("file." __FILE__, __func__, __LINE__, "%s", msg)
-#define ERROR(fmt,...) \
- VIR_ERROR("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
-#define ERROR0(msg) \
- VIR_ERROR("file." __FILE__, __func__, __LINE__, "%s", msg)
-
+ VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, "%s", msg)
/*
* To be made public
diff --git a/src/test.c b/src/test.c
--- a/src/test.c
+++ b/src/test.c
@@ -93,6 +93,7 @@ static const virNodeInfo defaultNodeInfo
virReportErrorHelper(conn, VIR_FROM_TEST, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
+#ifdef HAVE_THREAD_H
static void testDriverLock(testConnPtr driver)
{
pthread_mutex_lock(&driver->lock);
@@ -102,6 +103,10 @@ static void testDriverUnlock(testConnPtr
{
pthread_mutex_unlock(&driver->lock);
}
+#else
+static void testDriverLock(testConnPtr driver ATTRIBUTE_UNUSED) {}
+static void testDriverUnlock(testConnPtr driver ATTRIBUTE_UNUSED) {}
+#endif
static virCapsPtr
testBuildCapabilities(virConnectPtr conn) {
diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
--- a/tests/nodeinfotest.c
+++ b/tests/nodeinfotest.c
@@ -13,7 +13,7 @@
#ifndef __linux__
static int
-mymain(int argc, char **argv)
+mymain(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
{
exit (77); /* means 'test skipped' for automake */
}
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
15 years, 10 months
[libvirt] [PATCH] fix "make dist" (from scratch) failure
by Jim Meyering
Daniel Veillard noticed that "make dist" would fail
when run from a clean source directory, due to our
attempt to distribute a no-longer-generated file.
I've committed this:
>From 97e99d702dbb15176177bfd2055632ee6fdb6491 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Tue, 6 Jan 2009 16:21:24 +0100
Subject: [PATCH] fix "make dist" (from scratch) failure
* src/Makefile.am (EXTRA_DIST): Don't distribute libvirt_sym.version,
now that it's been removed. Spotted by Daniel Veillard.
---
src/Makefile.am | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index b3020cc..dd7dea8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -28,7 +28,7 @@ ICON_FILES = \
libvirt_win_icon_64x64.ico \
virsh_win_icon.rc
-EXTRA_DIST = libvirt_sym.version $(conf_DATA) $(ICON_FILES)
+EXTRA_DIST = $(conf_DATA) $(ICON_FILES)
lib_LTLIBRARIES = libvirt.la
--
1.6.1.121.g866a4a
15 years, 10 months
[libvirt] [PATCH 2/5] daemonize qemu processes
by Guido Günther
Make sure vms don't get killed when the libvirtd quits unexpectedly.
Needs the previous patch since it looks at the pid file.
---
src/qemu_driver.c | 36 ++++++++++++++++++++++++------------
1 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index a2e573e..7804094 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -858,6 +858,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
const char *emulator;
uid_t uid = geteuid();
mode_t logmode;
+ pid_t child;
FD_ZERO(&keepfd);
@@ -988,12 +989,26 @@ static int qemudStartVMDaemon(virConnectPtr conn,
for (i = 0 ; i < ntapfds ; i++)
FD_SET(tapfds[i], &keepfd);
- ret = virExec(conn, argv, progenv, &keepfd, &vm->pid,
+ ret = virExec(conn, argv, progenv, &keepfd, &child,
vm->stdin_fd, &vm->stdout_fd, &vm->stderr_fd,
- VIR_EXEC_NONBLOCK);
- if (ret == 0)
+ VIR_EXEC_NONBLOCK | VIR_EXEC_DAEMON);
+
+ /* wait for qemu process to to show up */
+ if (ret == 0) {
+ int retries = 100;
+ while (retries) {
+ if ((ret = virFileReadPid(driver->stateDir, vm->def->name, &vm->pid)) == 0)
+ break;
+ usleep(10*1000);
+ retries--;
+ }
+ if (ret)
+ qemudLog(QEMUD_WARN, _("Domain %s didn't show up\n"), vm->def->name);
+ }
+
+ if (ret == 0) {
vm->state = migrateFrom ? VIR_DOMAIN_PAUSED : VIR_DOMAIN_RUNNING;
- else
+ } else
vm->def->id = -1;
for (i = 0 ; argv[i] ; i++)
@@ -1069,7 +1084,9 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
qemudLog(QEMUD_INFO, _("Shutting down VM '%s'\n"), vm->def->name);
- kill(vm->pid, SIGTERM);
+ if (kill(vm->pid, SIGTERM) < 0)
+ qemudLog(QEMUD_ERROR, _("Failed to send SIGTERM to %s (%d): %s\n"),
+ vm->def->name, vm->pid, strerror(errno));
qemudVMData(driver, vm, vm->stdout_fd);
qemudVMData(driver, vm, vm->stderr_fd);
@@ -1089,13 +1106,8 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
vm->stderr_fd = -1;
vm->monitor = -1;
- if (waitpid(vm->pid, NULL, WNOHANG) != vm->pid) {
- kill(vm->pid, SIGKILL);
- if (waitpid(vm->pid, NULL, 0) != vm->pid) {
- qemudLog(QEMUD_WARN,
- "%s", _("Got unexpected pid, damn\n"));
- }
- }
+ /* shut it off for sure */
+ kill(vm->pid, SIGKILL);
vm->pid = -1;
vm->def->id = -1;
--
1.6.0.2
15 years, 10 months
[libvirt] [PATCH] dist: distribute all libvirt_*.syms files, ...
by Jim Meyering
Some of the new libvirt_*.syms files were
included in EXTRA_DIST only conditionally.
Here's the fix:
>From 272938681646e3aeefe5d9b13fab312a47e5d862 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Tue, 6 Jan 2009 12:09:40 +0100
Subject: [PATCH] dist: distribute all libvirt_*.syms files, ...
* src/Makefile.am (EXTRA_DIST): Distribute all libvirt_*.syms files,
not just those that happen to be selected at configure time.
---
src/Makefile.am | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 1f707e2..b3020cc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -192,7 +192,7 @@ libvirt_driver_la_SOURCES = \
libvirt_driver_la_CFLAGS = $(XEN_CFLAGS) $(NUMACTL_CFLAGS)
libvirt_driver_la_LDFLAGS = $(XEN_LIBS) $(NUMACTL_LIBS)
-PRIVSYMFILES = libvirt_private.syms
+USED_SYM_FILES = libvirt_private.syms
if WITH_TEST
if WITH_DRIVER_MODULES
@@ -412,31 +412,37 @@ EXTRA_DIST += \
#
if ENABLE_DEBUG
-PRIVSYMFILES += libvirt_debug.syms
+USED_SYM_FILES += libvirt_debug.syms
endif
if WITH_DRIVER_MODULES
-PRIVSYMFILES += libvirt_driver_modules.syms
+USED_SYM_FILES += libvirt_driver_modules.syms
endif
if WITH_BRIDGE
-PRIVSYMFILES += libvirt_bridge.syms
+USED_SYM_FILES += libvirt_bridge.syms
endif
if WITH_LINUX
-PRIVSYMFILES += libvirt_linux.syms
+USED_SYM_FILES += libvirt_linux.syms
endif
-EXTRA_DIST += libvirt_public.syms $(PRIVSYMFILES)
+EXTRA_DIST += \
+ libvirt_public.syms \
+ libvirt_private.syms \
+ libvirt_debug.syms \
+ libvirt_driver_modules.syms \
+ libvirt_bridge.syms \
+ libvirt_linux.syms
-libvirt.syms: libvirt_public.syms $(PRIVSYMFILES)
+libvirt.syms: libvirt_public.syms $(USED_SYM_FILES)
rm -f $@-tmp $@
printf '# WARNING: generated from the following:\n# $^\n\n' >$@-tmp
cat $(srcdir)/libvirt_public.syms >>$@-tmp
printf '\n\n# Private symbols\n\n' >>$@-tmp
printf 'LIBVIRT_PRIVATE_$(VERSION) {\n\n' >>$@-tmp
printf 'global:\n\n' >>$@-tmp
- for file in $(PRIVSYMFILES); do \
+ for file in $(USED_SYM_FILES); do \
cat $(srcdir)/$$file >>$@-tmp; \
done
printf '\n\nlocal:\n*;\n\n};' >>$@-tmp
--
1.6.1.rc3.350.g541da
15 years, 10 months
[libvirt] Libvirt - Xen Enterprise - Koan
by Tom Brown
Hi
Our VM's currently run on top of Xen Enterprise, not my choice but thats
the way it has to be at the moment. I'd like to be able to still use
cobbler/koan to provision the systems and so i have managed to get
libvirt installed onto a Xen Enterprise host. Libvirt starts but it cant
connect to Xend as i presume Xen Enterprise behaves differently to Xen.
Does anyone have any success with libvirt and Xen Enterprise ?
thanks for any tips/experience
15 years, 10 months
[libvirt] [PATCH] avoid syntax-check (po-check) failure due to FP match on gettext.m4
by Jim Meyering
spotted by Dan Berrange
and the autobuilder
http://builder.virt-manager.org/logs/modules/libvirt--devel-build-output.log
>From ee91ab81dbd458078df39ef52e22e9a489d5cc72 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering(a)redhat.com>
Date: Tue, 6 Jan 2009 10:42:29 +0100
Subject: [PATCH] avoid syntax-check (po-check) failure due to FP match on gettext.m4
* Makefile.maint (po-check): Exclude .m4 files.
---
Makefile.maint | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/Makefile.maint b/Makefile.maint
index 4e2d347..cfbdf56 100644
--- a/Makefile.maint
+++ b/Makefile.maint
@@ -558,6 +558,7 @@ po-check:
files=; \
for file in $$($(VC_LIST_EXCEPT)); do \
case $$file in \
+ *.m4) continue;; \
*.?|*.??) ;; \
*) continue;; \
esac; \
--
1.6.1.rc3.350.g541da
15 years, 10 months
[libvirt] [PATCH] Fix !SASL qemud compile
by john.levon@sun.com
# HG changeset patch
# User john.levon(a)sun.com
# Date 1229980020 28800
# Node ID 4fbf7139ca42757d771f03578e91038bf28a5e0e
# Parent fd97ec8e5799120ebf5ea9ed73d681c6d1386970
Fix !SASL qemud compile
Replace qemudLog() with ERROR0()
Signed-off-by: John Levon <john.levon(a)sun.com>
diff --git a/qemud/remote.c b/qemud/remote.c
--- a/qemud/remote.c
+++ b/qemud/remote.c
@@ -2968,7 +2968,7 @@ remoteDispatchAuthSaslInit (struct qemud
void *args ATTRIBUTE_UNUSED,
remote_auth_sasl_init_ret *ret ATTRIBUTE_UNUSED)
{
- qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL init request"));
+ ERROR0(_("client tried unsupported SASL init request"));
remoteDispatchAuthError(rerr);
return -1;
}
@@ -2981,7 +2981,7 @@ remoteDispatchAuthSaslStart (struct qemu
remote_auth_sasl_start_args *args ATTRIBUTE_UNUSED,
remote_auth_sasl_start_ret *ret ATTRIBUTE_UNUSED)
{
- qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL start request"));
+ ERROR0(_("client tried unsupported SASL start request"));
remoteDispatchAuthError(rerr);
return -1;
}
@@ -2994,7 +2994,7 @@ remoteDispatchAuthSaslStep (struct qemud
remote_auth_sasl_step_args *args ATTRIBUTE_UNUSED,
remote_auth_sasl_step_ret *ret ATTRIBUTE_UNUSED)
{
- qemudLog(QEMUD_ERR, "%s", _("client tried unsupported SASL step request"));
+ ERROR0(_("client tried unsupported SASL step request"));
remoteDispatchAuthError(rerr);
return -1;
}
15 years, 10 months
[libvirt] [PATCH] Make mntent.h specific to the FS storage backend
by john.levon@sun.com
# HG changeset patch
# User john.levon(a)sun.com
# Date 1229789393 28800
# Node ID c433c57ef39b2c343653910df84130c8849a7c11
# Parent 100de621beed6e146b239df3691bd426090955b4
Make mntent.h specific to the FS storage backend
It's Linux specific, so for now, put it behind a WITH_STORAGE_FS guard.
Signed-off-by: John Levon <john.levon(a)sun.com>
diff --git a/src/storage_backend_fs.c b/src/storage_backend_fs.c
--- a/src/storage_backend_fs.c
+++ b/src/storage_backend_fs.c
@@ -31,7 +31,6 @@
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
-#include <mntent.h>
#include <string.h>
#include <libxml/parser.h>
@@ -242,6 +241,9 @@ static int virStorageBackendProbeFile(vi
}
#if WITH_STORAGE_FS
+
+#include <mntent.h>
+
struct _virNetfsDiscoverState {
const char *host;
virStoragePoolSourceList list;
15 years, 10 months