aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-02 09:24:46 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-02 09:24:46 +0000
commitae4265d3048b1bd5d417980aabf1c180ab2a81e1 (patch)
treed28976955f7a1d193253f304f4676f9fb6e0bc01
parentee3b641fb1f4a7a1d8e78cf6d549469be6cdab21 (diff)
downloadlibssh-ae4265d3048b1bd5d417980aabf1c180ab2a81e1.tar.gz
libssh-ae4265d3048b1bd5d417980aabf1c180ab2a81e1.tar.xz
libssh-ae4265d3048b1bd5d417980aabf1c180ab2a81e1.zip
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
-rwxr-xr-xbuild/build_make.sh2
-rw-r--r--include/libssh/libssh.h3
-rw-r--r--libssh/auth.c36
-rw-r--r--sample.c8
4 files changed, 32 insertions, 17 deletions
diff --git a/build/build_make.sh b/build/build_make.sh
index f9e7508c..04a310af 100755
--- a/build/build_make.sh
+++ b/build/build_make.sh
@@ -57,7 +57,7 @@ echo "Usage: `basename $0` [--prefix /install_prefix|--build [debug|final]|--cle
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
PARAM="$1"
diff --git a/include/libssh/libssh.h b/include/libssh/libssh.h
index c89e31b5..d6d02dfb 100644
--- a/include/libssh/libssh.h
+++ b/include/libssh/libssh.h
@@ -371,7 +371,8 @@ int ssh_userauth_kbdint_getnprompts(SSH_SESSION *session);
char *ssh_userauth_kbdint_getname(SSH_SESSION *session);
char *ssh_userauth_kbdint_getinstruction(SSH_SESSION *session);
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 */
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;
}
/** @} */
diff --git a/sample.c b/sample.c
index 002c326a..20b19c72 100644
--- a/sample.c
+++ b/sample.c
@@ -385,11 +385,15 @@ static int auth_kbdint(SSH_SESSION *session){
buffer[sizeof(buffer)-1]=0;
if((ptr=strchr(buffer,'\n')))
*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));
} else {
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);