tpws : dropcaps

This commit is contained in:
bolvan 2019-05-19 15:37:05 +03:00
parent 352f93ced2
commit 8b9d7f56d3
10 changed files with 26 additions and 4 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -12,7 +12,7 @@ define Package/tpws
CATEGORY:=Network
TITLE:=tpws
SUBMENU:=Zapret
DEPENDS:=+zlib
DEPENDS:=+zlib +libcap
endef
define Build/Prepare

View File

@ -23,6 +23,7 @@
#include <getopt.h>
#include <pwd.h>
#include <signal.h>
#include <sys/capability.h>
#include "tpws.h"
#include "tpws_conn.h"
@ -789,6 +790,26 @@ void daemonize()
/* stderror */
}
bool dropcaps()
{
cap_t capabilities;
capabilities = cap_init();
if (cap_clear(capabilities))
{
perror("cap_init");
return false;
}
if (cap_set_proc(capabilities))
{
perror("cap_set_proc");
cap_free(capabilities);
return false;
}
cap_free(capabilities);
return true;
}
bool droproot()
{
if (params.uid || params.gid)
@ -804,9 +825,10 @@ bool droproot()
return false;
}
}
return true;
return dropcaps();
}
bool writepid(const char *filename)
{
FILE *F;
@ -1002,7 +1024,7 @@ int main(int argc, char *argv[]) {
perror("setsockopt (SO_KEEPALIVE): ");
goto exiterr;
}
//Mark that this socket can be used for transparent proxying
//This allows the socket to accept connections for non-local IPs
if (setsockopt(listen_fd, SOL_IP, IP_TRANSPARENT, &yes, sizeof(yes)) == -1)
@ -1027,7 +1049,7 @@ int main(int argc, char *argv[]) {
perror("listen: ");
goto exiterr;
}
//splice() causes the process to receive the SIGPIPE-signal if one part (for
//example a socket) is closed during splice(). I would rather have splice()
//fail and return -1, so blocking SIGPIPE.