mirror of https://gitee.com/openkylin/libvirt.git
Don't invoke the auth callback if all credentials were in config file
The remote driver first looks at the libvirt auth config file to fill in any credentials. It then invokes the auth callback for any remaining credentials. It was accidentally invoking the auth callback even if there were not any more credentials required. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
48fea23ba5
commit
d95606e3d8
|
@ -3517,15 +3517,21 @@ static int remoteAuthInteract(virConnectPtr conn,
|
|||
VIR_DEBUG("Starting SASL interaction");
|
||||
remoteAuthInteractStateClear(state, false);
|
||||
|
||||
/* Fills state->interact with any values from the auth config file */
|
||||
if (remoteAuthFillFromConfig(conn, state) < 0)
|
||||
goto cleanup;
|
||||
|
||||
/* Populates state->cred for anything not found in the auth config */
|
||||
if (remoteAuthMakeCredentials(state->interact, &state->cred, &state->ncred) < 0) {
|
||||
virReportError(VIR_ERR_AUTH_FAILED, "%s",
|
||||
_("Failed to make auth credentials"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* If there was anything not in the auth config, we need to
|
||||
* run the interactive callback
|
||||
*/
|
||||
if (state->ncred) {
|
||||
/* Run the authentication callback */
|
||||
if (!auth || !auth->cb) {
|
||||
virReportError(VIR_ERR_AUTH_FAILED, "%s",
|
||||
|
@ -3539,7 +3545,10 @@ static int remoteAuthInteract(virConnectPtr conn,
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Copy user's responses from cred into interact */
|
||||
remoteAuthFillInteract(state->cred, state->interact);
|
||||
}
|
||||
|
||||
/*
|
||||
* 'interact' now has pointers to strings in 'state->cred'
|
||||
* so we must not free state->cred until the *next*
|
||||
|
|
Loading…
Reference in New Issue