There are a couple more bugs in the security driver error reporting
code
- The remote daemon driver was formatting a generic string error, instead
of sending back the actual libvirt error
- The public interface was not raising a full error, nor copying the error
from the connection to the global error object
Daniel
diff -rup libvirt-0.6.3/qemud/remote.c libvirt-0.6.3.new/qemud/remote.c
--- libvirt-0.6.3/qemud/remote.c 2009-04-24 09:12:05.000000000 -0400
+++ libvirt-0.6.3.new/qemud/remote.c 2009-07-13 06:30:02.000000000 -0400
@@ -1366,7 +1366,7 @@ remoteDispatchDomainGetSecurityLabel(str
memset(&seclabel, 0, sizeof seclabel);
if (virDomainGetSecurityLabel(dom, &seclabel) == -1) {
virDomainFree(dom);
- remoteDispatchFormatError(rerr, "%s", _("unable to get security
label"));
+ remoteDispatchConnError(rerr, conn);
return -1;
}
@@ -1395,7 +1395,7 @@ remoteDispatchNodeGetSecurityModel(struc
memset(&secmodel, 0, sizeof secmodel);
if (virNodeGetSecurityModel(conn, &secmodel) == -1) {
- remoteDispatchFormatError(rerr, "%s", _("unable to get security
model"));
+ remoteDispatchConnError(rerr, conn);
return -1;
}
diff -rup libvirt-0.6.3/src/libvirt.c libvirt-0.6.3.new/src/libvirt.c
--- libvirt-0.6.3/src/libvirt.c 2009-07-13 06:31:29.000000000 -0400
+++ libvirt-0.6.3.new/src/libvirt.c 2009-07-13 06:27:42.000000000 -0400
@@ -4212,15 +4212,24 @@ virDomainGetSecurityLabel(virDomainPtr d
if (seclabel == NULL) {
virLibDomainError(domain, VIR_ERR_INVALID_ARG, __FUNCTION__);
- return -1;
+ goto error;
}
conn = domain->conn;
- if (conn->driver->domainGetSecurityLabel)
- return conn->driver->domainGetSecurityLabel(domain, seclabel);
+ if (conn->driver->domainGetSecurityLabel) {
+ int ret;
+ ret = conn->driver->domainGetSecurityLabel(domain, seclabel);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
- virLibConnWarning(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+error:
+ /* Copy to connection error object for back compatability */
+ virSetConnError(domain->conn);
return -1;
}
@@ -4245,13 +4254,22 @@ virNodeGetSecurityModel(virConnectPtr co
if (secmodel == NULL) {
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
- return -1;
+ goto error;
+ }
+
+ if (conn->driver->nodeGetSecurityModel) {
+ int ret;
+ ret = conn->driver->nodeGetSecurityModel(conn, secmodel);
+ if (ret < 0)
+ goto error;
+ return ret;
}
- if (conn->driver->nodeGetSecurityModel)
- return conn->driver->nodeGetSecurityModel(conn, secmodel);
+ virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
- virLibConnWarning(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
+error:
+ /* Copy to connection error object for back compatability */
+ virSetConnError(conn);
return -1;
}
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|