Fri Dec 7 14:49:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com>

* src/console.c, src/console.h, src/virsh.c: Disable
	  text console on Windows.
	* src/libvirt.c: Use replacement getpass from Gnulib.
	* src/libvirt.c: Initialize Winsock before use.
	* src/remote_internal.c: Header file fixes for Windows.
	  Don't fail if AI_ADDRCONFIG isn't defined.  Disable
	  unsupported stuff under Windows.
	* src/uuid.c: ENODATA unavailable on Windows, use EIO instead.
	* src/virsh.c: No uid_t / getuid on Windows.
	* src/virsh.c: No O_SYNC on Windows.
This commit is contained in:
Richard W.M. Jones 2007-12-07 14:56:37 +00:00
parent f3ebd20d35
commit 0d14fc0cbb
7 changed files with 117 additions and 6 deletions

View File

@ -1,3 +1,16 @@
Fri Dec 7 14:49:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com>
* src/console.c, src/console.h, src/virsh.c: Disable
text console on Windows.
* src/libvirt.c: Use replacement getpass from Gnulib.
* src/libvirt.c: Initialize Winsock before use.
* src/remote_internal.c: Header file fixes for Windows.
Don't fail if AI_ADDRCONFIG isn't defined. Disable
unsupported stuff under Windows.
* src/uuid.c: ENODATA unavailable on Windows, use EIO instead.
* src/virsh.c: No uid_t / getuid on Windows.
* src/virsh.c: No O_SYNC on Windows.
Fri Dec 7 14:47:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com> Fri Dec 7 14:47:00 UTC 2007 Richard W.M. Jones <rjones@redhat.com>
* src/internal.h: Use gnulib gettext library. Define * src/internal.h: Use gnulib gettext library. Define

View File

@ -22,6 +22,8 @@
#include "config.h" #include "config.h"
#ifndef __MINGW32__
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -193,6 +195,8 @@ int vshRunConsole(const char *tty) {
return ret; return ret;
} }
#endif /* !__MINGW32__ */
/* /*
* Local variables: * Local variables:
* indent-tabs-mode: nil * indent-tabs-mode: nil

View File

@ -23,6 +23,8 @@
#ifndef __VIR_CONSOLE_H__ #ifndef __VIR_CONSOLE_H__
#define __VIR_CONSOLE_H__ #define __VIR_CONSOLE_H__
#ifndef __MINGW32__
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -33,6 +35,8 @@ extern "C" {
} }
#endif #endif
#endif /* !__MINGW32__ */
#endif /* __VIR_CONSOLE_H__ */ #endif /* __VIR_CONSOLE_H__ */
/* /*

View File

@ -23,6 +23,11 @@
#include <libxml/parser.h> #include <libxml/parser.h>
#include <libxml/xpath.h> #include <libxml/xpath.h>
#include <libxml/uri.h> #include <libxml/uri.h>
#include "getpass.h"
#if HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#include "internal.h" #include "internal.h"
#include "driver.h" #include "driver.h"
@ -144,6 +149,21 @@ static virConnectAuth virConnectAuthDefault = {
*/ */
virConnectAuthPtr virConnectAuthPtrDefault = &virConnectAuthDefault; virConnectAuthPtr virConnectAuthPtrDefault = &virConnectAuthDefault;
#if HAVE_WINSOCK2_H
static int
winsock_init (void)
{
WORD winsock_version, err;
WSADATA winsock_data;
/* http://msdn2.microsoft.com/en-us/library/ms742213.aspx */
winsock_version = MAKEWORD (2, 2);
err = WSAStartup (winsock_version, &winsock_data);
if (err != 0)
return -1;
}
#endif
/** /**
* virInitialize: * virInitialize:
* *
@ -161,6 +181,10 @@ virInitialize(void)
return(0); return(0);
initialized = 1; initialized = 1;
#if HAVE_WINSOCK2_H
if (winsock_init () == -1) return -1;
#endif
if (!bindtextdomain(GETTEXT_PACKAGE, LOCALEBASEDIR)) if (!bindtextdomain(GETTEXT_PACKAGE, LOCALEBASEDIR))
return (-1); return (-1);

View File

@ -31,15 +31,29 @@
#include <errno.h> #include <errno.h>
#include <signal.h> #include <signal.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h> #include <fcntl.h>
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
#ifdef HAVE_PWD_H
#include <pwd.h>
#endif
#ifdef HAVE_PATHS_H
#include <paths.h> #include <paths.h>
#endif
#ifndef HAVE_WINSOCK2_H
#include <sys/socket.h>
#include <netdb.h> #include <netdb.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <pwd.h> #else
#include <winsock2.h>
#endif
#include <rpc/types.h> #include <rpc/types.h>
#include <rpc/xdr.h> #include <rpc/xdr.h>
@ -51,9 +65,15 @@
#endif #endif
#include <libxml/uri.h> #include <libxml/uri.h>
#include "getaddrinfo.h"
/* AI_ADDRCONFIG is missing on some systems. */
#ifndef AI_ADDRCONFIG
# define AI_ADDRCONFIG 0
#endif
#include "internal.h" #include "internal.h"
#include "driver.h" #include "driver.h"
#include "getaddrinfo.h"
#include "remote_internal.h" #include "remote_internal.h"
#include "remote_protocol.h" #include "remote_protocol.h"
@ -207,6 +227,7 @@ remoteFindDaemonPath(void)
return NULL; return NULL;
} }
#ifndef WIN32
/** /**
* qemuForkDaemon: * qemuForkDaemon:
* *
@ -286,7 +307,7 @@ remoteForkDaemon(virConnectPtr conn)
return (0); return (0);
} }
#endif
enum virDrvOpenRemoteFlags { enum virDrvOpenRemoteFlags {
VIR_DRV_OPEN_REMOTE_RO = (1 << 0), VIR_DRV_OPEN_REMOTE_RO = (1 << 0),
@ -554,6 +575,7 @@ doRemoteOpen (virConnectPtr conn,
break; break;
} }
#ifndef WIN32
case trans_unix: { case trans_unix: {
if (!sockname) { if (!sockname) {
if (flags & VIR_DRV_OPEN_REMOTE_USER) { if (flags & VIR_DRV_OPEN_REMOTE_USER) {
@ -720,6 +742,16 @@ doRemoteOpen (virConnectPtr conn,
priv->sock = sv[0]; priv->sock = sv[0];
priv->pid = pid; priv->pid = pid;
} }
#else /* WIN32 */
case trans_unix:
case trans_ssh:
case trans_ext:
error (conn, VIR_ERR_INVALID_ARG,
_("transport methods unix, ssh and ext are not supported under Windows"));
#endif /* WIN32 */
} /* switch (transport) */ } /* switch (transport) */
@ -769,6 +801,7 @@ doRemoteOpen (virConnectPtr conn,
gnutls_deinit (priv->session); gnutls_deinit (priv->session);
} }
close (priv->sock); close (priv->sock);
#ifndef WIN32
if (priv->pid > 0) { if (priv->pid > 0) {
pid_t reap; pid_t reap;
do { do {
@ -777,6 +810,7 @@ doRemoteOpen (virConnectPtr conn,
continue; continue;
} while (reap != -1 && reap != priv->pid); } while (reap != -1 && reap != priv->pid);
} }
#endif
} }
if (priv->hostname) { if (priv->hostname) {
@ -808,6 +842,7 @@ remoteOpen (virConnectPtr conn,
if (flags & VIR_CONNECT_RO) if (flags & VIR_CONNECT_RO)
rflags |= VIR_DRV_OPEN_REMOTE_RO; rflags |= VIR_DRV_OPEN_REMOTE_RO;
#if WITH_QEMU
if (uri && if (uri &&
uri->scheme && STREQ (uri->scheme, "qemu") && uri->scheme && STREQ (uri->scheme, "qemu") &&
(!uri->server || STREQ (uri->server, "")) && (!uri->server || STREQ (uri->server, "")) &&
@ -822,6 +857,7 @@ remoteOpen (virConnectPtr conn,
} }
} }
} }
#endif
memset(priv, 0, sizeof(struct private_data)); memset(priv, 0, sizeof(struct private_data));
priv->magic = DEAD; priv->magic = DEAD;
@ -1306,6 +1342,7 @@ doRemoteClose (virConnectPtr conn, struct private_data *priv)
#endif #endif
close (priv->sock); close (priv->sock);
#ifndef WIN32
if (priv->pid > 0) { if (priv->pid > 0) {
pid_t reap; pid_t reap;
do { do {
@ -1314,6 +1351,7 @@ doRemoteClose (virConnectPtr conn, struct private_data *priv)
continue; continue;
} while (reap != -1 && reap != priv->pid); } while (reap != -1 && reap != priv->pid);
} }
#endif
/* Free hostname copy */ /* Free hostname copy */
if (priv->hostname) free (priv->hostname); if (priv->hostname) free (priv->hostname);

View File

@ -36,6 +36,10 @@
#define qemudLog(level, msg...) fprintf(stderr, msg) #define qemudLog(level, msg...) fprintf(stderr, msg)
#ifndef ENODATA
#define ENODATA EIO
#endif
static int static int
virUUIDGenerateRandomBytes(unsigned char *buf, virUUIDGenerateRandomBytes(unsigned char *buf,
int buflen) int buflen)

View File

@ -202,7 +202,9 @@ typedef struct __vshControl {
virConnectPtr conn; /* connection to hypervisor (MAY BE NULL) */ virConnectPtr conn; /* connection to hypervisor (MAY BE NULL) */
vshCmd *cmd; /* the current command */ vshCmd *cmd; /* the current command */
char *cmdstr; /* string with command */ char *cmdstr; /* string with command */
#ifndef __MINGW32__
uid_t uid; /* process owner */ uid_t uid; /* process owner */
#endif /* __MINGW32__ */
int imode; /* interactive mode? */ int imode; /* interactive mode? */
int quiet; /* quiet mode */ int quiet; /* quiet mode */
int debug; /* print debug messages? */ int debug; /* print debug messages? */
@ -457,6 +459,8 @@ static vshCmdOptDef opts_console[] = {
{NULL, 0, 0, NULL} {NULL, 0, 0, NULL}
}; };
#ifndef __MINGW32__
static int static int
cmdConsole(vshControl * ctl, vshCmd * cmd) cmdConsole(vshControl * ctl, vshCmd * cmd)
{ {
@ -506,6 +510,17 @@ cmdConsole(vshControl * ctl, vshCmd * cmd)
return ret; return ret;
} }
#else /* __MINGW32__ */
static int
cmdConsole(vshControl * ctl, vshCmd * cmd ATTRIBUTE_UNUSED)
{
vshError (ctl, FALSE, _("console not implemented on this platform"));
return FALSE;
}
#endif /* __MINGW32__ */
/* /*
* "list" command * "list" command
*/ */
@ -4508,17 +4523,21 @@ vshInit(vshControl * ctl)
if (ctl->conn) if (ctl->conn)
return FALSE; return FALSE;
#ifndef __MINGW32__
ctl->uid = getuid(); ctl->uid = getuid();
#endif
vshOpenLogFile(ctl); vshOpenLogFile(ctl);
/* set up the library error handler */ /* set up the library error handler */
virSetErrorFunc(NULL, virshErrorHandler); virSetErrorFunc(NULL, virshErrorHandler);
#ifndef __MINGW32__
/* Force a non-root, Xen connection to readonly */ /* Force a non-root, Xen connection to readonly */
if ((ctl->name == NULL || if ((ctl->name == NULL ||
!strcasecmp(ctl->name, "xen")) && ctl->uid != 0) !strcasecmp(ctl->name, "xen")) && ctl->uid != 0)
ctl->readonly = 1; ctl->readonly = 1;
#endif
ctl->conn = virConnectOpenAuth(ctl->name, ctl->conn = virConnectOpenAuth(ctl->name,
virConnectAuthPtrDefault, virConnectAuthPtrDefault,
@ -4537,6 +4556,11 @@ vshInit(vshControl * ctl)
return TRUE; return TRUE;
} }
#ifndef O_SYNC
#define O_SYNC 0
#endif
#define LOGFILE_FLAGS (O_WRONLY | O_APPEND | O_CREAT | O_SYNC)
/** /**
* vshOpenLogFile: * vshOpenLogFile:
* *
@ -4566,7 +4590,7 @@ vshOpenLogFile(vshControl *ctl)
} }
/* log file open */ /* log file open */
if ((ctl->log_fd = open(ctl->logfile, O_WRONLY | O_APPEND | O_CREAT | O_SYNC, FILE_MODE)) < 0) { if ((ctl->log_fd = open(ctl->logfile, LOGFILE_FLAGS, FILE_MODE)) < 0) {
vshError(ctl, TRUE, _("failed to open the log file. check the log file path")); vshError(ctl, TRUE, _("failed to open the log file. check the log file path"));
} }
} }