diff options
Diffstat (limited to '')
-rw-r--r-- | lib/identity.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/identity.c b/lib/identity.c new file mode 100644 index 0000000..58dcf52 --- /dev/null +++ b/lib/identity.c @@ -0,0 +1,24 @@ +#include "lslib.h" + +#include <grp.h> +#include <pwd.h> +#include <unistd.h> +#include <errno.h> + +void change_identity(const struct passwd* pw) { + int res; + + res = initgroups(pw->pw_name, pw->pw_gid); + endgrent(); + + if (res != 0) { + if (errno == ENOSYS && pw->pw_uid == getuid()) { + return; + } + + error("can't set groups"); + } + + xsetgid(pw->pw_gid); + xsetuid(pw->pw_uid); +} |