Rework the code to use the new helper instead of open coding the auth
callback interaction.

Signed-off-by: Peter Krempa <pkre...@redhat.com>
---
 src/rpc/virnetlibsshsession.c | 47 ++++++-----------------------------
 1 file changed, 7 insertions(+), 40 deletions(-)

diff --git a/src/rpc/virnetlibsshsession.c b/src/rpc/virnetlibsshsession.c
index 084224b3f8..942f8526c2 100644
--- a/src/rpc/virnetlibsshsession.c
+++ b/src/rpc/virnetlibsshsession.c
@@ -647,26 +647,17 @@ 
virNetLibsshAuthenticateKeyboardInteractive(virNetLibsshSession *sess,
             virBufferAddChar(&buff, '\n');

         for (iprompt = 0; iprompt < nprompts; ++iprompt) {
-            virConnectCredential retr_passphrase;
             const char *promptStr;
             int promptStrLen;
             char echo;
-            char *prompt = NULL;
-            int cred_type;
+            g_autofree char *prompt = NULL;
+            g_autoptr(virConnectCredential) cred = NULL;

             /* get the prompt */
             promptStr = ssh_userauth_kbdint_getprompt(sess->session, iprompt,
                                                       &echo);
             promptStrLen = virLengthForPromptString(promptStr);

-            cred_type = virCredTypeForPrompt(sess->cred, echo);
-            if (cred_type == -1) {
-                virReportError(VIR_ERR_LIBSSH, "%s",
-                               _("no suitable callback for input of keyboard "
-                                 "response"));
-                goto prompt_error;
-            }
-
             /* create the prompt for the user, using the instruction
              * buffer if specified
              */
@@ -681,42 +672,18 @@ 
virNetLibsshAuthenticateKeyboardInteractive(virNetLibsshSession *sess,
                 prompt = g_strndup(promptStr, promptStrLen);
             }

-            memset(&retr_passphrase, 0, sizeof(virConnectCredential));
-            retr_passphrase.type = cred_type;
-            retr_passphrase.prompt = prompt;
-
-            if (retr_passphrase.type == -1) {
-                virReportError(VIR_ERR_LIBSSH, "%s",
-                               _("no suitable callback for input of key "
-                                 "passphrase"));
-                goto prompt_error;
-            }
-
-            if (sess->cred->cb(&retr_passphrase, 1, sess->cred->cbdata)) {
-                virReportError(VIR_ERR_LIBSSH, "%s",
-                               _("failed to retrieve keyboard interactive "
-                                 "result: callback has failed"));
-                goto prompt_error;
-            }
+            if (!(cred = virAuthAskCredential(sess->cred, prompt, echo)))
+                return SSH_AUTH_ERROR;

-            VIR_FREE(prompt);
-
-            ret = ssh_userauth_kbdint_setanswer(sess->session, iprompt,
-                                                retr_passphrase.result);
-            virSecureEraseString(retr_passphrase.result);
-            g_free(retr_passphrase.result);
-            if (ret < 0) {
+            if (ssh_userauth_kbdint_setanswer(sess->session, iprompt,
+                                              cred->result) < 0) {
                 errmsg = ssh_get_error(sess->session);
                 virReportError(VIR_ERR_AUTH_FAILED,
                                _("authentication failed: %s"), errmsg);
-                goto prompt_error;
+                return SSH_AUTH_ERROR;
             }

             continue;
-
-         prompt_error:
-            VIR_FREE(prompt);
-            return SSH_AUTH_ERROR;
         }

         ret = ssh_userauth_kbdint(sess->session, NULL, NULL);
-- 
2.38.1

Reply via email to