|
Packit Service |
31306d |
/*
|
|
Packit Service |
31306d |
This file is distributed in public domain. You can do whatever you want
|
|
Packit Service |
31306d |
with its content.
|
|
Packit Service |
31306d |
*/
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#include <stdio.h>
|
|
Packit Service |
31306d |
#include <unistd.h>
|
|
Packit Service |
31306d |
#include <stdlib.h>
|
|
Packit Service |
31306d |
#include <string.h>
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#include <libssh/libssh.h>
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
#include "tests.h"
|
|
Packit Service |
31306d |
static int auth_kbdint(SSH_SESSION *session){
|
|
Packit Service |
31306d |
int err=ssh_userauth_kbdint(session,NULL,NULL);
|
|
Packit Service |
31306d |
char *name,*instruction,*prompt,*ptr;
|
|
Packit Service |
31306d |
char buffer[128];
|
|
Packit Service |
31306d |
int i,n;
|
|
Packit Service |
31306d |
char echo;
|
|
Packit Service |
31306d |
while (err==SSH_AUTH_INFO){
|
|
Packit Service |
31306d |
name=ssh_userauth_kbdint_getname(session);
|
|
Packit Service |
31306d |
instruction=ssh_userauth_kbdint_getinstruction(session);
|
|
Packit Service |
31306d |
n=ssh_userauth_kbdint_getnprompts(session);
|
|
Packit Service |
31306d |
if(strlen(name)>0)
|
|
Packit Service |
31306d |
printf("%s\n",name);
|
|
Packit Service |
31306d |
if(strlen(instruction)>0)
|
|
Packit Service |
31306d |
printf("%s\n",instruction);
|
|
Packit Service |
31306d |
for(i=0;i
|
|
Packit Service |
31306d |
prompt=ssh_userauth_kbdint_getprompt(session,i,&echo);
|
|
Packit Service |
31306d |
if(echo){
|
|
Packit Service |
31306d |
printf("%s",prompt);
|
|
Packit Service |
31306d |
fgets(buffer,sizeof(buffer),stdin);
|
|
Packit Service |
31306d |
buffer[sizeof(buffer)-1]=0;
|
|
Packit Service |
31306d |
if((ptr=strchr(buffer,'\n')))
|
|
Packit Service |
31306d |
*ptr=0;
|
|
Packit Service |
31306d |
ssh_userauth_kbdint_setanswer(session,i,buffer);
|
|
Packit Service |
31306d |
memset(buffer,0,strlen(buffer));
|
|
Packit Service |
31306d |
} else {
|
|
Packit Service |
31306d |
ptr=getpass(prompt);
|
|
Packit Service |
31306d |
ssh_userauth_kbdint_setanswer(session,i,ptr);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
err=ssh_userauth_kbdint(session,NULL,NULL);
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
return err;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
|
|
Packit Service |
31306d |
int authenticate (SSH_SESSION *session){
|
|
Packit Service |
31306d |
int auth=ssh_userauth_autopubkey(session, NULL);
|
|
Packit Service |
31306d |
char *password;
|
|
Packit Service |
31306d |
if(auth==SSH_AUTH_ERROR){
|
|
Packit Service |
31306d |
fprintf(stderr,"Authenticating with pubkey: %s\n",ssh_get_error(session));
|
|
Packit Service |
31306d |
return auth;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if(auth!=SSH_AUTH_SUCCESS){
|
|
Packit Service |
31306d |
auth=auth_kbdint(session);
|
|
Packit Service |
31306d |
if(auth==SSH_AUTH_ERROR){
|
|
Packit Service |
31306d |
fprintf(stderr,"authenticating with keyb-interactive: %s\n",
|
|
Packit Service |
31306d |
ssh_get_error(session));
|
|
Packit Service |
31306d |
return auth;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
if(auth!=SSH_AUTH_SUCCESS){
|
|
Packit Service |
31306d |
password=getpass("Password : ");
|
|
Packit Service |
31306d |
auth = ssh_userauth_password(session,NULL,password);
|
|
Packit Service |
31306d |
memset(password,0,strlen(password));
|
|
Packit Service |
31306d |
if (auth==SSH_AUTH_ERROR){
|
|
Packit Service |
31306d |
fprintf(stderr,"Authentication with password failed: %s\n",ssh_get_error(session));
|
|
Packit Service |
31306d |
return auth;
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
}
|
|
Packit Service |
31306d |
return auth;
|
|
Packit Service |
31306d |
}
|