From 8142854950bc510b8c21a210538d14a301dbcf63 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Fri, 18 Oct 2019 20:46:58 +0300 Subject: skel update --- main.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 5a43f51..e8b0026 100644 --- a/main.c +++ b/main.c @@ -5,25 +5,51 @@ #include "tunnel.h" #include "macro.h" +#include "utils.h" -int main(int argc __unused, char *argv[] __unused) +static void sendcmd(int sock, int argc, char *argv[]) { -#if 0 - if (geteuid() != 0) - errx(EXIT_FAILURE, "running as root required"); -#endif + char *buf = NULL; + size_t len = 0; + + let (fp, open_memstream(&buf, &len), fclose) { + for (int n = 0; n < argc; n++) { + if (n) + fputc('\0', fp); + + fprintf(fp, "%s", argv[n]); + } + } + + if (write(sock, buf, len) < 0) + err(EXIT_FAILURE, "write"); + + free(buf); +} + +int main(int argc, char *argv[]) +{ + char reply[1024]; + + if (argc == 1) + errx(EXIT_FAILURE, "bad usage"); int sock = tunnel_client(); if (sock < 0) - errx(EXIT_FAILURE, "tunnel_connect failed"); + errx(EXIT_FAILURE, "tunnel_client failed"); - char buf[512]; + sendcmd(sock, argc - 1, argv + 1); - int n = read(sock, buf, sizeof(buf)); + int n = read(sock, reply, sizeof(reply)); if (n < 0) err(EXIT_FAILURE, "read"); - printf("%.*s\n", n, buf); + if (n) { + if (reply[n - 1] == '\n') + printf("%.*s", n, reply); + else + printf("%.*s\n", n, reply); + } close(sock); -- cgit v1.2.3-70-g09d2