aboutsummaryrefslogtreecommitdiff
path: root/libssh/auth.c
diff options
context:
space:
mode:
Diffstat (limited to 'libssh/auth.c')
-rw-r--r--libssh/auth.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/libssh/auth.c b/libssh/auth.c
index d449f711..75692a47 100644
--- a/libssh/auth.c
+++ b/libssh/auth.c
@@ -1017,23 +1017,33 @@ char *ssh_userauth_kbdint_getprompt(SSH_SESSION *session, unsigned int i,
* \param session ssh session
* \param i index number of the ith prompt
* \param answer answer to give to server
+ * \return 0 on success, < 0 on error.
*/
+int ssh_userauth_kbdint_setanswer(SSH_SESSION *session, unsigned int i,
+ const char *answer) {
+ if (i > session->kbdint->nprompts) {
+ return -1;
+ }
-void ssh_userauth_kbdint_setanswer(SSH_SESSION *session, unsigned int i, const char *answer){
- if (i>session->kbdint->nprompts)
- return;
+ if (session->kbdint->answers == NULL) {
+ session->kbdint->answers = malloc(sizeof(char*) * session->kbdint->nprompts);
if (session->kbdint->answers == NULL) {
- session->kbdint->answers = malloc(sizeof(char*) * session->kbdint->nprompts);
- if (session->kbdint->answers == NULL) {
- return;
- }
- memset(session->kbdint->answers, 0, sizeof(char *) * session->kbdint->nprompts);
- }
- if(session->kbdint->answers[i]){
- burn(session->kbdint->answers[i]);
- free(session->kbdint->answers[i]);
+ return -1;
}
- session->kbdint->answers[i]=strdup(answer);
+ memset(session->kbdint->answers, 0, sizeof(char *) * session->kbdint->nprompts);
+ }
+
+ if (session->kbdint->answers[i]) {
+ burn(session->kbdint->answers[i]);
+ SAFE_FREE(session->kbdint->answers[i]);
+ }
+
+ session->kbdint->answers[i] = strdup(answer);
+ if (session->kbdint->answers[i] == NULL) {
+ return -1;
+ }
+
+ return 0;
}
/** @} */