Fix crash when no auth callback

This commit is contained in:
Daniel P. Berrange 2008-01-14 04:00:34 +00:00
parent 4c50142381
commit b2083ea907
2 changed files with 34 additions and 12 deletions

View File

@ -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.

View 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) {