diff --git a/examples/ssh_client.c b/examples/ssh_client.c index 53f7f6c4..b0c5a7ff 100644 --- a/examples/ssh_client.c +++ b/examples/ssh_client.c @@ -48,12 +48,17 @@ static char *user; static char *cmds[MAXCMD]; static struct termios terminal; -static char *pcap_file=NULL; +static char *pcap_file = NULL; static char *proxycommand; -static int auth_callback(const char *prompt, char *buf, size_t len, - int echo, int verify, void *userdata) { +static int auth_callback(const char *prompt, + char *buf, + size_t len, + int echo, + int verify, + void *userdata) +{ (void) verify; (void) userdata; @@ -61,11 +66,12 @@ static int auth_callback(const char *prompt, char *buf, size_t len, } struct ssh_callbacks_struct cb = { - .auth_function=auth_callback, - .userdata=NULL + .auth_function = auth_callback, + .userdata = NULL, }; -static void add_cmd(char *cmd){ +static void add_cmd(char *cmd) +{ int n; for (n = 0; (n < MAXCMD) && cmds[n] != NULL; n++); @@ -73,7 +79,8 @@ static void add_cmd(char *cmd){ if (n == MAXCMD) { return; } - cmds[n]=strdup(cmd); + + cmds[n] = strdup(cmd); } static void usage(void) @@ -98,37 +105,43 @@ static void usage(void) exit(0); } -static int opts(int argc, char **argv){ +static int opts(int argc, char **argv) +{ int i; -// for(i=0;ic_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); termios_p->c_oflag &= ~OPOST; termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); @@ -138,44 +151,53 @@ static void cfmakeraw(struct termios *termios_p){ #endif -static void do_cleanup(int i) { +static void do_cleanup(int i) +{ /* unused variable */ (void) i; - tcsetattr(0,TCSANOW,&terminal); + tcsetattr(0, TCSANOW, &terminal); } -static void do_exit(int i) { - /* unused variable */ - (void) i; +static void do_exit(int i) +{ + /* unused variable */ + (void) i; - do_cleanup(0); - exit(0); + do_cleanup(0); + exit(0); } -ssh_channel chan; -int signal_delayed=0; +static ssh_channel chan; +static int signal_delayed = 0; -static void sigwindowchanged(int i){ - (void) i; - signal_delayed=1; +static void sigwindowchanged(int i) +{ + (void) i; + signal_delayed = 1; } -static void setsignal(void){ +static void setsignal(void) +{ signal(SIGWINCH, sigwindowchanged); - signal_delayed=0; + signal_delayed = 0; } -static void sizechanged(void){ - struct winsize win = { 0, 0, 0, 0 }; +static void sizechanged(void) +{ + struct winsize win = { + .ws_row = 0, + }; + ioctl(1, TIOCGWINSZ, &win); ssh_channel_change_pty_size(chan,win.ws_col, win.ws_row); -// printf("Changed pty size\n"); setsignal(); } -static void select_loop(ssh_session session,ssh_channel channel){ +static void select_loop(ssh_session session,ssh_channel channel) +{ ssh_connector connector_in, connector_out, connector_err; + ssh_event event = ssh_event_new(); /* stdin */ @@ -196,9 +218,10 @@ static void select_loop(ssh_session session,ssh_channel channel){ ssh_connector_set_in_channel(connector_err, channel, SSH_CONNECTOR_STDERR); ssh_event_add_connector(event, connector_err); - while(ssh_channel_is_open(channel)){ - if(signal_delayed) + while (ssh_channel_is_open(channel)) { + if (signal_delayed) { sizechanged(); + } ssh_event_dopoll(event, 60000); } ssh_event_remove_connector(event, connector_in); @@ -213,121 +236,148 @@ static void select_loop(ssh_session session,ssh_channel channel){ ssh_channel_free(channel); } -static void shell(ssh_session session){ +static void shell(ssh_session session) +{ ssh_channel channel; struct termios terminal_local; int interactive=isatty(0); channel = ssh_channel_new(session); - if(interactive){ - tcgetattr(0,&terminal_local); - memcpy(&terminal,&terminal_local,sizeof(struct termios)); + + if (interactive) { + tcgetattr(0, &terminal_local); + memcpy(&terminal, &terminal_local, sizeof(struct termios)); } - if(ssh_channel_open_session(channel)){ - printf("error opening channel : %s\n",ssh_get_error(session)); + + if (ssh_channel_open_session(channel)) { + printf("Error opening channel : %s\n", ssh_get_error(session)); return; } - chan=channel; - if(interactive){ + chan = channel; + if (interactive) { ssh_channel_request_pty(channel); sizechanged(); } - if(ssh_channel_request_shell(channel)){ - printf("Requesting shell : %s\n",ssh_get_error(session)); + + if (ssh_channel_request_shell(channel)) { + printf("Requesting shell : %s\n", ssh_get_error(session)); return; } - if(interactive){ + + if (interactive) { cfmakeraw(&terminal_local); - tcsetattr(0,TCSANOW,&terminal_local); + tcsetattr(0, TCSANOW, &terminal_local); setsignal(); } - signal(SIGTERM,do_cleanup); - select_loop(session,channel); - if(interactive) - do_cleanup(0); + signal(SIGTERM, do_cleanup); + select_loop(session, channel); + if (interactive) { + do_cleanup(0); + } } -static void batch_shell(ssh_session session){ +static void batch_shell(ssh_session session) +{ ssh_channel channel; char buffer[1024]; - int i,s=0; - for(i=0;i