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 <berrange@redhat.com> - 0.4.0-3.fc9
+- Fix crash when no auth callback
+
 * Wed Jan  2 2008 Daniel P. Berrange <berrange@redhat.com> - 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)