From 5a6f8dfea5780c20f464f81f481eaa12b1945feb Mon Sep 17 00:00:00 2001 From: ilsimo Date: Sat, 1 Jul 2006 14:25:12 +0000 Subject: [PATCH] adding initgroups() to support multiple user groups --- common/os_calls.c | 11 +++++++++++ common/os_calls.h | 2 ++ sesman/env.c | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/common/os_calls.c b/common/os_calls.c index 48488539..6dc41e95 100644 --- a/common/os_calls.c +++ b/common/os_calls.c @@ -951,6 +951,17 @@ g_setgid(int pid) #endif } +/*****************************************************************************/ +int +g_initgroups(const char* user, int gid) +{ +#if defined(_WIN32) + return 0; +#else + return initgroups(user ,gid); +#endif +} + /*****************************************************************************/ int g_setuid(int pid) diff --git a/common/os_calls.h b/common/os_calls.h index 68b70117..b28dc4ea 100644 --- a/common/os_calls.h +++ b/common/os_calls.h @@ -157,6 +157,8 @@ g_fork(void); int g_setgid(int pid); int +g_initgroups(const char* user, int gid); +int g_setuid(int pid); int g_waitchild(void); diff --git a/sesman/env.c b/sesman/env.c index 9b9de8d0..beb62dc5 100644 --- a/sesman/env.c +++ b/sesman/env.c @@ -27,6 +27,9 @@ #include "sesman.h" +#include "sys/types.h" +#include "grp.h" + extern unsigned char g_fixedkey[8]; /******************************************************************************/ @@ -70,6 +73,8 @@ env_set_user(char* username, char* passwd_file, int display) if (error == 0) { error = g_setgid(pw_gid); + g_initgroups(username,pw_gid); + if (error == 0) { uid = pw_uid;