1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-07-31 00:03:07 +03:00

Add a return value to ssh_userauth_kbdint_setanswer().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@341 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-02 09:24:46 +00:00
parent ee3b641fb1
commit ae4265d304
4 changed files with 32 additions and 17 deletions

View File

@ -57,7 +57,7 @@ echo "Usage: `basename $0` [--prefix /install_prefix|--build [debug|final]|--cle
cd ${BUILDDIR} cd ${BUILDDIR}
OPTIONS="--graphviz=${BUILDDIR}/libssh.dot -DUNIT_TESTING=ON -DWITH_STATIC_LIB=ON" OPTIONS="--graphviz=${BUILDDIR}/libssh.dot -DUNIT_TESTING=ON"
while test -n "$1"; do while test -n "$1"; do
PARAM="$1" PARAM="$1"

View File

@ -371,7 +371,8 @@ int ssh_userauth_kbdint_getnprompts(SSH_SESSION *session);
char *ssh_userauth_kbdint_getname(SSH_SESSION *session); char *ssh_userauth_kbdint_getname(SSH_SESSION *session);
char *ssh_userauth_kbdint_getinstruction(SSH_SESSION *session); char *ssh_userauth_kbdint_getinstruction(SSH_SESSION *session);
char *ssh_userauth_kbdint_getprompt(SSH_SESSION *session, unsigned int i, char *echo); char *ssh_userauth_kbdint_getprompt(SSH_SESSION *session, unsigned int i, char *echo);
void ssh_userauth_kbdint_setanswer(SSH_SESSION *session, unsigned int i, const char *answer); int ssh_userauth_kbdint_setanswer(SSH_SESSION *session, unsigned int i,
const char *answer);
/* init.c */ /* init.c */

View File

@ -1017,23 +1017,33 @@ char *ssh_userauth_kbdint_getprompt(SSH_SESSION *session, unsigned int i,
* \param session ssh session * \param session ssh session
* \param i index number of the ith prompt * \param i index number of the ith prompt
* \param answer answer to give to server * \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 (session->kbdint->answers == NULL) {
if (i>session->kbdint->nprompts) session->kbdint->answers = malloc(sizeof(char*) * session->kbdint->nprompts);
return;
if (session->kbdint->answers == NULL) { if (session->kbdint->answers == NULL) {
session->kbdint->answers = malloc(sizeof(char*) * session->kbdint->nprompts); return -1;
if (session->kbdint->answers == NULL) {
return;
}
memset(session->kbdint->answers, 0, sizeof(char *) * session->kbdint->nprompts);
} }
if(session->kbdint->answers[i]){ memset(session->kbdint->answers, 0, sizeof(char *) * session->kbdint->nprompts);
burn(session->kbdint->answers[i]); }
free(session->kbdint->answers[i]);
} if (session->kbdint->answers[i]) {
session->kbdint->answers[i]=strdup(answer); 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;
} }
/** @} */ /** @} */

View File

@ -385,11 +385,15 @@ static int auth_kbdint(SSH_SESSION *session){
buffer[sizeof(buffer)-1]=0; buffer[sizeof(buffer)-1]=0;
if((ptr=strchr(buffer,'\n'))) if((ptr=strchr(buffer,'\n')))
*ptr=0; *ptr=0;
ssh_userauth_kbdint_setanswer(session,i,buffer); if (ssh_userauth_kbdint_setanswer(session,i,buffer) < 0) {
return SSH_AUTH_ERROR;
}
memset(buffer,0,strlen(buffer)); memset(buffer,0,strlen(buffer));
} else { } else {
ptr=getpass(prompt); ptr=getpass(prompt);
ssh_userauth_kbdint_setanswer(session,i,ptr); if (ssh_userauth_kbdint_setanswer(session,i,ptr) < 0) {
return SSH_AUTH_ERROR;
}
} }
} }
err=ssh_userauth_kbdint(session,NULL,NULL); err=ssh_userauth_kbdint(session,NULL,NULL);