diff options
author | Brian Cameron <brian.cameron@sun.com> | 2009-03-19 04:31:07 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2009-03-19 04:31:07 +0000 |
commit | d7e9495fd35ae421bfaa6de8dc70a3b21dabfdb8 (patch) | |
tree | dd44b49947c17d12da36b8917f181eaca72bf16e | |
parent | da242783e2e25c53e9c1d5ca7e8751ca59b79bdb (diff) | |
download | gdm-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-- | ChangeLog | 6 | ||||
-rw-r--r-- | daemon/slave.c | 21 |
2 files changed, 25 insertions, 2 deletions
@@ -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 |