[Libvir] PATCH: 5/10: public auth callback API

Daniel P. Berrange berrange at redhat.com
Thu Nov 29 17:19:31 UTC 2007


This patch introduces the public & driver APIs for collecting auth
credentials via a callback. This allows username/password based auth
schemes to be used.

This basically introduces a 3rd variant of the virConnectOpen call
which takes a set of authentication parameters, and some flags.

 virConnectPtr           virConnectOpenAuth      (const char *name,
 						 virConnectAuthPtr auth,
 						 int flags);


The flags parameter allows VIR_CONNECT_RO, so there is no need for a
separate ReadOnly API. The 'auth' parameter is a small struct containing
a list of credentials that the calling application knows how to collect,
a function pointer for the callback, and an opaque data blob.

 struct _virConnectAuth {
     int *credtype; /* List of supported virConnectCredentialType values */
     unsigned int ncredtype;

     virConnectAuthCallbackPtr cb; /* Callback used to collect credentials */
     void *cbdata;
 };

At the very least apps should support the VIR_CRED_AUTHNAME and the
VIR_CRED_PASSPHRASE credential types for collecting username+password
respectively. There are a bunch of other credential type, but they're
for fairly niche use cases.

When the callback is invoked, it will be passed a list of virConnectCredentialPtr
structs which contain details on all the credentials that the authentication
mechanism needs to collect. They are passed all at once to make it easy to
construct a big form in UI:

 typedef int (*virConnectAuthCallbackPtr)(virConnectCredentialPtr cred,
 					 unsigned int ncred,
 					 void *cbdata);

The virConnectCredentialPtr struct contains a prompt which can be displayed
in the UI. There may optionally be a challenge if doing a challenge/response
type authentication. There may also be a default result. The application
should collect a credential from the user & fill it into the 'result' field,
or use the default result. If the callback returns 0, authentication will
continue. If it returns -1, it will assume the user wants to cancel the
auth process.


 Makefile.am                         |    2 
 docs/devhelp/libvirt-libvirt.html   |   80 ++++++++++++-
 docs/devhelp/libvirt-virterror.html |    3 
 docs/libvirt-api.xml                |  114 +++++++++++++++----
 docs/libvirt-refs.xml               |  210 ++++++++++++++++++++++++++++++++----
 include/libvirt/libvirt.h.in        |   72 ++++++++++++
 proxy/libvirt_proxy.c               |    4 
 qemud/remote.c                      |    2 
 src/driver.h                        |   10 -
 src/internal.h                      |    5 
 src/libvirt.c                       |   40 +++++-
 src/openvz_driver.c                 |   23 +++
 src/proxy_internal.c                |    9 +
 src/qemu_driver.c                   |    2 
 src/remote_internal.c               |   22 ++-
 src/test.c                          |    2 
 src/xen_internal.c                  |    1 
 src/xen_internal.h                  |    1 
 src/xen_unified.c                   |    4 
 src/xend_internal.c                 |    6 -
 src/xend_internal.h                 |    2 
 src/xm_internal.c                   |    4 
 src/xm_internal.h                   |    2 
 src/xs_internal.c                   |    3 
 src/xs_internal.h                   |    1 
 25 files changed, 526 insertions(+), 98 deletions(-)




diff -r ec2d8c632fd9 Makefile.am
--- a/Makefile.am	Wed Nov 28 15:00:45 2007 -0500
+++ b/Makefile.am	Wed Nov 28 20:35:23 2007 -0500
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 
-SUBDIRS = src qemud proxy include docs @PYTHON_SUBDIR@ tests po m4 scripts
+SUBDIRS = include src qemud proxy docs @PYTHON_SUBDIR@ tests po m4 scripts
 
 ACLOCAL_AMFLAGS = -I m4
 
diff -r ec2d8c632fd9 docs/devhelp/libvirt-libvirt.html
--- a/docs/devhelp/libvirt-libvirt.html	Wed Nov 28 15:00:45 2007 -0500
+++ b/docs/devhelp/libvirt-libvirt.html	Wed Nov 28 20:35:23 2007 -0500
@@ -61,19 +61,26 @@ typedef enum <a href="#virDomainState">v
 typedef enum <a href="#virDomainState">virDomainState</a>;
 typedef struct _virDomain <a href="#virDomain">virDomain</a>;
 typedef <a href="libvirt-libvirt.html#virDomainInterfaceStatsStruct">virDomainInterfaceStatsStruct</a> * <a href="#virDomainInterfaceStatsPtr">virDomainInterfaceStatsPtr</a>;
+typedef <a href="libvirt-libvirt.html#virConnectAuth">virConnectAuth</a> * <a href="#virConnectAuthPtr">virConnectAuthPtr</a>;
 typedef enum <a href="#virSchedParameterType">virSchedParameterType</a>;
-typedef <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a> * <a href="#virSchedParameterPtr">virSchedParameterPtr</a>;
+typedef <a href="libvirt-libvirt.html#virConnectCredential">virConnectCredential</a> * <a href="#virConnectCredentialPtr">virConnectCredentialPtr</a>;
 typedef <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> * <a href="#virNodeInfoPtr">virNodeInfoPtr</a>;
 typedef <a href="libvirt-libvirt.html#virNetwork">virNetwork</a> * <a href="#virNetworkPtr">virNetworkPtr</a>;
 typedef <a href="libvirt-libvirt.html#virDomainInfo">virDomainInfo</a> * <a href="#virDomainInfoPtr">virDomainInfoPtr</a>;
 typedef <a href="libvirt-libvirt.html#virConnect">virConnect</a> * <a href="#virConnectPtr">virConnectPtr</a>;
 typedef struct _virSchedParameter <a href="#virSchedParameter">virSchedParameter</a>;
+typedef enum <a href="#virConnectFlags">virConnectFlags</a>;
+typedef <a href="libvirt-libvirt.html#virSchedParameter">virSchedParameter</a> * <a href="#virSchedParameterPtr">virSchedParameterPtr</a>;
 typedef enum <a href="#virVcpuState">virVcpuState</a>;
+typedef struct _virConnectAuth <a href="#virConnectAuth">virConnectAuth</a>;
+typedef struct _virConnectCredential <a href="#virConnectCredential">virConnectCredential</a>;
 typedef <a href="libvirt-libvirt.html#virVcpuInfo">virVcpuInfo</a> * <a href="#virVcpuInfoPtr">virVcpuInfoPtr</a>;
 typedef enum <a href="#virDomainXMLFlags">virDomainXMLFlags</a>;
 typedef <a href="libvirt-libvirt.html#virDomain">virDomain</a> * <a href="#virDomainPtr">virDomainPtr</a>;
+typedef enum <a href="#virConnectCredentialType">virConnectCredentialType</a>;
 typedef enum <a href="#virDomainCreateFlags">virDomainCreateFlags</a>;
 int	<a href="#virDomainGetInfo">virDomainGetInfo</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 <a href="libvirt-libvirt.html#virDomainInfoPtr">virDomainInfoPtr</a> info);
+int	<a href="#virNetworkCreate">virNetworkCreate</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
 int	<a href="#virNetworkFree">virNetworkFree</a>			(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
 const char *	<a href="#virNetworkGetName">virNetworkGetName</a>	(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
 const char *	<a href="#virDomainGetName">virDomainGetName</a>	(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
@@ -88,6 +95,7 @@ int	<a href="#virInitialize">virInitiali
 <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a>	<a href="#virDomainLookupByName">virDomainLookupByName</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * name);
 <a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a>	<a href="#virNetworkLookupByUUID">virNetworkLookupByUUID</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const unsigned char * uuid);
 char *	<a href="#virNetworkGetBridgeName">virNetworkGetBridgeName</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
+char *	<a href="#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/>					 int flags);
 int	<a href="#virDomainPinVcpu">virDomainPinVcpu</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 unsigned int vcpu, <br/>					 unsigned char * cpumap, <br/>					 int maplen);
 int	<a href="#virDomainRestore">virDomainRestore</a>		(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * from);
 const char *	<a href="#virConnectGetType">virConnectGetType</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
@@ -119,21 +127,20 @@ int	<a href="#virDomainSetAutostart">vir
 int	<a href="#virDomainSetAutostart">virDomainSetAutostart</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 int autostart);
 int	<a href="#virDomainSuspend">virDomainSuspend</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
 int	<a href="#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a>		(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * type);
+int	<a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
 <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a>	<a href="#virNetworkGetConnect">virNetworkGetConnect</a>	(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> net);
-int	<a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
-<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a>	<a href="#virNetworkCreateXML">virNetworkCreateXML</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * xmlDesc);
 <a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a>	<a href="#virNetworkDefineXML">virNetworkDefineXML</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * xml);
-int	<a href="#virNetworkCreate">virNetworkCreate</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
+<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a>	<a href="#virDomainLookupByID">virDomainLookupByID</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 int id);
 int	<a href="#virDomainSetSchedulerParameters">virDomainSetSchedulerParameters</a>	(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br/>					 int nparams);
 int	<a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 unsigned long long * freeMems, <br/>					 int startCell, <br/>					 int maxCells);
 int	<a href="#virConnectClose">virConnectClose</a>			(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
 int	<a href="#virDomainReboot">virDomainReboot</a>			(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 unsigned int flags);
 int	<a href="#virDomainBlockStats">virDomainBlockStats</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/>					 const char * path, <br/>					 <a href="libvirt-libvirt.html#virDomainBlockStatsPtr">virDomainBlockStatsPtr</a> stats, <br/>					 size_t size);
 int	<a href="#virDomainSetVcpus">virDomainSetVcpus</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 unsigned int nvcpus);
-<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a>	<a href="#virDomainLookupByID">virDomainLookupByID</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 int id);
+<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a>	<a href="#virConnectOpenAuth">virConnectOpenAuth</a>	(const char * name, <br/>					 <a href="libvirt-libvirt.html#virConnectAuthPtr">virConnectAuthPtr</a> auth, <br/>					 int flags);
 int	<a href="#virNetworkGetUUIDString">virNetworkGetUUIDString</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/>					 char * buf);
 <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a>	<a href="#virDomainMigrate">virDomainMigrate</a>	(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> dconn, <br/>					 unsigned long flags, <br/>					 const char * dname, <br/>					 const char * uri, <br/>					 unsigned long bandwidth);
-char *	<a href="#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a>		(<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br/>					 int flags);
+<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a>	<a href="#virNetworkCreateXML">virNetworkCreateXML</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * xmlDesc);
 unsigned int	<a href="#virDomainGetID">virDomainGetID</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
 int	<a href="#virDomainResume">virDomainResume</a>			(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain);
 <a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a>	<a href="#virDomainCreateLinux">virDomainCreateLinux</a>	(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 const char * xmlDesc, <br/>					 unsigned int flags);
@@ -149,6 +156,7 @@ char *	<a href="#virDomainGetXMLDesc">vi
 char *	<a href="#virDomainGetXMLDesc">virDomainGetXMLDesc</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 int flags);
 int	<a href="#virDomainSetMaxMemory">virDomainSetMaxMemory</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/>					 unsigned long memory);
 int	<a href="#virDomainInterfaceStats">virDomainInterfaceStats</a>		(<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/>					 const char * path, <br/>					 <a href="libvirt-libvirt.html#virDomainInterfaceStatsPtr">virDomainInterfaceStatsPtr</a> stats, <br/>					 size_t size);
+typedef int <a href="#virConnectAuthCallbackPtr">virConnectAuthCallbackPtr</a>	(<a href="libvirt-libvirt.html#virConnectCredentialPtr">virConnectCredentialPtr</a> cred, <br/>					 unsigned int ncred, <br/>					 void * cbdata);
 int	<a href="#virConnectGetVersion">virConnectGetVersion</a>		(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 unsigned long * hvVer);
 int	<a href="#virConnectListNetworks">virConnectListNetworks</a>		(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/>					 char ** const names, <br/>					 int maxnames);
 char *	<a href="#virConnectGetURI">virConnectGetURI</a>		(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
@@ -212,6 +220,54 @@ The content of this structure is not mad
 </pre><p/>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectAuth">Structure </a>virConnectAuth</h3><pre class="programlisting">struct _virConnectAuth {
+    int *	credtype	: List of supported <a href="libvirt-libvirt.html#virConnectCredentialType">virConnectCredentialType</a> values
+    unsigned int	ncredtype
+    <a href="libvirt-libvirt.html#virConnectAuthCallbackPtr">virConnectAuthCallbackPtr</a>	cb	: Callback used to collect credentials
+    void *	cbdata
+} virConnectAuth;
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectAuthPtr">Typedef </a>virConnectAuthPtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectAuth">virConnectAuth</a> * virConnectAuthPtr;
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectCredential">Structure </a>virConnectCredential</h3><pre class="programlisting">struct _virConnectCredential {
+    int	type	: One of <a href="libvirt-libvirt.html#virConnectCredentialType">virConnectCredentialType</a> constants
+    const char *	prompt	: Prompt to show to user
+    const char *	challenge	: Additional challenge to show
+    const char *	defresult	: Optional default result
+    char *	result	: Result to be filled with user response (or defresult)
+    unsigned int	resultlen	: Length of the result
+} virConnectCredential;
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectCredentialPtr">Typedef </a>virConnectCredentialPtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectCredential">virConnectCredential</a> * virConnectCredentialPtr;
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectCredentialType">Enum </a>virConnectCredentialType</h3><pre class="programlisting">enum <a href="#virConnectCredentialType">virConnectCredentialType</a> {
+    <a name="VIR_CRED_USERNAME">VIR_CRED_USERNAME</a> = 1 /* Identity to act as */
+    <a name="VIR_CRED_AUTHNAME">VIR_CRED_AUTHNAME</a> = 2 /* Identify to authorize as */
+    <a name="VIR_CRED_LANGUAGE">VIR_CRED_LANGUAGE</a> = 3 /* RFC 1766 languages, comma separated */
+    <a name="VIR_CRED_CNONCE">VIR_CRED_CNONCE</a> = 4 /* client supplies a nonce */
+    <a name="VIR_CRED_PASSPHRASE">VIR_CRED_PASSPHRASE</a> = 5 /* Passphrase secret */
+    <a name="VIR_CRED_ECHOPROMPT">VIR_CRED_ECHOPROMPT</a> = 6 /* Challenge response */
+    <a name="VIR_CRED_NOECHOPROMPT">VIR_CRED_NOECHOPROMPT</a> = 7 /* Challenge response */
+    <a name="VIR_CRED_REALM">VIR_CRED_REALM</a> = 8 /* Authentication realm */
+    <a name="VIR_CRED_EXTERNAL">VIR_CRED_EXTERNAL</a> = 9 /*  Externally managed credential More may be added - expect the unexpected */
+};
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectFlags">Enum </a>virConnectFlags</h3><pre class="programlisting">enum <a href="#virConnectFlags">virConnectFlags</a> {
+    <a name="VIR_CONNECT_RO">VIR_CONNECT_RO</a> = 1 /*  A readonly connection */
+};
+</pre><p/>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="virConnectPtr">Typedef </a>virConnectPtr</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnect">virConnect</a> * virConnectPtr;
 </pre><p>a <a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> is pointer to a <a href="libvirt-libvirt.html#virConnect">virConnect</a> private structure, this is the type used to reference a connection to the Xen Hypervisor in the API.</p>
 </div>
@@ -372,6 +428,14 @@ The content of this structure is not mad
 </pre><p/>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectAuthCallbackPtr"/>Function type virConnectAuthCallbackPtr</h3><pre class="programlisting">int	virConnectAuthCallbackPtr	(<a href="libvirt-libvirt.html#virConnectCredentialPtr">virConnectCredentialPtr</a> cred, <br/>					 unsigned int ncred, <br/>					 void * cbdata)<br/>
+</pre><p/>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cred</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>ncred</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>cbdata</tt></i>:</span></td><td/></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td/></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectAuthPtrDefault">Variable </a>virConnectAuthPtrDefault</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectAuthPtr">virConnectAuthPtr</a> virConnectAuthPtrDefault;
+</pre><p/>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="virConnectClose"/>virConnectClose ()</h3><pre class="programlisting">int	virConnectClose			(<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn)<br/>
 </pre><p>This function closes the connection to the Hypervisor. This should not be called if further interaction with the Hypervisor are needed especially if there is running domain which need further monitoring by the application.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success or -1 in case of error.</td></tr></tbody></table></div></div>
@@ -435,6 +499,10 @@ The content of this structure is not mad
         <div class="refsect2" lang="en"><h3><a name="virConnectOpen"/>virConnectOpen ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a>	virConnectOpen		(const char * name)<br/>
 </pre><p>This function should be called first to get a connection to the Hypervisor and xen store</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="virConnectOpenAuth"/>virConnectOpenAuth ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a>	virConnectOpenAuth	(const char * name, <br/>					 <a href="libvirt-libvirt.html#virConnectAuthPtr">virConnectAuthPtr</a> auth, <br/>					 int flags)<br/>
+</pre><p>This function should be called first to get a connection to the Hypervisor. If neccessary, authentication will be performed fetching credentials via the callback</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>URI of the hypervisor</td></tr><tr><td><span class="term"><i><tt>auth</tt></i>:</span></td><td>Authenticate callback parameters</td></tr><tr><td><span class="term"><i><tt>flags</tt></i>:</span></td><td>Open flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the hypervisor connection or NULL in case of error URIs are documented at http://libvirt.org/uri.html</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="virConnectOpenReadOnly"/>virConnectOpenReadOnly ()</h3><pre class="programlisting"><a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a>	virConnectOpenReadOnly	(const char * name)<br/>
 </pre><p>This function should be called first to get a restricted connection to the libbrary functionalities. The set of APIs usable are then restricted on the available methods to control the domains.</p>
diff -r ec2d8c632fd9 docs/devhelp/libvirt-virterror.html
--- a/docs/devhelp/libvirt-virterror.html	Wed Nov 28 15:00:45 2007 -0500
+++ b/docs/devhelp/libvirt-virterror.html	Wed Nov 28 20:35:23 2007 -0500
@@ -154,7 +154,8 @@ void	<a href="#virConnResetLastError">vi
     <a name="VIR_WAR_NO_NETWORK">VIR_WAR_NO_NETWORK</a> = 41 /* failed to start network */
     <a name="VIR_ERR_NO_DOMAIN">VIR_ERR_NO_DOMAIN</a> = 42 /* domain not found or unexpectedly disappeared */
     <a name="VIR_ERR_NO_NETWORK">VIR_ERR_NO_NETWORK</a> = 43 /* network not found */
-    <a name="VIR_ERR_INVALID_MAC">VIR_ERR_INVALID_MAC</a> = 44 /*  invalid MAC adress */
+    <a name="VIR_ERR_INVALID_MAC">VIR_ERR_INVALID_MAC</a> = 44 /* invalid MAC adress */
+    <a name="VIR_ERR_AUTH_FAILED">VIR_ERR_AUTH_FAILED</a> = 45 /*  authentication failed */
 };
 </pre><p/>
 </div>
diff -r ec2d8c632fd9 docs/libvirt-api.xml
--- a/docs/libvirt-api.xml	Wed Nov 28 15:00:45 2007 -0500
+++ b/docs/libvirt-api.xml	Wed Nov 28 20:35:23 2007 -0500
@@ -16,26 +16,36 @@
      <exports symbol='VIR_UUID_STRING_BUFLEN' type='macro'/>
      <exports symbol='VIR_GET_CPUMAP' type='macro'/>
      <exports symbol='VIR_UNUSE_CPU' type='macro'/>
+     <exports symbol='VIR_CRED_EXTERNAL' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SHUTDOWN' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SCHED_FIELD_UINT' type='enum'/>
+     <exports symbol='VIR_CRED_CNONCE' type='enum'/>
+     <exports symbol='VIR_CRED_ECHOPROMPT' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SCHED_FIELD_DOUBLE' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SCHED_FIELD_LLONG' type='enum'/>
+     <exports symbol='VIR_CONNECT_RO' type='enum'/>
+     <exports symbol='VIR_CRED_AUTHNAME' type='enum'/>
+     <exports symbol='VIR_CRED_LANGUAGE' type='enum'/>
+     <exports symbol='VIR_CRED_NOECHOPROMPT' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SCHED_FIELD_BOOLEAN' type='enum'/>
+     <exports symbol='VIR_MIGRATE_LIVE' type='enum'/>
+     <exports symbol='VIR_CRED_USERNAME' type='enum'/>
+     <exports symbol='VIR_VCPU_OFFLINE' type='enum'/>
+     <exports symbol='VIR_DOMAIN_RUNNING' type='enum'/>
+     <exports symbol='VIR_DOMAIN_BLOCKED' type='enum'/>
      <exports symbol='VIR_DOMAIN_SHUTOFF' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SCHED_FIELD_DOUBLE' type='enum'/>
+     <exports symbol='VIR_VCPU_BLOCKED' type='enum'/>
+     <exports symbol='VIR_DOMAIN_SCHED_FIELD_INT' type='enum'/>
      <exports symbol='VIR_DOMAIN_SCHED_FIELD_ULLONG' type='enum'/>
-     <exports symbol='VIR_VCPU_OFFLINE' type='enum'/>
+     <exports symbol='VIR_CRED_REALM' type='enum'/>
+     <exports symbol='VIR_VCPU_RUNNING' type='enum'/>
+     <exports symbol='VIR_DOMAIN_PAUSED' type='enum'/>
+     <exports symbol='VIR_DOMAIN_CRASHED' type='enum'/>
      <exports symbol='VIR_DOMAIN_XML_INACTIVE' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SCHED_FIELD_BOOLEAN' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SCHED_FIELD_UINT' type='enum'/>
-     <exports symbol='VIR_MIGRATE_LIVE' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SCHED_FIELD_INT' type='enum'/>
-     <exports symbol='VIR_VCPU_RUNNING' type='enum'/>
-     <exports symbol='VIR_DOMAIN_CRASHED' type='enum'/>
      <exports symbol='VIR_DOMAIN_NONE' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SHUTDOWN' type='enum'/>
-     <exports symbol='VIR_VCPU_BLOCKED' type='enum'/>
      <exports symbol='VIR_DOMAIN_NOSTATE' type='enum'/>
-     <exports symbol='VIR_DOMAIN_PAUSED' type='enum'/>
-     <exports symbol='VIR_DOMAIN_SCHED_FIELD_LLONG' type='enum'/>
-     <exports symbol='VIR_DOMAIN_RUNNING' type='enum'/>
+     <exports symbol='VIR_CRED_PASSPHRASE' type='enum'/>
      <exports symbol='VIR_DOMAIN_XML_SECURE' type='enum'/>
-     <exports symbol='VIR_DOMAIN_BLOCKED' type='enum'/>
      <exports symbol='virDomainBlockStatsStruct' type='typedef'/>
      <exports symbol='virDomainMigrateFlags' type='typedef'/>
      <exports symbol='virNodeInfo' type='typedef'/>
@@ -48,25 +58,35 @@
      <exports symbol='virDomainState' type='typedef'/>
      <exports symbol='virDomain' type='typedef'/>
      <exports symbol='virDomainInterfaceStatsPtr' type='typedef'/>
+     <exports symbol='virConnectAuthPtr' type='typedef'/>
      <exports symbol='virSchedParameterType' type='typedef'/>
-     <exports symbol='virSchedParameterPtr' type='typedef'/>
+     <exports symbol='virConnectCredentialPtr' type='typedef'/>
      <exports symbol='virNodeInfoPtr' type='typedef'/>
      <exports symbol='virNetworkPtr' type='typedef'/>
      <exports symbol='virDomainInfoPtr' type='typedef'/>
      <exports symbol='virConnectPtr' type='typedef'/>
      <exports symbol='virSchedParameter' type='typedef'/>
+     <exports symbol='virConnectFlags' type='typedef'/>
+     <exports symbol='virSchedParameterPtr' type='typedef'/>
      <exports symbol='virVcpuState' type='typedef'/>
+     <exports symbol='virConnectAuth' type='typedef'/>
+     <exports symbol='virConnectCredential' type='typedef'/>
      <exports symbol='virVcpuInfoPtr' type='typedef'/>
      <exports symbol='virDomainXMLFlags' type='typedef'/>
      <exports symbol='virDomainPtr' type='typedef'/>
+     <exports symbol='virConnectCredentialType' type='typedef'/>
      <exports symbol='virDomainCreateFlags' type='typedef'/>
      <exports symbol='_virDomainInfo' type='struct'/>
+     <exports symbol='_virConnectAuth' type='struct'/>
+     <exports symbol='_virVcpuInfo' type='struct'/>
      <exports symbol='_virDomainInterfaceStats' type='struct'/>
-     <exports symbol='_virVcpuInfo' type='struct'/>
-     <exports symbol='_virSchedParameter' type='struct'/>
+     <exports symbol='_virConnectCredential' type='struct'/>
      <exports symbol='_virDomainBlockStats' type='struct'/>
      <exports symbol='_virNodeInfo' type='struct'/>
+     <exports symbol='_virSchedParameter' type='struct'/>
+     <exports symbol='virConnectAuthPtrDefault' type='variable'/>
      <exports symbol='virDomainGetInfo' type='function'/>
+     <exports symbol='virNetworkCreate' type='function'/>
      <exports symbol='virNetworkFree' type='function'/>
      <exports symbol='virNetworkGetName' type='function'/>
      <exports symbol='virDomainGetName' type='function'/>
@@ -81,6 +101,7 @@
      <exports symbol='virDomainLookupByName' type='function'/>
      <exports symbol='virNetworkLookupByUUID' type='function'/>
      <exports symbol='virNetworkGetBridgeName' type='function'/>
+     <exports symbol='virNetworkGetXMLDesc' type='function'/>
      <exports symbol='virDomainPinVcpu' type='function'/>
      <exports symbol='virDomainRestore' type='function'/>
      <exports symbol='virConnectGetType' type='function'/>
@@ -112,21 +133,20 @@
      <exports symbol='virDomainSetAutostart' type='function'/>
      <exports symbol='virDomainSuspend' type='function'/>
      <exports symbol='virConnectGetMaxVcpus' type='function'/>
+     <exports symbol='virConnectNumOfDefinedDomains' type='function'/>
      <exports symbol='virNetworkGetConnect' type='function'/>
-     <exports symbol='virConnectNumOfDefinedDomains' type='function'/>
-     <exports symbol='virNetworkCreateXML' type='function'/>
      <exports symbol='virNetworkDefineXML' type='function'/>
-     <exports symbol='virNetworkCreate' type='function'/>
+     <exports symbol='virDomainLookupByID' type='function'/>
      <exports symbol='virDomainSetSchedulerParameters' type='function'/>
      <exports symbol='virNodeGetCellsFreeMemory' type='function'/>
      <exports symbol='virConnectClose' type='function'/>
      <exports symbol='virDomainReboot' type='function'/>
      <exports symbol='virDomainBlockStats' type='function'/>
      <exports symbol='virDomainSetVcpus' type='function'/>
-     <exports symbol='virDomainLookupByID' type='function'/>
+     <exports symbol='virConnectOpenAuth' type='function'/>
      <exports symbol='virNetworkGetUUIDString' type='function'/>
      <exports symbol='virDomainMigrate' type='function'/>
-     <exports symbol='virNetworkGetXMLDesc' type='function'/>
+     <exports symbol='virNetworkCreateXML' type='function'/>
      <exports symbol='virDomainGetID' type='function'/>
      <exports symbol='virDomainResume' type='function'/>
      <exports symbol='virDomainCreateLinux' type='function'/>
@@ -142,6 +162,7 @@
      <exports symbol='virDomainGetXMLDesc' type='function'/>
      <exports symbol='virDomainSetMaxMemory' type='function'/>
      <exports symbol='virDomainInterfaceStats' type='function'/>
+     <exports symbol='virConnectAuthCallbackPtr' type='function'/>
      <exports symbol='virConnectGetVersion' type='function'/>
      <exports symbol='virConnectListNetworks' type='function'/>
      <exports symbol='virConnectGetURI' type='function'/>
@@ -159,6 +180,7 @@
      <exports symbol='VIR_ERR_WARNING' type='enum'/>
      <exports symbol='VIR_FROM_OPENVZ' type='enum'/>
      <exports symbol='VIR_ERR_NO_XEN' type='enum'/>
+     <exports symbol='VIR_FROM_STATS_LINUX' type='enum'/>
      <exports symbol='VIR_ERR_INVALID_ARG' type='enum'/>
      <exports symbol='VIR_ERR_ERROR' type='enum'/>
      <exports symbol='VIR_ERR_NO_OS' type='enum'/>
@@ -176,7 +198,7 @@
      <exports symbol='VIR_FROM_QEMU' type='enum'/>
      <exports symbol='VIR_FROM_CONF' type='enum'/>
      <exports symbol='VIR_ERR_INVALID_NETWORK' type='enum'/>
-     <exports symbol='VIR_FROM_STATS_LINUX' type='enum'/>
+     <exports symbol='VIR_ERR_AUTH_FAILED' type='enum'/>
      <exports symbol='VIR_ERR_OPERATION_DENIED' type='enum'/>
      <exports symbol='VIR_ERR_NO_KERNEL' type='enum'/>
      <exports symbol='VIR_ERR_GNUTLS_ERROR' type='enum'/>
@@ -287,6 +309,16 @@
     <macro name='VIR_UUID_STRING_BUFLEN' file='libvirt'>
       <info>This macro provides the length of the buffer required for virDomainGetUUIDString()</info>
     </macro>
+    <enum name='VIR_CONNECT_RO' file='libvirt' value='1' type='virConnectFlags' info=' A readonly connection'/>
+    <enum name='VIR_CRED_AUTHNAME' file='libvirt' value='2' type='virConnectCredentialType' info='Identify to authorize as'/>
+    <enum name='VIR_CRED_CNONCE' file='libvirt' value='4' type='virConnectCredentialType' info='client supplies a nonce'/>
+    <enum name='VIR_CRED_ECHOPROMPT' file='libvirt' value='6' type='virConnectCredentialType' info='Challenge response'/>
+    <enum name='VIR_CRED_EXTERNAL' file='libvirt' value='9' type='virConnectCredentialType' info=' Externally managed credential More may be added - expect the unexpected'/>
+    <enum name='VIR_CRED_LANGUAGE' file='libvirt' value='3' type='virConnectCredentialType' info='RFC 1766 languages, comma separated'/>
+    <enum name='VIR_CRED_NOECHOPROMPT' file='libvirt' value='7' type='virConnectCredentialType' info='Challenge response'/>
+    <enum name='VIR_CRED_PASSPHRASE' file='libvirt' value='5' type='virConnectCredentialType' info='Passphrase secret'/>
+    <enum name='VIR_CRED_REALM' file='libvirt' value='8' type='virConnectCredentialType' info='Authentication realm'/>
+    <enum name='VIR_CRED_USERNAME' file='libvirt' value='1' type='virConnectCredentialType' info='Identity to act as'/>
     <enum name='VIR_DOMAIN_BLOCKED' file='libvirt' value='2' type='virDomainState' info='the domain is blocked on resource'/>
     <enum name='VIR_DOMAIN_CRASHED' file='libvirt' value='6' type='virDomainState' info=' the domain is crashed'/>
     <enum name='VIR_DOMAIN_NONE' file='libvirt' value='0' type='virDomainCreateFlags'/>
@@ -303,6 +335,7 @@
     <enum name='VIR_DOMAIN_SHUTOFF' file='libvirt' value='5' type='virDomainState' info='the domain is shut off'/>
     <enum name='VIR_DOMAIN_XML_INACTIVE' file='libvirt' value='2' type='virDomainXMLFlags' info=' dump inactive domain informations'/>
     <enum name='VIR_DOMAIN_XML_SECURE' file='libvirt' value='1' type='virDomainXMLFlags' info='dump security sensitive informations too'/>
+    <enum name='VIR_ERR_AUTH_FAILED' file='virterror' value='45' type='virErrorNumber' info=' authentication failed'/>
     <enum name='VIR_ERR_CALL_FAILED' file='virterror' value='26' type='virErrorNumber' info='not supported by the drivers (DEPRECATED)'/>
     <enum name='VIR_ERR_CONF_SYNTAX' file='virterror' value='33' type='virErrorNumber' info='failed to parse the syntax of a conf file'/>
     <enum name='VIR_ERR_DOM_EXIST' file='virterror' value='28' type='virErrorNumber' info='the domain already exist'/>
@@ -315,7 +348,7 @@
     <enum name='VIR_ERR_INVALID_ARG' file='virterror' value='8' type='virErrorNumber' info='invalid function argument'/>
     <enum name='VIR_ERR_INVALID_CONN' file='virterror' value='6' type='virErrorNumber' info='invalid connection object'/>
     <enum name='VIR_ERR_INVALID_DOMAIN' file='virterror' value='7' type='virErrorNumber' info='invalid domain object'/>
-    <enum name='VIR_ERR_INVALID_MAC' file='virterror' value='44' type='virErrorNumber' info=' invalid MAC adress'/>
+    <enum name='VIR_ERR_INVALID_MAC' file='virterror' value='44' type='virErrorNumber' info='invalid MAC adress'/>
     <enum name='VIR_ERR_INVALID_NETWORK' file='virterror' value='36' type='virErrorNumber' info='invalid network object'/>
     <enum name='VIR_ERR_NETWORK_EXIST' file='virterror' value='37' type='virErrorNumber' info='the network already exist'/>
     <enum name='VIR_ERR_NONE' file='virterror' value='0' type='virErrorLevel'/>
@@ -373,6 +406,24 @@
     <enum name='VIR_VCPU_RUNNING' file='libvirt' value='1' type='virVcpuState' info='the virtual CPU is running'/>
     <enum name='VIR_WAR_NO_NETWORK' file='virterror' value='41' type='virErrorNumber' info='failed to start network'/>
     <struct name='virConnect' file='libvirt' type='struct _virConnect'/>
+    <struct name='virConnectAuth' file='libvirt' type='struct _virConnectAuth'>
+      <field name='credtype' type='int *' info=' List of supported virConnectCredentialType values'/>
+      <field name='ncredtype' type='unsigned int' info=''/>
+      <field name='cb' type='virConnectAuthCallbackPtr' info=' Callback used to collect credentials'/>
+      <field name='cbdata' type='void *' info=''/>
+    </struct>
+    <typedef name='virConnectAuthPtr' file='libvirt' type='virConnectAuth *'/>
+    <struct name='virConnectCredential' file='libvirt' type='struct _virConnectCredential'>
+      <field name='type' type='int' info=' One of virConnectCredentialType constants'/>
+      <field name='prompt' type='const char *' info=' Prompt to show to user'/>
+      <field name='challenge' type='const char *' info=' Additional challenge to show'/>
+      <field name='defresult' type='const char *' info=' Optional default result'/>
+      <field name='result' type='char *' info=' Result to be filled with user response (or defresult)'/>
+      <field name='resultlen' type='unsigned int' info=' Length of the result'/>
+    </struct>
+    <typedef name='virConnectCredentialPtr' file='libvirt' type='virConnectCredential *'/>
+    <typedef name='virConnectCredentialType' file='libvirt' type='enum'/>
+    <typedef name='virConnectFlags' file='libvirt' type='enum'/>
     <typedef name='virConnectPtr' file='libvirt' type='virConnect *'>
       <info>a virConnectPtr is pointer to a virConnect private structure, this is the type used to reference a connection to the Xen Hypervisor in the API.</info>
     </typedef>
@@ -468,6 +519,7 @@
     </struct>
     <typedef name='virVcpuInfoPtr' file='libvirt' type='virVcpuInfo *'/>
     <typedef name='virVcpuState' file='libvirt' type='enum'/>
+    <variable name='virConnectAuthPtrDefault' file='libvirt' type='virConnectAuthPtr'/>
     <function name='virConnCopyLastError' file='virterror' module='virterror'>
       <info>Copy the content of the last error caught on that connection One will need to free the result with virResetError()</info>
       <return type='int' info='0 if no error was found and the error code otherwise and -1 in case of parameter error.'/>
@@ -491,6 +543,13 @@
       <arg name='userData' type='void *' info='pointer to the user data provided in the handler callback'/>
       <arg name='handler' type='virErrorFunc' info='the function to get called in case of error or NULL'/>
     </function>
+    <functype name='virConnectAuthCallbackPtr' file='libvirt' module='libvirt'>
+      <info></info>
+      <return type='int' info=''/>
+      <arg name='cred' type='virConnectCredentialPtr' info=''/>
+      <arg name='ncred' type='unsigned int' info=''/>
+      <arg name='cbdata' type='void *' info=''/>
+    </functype>
     <function name='virConnectClose' file='libvirt' module='libvirt'>
       <info>This function closes the connection to the Hypervisor. This should not be called if further interaction with the Hypervisor are needed especially if there is running domain which need further monitoring by the application.</info>
       <return type='int' info='0 in case of success or -1 in case of error.'/>
@@ -580,6 +639,13 @@
       <info>This function should be called first to get a connection to the Hypervisor and xen store</info>
       <return type='virConnectPtr' info='a pointer to the hypervisor connection or NULL in case of error  URIs are documented at http://libvirt.org/uri.html'/>
       <arg name='name' type='const char *' info='URI of the hypervisor'/>
+    </function>
+    <function name='virConnectOpenAuth' file='libvirt' module='libvirt'>
+      <info>This function should be called first to get a connection to the Hypervisor. If neccessary, authentication will be performed fetching credentials via the callback</info>
+      <return type='virConnectPtr' info='a pointer to the hypervisor connection or NULL in case of error  URIs are documented at http://libvirt.org/uri.html'/>
+      <arg name='name' type='const char *' info='URI of the hypervisor'/>
+      <arg name='auth' type='virConnectAuthPtr' info='Authenticate callback parameters'/>
+      <arg name='flags' type='int' info='Open flags'/>
     </function>
     <function name='virConnectOpenReadOnly' file='libvirt' module='libvirt'>
       <info>This function should be called first to get a restricted connection to the libbrary functionalities. The set of APIs usable are then restricted on the available methods to control the domains.</info>
diff -r ec2d8c632fd9 docs/libvirt-refs.xml
--- a/docs/libvirt-refs.xml	Wed Nov 28 15:00:45 2007 -0500
+++ b/docs/libvirt-refs.xml	Wed Nov 28 20:35:23 2007 -0500
@@ -2,9 +2,19 @@
 <apirefs name='libvirt'>
   <references>
     <reference name='LIBVIR_VERSION_NUMBER' href='html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER'/>
+    <reference name='VIR_CONNECT_RO' href='html/libvirt-libvirt.html#VIR_CONNECT_RO'/>
     <reference name='VIR_COPY_CPUMAP' href='html/libvirt-libvirt.html#VIR_COPY_CPUMAP'/>
     <reference name='VIR_CPU_MAPLEN' href='html/libvirt-libvirt.html#VIR_CPU_MAPLEN'/>
     <reference name='VIR_CPU_USABLE' href='html/libvirt-libvirt.html#VIR_CPU_USABLE'/>
+    <reference name='VIR_CRED_AUTHNAME' href='html/libvirt-libvirt.html#VIR_CRED_AUTHNAME'/>
+    <reference name='VIR_CRED_CNONCE' href='html/libvirt-libvirt.html#VIR_CRED_CNONCE'/>
+    <reference name='VIR_CRED_ECHOPROMPT' href='html/libvirt-libvirt.html#VIR_CRED_ECHOPROMPT'/>
+    <reference name='VIR_CRED_EXTERNAL' href='html/libvirt-libvirt.html#VIR_CRED_EXTERNAL'/>
+    <reference name='VIR_CRED_LANGUAGE' href='html/libvirt-libvirt.html#VIR_CRED_LANGUAGE'/>
+    <reference name='VIR_CRED_NOECHOPROMPT' href='html/libvirt-libvirt.html#VIR_CRED_NOECHOPROMPT'/>
+    <reference name='VIR_CRED_PASSPHRASE' href='html/libvirt-libvirt.html#VIR_CRED_PASSPHRASE'/>
+    <reference name='VIR_CRED_REALM' href='html/libvirt-libvirt.html#VIR_CRED_REALM'/>
+    <reference name='VIR_CRED_USERNAME' href='html/libvirt-libvirt.html#VIR_CRED_USERNAME'/>
     <reference name='VIR_DOMAIN_BLOCKED' href='html/libvirt-libvirt.html#VIR_DOMAIN_BLOCKED'/>
     <reference name='VIR_DOMAIN_CRASHED' href='html/libvirt-libvirt.html#VIR_DOMAIN_CRASHED'/>
     <reference name='VIR_DOMAIN_NONE' href='html/libvirt-libvirt.html#VIR_DOMAIN_NONE'/>
@@ -22,6 +32,7 @@
     <reference name='VIR_DOMAIN_SHUTOFF' href='html/libvirt-libvirt.html#VIR_DOMAIN_SHUTOFF'/>
     <reference name='VIR_DOMAIN_XML_INACTIVE' href='html/libvirt-libvirt.html#VIR_DOMAIN_XML_INACTIVE'/>
     <reference name='VIR_DOMAIN_XML_SECURE' href='html/libvirt-libvirt.html#VIR_DOMAIN_XML_SECURE'/>
+    <reference name='VIR_ERR_AUTH_FAILED' href='html/libvirt-virterror.html#VIR_ERR_AUTH_FAILED'/>
     <reference name='VIR_ERR_CALL_FAILED' href='html/libvirt-virterror.html#VIR_ERR_CALL_FAILED'/>
     <reference name='VIR_ERR_CONF_SYNTAX' href='html/libvirt-virterror.html#VIR_ERR_CONF_SYNTAX'/>
     <reference name='VIR_ERR_DOM_EXIST' href='html/libvirt-virterror.html#VIR_ERR_DOM_EXIST'/>
@@ -97,6 +108,8 @@
     <reference name='VIR_VCPU_OFFLINE' href='html/libvirt-libvirt.html#VIR_VCPU_OFFLINE'/>
     <reference name='VIR_VCPU_RUNNING' href='html/libvirt-libvirt.html#VIR_VCPU_RUNNING'/>
     <reference name='VIR_WAR_NO_NETWORK' href='html/libvirt-virterror.html#VIR_WAR_NO_NETWORK'/>
+    <reference name='_virConnectAuth' href='html/libvirt-libvirt.html#_virConnectAuth'/>
+    <reference name='_virConnectCredential' href='html/libvirt-libvirt.html#_virConnectCredential'/>
     <reference name='_virDomainBlockStats' href='html/libvirt-libvirt.html#_virDomainBlockStats'/>
     <reference name='_virDomainInfo' href='html/libvirt-libvirt.html#_virDomainInfo'/>
     <reference name='_virDomainInterfaceStats' href='html/libvirt-libvirt.html#_virDomainInterfaceStats'/>
@@ -109,7 +122,15 @@
     <reference name='virConnResetLastError' href='html/libvirt-virterror.html#virConnResetLastError'/>
     <reference name='virConnSetErrorFunc' href='html/libvirt-virterror.html#virConnSetErrorFunc'/>
     <reference name='virConnect' href='html/libvirt-libvirt.html#virConnect'/>
+    <reference name='virConnectAuth' href='html/libvirt-libvirt.html#virConnectAuth'/>
+    <reference name='virConnectAuthCallbackPtr' href='html/libvirt-libvirt.html#virConnectAuthCallbackPtr'/>
+    <reference name='virConnectAuthPtr' href='html/libvirt-libvirt.html#virConnectAuthPtr'/>
+    <reference name='virConnectAuthPtrDefault' href='html/libvirt-libvirt.html#virConnectAuthPtrDefault'/>
     <reference name='virConnectClose' href='html/libvirt-libvirt.html#virConnectClose'/>
+    <reference name='virConnectCredential' href='html/libvirt-libvirt.html#virConnectCredential'/>
+    <reference name='virConnectCredentialPtr' href='html/libvirt-libvirt.html#virConnectCredentialPtr'/>
+    <reference name='virConnectCredentialType' href='html/libvirt-libvirt.html#virConnectCredentialType'/>
+    <reference name='virConnectFlags' href='html/libvirt-libvirt.html#virConnectFlags'/>
     <reference name='virConnectGetCapabilities' href='html/libvirt-libvirt.html#virConnectGetCapabilities'/>
     <reference name='virConnectGetHostname' href='html/libvirt-libvirt.html#virConnectGetHostname'/>
     <reference name='virConnectGetMaxVcpus' href='html/libvirt-libvirt.html#virConnectGetMaxVcpus'/>
@@ -125,6 +146,7 @@
     <reference name='virConnectNumOfDomains' href='html/libvirt-libvirt.html#virConnectNumOfDomains'/>
     <reference name='virConnectNumOfNetworks' href='html/libvirt-libvirt.html#virConnectNumOfNetworks'/>
     <reference name='virConnectOpen' href='html/libvirt-libvirt.html#virConnectOpen'/>
+    <reference name='virConnectOpenAuth' href='html/libvirt-libvirt.html#virConnectOpenAuth'/>
     <reference name='virConnectOpenReadOnly' href='html/libvirt-libvirt.html#virConnectOpenReadOnly'/>
     <reference name='virConnectPtr' href='html/libvirt-libvirt.html#virConnectPtr'/>
     <reference name='virCopyLastError' href='html/libvirt-virterror.html#virCopyLastError'/>
@@ -231,9 +253,19 @@
       <ref name='LIBVIR_VERSION_NUMBER'/>
     </letter>
     <letter name='V'>
+      <ref name='VIR_CONNECT_RO'/>
       <ref name='VIR_COPY_CPUMAP'/>
       <ref name='VIR_CPU_MAPLEN'/>
       <ref name='VIR_CPU_USABLE'/>
+      <ref name='VIR_CRED_AUTHNAME'/>
+      <ref name='VIR_CRED_CNONCE'/>
+      <ref name='VIR_CRED_ECHOPROMPT'/>
+      <ref name='VIR_CRED_EXTERNAL'/>
+      <ref name='VIR_CRED_LANGUAGE'/>
+      <ref name='VIR_CRED_NOECHOPROMPT'/>
+      <ref name='VIR_CRED_PASSPHRASE'/>
+      <ref name='VIR_CRED_REALM'/>
+      <ref name='VIR_CRED_USERNAME'/>
       <ref name='VIR_DOMAIN_BLOCKED'/>
       <ref name='VIR_DOMAIN_CRASHED'/>
       <ref name='VIR_DOMAIN_NONE'/>
@@ -251,6 +283,7 @@
       <ref name='VIR_DOMAIN_SHUTOFF'/>
       <ref name='VIR_DOMAIN_XML_INACTIVE'/>
       <ref name='VIR_DOMAIN_XML_SECURE'/>
+      <ref name='VIR_ERR_AUTH_FAILED'/>
       <ref name='VIR_ERR_CALL_FAILED'/>
       <ref name='VIR_ERR_CONF_SYNTAX'/>
       <ref name='VIR_ERR_DOM_EXIST'/>
@@ -328,6 +361,8 @@
       <ref name='VIR_WAR_NO_NETWORK'/>
     </letter>
     <letter name='_'>
+      <ref name='_virConnectAuth'/>
+      <ref name='_virConnectCredential'/>
       <ref name='_virDomainBlockStats'/>
       <ref name='_virDomainInfo'/>
       <ref name='_virDomainInterfaceStats'/>
@@ -342,7 +377,15 @@
       <ref name='virConnResetLastError'/>
       <ref name='virConnSetErrorFunc'/>
       <ref name='virConnect'/>
+      <ref name='virConnectAuth'/>
+      <ref name='virConnectAuthCallbackPtr'/>
+      <ref name='virConnectAuthPtr'/>
+      <ref name='virConnectAuthPtrDefault'/>
       <ref name='virConnectClose'/>
+      <ref name='virConnectCredential'/>
+      <ref name='virConnectCredentialPtr'/>
+      <ref name='virConnectCredentialType'/>
+      <ref name='virConnectFlags'/>
       <ref name='virConnectGetCapabilities'/>
       <ref name='virConnectGetHostname'/>
       <ref name='virConnectGetMaxVcpus'/>
@@ -358,6 +401,7 @@
       <ref name='virConnectNumOfDomains'/>
       <ref name='virConnectNumOfNetworks'/>
       <ref name='virConnectOpen'/>
+      <ref name='virConnectOpenAuth'/>
       <ref name='virConnectOpenReadOnly'/>
       <ref name='virConnectPtr'/>
       <ref name='virCopyLastError'/>
@@ -472,6 +516,7 @@
     </type>
     <type name='virConnectPtr'>
       <ref name='virConnectOpen'/>
+      <ref name='virConnectOpenAuth'/>
       <ref name='virConnectOpenReadOnly'/>
       <ref name='virDomainGetConnect'/>
       <ref name='virNetworkGetConnect'/>
@@ -525,6 +570,7 @@
       <ref name='virNetworkGetUUID'/>
     </type>
     <type name='unsigned int'>
+      <ref name='virConnectAuthCallbackPtr'/>
       <ref name='virDomainCreateLinux'/>
       <ref name='virDomainPinVcpu'/>
       <ref name='virDomainReboot'/>
@@ -541,6 +587,12 @@
     </type>
     <type name='unsigned long long *'>
       <ref name='virNodeGetCellsFreeMemory'/>
+    </type>
+    <type name='virConnectAuthPtr'>
+      <ref name='virConnectOpenAuth'/>
+    </type>
+    <type name='virConnectCredentialPtr'>
+      <ref name='virConnectAuthCallbackPtr'/>
     </type>
     <type name='virConnectPtr'>
       <ref name='virConnCopyLastError'/>
@@ -662,6 +714,7 @@
     </type>
     <type name='void *'>
       <ref name='virConnSetErrorFunc'/>
+      <ref name='virConnectAuthCallbackPtr'/>
       <ref name='virErrorFunc'/>
       <ref name='virSetErrorFunc'/>
     </type>
@@ -669,9 +722,19 @@
   <files>
     <file name='libvirt'>
       <ref name='LIBVIR_VERSION_NUMBER'/>
+      <ref name='VIR_CONNECT_RO'/>
       <ref name='VIR_COPY_CPUMAP'/>
       <ref name='VIR_CPU_MAPLEN'/>
       <ref name='VIR_CPU_USABLE'/>
+      <ref name='VIR_CRED_AUTHNAME'/>
+      <ref name='VIR_CRED_CNONCE'/>
+      <ref name='VIR_CRED_ECHOPROMPT'/>
+      <ref name='VIR_CRED_EXTERNAL'/>
+      <ref name='VIR_CRED_LANGUAGE'/>
+      <ref name='VIR_CRED_NOECHOPROMPT'/>
+      <ref name='VIR_CRED_PASSPHRASE'/>
+      <ref name='VIR_CRED_REALM'/>
+      <ref name='VIR_CRED_USERNAME'/>
       <ref name='VIR_DOMAIN_BLOCKED'/>
       <ref name='VIR_DOMAIN_CRASHED'/>
       <ref name='VIR_DOMAIN_NONE'/>
@@ -699,6 +762,8 @@
       <ref name='VIR_VCPU_BLOCKED'/>
       <ref name='VIR_VCPU_OFFLINE'/>
       <ref name='VIR_VCPU_RUNNING'/>
+      <ref name='_virConnectAuth'/>
+      <ref name='_virConnectCredential'/>
       <ref name='_virDomainBlockStats'/>
       <ref name='_virDomainInfo'/>
       <ref name='_virDomainInterfaceStats'/>
@@ -706,7 +771,15 @@
       <ref name='_virSchedParameter'/>
       <ref name='_virVcpuInfo'/>
       <ref name='virConnect'/>
+      <ref name='virConnectAuth'/>
+      <ref name='virConnectAuthCallbackPtr'/>
+      <ref name='virConnectAuthPtr'/>
+      <ref name='virConnectAuthPtrDefault'/>
       <ref name='virConnectClose'/>
+      <ref name='virConnectCredential'/>
+      <ref name='virConnectCredentialPtr'/>
+      <ref name='virConnectCredentialType'/>
+      <ref name='virConnectFlags'/>
       <ref name='virConnectGetCapabilities'/>
       <ref name='virConnectGetHostname'/>
       <ref name='virConnectGetMaxVcpus'/>
@@ -722,6 +795,7 @@
       <ref name='virConnectNumOfDomains'/>
       <ref name='virConnectNumOfNetworks'/>
       <ref name='virConnectOpen'/>
+      <ref name='virConnectOpenAuth'/>
       <ref name='virConnectOpenReadOnly'/>
       <ref name='virConnectPtr'/>
       <ref name='virDomain'/>
@@ -812,6 +886,7 @@
       <ref name='virVcpuState'/>
     </file>
     <file name='virterror'>
+      <ref name='VIR_ERR_AUTH_FAILED'/>
       <ref name='VIR_ERR_CALL_FAILED'/>
       <ref name='VIR_ERR_CONF_SYNTAX'/>
       <ref name='VIR_ERR_DOM_EXIST'/>
@@ -912,11 +987,17 @@
           <ref name='VIR_GET_CPUMAP'/>
           <ref name='virConnectOpenReadOnly'/>
         </word>
+        <word name='Additional'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='After'>
           <ref name='virDomainSave'/>
         </word>
         <word name='Attempt'>
           <ref name='virDomainMigrate'/>
+        </word>
+        <word name='Authenticate'>
+          <ref name='virConnectOpenAuth'/>
         </word>
       </letter>
       <letter name='B'>
@@ -956,6 +1037,9 @@
           <ref name='virDomainPinVcpu'/>
           <ref name='virDomainSetVcpus'/>
         </word>
+        <word name='Callback'>
+          <ref name='_virConnectAuth'/>
+        </word>
         <word name='Change'>
           <ref name='virDomainSetSchedulerParameters'/>
         </word>
@@ -1058,6 +1142,7 @@
           <ref name='virConnectGetType'/>
           <ref name='virConnectGetVersion'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
         </word>
       </letter>
       <letter name='I'>
@@ -1085,8 +1170,14 @@
         <word name='Launch'>
           <ref name='virDomainCreateLinux'/>
         </word>
+        <word name='Length'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='Linux'>
           <ref name='virDomainCreateLinux'/>
+        </word>
+        <word name='List'>
+          <ref name='_virConnectAuth'/>
         </word>
       </letter>
       <letter name='M'>
@@ -1132,12 +1223,22 @@
           <ref name='virGetVersion'/>
         </word>
         <word name='One'>
+          <ref name='_virConnectCredential'/>
           <ref name='virConnCopyLastError'/>
           <ref name='virCopyLastError'/>
           <ref name='virDomainGetVcpus'/>
         </word>
+        <word name='Open'>
+          <ref name='virConnectOpenAuth'/>
+        </word>
+        <word name='Optional'>
+          <ref name='_virConnectCredential'/>
+        </word>
       </letter>
       <letter name='P'>
+        <word name='Prompt'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='Provide'>
           <ref name='virConnGetLastError'/>
           <ref name='virDomainGetXMLDesc'/>
@@ -1179,6 +1280,9 @@
           <ref name='virResetError'/>
           <ref name='virResetLastError'/>
         </word>
+        <word name='Result'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='Resume'>
           <ref name='virDomainResume'/>
         </word>
@@ -1235,11 +1339,13 @@
         <word name='URI'>
           <ref name='virConnectGetURI'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainMigrate'/>
         </word>
         <word name='URIs'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainMigrate'/>
         </word>
@@ -1274,6 +1380,8 @@
           <ref name='virDomainSuspend'/>
         </word>
       </letter>
+    </chunk>
+    <chunk name='chunk1'>
       <letter name='V'>
         <word name='VIR_COPY_CPUMAP'>
           <ref name='VIR_COPY_CPUMAP'/>
@@ -1307,8 +1415,6 @@
           <ref name='virNetworkGetUUIDString'/>
         </word>
       </letter>
-    </chunk>
-    <chunk name='chunk1'>
       <letter name='W'>
         <word name='WARNING:'>
           <ref name='virDomainGetConnect'/>
@@ -1464,6 +1570,7 @@
           <ref name='virConnectClose'/>
           <ref name='virConnectGetHostname'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainDestroy'/>
           <ref name='virDomainMigrate'/>
@@ -1506,6 +1613,9 @@
         <word name='attribute'>
           <ref name='virConnectGetMaxVcpus'/>
           <ref name='virDomainBlockStats'/>
+        </word>
+        <word name='authentication'>
+          <ref name='virConnectOpenAuth'/>
         </word>
         <word name='automatically'>
           <ref name='virDomainGetAutostart'/>
@@ -1633,6 +1743,8 @@
           <ref name='virNetworkGetUUIDString'/>
         </word>
       </letter>
+    </chunk>
+    <chunk name='chunk2'>
       <letter name='c'>
         <word name='calculate'>
           <ref name='VIR_NODEINFO_MAXCPUS'/>
@@ -1654,6 +1766,7 @@
         </word>
         <word name='callback'>
           <ref name='virConnSetErrorFunc'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virErrorFunc'/>
           <ref name='virSetErrorFunc'/>
         </word>
@@ -1661,6 +1774,7 @@
           <ref name='virConnSetErrorFunc'/>
           <ref name='virConnectClose'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virSetErrorFunc'/>
         </word>
@@ -1729,6 +1843,9 @@
         <word name='cells'>
           <ref name='virNodeGetCellsFreeMemory'/>
         </word>
+        <word name='challenge'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='change'>
           <ref name='virDomainPinVcpu'/>
           <ref name='virDomainSetMaxMemory'/>
@@ -1755,6 +1872,7 @@
           <ref name='virGetVersion'/>
         </word>
         <word name='collect'>
+          <ref name='_virConnectAuth'/>
           <ref name='virConnectListDomains'/>
           <ref name='virConnectListNetworks'/>
         </word>
@@ -1789,6 +1907,9 @@
         </word>
         <word name='consequent'>
           <ref name='_virError'/>
+        </word>
+        <word name='constants'>
+          <ref name='_virConnectCredential'/>
         </word>
         <word name='content'>
           <ref name='virConnCopyLastError'/>
@@ -1846,6 +1967,10 @@
         <word name='create'>
           <ref name='virNetworkDefineXML'/>
         </word>
+        <word name='credentials'>
+          <ref name='_virConnectAuth'/>
+          <ref name='virConnectOpenAuth'/>
+        </word>
         <word name='cupmap'>
           <ref name='virDomainGetVcpus'/>
         </word>
@@ -1856,8 +1981,6 @@
           <ref name='virDomainCoreDump'/>
         </word>
       </letter>
-    </chunk>
-    <chunk name='chunk2'>
       <letter name='d'>
         <word name='data'>
           <ref name='virConnSetErrorFunc'/>
@@ -1876,6 +1999,7 @@
           <ref name='virNetworkGetName'/>
         </word>
         <word name='default'>
+          <ref name='_virConnectCredential'/>
           <ref name='virConnSetErrorFunc'/>
           <ref name='virDomainMigrate'/>
           <ref name='virSetErrorFunc'/>
@@ -1892,6 +2016,9 @@
         </word>
         <word name='defining'>
           <ref name='virConnectGetCapabilities'/>
+        </word>
+        <word name='defresult'>
+          <ref name='_virConnectCredential'/>
         </word>
         <word name='described'>
           <ref name='virDomainGetVcpus'/>
@@ -1945,6 +2072,7 @@
         </word>
         <word name='documented'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
         </word>
         <word name='does'>
@@ -1984,6 +2112,8 @@
           <ref name='virDomainMigrate'/>
         </word>
       </letter>
+    </chunk>
+    <chunk name='chunk3'>
       <letter name='e'>
         <word name='each'>
           <ref name='virDomainBlockStats'/>
@@ -2053,6 +2183,9 @@
         <word name='features'>
           <ref name='virDomainMigrate'/>
         </word>
+        <word name='fetching'>
+          <ref name='virConnectOpenAuth'/>
+        </word>
         <word name='field'>
           <ref name='VIR_DOMAIN_SCHED_FIELD_LENGTH'/>
         </word>
@@ -2065,6 +2198,7 @@
           <ref name='virDomainSave'/>
         </word>
         <word name='filled'>
+          <ref name='_virConnectCredential'/>
           <ref name='virDomainGetSchedulerParameters'/>
           <ref name='virDomainGetVcpus'/>
           <ref name='virNodeGetCellsFreeMemory'/>
@@ -2078,10 +2212,12 @@
         </word>
         <word name='first'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virNodeGetCellsFreeMemory'/>
         </word>
         <word name='flags'>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virDomainCoreDump'/>
           <ref name='virDomainMigrate'/>
           <ref name='virDomainReboot'/>
@@ -2159,6 +2295,7 @@
           <ref name='virConnSetErrorFunc'/>
           <ref name='virConnectClose'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainCreateLinux'/>
@@ -2191,6 +2328,7 @@
         <word name='get'>
           <ref name='virConnSetErrorFunc'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainGetInfo'/>
@@ -2232,8 +2370,6 @@
           <ref name='virDomainShutdown'/>
         </word>
       </letter>
-    </chunk>
-    <chunk name='chunk3'>
       <letter name='h'>
         <word name='handler'>
           <ref name='virConnSetErrorFunc'/>
@@ -2276,11 +2412,13 @@
         <word name='html'>
           <ref name='virConnectGetType'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
         </word>
         <word name='http:'>
           <ref name='virConnectGetType'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
         </word>
         <word name='human-readable'>
@@ -2388,6 +2526,8 @@
           <ref name='virNetworkLookupByUUIDString'/>
         </word>
       </letter>
+    </chunk>
+    <chunk name='chunk4'>
       <letter name='j'>
         <word name='join'>
           <ref name='virNetworkGetBridgeName'/>
@@ -2479,6 +2619,7 @@
         </word>
         <word name='libvirt'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainGetConnect'/>
           <ref name='virDomainMigrate'/>
@@ -2709,8 +2850,6 @@
           <ref name='_virDomainBlockStats'/>
         </word>
       </letter>
-    </chunk>
-    <chunk name='chunk4'>
       <letter name='n'>
         <word name='name'>
           <ref name='_virSchedParameter'/>
@@ -2736,6 +2875,9 @@
         </word>
         <word name='neccessarily'>
           <ref name='VIR_NODEINFO_MAXCPUS'/>
+        </word>
+        <word name='neccessary'>
+          <ref name='virConnectOpenAuth'/>
         </word>
         <word name='need'>
           <ref name='virConnCopyLastError'/>
@@ -2789,6 +2931,8 @@
           <ref name='virDomainSetSchedulerParameters'/>
         </word>
       </letter>
+    </chunk>
+    <chunk name='chunk5'>
       <letter name='o'>
         <word name='objects'>
           <ref name='virDomainSetSchedulerParameters'/>
@@ -2839,6 +2983,7 @@
         </word>
         <word name='org'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
         </word>
         <word name='other'>
@@ -2874,6 +3019,7 @@
           <ref name='virDomainSetSchedulerParameters'/>
         </word>
         <word name='parameters'>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virDomainGetSchedulerParameters'/>
           <ref name='virDomainGetSchedulerType'/>
           <ref name='virDomainSetSchedulerParameters'/>
@@ -2908,6 +3054,9 @@
         </word>
         <word name='perform'>
           <ref name='virDomainMigrate'/>
+        </word>
+        <word name='performed'>
+          <ref name='virConnectOpenAuth'/>
         </word>
         <word name='physical'>
           <ref name='VIR_CPU_MAPLEN'/>
@@ -3102,6 +3251,9 @@
           <ref name='virDomainSuspend'/>
           <ref name='virNetworkDestroy'/>
         </word>
+        <word name='response'>
+          <ref name='_virConnectCredential'/>
+        </word>
         <word name='restart'>
           <ref name='virDomainReboot'/>
         </word>
@@ -3116,6 +3268,7 @@
           <ref name='virConnectOpenReadOnly'/>
         </word>
         <word name='result'>
+          <ref name='_virConnectCredential'/>
           <ref name='virConnCopyLastError'/>
           <ref name='virConnectGetHostname'/>
           <ref name='virCopyLastError'/>
@@ -3193,7 +3346,7 @@
         </word>
       </letter>
     </chunk>
-    <chunk name='chunk5'>
+    <chunk name='chunk6'>
       <letter name='s'>
         <word name='same'>
           <ref name='virConnectGetURI'/>
@@ -3242,6 +3395,7 @@
         <word name='should'>
           <ref name='virConnectClose'/>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainBlockStats'/>
           <ref name='virDomainDestroy'/>
@@ -3254,6 +3408,9 @@
           <ref name='virNetworkDestroy'/>
           <ref name='virNetworkFree'/>
           <ref name='virNetworkSetAutostart'/>
+        </word>
+        <word name='show'>
+          <ref name='_virConnectCredential'/>
         </word>
         <word name='shutdown'>
           <ref name='virDomainDestroy'/>
@@ -3428,6 +3585,7 @@
         </word>
         <word name='supported'>
           <ref name='VIR_NODEINFO_MAXCPUS'/>
+          <ref name='_virConnectAuth'/>
           <ref name='virConnectGetMaxVcpus'/>
           <ref name='virDomainGetMaxVcpus'/>
           <ref name='virDomainMigrate'/>
@@ -3589,7 +3747,7 @@
         </word>
       </letter>
     </chunk>
-    <chunk name='chunk6'>
+    <chunk name='chunk7'>
       <letter name='u'>
         <word name='undefine'>
           <ref name='virDomainUndefine'/>
@@ -3615,6 +3773,7 @@
         </word>
         <word name='uri'>
           <ref name='virConnectOpen'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virConnectOpenReadOnly'/>
           <ref name='virDomainMigrate'/>
         </word>
@@ -3642,6 +3801,7 @@
           <ref name='VIR_GET_CPUMAP'/>
           <ref name='VIR_UNUSE_CPU'/>
           <ref name='VIR_USE_CPU'/>
+          <ref name='_virConnectAuth'/>
           <ref name='_virDomainInfo'/>
           <ref name='_virVcpuInfo'/>
           <ref name='virConnectGetType'/>
@@ -3658,6 +3818,7 @@
           <ref name='virNetworkGetXMLDesc'/>
         </word>
         <word name='user'>
+          <ref name='_virConnectCredential'/>
           <ref name='virConnSetErrorFunc'/>
           <ref name='virDomainGetInfo'/>
           <ref name='virDomainMigrate'/>
@@ -3686,6 +3847,7 @@
           <ref name='virNetworkGetXMLDesc'/>
         </word>
         <word name='values'>
+          <ref name='_virConnectAuth'/>
           <ref name='virDomainGetSchedulerParameters'/>
           <ref name='virGetVersion'/>
         </word>
@@ -3702,8 +3864,15 @@
           <ref name='virConnectGetVersion'/>
           <ref name='virGetVersion'/>
         </word>
+        <word name='via'>
+          <ref name='virConnectOpenAuth'/>
+        </word>
         <word name='virConnCopyLastError'>
           <ref name='virConnGetLastError'/>
+        </word>
+        <word name='virConnectCredentialType'>
+          <ref name='_virConnectAuth'/>
+          <ref name='_virConnectCredential'/>
         </word>
         <word name='virConnectGetCapabilities'>
           <ref name='virDomainMigrate'/>
@@ -3882,6 +4051,7 @@
           <ref name='virConnCopyLastError'/>
           <ref name='virConnSetErrorFunc'/>
           <ref name='virConnectGetURI'/>
+          <ref name='virConnectOpenAuth'/>
           <ref name='virCopyLastError'/>
           <ref name='virDomainCoreDump'/>
           <ref name='virDomainGetMaxVcpus'/>
@@ -3903,6 +4073,7 @@
           <ref name='VIR_GET_CPUMAP'/>
           <ref name='VIR_UNUSE_CPU'/>
           <ref name='VIR_USE_CPU'/>
+          <ref name='_virConnectCredential'/>
           <ref name='virConnCopyLastError'/>
           <ref name='virConnectClose'/>
           <ref name='virConnectGetVersion'/>
@@ -3935,7 +4106,7 @@
         </word>
       </letter>
     </chunk>
-    <chunk name='chunk7'>
+    <chunk name='chunk8'>
       <letter name='x'>
         <word name='xen'>
           <ref name='virConnectOpen'/>
@@ -3964,14 +4135,15 @@
       </letter>
     </chunk>
     <chunks>
-      <chunk name='chunk0' start='A' end='V'/>
-      <chunk name='chunk1' start='W' end='c'/>
-      <chunk name='chunk2' start='d' end='g'/>
-      <chunk name='chunk3' start='h' end='m'/>
-      <chunk name='chunk4' start='n' end='r'/>
-      <chunk name='chunk5' start='s' end='t'/>
-      <chunk name='chunk6' start='u' end='w'/>
-      <chunk name='chunk7' start='x' end='z'/>
+      <chunk name='chunk0' start='A' end='U'/>
+      <chunk name='chunk1' start='V' end='b'/>
+      <chunk name='chunk2' start='c' end='d'/>
+      <chunk name='chunk3' start='e' end='i'/>
+      <chunk name='chunk4' start='j' end='n'/>
+      <chunk name='chunk5' start='o' end='r'/>
+      <chunk name='chunk6' start='s' end='t'/>
+      <chunk name='chunk7' start='u' end='w'/>
+      <chunk name='chunk8' start='x' end='z'/>
     </chunks>
   </index>
 </apirefs>
diff -r ec2d8c632fd9 include/libvirt/libvirt.h.in
--- a/include/libvirt/libvirt.h.in	Wed Nov 28 15:00:45 2007 -0500
+++ b/include/libvirt/libvirt.h.in	Wed Nov 28 20:35:24 2007 -0500
@@ -1,3 +1,4 @@
+
 /* -*- c -*-
  * libvirt.h:
  * Summary: core interfaces for the libvirt library
@@ -275,6 +276,74 @@ typedef virNodeInfo *virNodeInfoPtr;
 typedef virNodeInfo *virNodeInfoPtr;
 
 /**
+ * virConnectFlags
+ *
+ * Flags when openning a connection to a hypervisor
+ */
+typedef enum {
+    VIR_CONNECT_RO = 1,    /* A readonly connection */
+} virConnectFlags;
+
+
+typedef enum {
+    VIR_CRED_USERNAME = 1,     /* Identity to act as */
+    VIR_CRED_AUTHNAME = 2,     /* Identify to authorize as */
+    VIR_CRED_LANGUAGE = 3,     /* RFC 1766 languages, comma separated */
+    VIR_CRED_CNONCE = 4,       /* client supplies a nonce */
+    VIR_CRED_PASSPHRASE = 5,   /* Passphrase secret */
+    VIR_CRED_ECHOPROMPT = 6,   /* Challenge response */
+    VIR_CRED_NOECHOPROMPT = 7, /* Challenge response */
+    VIR_CRED_REALM = 8,        /* Authentication realm */
+    VIR_CRED_EXTERNAL = 9,     /* Externally managed credential */
+
+    /* More may be added - expect the unexpected */
+} virConnectCredentialType;
+
+struct _virConnectCredential {
+    int type; /* One of virConnectCredentialType constants */
+    const char *prompt; /* Prompt to show to user */
+    const char *challenge; /* Additional challenge to show */
+    const char *defresult; /* Optional default result */
+    char *result; /* Result to be filled with user response (or defresult) */
+    unsigned int resultlen; /* Length of the result */
+};
+
+typedef struct _virConnectCredential virConnectCredential;
+typedef virConnectCredential *virConnectCredentialPtr;
+
+
+/**
+ * virConnectCredCallbackPtr
+ *
+ * @param authtype type of authentication being performed
+ * @param cred array of credentials to fetch from user
+ * @param ncred size of cred array
+ * @param cbdata opaque data passed to virConnectOpenAuth
+ * 
+ * When authentication requires one or more interactions, this callback
+ * is invoked. For each interaction supplied, data must be gathered
+ * from the user and filled in to the 'result' and 'resultlen' fields.
+ * If an interaction can not be filled, fill in NULL and 0.
+ *
+ * Return 0 if all interactions were filled, or -1 upon error
+ */
+typedef int (*virConnectAuthCallbackPtr)(virConnectCredentialPtr cred,
+					 unsigned int ncred,
+					 void *cbdata);
+
+struct _virConnectAuth {
+    int *credtype; /* List of supported virConnectCredentialType values */
+    unsigned int ncredtype;
+
+    virConnectAuthCallbackPtr cb; /* Callback used to collect credentials */
+    void *cbdata;
+};
+
+
+typedef struct _virConnectAuth virConnectAuth;
+typedef virConnectAuth *virConnectAuthPtr;
+
+/**
  * VIR_UUID_BUFLEN:
  *
  * This macro provides the length of the buffer required
@@ -314,6 +383,9 @@ int			virInitialize		(void);
 
 virConnectPtr		virConnectOpen		(const char *name);
 virConnectPtr		virConnectOpenReadOnly	(const char *name);
+virConnectPtr           virConnectOpenAuth      (const char *name,
+						 virConnectAuthPtr auth,
+						 int flags);
 int			virConnectClose		(virConnectPtr conn);
 const char *		virConnectGetType	(virConnectPtr conn);
 int			virConnectGetVersion	(virConnectPtr conn,
diff -r ec2d8c632fd9 proxy/libvirt_proxy.c
--- a/proxy/libvirt_proxy.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/proxy/libvirt_proxy.c	Wed Nov 28 20:35:24 2007 -0500
@@ -77,7 +77,7 @@ proxyInitXen(void) {
     priv->xshandle = NULL;
     priv->proxy = -1;
 
-    ret = xenHypervisorOpen(conn, NULL, 0);
+    ret = xenHypervisorOpen(conn, NULL, NULL, 0);
     if (ret < 0) {
         fprintf(stderr, "Failed to open Xen hypervisor\n");
         return(-1);
@@ -93,7 +93,7 @@ proxyInitXen(void) {
         fprintf(stderr, "Failed to connect to Xen daemon\n");
         return(-1);
     }
-    ret = xenStoreOpen(conn, NULL, VIR_DRV_OPEN_RO);
+    ret = xenStoreOpen(conn, NULL, NULL, VIR_CONNECT_RO);
     if (ret < 0) {
         fprintf(stderr, "Failed to open XenStore connection");
         return (-1);
diff -r ec2d8c632fd9 qemud/remote.c
--- a/qemud/remote.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/qemud/remote.c	Wed Nov 28 20:35:24 2007 -0500
@@ -2062,7 +2062,7 @@ remoteDispatchAuthList (struct qemud_ser
                         remote_auth_list_ret *ret)
 {
     ret->types.types_len = 1;
-    if ((ret->types.types_val = calloc (ret->types.types_len, sizeof (remote_auth_type))) == NULL) {
+    if ((ret->types.types_val = calloc (ret->types.types_len, sizeof (u_int))) == NULL) {
         remoteDispatchSendError(client, req, VIR_ERR_NO_MEMORY, "auth types");
         return -2;
     }
diff -r ec2d8c632fd9 src/driver.h
--- a/src/driver.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/driver.h	Wed Nov 28 20:35:24 2007 -0500
@@ -27,11 +27,6 @@ typedef enum {
 } virDrvNo;
 
 
-typedef enum {
-    /* VIR_DRV_OPEN_QUIET = 1 - removed by RWMJ */
-    VIR_DRV_OPEN_RO = 2
-} virDrvOpenFlag;
-
 /* Status codes returned from driver open call. */
 typedef enum {
     /* Opened successfully. */
@@ -76,8 +71,9 @@ typedef enum {
 
 typedef virDrvOpenStatus
 	(*virDrvOpen)			(virConnectPtr conn,
-                     xmlURIPtr uri,
-					 int flags);
+                             xmlURIPtr uri,
+                             virConnectAuthPtr auth,
+                             int flags);
 typedef int
 	(*virDrvClose)			(virConnectPtr conn);
 typedef int
diff -r ec2d8c632fd9 src/internal.h
--- a/src/internal.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/internal.h	Wed Nov 28 20:35:24 2007 -0500
@@ -129,11 +129,6 @@ extern "C" {
  */
 #define MAX_DRIVERS 10
 #define MIN_XEN_GUEST_SIZE 64  /* 64 megabytes */
-
-/*
- * Flags for Xen connections
- */
-#define VIR_CONNECT_RO 1
 
 /**
  * _virConnect:
diff -r ec2d8c632fd9 src/libvirt.c
--- a/src/libvirt.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/libvirt.c	Wed Nov 28 20:35:24 2007 -0500
@@ -395,7 +395,9 @@ virGetVersion(unsigned long *libVer, con
 }
 
 static virConnectPtr
-do_open (const char *name, int flags)
+do_open (const char *name,
+         virConnectAuthPtr auth,
+         int flags)
 {
     int i, res;
     virConnectPtr ret = NULL;
@@ -458,7 +460,7 @@ do_open (const char *name, int flags)
         fprintf (stderr, "libvirt: do_open: trying driver %d (%s) ...\n",
                  i, virDriverTab[i]->name);
 #endif
-        res = virDriverTab[i]->open (ret, uri, flags);
+        res = virDriverTab[i]->open (ret, uri, auth, flags);
 #ifdef ENABLE_DEBUG
         fprintf (stderr, "libvirt: do_open: driver %d %s returned %s\n",
                  i, virDriverTab[i]->name,
@@ -480,7 +482,7 @@ do_open (const char *name, int flags)
     }
 
     for (i = 0; i < virNetworkDriverTabCount; i++) {
-        res = virNetworkDriverTab[i]->open (ret, uri, flags);
+        res = virNetworkDriverTab[i]->open (ret, uri, auth, flags);
 #ifdef ENABLE_DEBUG
         fprintf (stderr, "libvirt: do_open: network driver %d %s returned %s\n",
                  i, virNetworkDriverTab[i]->name,
@@ -500,9 +502,8 @@ do_open (const char *name, int flags)
         }
     }
 
-    if (flags & VIR_DRV_OPEN_RO) {
-        ret->flags = VIR_CONNECT_RO;
-    }
+    /* Cleansing flags */
+    ret->flags = flags & VIR_CONNECT_RO;
 
     xmlFreeURI (uri);
 
@@ -531,7 +532,7 @@ virConnectOpen (const char *name)
 virConnectOpen (const char *name)
 {
     DEBUG("name=%s", name);
-    return do_open (name, 0);
+    return do_open (name, NULL, 0);
 }
 
 /**
@@ -550,7 +551,30 @@ virConnectOpenReadOnly(const char *name)
 virConnectOpenReadOnly(const char *name)
 {
     DEBUG("name=%s", name);
-    return do_open (name, VIR_DRV_OPEN_RO);
+    return do_open (name, NULL, VIR_CONNECT_RO);
+}
+
+/**
+ * virConnectOpenAuth:
+ * @name: URI of the hypervisor
+ * @auth: Authenticate callback parameters
+ * @flags: Open flags
+ *
+ * This function should be called first to get a connection to the 
+ * Hypervisor. If neccessary, authentication will be performed fetching
+ * credentials via the callback
+ *
+ * Returns a pointer to the hypervisor connection or NULL in case of error
+ *
+ * URIs are documented at http://libvirt.org/uri.html
+ */
+virConnectPtr
+virConnectOpenAuth(const char *name,
+                   virConnectAuthPtr auth,
+                   int flags)
+{
+    DEBUG("name=%s", name);
+    return do_open (name, auth, flags);
 }
 
 /**
diff -r ec2d8c632fd9 src/openvz_driver.c
--- a/src/openvz_driver.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/openvz_driver.c	Wed Nov 28 20:35:24 2007 -0500
@@ -89,7 +89,12 @@ static int openvzActive(void);
 static int openvzActive(void);
 static int openvzCloseNetwork(virConnectPtr conn);
 static virDrvOpenStatus openvzOpenNetwork(virConnectPtr conn, 
-        const char *name ATTRIBUTE_UNUSED, int flags ATTRIBUTE_UNUSED);
+                                          const char *name ATTRIBUTE_UNUSED,
+                                          int *credtype ATTRIBUTE_UNUSED,
+                                          int ncredtype ATTRIBUTE_UNUSED,
+                                          virConnectAuthCallbackPtr cb ATTRIBUTE_UNUSED,
+                                          void *cbdata ATTRIBUTE_UNUSED,
+                                          int flags ATTRIBUTE_UNUSED);
 
 static virDomainPtr openvzDomainDefineXML(virConnectPtr conn, const char *xml);
 static virDomainPtr openvzDomainCreateLinux(virConnectPtr conn, const char *xml, 
@@ -551,8 +556,12 @@ bail_out5:
 }
 
 static virDrvOpenStatus openvzOpen(virConnectPtr conn,
-                           const char *name,
-                           int flags ATTRIBUTE_UNUSED) {
+                                   const char *name,
+                                   int *credtype ATTRIBUTE_UNUSED,
+                                   int ncredtype ATTRIBUTE_UNUSED,
+                                   virConnectAuthCallbackPtr cb ATTRIBUTE_UNUSED,
+                                   void *cbdata ATTRIBUTE_UNUSED,
+                                   int flags ATTRIBUTE_UNUSED) {
     struct openvz_vm *vms;
 
     /* Just check if the guy is root. Nothing really to open for OpenVZ */
@@ -693,8 +702,12 @@ static int openvzCloseNetwork(virConnect
 }
 
 static virDrvOpenStatus openvzOpenNetwork(virConnectPtr conn ATTRIBUTE_UNUSED,
-                                         const char *name ATTRIBUTE_UNUSED,
-                                         int flags ATTRIBUTE_UNUSED) {
+                                          const char *name ATTRIBUTE_UNUSED,
+                                          int *credtype ATTRIBUTE_UNUSED,
+                                          int ncredtype ATTRIBUTE_UNUSED,
+                                          virConnectAuthCallbackPtr cb ATTRIBUTE_UNUSED,
+                                          void *cbdata ATTRIBUTE_UNUSED,
+                                          int flags ATTRIBUTE_UNUSED) {
     return VIR_DRV_OPEN_SUCCESS;
 }
 
diff -r ec2d8c632fd9 src/proxy_internal.c
--- a/src/proxy_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/proxy_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -29,7 +29,7 @@ static int debug = 0;
 static int debug = 0;
 
 static int xenProxyClose(virConnectPtr conn);
-static int xenProxyOpen(virConnectPtr conn, xmlURIPtr uri, int flags);
+static int xenProxyOpen(virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int flags);
 static int xenProxyGetVersion(virConnectPtr conn, unsigned long *hvVer);
 static int xenProxyNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
 static char *xenProxyGetCapabilities(virConnectPtr conn);
@@ -521,14 +521,17 @@ retry:
  * Returns 0 in case of success, and -1 in case of failure
  */
 int
-xenProxyOpen(virConnectPtr conn, xmlURIPtr uri ATTRIBUTE_UNUSED, int flags)
+xenProxyOpen(virConnectPtr conn,
+             xmlURIPtr uri ATTRIBUTE_UNUSED,
+             virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+             int flags)
 {
     virProxyPacket req;
     int ret;
     int fd;
     xenUnifiedPrivatePtr priv;
     
-    if (!(flags & VIR_DRV_OPEN_RO))
+    if (!(flags & VIR_CONNECT_RO))
         return(-1);
 
     priv = (xenUnifiedPrivatePtr) conn->privateData;
diff -r ec2d8c632fd9 src/qemu_driver.c
--- a/src/qemu_driver.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/qemu_driver.c	Wed Nov 28 20:35:24 2007 -0500
@@ -1387,6 +1387,7 @@ static int qemudMonitorCommand(struct qe
 
 static virDrvOpenStatus qemudOpen(virConnectPtr conn,
                                   xmlURIPtr uri,
+                                  virConnectAuthPtr auth ATTRIBUTE_UNUSED,
                                   int flags ATTRIBUTE_UNUSED) {
     uid_t uid = getuid();
 
@@ -2572,6 +2573,7 @@ static virNetworkPtr qemudNetworkLookupB
 
 static virDrvOpenStatus qemudOpenNetwork(virConnectPtr conn,
                                          xmlURIPtr uri ATTRIBUTE_UNUSED,
+                                         virConnectAuthPtr auth ATTRIBUTE_UNUSED,
                                          int flags ATTRIBUTE_UNUSED) {
     if (!qemu_driver)
         return VIR_DRV_OPEN_DECLINED;
diff -r ec2d8c632fd9 src/remote_internal.c
--- a/src/remote_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/remote_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -286,7 +286,6 @@ remoteForkDaemon(virConnectPtr conn)
 }
 
 
-/* Must not overlap with virDrvOpenFlags */
 enum virDrvOpenRemoteFlags {
     VIR_DRV_OPEN_REMOTE_RO = (1 << 0),
     VIR_DRV_OPEN_REMOTE_UNIX = (1 << 1),
@@ -295,8 +294,11 @@ enum virDrvOpenRemoteFlags {
 };
 
 static int
-doRemoteOpen (virConnectPtr conn, struct private_data *priv,
-              xmlURIPtr uri, int flags)
+doRemoteOpen (virConnectPtr conn,
+              struct private_data *priv,
+              xmlURIPtr uri,
+              virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+              int flags)
 {
     if (!uri || !uri->scheme)
         return VIR_DRV_OPEN_DECLINED; /* Decline - not a URL. */
@@ -779,7 +781,10 @@ doRemoteOpen (virConnectPtr conn, struct
 }
 
 static int
-remoteOpen (virConnectPtr conn, xmlURIPtr uri, int flags)
+remoteOpen (virConnectPtr conn,
+            xmlURIPtr uri,
+            virConnectAuthPtr auth,
+            int flags)
 {
     struct private_data *priv;
     int ret, rflags = 0;
@@ -793,7 +798,7 @@ remoteOpen (virConnectPtr conn, xmlURIPt
         return VIR_DRV_OPEN_ERROR;
     }
 
-    if (flags & VIR_DRV_OPEN_RO)
+    if (flags & VIR_CONNECT_RO)
         rflags |= VIR_DRV_OPEN_REMOTE_RO;
 
     if (uri &&
@@ -814,7 +819,7 @@ remoteOpen (virConnectPtr conn, xmlURIPt
     memset(priv, 0, sizeof(struct private_data));
     priv->magic = DEAD;
     priv->sock = -1;
-    ret = doRemoteOpen(conn, priv, uri, rflags);
+    ret = doRemoteOpen(conn, priv, uri, auth, rflags);
     if (ret != VIR_DRV_OPEN_SUCCESS) {
         conn->privateData = NULL;
         free(priv);
@@ -2442,6 +2447,7 @@ static int
 static int
 remoteNetworkOpen (virConnectPtr conn,
                    xmlURIPtr uri,
+                   virConnectAuthPtr auth,
                    int flags)
 {
     if (inside_daemon)
@@ -2468,14 +2474,14 @@ remoteNetworkOpen (virConnectPtr conn,
             error (conn, VIR_ERR_NO_MEMORY, "struct private_data");
             return VIR_DRV_OPEN_ERROR;
         }
-        if (flags & VIR_DRV_OPEN_RO)
+        if (flags & VIR_CONNECT_RO)
             rflags |= VIR_DRV_OPEN_REMOTE_RO;
         rflags |= VIR_DRV_OPEN_REMOTE_UNIX;
 
         memset(priv, 0, sizeof(struct private_data));
         priv->magic = DEAD;
         priv->sock = -1;
-        ret = doRemoteOpen(conn, priv, uri, rflags);
+        ret = doRemoteOpen(conn, priv, uri, auth, rflags);
         if (ret != VIR_DRV_OPEN_SUCCESS) {
             conn->networkPrivateData = NULL;
             free(priv);
diff -r ec2d8c632fd9 src/test.c
--- a/src/test.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/test.c	Wed Nov 28 20:35:24 2007 -0500
@@ -882,6 +882,7 @@ static int getNetworkIndex(virNetworkPtr
 
 static int testOpen(virConnectPtr conn,
                     xmlURIPtr uri,
+                    virConnectAuthPtr auth ATTRIBUTE_UNUSED,
                     int flags ATTRIBUTE_UNUSED)
 {
     int ret;
@@ -1644,6 +1645,7 @@ static int testDomainSetSchedulerParams(
 
 static virDrvOpenStatus testOpenNetwork(virConnectPtr conn,
                                         xmlURIPtr uri ATTRIBUTE_UNUSED,
+                                        virConnectAuthPtr auth ATTRIBUTE_UNUSED,
                                         int flags ATTRIBUTE_UNUSED) {
     if (STRNEQ(conn->driver->name, "Test"))
         return VIR_DRV_OPEN_DECLINED;
diff -r ec2d8c632fd9 src/xen_internal.c
--- a/src/xen_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xen_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -2060,6 +2060,7 @@ int
 int
 xenHypervisorOpen(virConnectPtr conn,
                   xmlURIPtr uri ATTRIBUTE_UNUSED,
+                  virConnectAuthPtr auth ATTRIBUTE_UNUSED,
                   int flags ATTRIBUTE_UNUSED)
 {
     int ret;
diff -r ec2d8c632fd9 src/xen_internal.h
--- a/src/xen_internal.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xen_internal.h	Wed Nov 28 20:35:24 2007 -0500
@@ -31,6 +31,7 @@ char *
 
 int	xenHypervisorOpen		(virConnectPtr conn,
 					 xmlURIPtr uri,
+					 virConnectAuthPtr auth,
 					 int flags);
 int	xenHypervisorClose		(virConnectPtr conn);
 int	xenHypervisorGetVersion		(virConnectPtr conn,
diff -r ec2d8c632fd9 src/xen_unified.c
--- a/src/xen_unified.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xen_unified.c	Wed Nov 28 20:35:24 2007 -0500
@@ -217,7 +217,7 @@ done:
  */
 
 static int
-xenUnifiedOpen (virConnectPtr conn, xmlURIPtr uri, int flags)
+xenUnifiedOpen (virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int flags)
 {
     int i, j;
     xenUnifiedPrivatePtr priv;
@@ -272,7 +272,7 @@ xenUnifiedOpen (virConnectPtr conn, xmlU
 #ifdef ENABLE_DEBUG
             fprintf (stderr, "libvirt: xenUnifiedOpen: trying Xen sub-driver %d\n", i);
 #endif
-            if (drivers[i]->open (conn, uri, flags) == VIR_DRV_OPEN_SUCCESS)
+            if (drivers[i]->open (conn, uri, auth, flags) == VIR_DRV_OPEN_SUCCESS)
                 priv->opened[i] = 1;
 #ifdef ENABLE_DEBUG
             fprintf (stderr, "libvirt: xenUnifiedOpen: Xen sub-driver %d open %s\n",
diff -r ec2d8c632fd9 src/xend_internal.c
--- a/src/xend_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xend_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -237,7 +237,7 @@ do_connect(virConnectPtr xend)
 	 * is rather normal, this should fallback to the proxy (or
 	 * remote) mechanism.
 	 */
-	if ((getuid() == 0) || (xend->flags & VIR_DRV_OPEN_RO)) {
+	if ((getuid() == 0) || (xend->flags & VIR_CONNECT_RO)) {
 	    virXendError(xend, VIR_ERR_INTERNAL_ERROR,
 			 "failed to connect to xend");
         }
@@ -2044,7 +2044,9 @@ error:
  * Returns 0 in case of success, -1 in case of error.
  */
 int
-xenDaemonOpen(virConnectPtr conn, xmlURIPtr uri,
+xenDaemonOpen(virConnectPtr conn,
+              xmlURIPtr uri,
+              virConnectAuthPtr auth ATTRIBUTE_UNUSED,
               int flags ATTRIBUTE_UNUSED)
 {
     int ret;
diff -r ec2d8c632fd9 src/xend_internal.h
--- a/src/xend_internal.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xend_internal.h	Wed Nov 28 20:35:24 2007 -0500
@@ -183,7 +183,7 @@ char *xenDaemonDomainDumpXMLByName(virCo
   char *xend_parse_domain_sexp(virConnectPtr conn,  char *root, int xendConfigVersion);
 
 /* refactored ones */
-int xenDaemonOpen(virConnectPtr conn, xmlURIPtr uri, int flags);
+int xenDaemonOpen(virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int flags);
 int xenDaemonClose(virConnectPtr conn);
 int xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer);
 int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
diff -r ec2d8c632fd9 src/xm_internal.c
--- a/src/xm_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xm_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -473,7 +473,9 @@ static int xenXMConfigCacheRefresh (virC
  */
 int
 xenXMOpen (virConnectPtr conn ATTRIBUTE_UNUSED,
-           xmlURIPtr uri ATTRIBUTE_UNUSED, int flags ATTRIBUTE_UNUSED)
+           xmlURIPtr uri ATTRIBUTE_UNUSED,
+           virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+           int flags ATTRIBUTE_UNUSED)
 {
     if (configCache == NULL) {
         configCache = virHashCreate(50);
diff -r ec2d8c632fd9 src/xm_internal.h
--- a/src/xm_internal.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xm_internal.h	Wed Nov 28 20:35:24 2007 -0500
@@ -36,7 +36,7 @@ extern struct xenUnifiedDriver xenXMDriv
 extern struct xenUnifiedDriver xenXMDriver;
 int xenXMInit (void);
 
-int xenXMOpen(virConnectPtr conn, xmlURIPtr uri, int flags);
+int xenXMOpen(virConnectPtr conn, xmlURIPtr uri, virConnectAuthPtr auth, int flags);
 int xenXMClose(virConnectPtr conn);
 const char *xenXMGetType(virConnectPtr conn);
 int xenXMDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info);
diff -r ec2d8c632fd9 src/xs_internal.c
--- a/src/xs_internal.c	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xs_internal.c	Wed Nov 28 20:35:24 2007 -0500
@@ -327,6 +327,7 @@ int
 int
 xenStoreOpen(virConnectPtr conn,
              xmlURIPtr uri ATTRIBUTE_UNUSED,
+             virConnectAuthPtr auth ATTRIBUTE_UNUSED,
              int flags ATTRIBUTE_UNUSED)
 {
     xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
@@ -334,7 +335,7 @@ xenStoreOpen(virConnectPtr conn,
 #ifdef PROXY
     priv->xshandle = xs_daemon_open_readonly();
 #else
-    if (flags & VIR_DRV_OPEN_RO)
+    if (flags & VIR_CONNECT_RO)
 	priv->xshandle = xs_daemon_open_readonly();
     else
 	priv->xshandle = xs_daemon_open();
diff -r ec2d8c632fd9 src/xs_internal.h
--- a/src/xs_internal.h	Wed Nov 28 15:00:45 2007 -0500
+++ b/src/xs_internal.h	Wed Nov 28 20:35:24 2007 -0500
@@ -22,6 +22,7 @@ int xenStoreInit (void);
 
 int		xenStoreOpen		(virConnectPtr conn,
 					 xmlURIPtr uri,
+					 virConnectAuthPtr auth,
 					 int flags);
 int		xenStoreClose		(virConnectPtr conn);
 int		xenStoreGetDomainInfo	(virDomainPtr domain,

-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 




More information about the libvir-list mailing list