summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@sun.com>2009-03-19 04:31:07 +0000
committerBrian Cameron <bcameron@src.gnome.org>2009-03-19 04:31:07 +0000
commitd7e9495fd35ae421bfaa6de8dc70a3b21dabfdb8 (patch)
treedd44b49947c17d12da36b8917f181eaca72bf16e
parentda242783e2e25c53e9c1d5ca7e8751ca59b79bdb (diff)
downloadgdm-d7e9495fd35ae421bfaa6de8dc70a3b21dabfdb8.tar.gz
Make sure that gid/egid are set to 0 when running the Init, PostLogin,
2009-03-19 Brian Cameron <brian.cameron@sun.com> * daemon/slave.c: Make sure that gid/egid are set to 0 when running the Init, PostLogin, PreSession, and PostSession scripts. This ensures that all scripts are run with consistent permisions. svn path=/branches/gnome-2-20/; revision=6786
-rw-r--r--ChangeLog6
-rw-r--r--daemon/slave.c21
2 files changed, 25 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 4da486ab..16b13c45 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-19 Brian Cameron <brian.cameron@sun.com>
+
+ * daemon/slave.c: Make sure that gid/egid are set to 0 when running
+ the Init, PostLogin, PreSession, and PostSession scripts. This
+ ensures that all scripts are run with consistent permisions.
+
2009-03-14 Brian Cameron <brian.cameron@sun.com>
* daemon/slave.c: Do not print NULL strings when calling
diff --git a/daemon/slave.c b/daemon/slave.c
index 48aa1829..b52774da 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -5816,6 +5816,8 @@ gdm_slave_exec_script (GdmDisplay *d,
gboolean pass_stdout)
{
pid_t pid;
+ gid_t save_gid;
+ gid_t save_egid;
char *script;
gchar **argv = NULL;
gint status;
@@ -5865,6 +5867,16 @@ gdm_slave_exec_script (GdmDisplay *d,
return EXIT_SUCCESS;
}
+ /*
+ * Make sure that gid/egid are set to 0 when running the scripts, so
+ * that the scripts are run with standard permisions. Reset gid/egid
+ * back to their original values after running the script.
+ */
+ save_egid = getegid ();
+ save_gid = getgid ();
+ setegid (0);
+ setgid (0);
+
create_temp_auth_file ();
gdm_debug ("Forking extra process: %s", script);
@@ -5959,15 +5971,20 @@ gdm_slave_exec_script (GdmDisplay *d,
gdm_slave_whack_temp_auth_file ();
g_free (script);
g_error (_("%s: Can't fork script process!"), "gdm_slave_exec_script");
+
+ setgid (save_gid);
+ setegid (save_egid);
+
return EXIT_SUCCESS;
default:
gdm_wait_for_extra (extra_process, &status);
-
gdm_slave_whack_temp_auth_file ();
-
g_free (script);
+ setgid (save_gid);
+ setegid (save_egid);
+
if (WIFEXITED (status))
return WEXITSTATUS (status);
else