From 5f607d338c5852443a72f4c370eead0d8a023ee2 Mon Sep 17 00:00:00 2001 From: Nicolas Viennot Date: Sat, 3 Oct 2015 14:14:54 -0700 Subject: [PATCH] Make it happy on darwin --- Makefile.am | 2 +- configure.ac | 11 +++++++---- tmate-master.c | 2 +- tmate-msgpack.c | 2 +- tmate-slave.c | 24 +++++++++++++++++++++--- tmate-ssh-client-pty.c | 1 + tmate-ssh-daemon.c | 2 +- 7 files changed, 33 insertions(+), 11 deletions(-) diff --git a/Makefile.am b/Makefile.am index 502b97ac..764bb715 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,7 +22,7 @@ CFLAGS += -D_GNU_SOURCE endif CFLAGS += -Wno-unused-parameter -Wno-unused-variable -if IS_GCC +if IS_LINUX CFLAGS += -rdynamic # for stack traces endif diff --git a/configure.ac b/configure.ac index 5d89d7c9..3f872d93 100644 --- a/configure.ac +++ b/configure.ac @@ -156,7 +156,7 @@ fi PKG_CHECK_MODULES( MSGPACK, - msgpack, + msgpack >= 1.2.0, [ CPPFLAGS="$MSGPACK_CFLAGS $CPPFLAGS" LIBS="$MSGPACK_LIBS $LIBS" @@ -165,13 +165,13 @@ PKG_CHECK_MODULES( found_msgpack=no ) if test "x$found_msgpack" = xno; then - AC_MSG_ERROR("msgpack not found") + AC_MSG_ERROR("msgpack >= 1.2.0 not found") fi PKG_CHECK_MODULES( LIBSSH, - libssh, + libssh >= 0.7.0, [ CPPFLAGS="$LIBSSH_CFLAGS $CPPFLAGS" LIBS="$LIBSSH_LIBS $LIBS" @@ -180,9 +180,11 @@ PKG_CHECK_MODULES( found_libssh=no ) if test "x$found_libssh" = xno; then - AC_MSG_ERROR("libssh not found") + AC_MSG_ERROR("libssh >= 0.7.0 not found") fi +AC_CHECK_FUNCS([setresuid setresgid setreuid setregid]) + # Check for b64_ntop. AC_MSG_CHECKING(for b64_ntop) AC_TRY_LINK( @@ -478,6 +480,7 @@ case "$host_os" in *linux*) AC_MSG_RESULT(linux) PLATFORM=linux + AC_DEFINE(IS_LINUX) ;; *freebsd*) AC_MSG_RESULT(freebsd) diff --git a/tmate-master.c b/tmate-master.c index 84880862..36336fa3 100644 --- a/tmate-master.c +++ b/tmate-master.c @@ -210,7 +210,7 @@ static int _tmate_connect_to_master(const char *hostname, int port) memcpy(&servaddr.sin_addr, host->h_addr, host->h_length); servaddr.sin_port = htons(port); - if (connect(sockfd, &servaddr, sizeof(servaddr)) < 0) + if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) tmate_fatal("Cannot connect to master at %s:%d", hostname, port); int flag = 1; diff --git a/tmate-msgpack.c b/tmate-msgpack.c index 3d0962c9..c43019e5 100644 --- a/tmate-msgpack.c +++ b/tmate-msgpack.c @@ -9,7 +9,7 @@ static void on_encoder_buffer_ready(evutil_socket_t fd, short what, void *arg) encoder->ready_callback(encoder->userdata, encoder->buffer); } -static int on_encoder_write(void *userdata, const char *buf, unsigned int len) +static int on_encoder_write(void *userdata, const char *buf, size_t len) { struct tmate_encoder *encoder = userdata; diff --git a/tmate-slave.c b/tmate-slave.c index 5557617d..b6a7aec7 100644 --- a/tmate-slave.c +++ b/tmate-slave.c @@ -271,17 +271,35 @@ static void jail(void) if (chdir("/") < 0) tmate_fatal("Cannot chdir()"); - /* if (unshare(CLONE_NEWPID | CLONE_NEWIPC | CLONE_NEWNS | CLONE_NEWNET) < 0) */ - /* tmate_fatal("Cannot create new namespace"); */ +#if IS_LINUX + if (unshare(CLONE_NEWPID | CLONE_NEWIPC | CLONE_NEWNS | CLONE_NEWNET) < 0) + tmate_fatal("Cannot create new namespace"); +#endif if (setgroups(1, (gid_t[]){gid}) < 0) tmate_fatal("Cannot setgroups()"); +#if HAVE_SETRESUID if (setresuid(uid, uid, uid) < 0) tmate_fatal("Cannot setresuid()"); +#elif HAVE_SETREUID + if (setreuid(uid, uid) < 0) + tmate_fatal("Cannot setreuid()"); +#else + if (setuid(uid) < 0) + tmate_fatal("Cannot setuid()"); +#endif - if (setresuid(gid, gid, gid) < 0) +#if HAVE_SETRESGID + if (setresgid(gid, gid, gid) < 0) tmate_fatal("Cannot setresgid()"); +#elif HAVE_SETREGID + if (setregid(gid, gid) < 0) + tmate_fatal("Cannot setregid()"); +#else + if (setgid(gid) < 0) + tmate_fatal("Cannot setgid()"); +#endif if (nice(1) < 0) tmate_fatal("Cannot nice()"); diff --git a/tmate-ssh-client-pty.c b/tmate-ssh-client-pty.c index 4c7ffebb..10e6dd0b 100644 --- a/tmate-ssh-client-pty.c +++ b/tmate-ssh-client-pty.c @@ -1,5 +1,6 @@ #include #include +#include #include "tmate.h" extern void client_write_server(enum msgtype type, void *buf, size_t len); diff --git a/tmate-ssh-daemon.c b/tmate-ssh-daemon.c index 0aa91907..4c75de3f 100644 --- a/tmate-ssh-daemon.c +++ b/tmate-ssh-daemon.c @@ -96,7 +96,7 @@ static void on_daemon_encoder_write(void *userdata, struct evbuffer *buffer) { struct tmate_session *session = userdata; ssize_t len, written; - char *buf; + unsigned char *buf; for(;;) { len = evbuffer_get_length(buffer);