From 4d4cbdaf49f616fea47c543fe2cb74d1d8a1e7ff Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Thu, 25 Jun 2020 22:47:10 +0200 Subject: ssh: WIP ssh proxy server --- ssh/client.c | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) (limited to 'ssh/client.c') diff --git a/ssh/client.c b/ssh/client.c index 9e60033..0adfffb 100644 --- a/ssh/client.c +++ b/ssh/client.c @@ -8,28 +8,8 @@ #include #include #include -#include "../global.h" - - -static void parse_args(const char *arg, const char **server_host, int *port) { - const char *ptr = strchr(arg, ':'); - if (ptr == NULL) { - *server_host = arg; - } else { - size_t length = ptr - arg; - char *host = malloc(length + 1, char); - memcpy(host, arg, length); - host[length] = '\0'; - *server_host = host; - - char *endp; - *port = strtol(ptr + 1, &endp, 10); - if (endp == ptr || *endp != '\0') { - fprintf(stderr, "Cannot parse server:port from argument '%s'\n", arg); - exit(1); - } - } -} +#include "util.h" + static bool prompt_yn(const char *text) { printf("%s", text); @@ -159,7 +139,10 @@ int main(int argc, char **argv) { return 1; } - parse_args(argv[1], &server_host, &port); + if (!parse_host_port(argv[1], &server_host, &port)) { + fprintf(stderr, "Cannot parse host:port from argument '%s'\n", argv[1]); + return 1; + } ssh_session session = ssh_new(); if (!session) { @@ -169,7 +152,8 @@ int main(int argc, char **argv) { const char *ciphers_str = "aes256-gcm@openssh.com,aes256-ctr,aes256-cbc"; bool procconfig = false; - bool ok = ssh_options_set(session, SSH_OPTIONS_PROCESS_CONFIG, &procconfig) == SSH_OK; + bool ok = true; + ok &= ssh_options_set(session, SSH_OPTIONS_PROCESS_CONFIG, &procconfig) == SSH_OK; ok &= ssh_options_set(session, SSH_OPTIONS_USER, "tomsg") == SSH_OK; ok &= ssh_options_set(session, SSH_OPTIONS_HOST, server_host) == SSH_OK; ok &= ssh_options_set(session, SSH_OPTIONS_PORT, &port) == SSH_OK; @@ -257,7 +241,12 @@ int main(int argc, char **argv) { printf("Obtained tomsg subsystem on channel\n"); - struct session_data *sesdata = malloc(1, struct session_data); + struct session_data *sesdata = malloc(sizeof(struct session_data)); + if (!sesdata) { + fprintf(stderr, "Out of memory (allocating session_data)!\n"); + return 1; + } + sesdata->session = session; sesdata->channel = channel; sesdata->should_close = false; -- cgit v1.2.3-54-g00ecf