aboutsummaryrefslogtreecommitdiff
path: root/tests/authentication.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/authentication.c')
-rw-r--r--tests/authentication.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/authentication.c b/tests/authentication.c
new file mode 100644
index 00000000..00abd052
--- /dev/null
+++ b/tests/authentication.c
@@ -0,0 +1,74 @@
+/*
+This file is distributed in public domain. You can do whatever you want
+with its content.
+*/
+
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <libssh/libssh.h>
+
+#include "tests.h"
+static int auth_kbdint(SSH_SESSION *session){
+ int err=ssh_userauth_kbdint(session,NULL,NULL);
+ char *name,*instruction,*prompt,*ptr;
+ char buffer[128];
+ int i,n;
+ char echo;
+ while (err==SSH_AUTH_INFO){
+ name=ssh_userauth_kbdint_getname(session);
+ instruction=ssh_userauth_kbdint_getinstruction(session);
+ n=ssh_userauth_kbdint_getnprompts(session);
+ if(strlen(name)>0)
+ printf("%s\n",name);
+ if(strlen(instruction)>0)
+ printf("%s\n",instruction);
+ for(i=0;i<n;++i){
+ prompt=ssh_userauth_kbdint_getprompt(session,i,&echo);
+ if(echo){
+ printf("%s",prompt);
+ fgets(buffer,sizeof(buffer),stdin);
+ buffer[sizeof(buffer)-1]=0;
+ if((ptr=strchr(buffer,'\n')))
+ *ptr=0;
+ ssh_userauth_kbdint_setanswer(session,i,buffer);
+ memset(buffer,0,strlen(buffer));
+ } else {
+ ptr=getpass(prompt);
+ ssh_userauth_kbdint_setanswer(session,i,ptr);
+ }
+ }
+ err=ssh_userauth_kbdint(session,NULL,NULL);
+ }
+ return err;
+}
+
+int authenticate (SSH_SESSION *session){
+ int auth=ssh_userauth_autopubkey(session);
+ char *password;
+ if(auth==SSH_AUTH_ERROR){
+ fprintf(stderr,"Authenticating with pubkey: %s\n",ssh_get_error(session));
+ return auth;
+ }
+ if(auth!=SSH_AUTH_SUCCESS){
+ auth=auth_kbdint(session);
+ if(auth==SSH_AUTH_ERROR){
+ fprintf(stderr,"authenticating with keyb-interactive: %s\n",
+ ssh_get_error(session));
+ return auth;
+ }
+ }
+ if(auth!=SSH_AUTH_SUCCESS){
+ password=getpass("Password : ");
+ auth = ssh_userauth_password(session,NULL,password);
+ memset(password,0,strlen(password));
+ if (auth==SSH_AUTH_ERROR){
+ fprintf(stderr,"Authentication with password failed: %s\n",ssh_get_error(session));
+ return auth;
+ }
+ }
+ return auth;
+}