diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2019-10-18 20:46:58 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2019-10-18 21:14:24 +0300 |
| commit | 8142854950bc510b8c21a210538d14a301dbcf63 (patch) | |
| tree | db4ecc964090218f50f1e9c4a8797544f9d45879 /main.c | |
| parent | 3b00c7be0e8834402ed93eb42b3a93302076c5ff (diff) | |
skel update
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); |
