summaryrefslogtreecommitdiff
path: root/lib/identity.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/identity.c24
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);
+}