diff --git a/libvirt-0.4.0-auth-null-cb-2.patch b/libvirt-0.4.0-auth-null-cb-2.patch new file mode 100644 index 0000000..9fd6508 --- /dev/null +++ b/libvirt-0.4.0-auth-null-cb-2.patch @@ -0,0 +1,83 @@ +diff -rupN libvirt-0.4.0.orig/src/remote_internal.c libvirt-0.4.0.new/src/remote_internal.c +--- libvirt-0.4.0.orig/src/remote_internal.c 2008-01-11 10:39:34.000000000 -0500 ++++ libvirt-0.4.0.new/src/remote_internal.c 2008-01-11 10:43:12.000000000 -0500 +@@ -3054,8 +3054,12 @@ remoteAuthSASL (virConnectPtr conn, stru + if ((remoteAddr = addrToString(&sa, salen)) == NULL) + goto cleanup; + +- if ((saslcb = remoteAuthMakeCallbacks(auth->credtype, auth->ncredtype)) == NULL) +- goto cleanup; ++ if (auth) { ++ if ((saslcb = remoteAuthMakeCallbacks(auth->credtype, auth->ncredtype)) == NULL) ++ goto cleanup; ++ } else { ++ saslcb = NULL; ++ } + + /* Setup a handle for being a client */ + err = sasl_client_new("libvirt", +@@ -3168,15 +3172,21 @@ remoteAuthSASL (virConnectPtr conn, stru + goto cleanup; + } + /* Run the authentication callback */ +- if ((*(auth->cb))(cred, ncred, auth->cbdata) < 0) { ++ if (auth && auth->cb) { ++ if ((*(auth->cb))(cred, ncred, auth->cbdata) < 0) { ++ __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE, ++ VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0, ++ "Failed to collect auth credentials"); ++ goto cleanup; ++ } ++ remoteAuthFillInteract(cred, interact); ++ goto restart; ++ } else { + __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE, + VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0, +- "Failed to collect auth credentials"); ++ "No authentication callback available"); + goto cleanup; +- return -1; + } +- remoteAuthFillInteract(cred, interact); +- goto restart; + } + free(iret.mechlist); + +@@ -3240,15 +3250,22 @@ remoteAuthSASL (virConnectPtr conn, stru + return -1; + } + /* Run the authentication callback */ +- if ((*(auth->cb))(cred, ncred, auth->cbdata) < 0) { ++ if (auth && auth->cb) { ++ if ((*(auth->cb))(cred, ncred, auth->cbdata) < 0) { ++ __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE, ++ VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0, ++ "Failed to collect auth credentials"); ++ goto cleanup; ++ return -1; ++ } ++ remoteAuthFillInteract(cred, interact); ++ goto restep; ++ } else { + __virRaiseError (in_open ? NULL : conn, NULL, NULL, VIR_FROM_REMOTE, + VIR_ERR_AUTH_FAILED, VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0, +- "Failed to collect auth credentials"); ++ "No authentication callback available"); + goto cleanup; +- return -1; + } +- remoteAuthFillInteract(cred, interact); +- goto restep; + } + + if (serverin) { +@@ -3319,7 +3336,8 @@ remoteAuthSASL (virConnectPtr conn, stru + if (remoteAddr) free(remoteAddr); + if (serverin) free(serverin); + +- free(saslcb); ++ if (saslcb) ++ free(saslcb); + remoteAuthFreeCredentials(cred, ncred); + if (ret != 0 && saslconn) + sasl_dispose(&saslconn); diff --git a/libvirt.spec b/libvirt.spec index a437718..5371cd5 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -11,12 +11,13 @@ Summary: Library providing a simple API virtualization Name: libvirt Version: 0.4.0 -Release: 2%{?dist}%{?extra_release} +Release: 3%{?dist}%{?extra_release} License: LGPL Group: Development/Libraries Source: libvirt-%{version}.tar.gz Patch1: libvirt-%{version}-auth-null-cb.patch Patch2: libvirt-%{version}-conffile-size.patch +Patch3: libvirt-%{version}-auth-null-cb-2.patch BuildRoot: %{_tmppath}/%{name}-%{version}-root URL: http://libvirt.org/ BuildRequires: python python-devel @@ -91,6 +92,7 @@ of recent versions of Linux (and other OSes). %setup -q %patch1 -p1 %patch2 -p1 +%patch3 -p1 %build # Xen is availble only on i386 x86_64 ia64 @@ -216,6 +218,9 @@ fi %doc docs/examples/python %changelog +* Sun Jan 13 2008 Daniel P. Berrange - 0.4.0-3.fc9 +- Fix crash when no auth callback + * Wed Jan 2 2008 Daniel P. Berrange - 0.4.0-2.fc9 - Fix reading large config files (rhbz #426425) - Fix crash when connecting to a PolicyKit enabled server with not auth callback (rhbz #427107)