diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 44 |
1 files changed, 35 insertions, 9 deletions
@@ -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); |
