summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2015-08-09 20:43:07 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2015-08-09 20:43:07 +0200
commitea5bfbe09acd946d754a7b77c8d4adc8fca7278d (patch)
tree155bfc1f228863c09bbe7779e005fe582e5cd9ea
parent0d7775e1e8cdc3b988637f814a3bc92bc25cf870 (diff)
downloadcssh-ea5bfbe09acd946d754a7b77c8d4adc8fca7278d.tar.gz
cssh-ea5bfbe09acd946d754a7b77c8d4adc8fca7278d.tar.bz2
first working command execution
-rw-r--r--src/cssh.c59
1 files changed, 57 insertions, 2 deletions
diff --git a/src/cssh.c b/src/cssh.c
index 3bb4cb9..a255618 100644
--- a/src/cssh.c
+++ b/src/cssh.c
@@ -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 );