diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-08-09 20:43:07 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-08-09 20:43:07 +0200 |
commit | ea5bfbe09acd946d754a7b77c8d4adc8fca7278d (patch) | |
tree | 155bfc1f228863c09bbe7779e005fe582e5cd9ea | |
parent | 0d7775e1e8cdc3b988637f814a3bc92bc25cf870 (diff) | |
download | cssh-ea5bfbe09acd946d754a7b77c8d4adc8fca7278d.tar.gz cssh-ea5bfbe09acd946d754a7b77c8d4adc8fca7278d.tar.bz2 |
first working command execution
-rw-r--r-- | src/cssh.c | 59 |
1 files changed, 57 insertions, 2 deletions
@@ -273,9 +273,64 @@ int main( int argc, char *argv[] ) exit( EXIT_FAILURE ); } } - + + ssh_channel channel = ssh_channel_new( session ); + if( channel == NULL ) { + fprintf( stderr, "ERROR: Unable to open SSH channel: %s\n", + ssh_get_error( session ) ); + ssh_disconnect( session ); + ssh_free( session ); + exit( EXIT_FAILURE ); + } + + rc = ssh_channel_open_session( channel ); + if( rc != SSH_OK ) { + ssh_channel_free( channel ); + ssh_disconnect( session ); + ssh_free( session ); + exit( EXIT_FAILURE ); + } + + rc = ssh_channel_request_exec( channel, "ps -alef" ); + if( rc != SSH_OK ) { + ssh_channel_close( channel ); + ssh_channel_free( channel ); + ssh_disconnect( session ); + ssh_free( session ); + exit( EXIT_FAILURE ); + } + + char buffer[256]; + unsigned int nread = ssh_channel_read( channel, buffer, sizeof( buffer ), 0 ); + while( nread > 0 ) { + size_t wrc = fwrite( buffer, 1, nread, stdout ); + if( wrc < 0 ) { + fprintf( stderr, "ERROR: while writting to stdout: %s\n", + strerror( errno ) ); + ssh_channel_close( channel ); + ssh_channel_free( channel ); + ssh_disconnect( session ); + ssh_free( session ); + exit( EXIT_FAILURE ); + } + + if( wrc != nread ) { + fprintf( stderr, "ERROR: Write mismatch on stdout (%d != %d)\n", + wrc, nread ); + ssh_channel_close( channel ); + ssh_channel_free( channel ); + ssh_disconnect( session ); + ssh_free( session ); + exit( EXIT_FAILURE ); + } + + nread = ssh_channel_read( channel, buffer, sizeof( buffer ), 0 ); + } + + ssh_channel_send_eof( channel ); + ssh_channel_close( channel ); + ssh_channel_free( channel ); ssh_disconnect( session ); - ssh_free( session ); exit( EXIT_SUCCESS ); |