diff --git a/apps/wolfssh/README.md b/apps/wolfssh/README.md new file mode 100644 index 00000000..f402b3b0 --- /dev/null +++ b/apps/wolfssh/README.md @@ -0,0 +1,13 @@ +WOLFSSH CLIENT +============== + +The wolfSSH client will connect to a server and try to open a terminal. It'll +default the username to your current username, and it will try to use your +ecdsa private key to authenticate. The key file path is hard coded to +`$HOME/.ssh/id_ecdsa`. It is currently far enough along I can use it. The +private keys are the ones produced by the OpenSSL command line tool, not the +ssh-keygen tool. + +Phase 2 is going to bring reading the config files `/etc/ssh/ssh_config` and +`$HOME/.ssh/config`. It will handle OpenSSH style modern keys. It will also +have support for SSH-AGENT and forwarding. diff --git a/apps/wolfssh/include.am b/apps/wolfssh/include.am index 71661900..bfb90663 100644 --- a/apps/wolfssh/include.am +++ b/apps/wolfssh/include.am @@ -7,3 +7,5 @@ apps_wolfssh_wolfssh_LDADD = src/libwolfssh.la apps_wolfssh_wolfssh_DEPENDENCIES = src/libwolfssh.la endif BUILD_SSHCLIENT + +EXTRA_DIST+= apps/wolfssh/README.md diff --git a/apps/wolfssh/wolfssh.c b/apps/wolfssh/wolfssh.c index adbf0128..0aacb6cf 100644 --- a/apps/wolfssh/wolfssh.c +++ b/apps/wolfssh/wolfssh.c @@ -235,12 +235,12 @@ static THREAD_RET windowMonitor(void* in) do { #if (defined(__OSX__) || defined(__APPLE__)) dispatch_semaphore_wait(windowSem, DISPATCH_TIME_FOREVER); - if (args->quit) { - break; - } #else sem_wait(&windowSem); #endif + if (args->quit) { + break; + } ret = sendCurrentWindowSize(args); (void)ret; } while (1); @@ -375,7 +375,7 @@ static THREAD_RET readPeer(void* in) if (ret == WS_FATAL_ERROR) { ret = wolfSSH_get_error(args->ssh); if (ret == WS_WANT_READ) { - ret = WS_SUCCESS; + continue; } #ifdef WOLFSSH_AGENT else if (ret == WS_CHAN_RXD) { @@ -605,7 +605,7 @@ static int config_init_default(struct config* config) if (env != NULL) { char* user; - sz = strlen(env + 1); + sz = strlen(env) + 1; user = (char*)malloc(sz); if (user != NULL) { strcpy(user, env); @@ -726,7 +726,7 @@ static int config_parse_command_line(struct config* config, if (found != NULL) { *found = '\0'; sz = strlen(cursor); - config->hostname = (char*)malloc(sz); + config->hostname = (char*)malloc(sz + 1); strcpy(config->hostname, cursor); cursor = found + 1; if (*cursor != 0) { @@ -736,7 +736,7 @@ static int config_parse_command_line(struct config* config, } else { sz = strlen(cursor); - config->hostname = (char*)malloc(sz); + config->hostname = (char*)malloc(sz + 1); strcpy(config->hostname, cursor); } @@ -758,6 +758,7 @@ static int config_parse_command_line(struct config* config, } command = (char*)malloc(commandSz); + config->command = command; cursor = command; for (i = myoptind; i < argc; i++) { @@ -998,6 +999,7 @@ THREAD_RETURN WOLFSSH_THREAD client_test(void* args) #endif pthread_join(thread[0], NULL); pthread_cancel(thread[1]); + pthread_join(thread[1], NULL); #if (defined(__OSX__) || defined(__APPLE__)) dispatch_release(windowSem); #else