]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix crash when no auth callback
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 14 Jan 2008 04:00:34 +0000 (04:00 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 14 Jan 2008 04:00:34 +0000 (04:00 +0000)
ChangeLog
src/remote_internal.c

index 53f4cad8a60ce7272858194cfe431fb7500937ea..186a9324c1a66e5a9438a7a4d1d20fb4529a7dc5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Jan 13 22:53:53 EST 2008 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/remote_internal.c: Fix crash when server has auth type
+       enabled but client has no auth callback
+
 Thu Jan 10 14:40:53 GMT 2008 Mark McLoughlin <markmc@redhat.com>
 
        * src/iptables.c: fix an unused variable warning.
index d9d4ba95f140b6c5d28cbc8713ee9e940ac68c88..4e0909931ca0a455f11512e114d9f98c2122df9c 100644 (file)
@@ -3047,8 +3047,12 @@ remoteAuthSASL (virConnectPtr conn, struct private_data *priv, int in_open,
     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",
@@ -3161,15 +3165,21 @@ remoteAuthSASL (virConnectPtr conn, struct private_data *priv, int in_open,
             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);
 
@@ -3233,15 +3243,22 @@ remoteAuthSASL (virConnectPtr conn, struct private_data *priv, int in_open,
                 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) {