aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2013-11-18 22:55:28 +0100
committerMattias Andrée <maandree@operamail.com>2013-11-18 22:55:28 +0100
commit5eafb0a9959c9a485046a4ec7096d970f96ce359 (patch)
treeb51bd32fdf56a9099cf8e808718555b43f285537
parentm (diff)
downloadlibpassphrase-5eafb0a9959c9a485046a4ec7096d970f96ce359.tar.gz
libpassphrase-5eafb0a9959c9a485046a4ec7096d970f96ce359.tar.bz2
libpassphrase-5eafb0a9959c9a485046a4ec7096d970f96ce359.tar.xz
set user and group
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r--src/cerberus.c7
-rw-r--r--src/login.c21
-rw-r--r--src/login.h7
3 files changed, 34 insertions, 1 deletions
diff --git a/src/cerberus.c b/src/cerberus.c
index d61f541..f60f64c 100644
--- a/src/cerberus.c
+++ b/src/cerberus.c
@@ -18,6 +18,8 @@
*/
#include "cerberus.h"
+/* TODO use log */
+
/**
* Mane method
@@ -177,7 +179,10 @@ int main(int argc, char** argv)
reenable_echo();
- /* TODO login */
+ /* Login */
+ /* TODO verify that user is enabled */
+ set_user(entry);
+ /* TODO set supplemental groups */
chdir_home(entry);
ensure_shell(entry);
set_environ(entry, preserve_env);
diff --git a/src/login.c b/src/login.c
index 5a97fb6..46bf4e2 100644
--- a/src/login.c
+++ b/src/login.c
@@ -33,6 +33,27 @@ extern char** environ;
/**
+ * Set the user gid and uid
+ *
+ * @param entry The user entry in the password file
+ */
+void set_user(struct passwd* entry)
+{
+ if (setgid(entry->pw_gid) && entry->pw_gid)
+ {
+ perror("setgid");
+ _exit(1);
+ }
+
+ if (setuid(entry->pw_uid) && entry->pw_uid)
+ {
+ perror("setuid");
+ _exit(1);
+ }
+}
+
+
+/**
* Change directory to the user's home directory
*
* @param entry The user entry in the password file
diff --git a/src/login.h b/src/login.h
index 43cb302..14014f2 100644
--- a/src/login.h
+++ b/src/login.h
@@ -23,6 +23,13 @@
/**
+ * Set the user gid and uid
+ *
+ * @param entry The user entry in the password file
+ */
+void set_user(struct passwd* entry);
+
+/**
* Change directory to the user's home directory
*
* @param entry The user entry in the password file