diff --git a/configure.ac b/configure.ac index 8bd6bfb..8c87ee5 100644 --- a/configure.ac +++ b/configure.ac @@ -249,6 +249,7 @@ AC_CHECK_FUNCS(m4_normalize([ pselect getaddrinfo getnameinfo + pledge ])) AC_SEARCH_LIBS([clock_gettime], [rt], [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define if clock_gettime is available.])]) diff --git a/src/frontend/mosh-server.cc b/src/frontend/mosh-server.cc index efefbb0..4bf1294 100644 --- a/src/frontend/mosh-server.cc +++ b/src/frontend/mosh-server.cc @@ -33,6 +33,7 @@ #include "config.h" #include "version.h" +#include #include #include #include @@ -563,6 +564,15 @@ static int run_server( const char *desired_ip, const char *desired_port, } else { /* parent */ + /* Drop unnecessary privileges */ +#ifdef HAVE_PLEDGE + /* OpenBSD pledge() syscall */ + if ( pledge( "stdio inet ioctl tty", NULL )) { + perror( "pledge() failed" ); + exit( 1 ); + } +#endif + #ifdef HAVE_UTEMPTER /* make utmp entry */ utempter_add_record( master, utmp_entry ); diff --git a/src/frontend/stmclient.cc b/src/frontend/stmclient.cc index e710dcf..c5dd2d4 100644 --- a/src/frontend/stmclient.cc +++ b/src/frontend/stmclient.cc @@ -32,6 +32,7 @@ #include "config.h" +#include #include #include #include @@ -407,6 +408,15 @@ bool STMClient::main( void ) /* initialize signal handling and structures */ main_init(); + /* Drop unnecessary privileges */ +#ifdef HAVE_PLEDGE + /* OpenBSD pledge() syscall */ + if ( pledge( "stdio inet ioctl tty", NULL )) { + perror( "pledge() failed" ); + exit( 1 ); + } +#endif + /* prepare to poll for events */ Select &sel = Select::get_instance();