diff options
author | Sam Spilsbury <sam@endlessm.com> | 2017-09-27 20:51:47 +0800 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2017-10-03 16:16:00 -0400 |
commit | 6594b1f262ffaa3d120c0b23f92bad2802f17e4a (patch) | |
tree | aefc8a5451186136ccd6553365e9c4a6faf4ba0a /common/gdm-common.c | |
parent | 1abdb478ee4044603b7f48bd874bade0630a3061 (diff) | |
download | gdm-6594b1f262ffaa3d120c0b23f92bad2802f17e4a.tar.gz |
common: Also set GROUP in scripts
https://bugzilla.gnome.org/show_bug.cgi?id=787287
Diffstat (limited to 'common/gdm-common.c')
-rw-r--r-- | common/gdm-common.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/common/gdm-common.c b/common/gdm-common.c index 31fc810a..0bc2b417 100644 --- a/common/gdm-common.c +++ b/common/gdm-common.c @@ -26,6 +26,7 @@ #include <locale.h> #include <fcntl.h> #include <sys/wait.h> +#include <grp.h> #include <pwd.h> #include <glib.h> @@ -97,6 +98,24 @@ gdm_get_pwent_for_name (const char *name, return (pwent != NULL); } +gboolean +gdm_get_grent_for_gid (gint gid, + struct grent **grentp) +{ + struct group *grent; + + do { + errno = 0; + grent = getgrgid (gid); + } while (grent == NULL && errno == EINTR); + + if (pwentp != NULL) { + *grentp = grent; + } + + return (grent != NULL); +} + int gdm_wait_on_and_disown_pid (int pid, int timeout) @@ -586,6 +605,13 @@ gdm_get_script_environment (const char *username, g_hash_table_insert (hash, g_strdup ("SHELL"), g_strdup (pwent->pw_shell)); + + /* Also get group name and propagate down */ + struct group *grent; + + if (gdm_get_grent_for_gid (pwent->pw_gid, &grent)) { + g_hash_table_insert (hash, g_strdup ("GROUP"), g_strdup (grent->gr_name)); + } } } |