diff options
Diffstat (limited to 'env_universal.cpp')
-rw-r--r-- | env_universal.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/env_universal.cpp b/env_universal.cpp index 64f39832..9c6165fe 100644 --- a/env_universal.cpp +++ b/env_universal.cpp @@ -89,6 +89,8 @@ static int try_get_socket_once(void) wdir = path; wuname = user; + uid_t seuid; + gid_t segid; if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { @@ -142,6 +144,13 @@ static int try_get_socket_once(void) return -1; } + if ((getpeereid(s, &seuid, &segid) != 0) || seuid != geteuid()) + { + debug(1, L"Wrong credentials for socket %s at fd %d", name.c_str(), s); + close(s); + return -1; + } + if ((make_fd_nonblocking(s) != 0) || (fcntl(s, F_SETFD, FD_CLOEXEC) != 0)) { wperror(L"fcntl"); |