summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2012-04-10 15:03:41 -0400
committerRay Strode <rstrode@redhat.com>2012-04-13 17:05:12 -0400
commit83d5c54600161bf5115234715d242f4538168f68 (patch)
tree0153b3ba96fe4b91c6eac1bb4c6b86254c9e8051
parenta2fc521c7f9c9192a255685921aff0ade691b4c6 (diff)
downloadgdm-83d5c54600161bf5115234715d242f4538168f68.tar.gz
session: add username arg to SetupForProgram
Previously, SetupForProgram was only used to start a greeter, which always runs as the gdm user. Now SetupForProgram is potentially used to start the initial setup assistant. This program can run as a different user. This commit adds a "username" arg to SetupForProgram that defaults to "gdm" for the greeter, and becomes "gdm-initial-setup" for the initial setup assistant.
-rw-r--r--daemon/gdm-session-direct.c6
-rw-r--r--daemon/gdm-session-worker.c4
-rw-r--r--daemon/gdm-session.c3
-rw-r--r--daemon/gdm-session.h2
-rw-r--r--daemon/gdm-welcome-session.c1
5 files changed, 13 insertions, 3 deletions
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index 9f750f25..c5be7991 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -1406,6 +1406,7 @@ do_introspect (DBusConnection *connection,
" </signal>\n"
" <signal name=\"SetupForProgram\">\n"
" <arg name=\"service_name\" type=\"s\"/>\n"
+ " <arg name=\"username\" type=\"s\"/>\n"
" <arg name=\"x11_display_name\" type=\"s\"/>\n"
" <arg name=\"display_device\" type=\"s\"/>\n"
" <arg name=\"display_seat\" type=\"s\"/>\n"
@@ -2108,6 +2109,7 @@ send_setup_for_user (GdmSessionDirect *session,
static void
send_setup_for_program (GdmSessionDirect *session,
const char *service_name,
+ const char *username,
const char *log_file)
{
DBusMessage *message;
@@ -2155,6 +2157,7 @@ send_setup_for_program (GdmSessionDirect *session,
dbus_message_iter_init_append (message, &iter);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
+ dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &username);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_seat_id);
@@ -2201,13 +2204,14 @@ gdm_session_direct_setup_for_user (GdmSession *session,
static void
gdm_session_direct_setup_for_program (GdmSession *session,
const char *service_name,
+ const char *username,
const char *log_file)
{
GdmSessionDirect *impl = GDM_SESSION_DIRECT (session);
g_return_if_fail (session != NULL);
- send_setup_for_program (impl, service_name, log_file);
+ send_setup_for_program (impl, service_name, username, log_file);
}
static void
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 57f10718..a314c92d 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -2643,6 +2643,7 @@ on_setup_for_program (GdmSessionWorker *worker,
{
DBusError error;
char *service;
+ char *username;
char *x11_display_name;
char *console;
char *seat_id;
@@ -2660,6 +2661,7 @@ on_setup_for_program (GdmSessionWorker *worker,
res = dbus_message_get_args (message,
&error,
DBUS_TYPE_STRING, &service,
+ DBUS_TYPE_STRING, &username,
DBUS_TYPE_STRING, &x11_display_name,
DBUS_TYPE_STRING, &console,
DBUS_TYPE_STRING, &seat_id,
@@ -2672,7 +2674,7 @@ on_setup_for_program (GdmSessionWorker *worker,
queue_state_change (worker);
worker->priv->service = g_strdup (service);
- worker->priv->username = g_strdup (GDM_USERNAME);
+ worker->priv->username = g_strdup (username);
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_device = g_strdup (console);
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 5ba9fd1a..8f085752 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -128,11 +128,12 @@ gdm_session_setup_for_user (GdmSession *session,
void
gdm_session_setup_for_program (GdmSession *session,
const char *service_name,
+ const char *username,
const char *log_file)
{
g_return_if_fail (GDM_IS_SESSION (session));
- GDM_SESSION_GET_IFACE (session)->setup_for_program (session, service_name, log_file);
+ GDM_SESSION_GET_IFACE (session)->setup_for_program (session, service_name, username, log_file);
}
void
diff --git a/daemon/gdm-session.h b/daemon/gdm-session.h
index 17accb28..5716f89e 100644
--- a/daemon/gdm-session.h
+++ b/daemon/gdm-session.h
@@ -58,6 +58,7 @@ struct _GdmSessionIface
const char *username);
void (* setup_for_program) (GdmSession *session,
const char *service_name,
+ const char *username,
const char *log_file);
void (* set_environment_variable) (GdmSession *session,
const char *key,
@@ -169,6 +170,7 @@ void gdm_session_setup_for_user (GdmSession *session,
const char *username);
void gdm_session_setup_for_program (GdmSession *session,
const char *service_name,
+ const char *username,
const char *log_file);
void gdm_session_set_environment_variable (GdmSession *session,
const char *key,
diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
index 778d5dce..e355f425 100644
--- a/daemon/gdm-welcome-session.c
+++ b/daemon/gdm-welcome-session.c
@@ -777,6 +777,7 @@ on_conversation_started (GdmSession *session,
gdm_session_setup_for_program (GDM_SESSION (welcome_session->priv->session),
"gdm-welcome",
+ welcome_session->priv->user_name,
log_path);
g_free (log_path);
}