From 87af9ba3674138b6650e837b40821b67da7f20b5 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Mon, 12 Mar 2012 19:40:11 +0100 Subject: [PATCH] Add spawn_with_uid() helper function Similar to spawn_with_login_uid() function. https://bugs.freedesktop.org/show_bug.cgi?id=47247 --- src/util.c | 24 +++++++++++++++++------- src/util.h | 4 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/util.c b/src/util.c index 66ddd98..95b0268 100644 --- a/src/util.c +++ b/src/util.c @@ -196,21 +196,18 @@ setup_loginuid (gpointer data) } gboolean -spawn_with_login_uid (GDBusMethodInvocation *context, - const gchar *argv[], - GError **error) +spawn_with_uid (const char *loginuid, + const gchar *argv[], + GError **error) { GError *local_error; - gchar loginuid[20]; gchar *std_err; gint status; - get_caller_loginuid (context, loginuid, 20); - local_error = NULL; std_err = NULL; - if (!g_spawn_sync (NULL, (gchar**)argv, NULL, 0, setup_loginuid, loginuid, NULL, &std_err, &status, &local_error)) { + if (!g_spawn_sync (NULL, (gchar**)argv, NULL, 0, loginuid ? setup_loginuid : NULL, (gpointer) loginuid, NULL, &std_err, &status, &local_error)) { g_propagate_error (error, local_error); g_free (std_err); return FALSE; @@ -229,6 +226,19 @@ spawn_with_login_uid (GDBusMethodInvocation *context, g_free (std_err); return TRUE; + +} + +gboolean +spawn_with_login_uid (GDBusMethodInvocation *context, + const gchar *argv[], + GError **error) +{ + gchar loginuid[20]; + + get_caller_loginuid (context, loginuid, 20); + + return spawn_with_uid ((const char *) loginuid, argv, error); } gint diff --git a/src/util.h b/src/util.h index 41ba545..bc643ed 100644 --- a/src/util.h +++ b/src/util.h @@ -36,6 +36,10 @@ gboolean spawn_with_login_uid (GDBusMethodInvocation *context, const gchar *argv[], GError **error); +gboolean spawn_with_uid (const gchar *user, + const gchar *argv[], + GError **error); + gint get_user_groups (const gchar *username, gid_t group, gid_t **groups); -- 1.7.7.6