diff --git a/examples/ssh_client.c b/examples/ssh_client.c index b0b44aa21f8006ec0775e5cfdaf41c32ddbd95fc..cc24918386b015788901bdbdf515133c38aa64c7 100644 --- a/examples/ssh_client.c +++ b/examples/ssh_client.c @@ -297,25 +297,41 @@ static void shell(ssh_session session) static void batch_shell(ssh_session session) { ssh_channel channel; - char buffer[PATH_MAX]; - size_t i; - int s = 0; + char *buffer = NULL; + size_t i, s, n; + channel = ssh_channel_new(session); + if (channel == NULL) { + return; + } + + n = 0; for (i = 0; i < MAXCMD && cmds[i]; ++i) { - s += snprintf(buffer + s, sizeof(buffer) - s, "%s ", cmds[i]); + /* Including space after cmds[i] */ + n += strlen(cmds[i]) + 1; } + /* Trailing \0 */ + n += 1; - channel = ssh_channel_new(session); - if (channel == NULL) { + buffer = malloc(n); + if (buffer == NULL) { + ssh_channel_free(channel); return; } + s = 0; + for (i = 0; i < MAXCMD && cmds[i]; ++i) { + s += snprintf(buffer + s, n - s, "%s ", cmds[i]); + } + ssh_channel_open_session(channel); if (ssh_channel_request_exec(channel, buffer)) { printf("Error executing '%s' : %s\n", buffer, ssh_get_error(session)); + free(buffer); ssh_channel_free(channel); return; } + free(buffer); select_loop(session, channel); ssh_channel_free(channel); }