Blame SOURCES/0005-launch-environment-implement-hostname-selected-signa.patch

75a7a3
From 239bc98692187ca42dca7cf1a19800415afcf6cf Mon Sep 17 00:00:00 2001
75a7a3
From: Ray Strode <rstrode@redhat.com>
75a7a3
Date: Fri, 31 Mar 2017 15:01:06 -0400
75a7a3
Subject: [PATCH 05/13] launch-environment: implement hostname-selected signal
75a7a3
75a7a3
We're connecting to a signal that isn't implemented.  This
75a7a3
commit adds the implementation.
75a7a3
75a7a3
A slightly better fix might be to cut out some of the layers,
75a7a3
of middle men passing around hostname-selected, but for now this
75a7a3
is fine.
75a7a3
---
75a7a3
 daemon/gdm-launch-environment.c | 27 +++++++++++++++++++++++++++
75a7a3
 daemon/gdm-launch-environment.h |  2 ++
75a7a3
 2 files changed, 29 insertions(+)
75a7a3
75a7a3
diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
75a7a3
index 4372ac29..a7ae6728 100644
75a7a3
--- a/daemon/gdm-launch-environment.c
75a7a3
+++ b/daemon/gdm-launch-environment.c
75a7a3
@@ -76,60 +76,61 @@ struct GdmLaunchEnvironmentPrivate
75a7a3
         char           *x11_display_name;
75a7a3
         char           *x11_display_seat_id;
75a7a3
         char           *x11_display_device;
75a7a3
         char           *x11_display_hostname;
75a7a3
         char           *x11_authority_file;
75a7a3
         gboolean        x11_display_is_local;
75a7a3
 };
75a7a3
 
75a7a3
 enum {
75a7a3
         PROP_0,
75a7a3
         PROP_VERIFICATION_MODE,
75a7a3
         PROP_SESSION_TYPE,
75a7a3
         PROP_SESSION_MODE,
75a7a3
         PROP_X11_DISPLAY_NAME,
75a7a3
         PROP_X11_DISPLAY_SEAT_ID,
75a7a3
         PROP_X11_DISPLAY_DEVICE,
75a7a3
         PROP_X11_DISPLAY_HOSTNAME,
75a7a3
         PROP_X11_AUTHORITY_FILE,
75a7a3
         PROP_X11_DISPLAY_IS_LOCAL,
75a7a3
         PROP_USER_NAME,
75a7a3
         PROP_RUNTIME_DIR,
75a7a3
         PROP_COMMAND,
75a7a3
 };
75a7a3
 
75a7a3
 enum {
75a7a3
         OPENED,
75a7a3
         STARTED,
75a7a3
         STOPPED,
75a7a3
         EXITED,
75a7a3
         DIED,
75a7a3
+        HOSTNAME_SELECTED,
75a7a3
         LAST_SIGNAL
75a7a3
 };
75a7a3
 
75a7a3
 static guint signals [LAST_SIGNAL] = { 0, };
75a7a3
 
75a7a3
 static void     gdm_launch_environment_class_init    (GdmLaunchEnvironmentClass *klass);
75a7a3
 static void     gdm_launch_environment_init          (GdmLaunchEnvironment      *launch_environment);
75a7a3
 static void     gdm_launch_environment_finalize      (GObject                   *object);
75a7a3
 
75a7a3
 G_DEFINE_TYPE (GdmLaunchEnvironment, gdm_launch_environment, G_TYPE_OBJECT)
75a7a3
 
75a7a3
 static GHashTable *
75a7a3
 build_launch_environment (GdmLaunchEnvironment *launch_environment,
75a7a3
                           gboolean              start_session)
75a7a3
 {
75a7a3
         GHashTable    *hash;
75a7a3
         struct passwd *pwent;
75a7a3
         static const char * const optional_environment[] = {
75a7a3
                 "LANG", "LANGUAGE", "LC_CTYPE", "LC_NUMERIC", "LC_TIME",
75a7a3
                 "LC_COLLATE", "LC_MONETARY", "LC_MESSAGES", "LC_PAPER",
75a7a3
                 "LC_NAME", "LC_ADDRESS", "LC_TELEPHONE", "LC_MEASUREMENT",
75a7a3
                 "LC_IDENTIFICATION", "LC_ALL", "WINDOWPATH", "XCURSOR_PATH",
75a7a3
                 "XDG_CONFIG_DIRS", NULL
75a7a3
         };
75a7a3
         char *system_data_dirs;
75a7a3
         int i;
75a7a3
 
75a7a3
         /* create a hash table of current environment, then update keys has necessary */
75a7a3
         hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
75a7a3
 
75a7a3
@@ -237,60 +238,69 @@ static void
75a7a3
 on_session_started (GdmSession           *session,
75a7a3
                     const char           *service_name,
75a7a3
                     int                   pid,
75a7a3
                     GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         launch_environment->priv->pid = pid;
75a7a3
         g_signal_emit (G_OBJECT (launch_environment), signals [STARTED], 0);
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
 on_session_exited (GdmSession           *session,
75a7a3
                    int                   exit_code,
75a7a3
                    GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         gdm_session_stop_conversation (launch_environment->priv->session, "gdm-launch-environment");
75a7a3
 
75a7a3
         g_signal_emit (G_OBJECT (launch_environment), signals [EXITED], 0, exit_code);
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
 on_session_died (GdmSession           *session,
75a7a3
                  int                   signal_number,
75a7a3
                  GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         gdm_session_stop_conversation (launch_environment->priv->session, "gdm-launch-environment");
75a7a3
 
75a7a3
         g_signal_emit (G_OBJECT (launch_environment), signals [DIED], 0, signal_number);
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
+on_hostname_selected (GdmSession               *session,
75a7a3
+                      const char               *hostname,
75a7a3
+		      GdmLaunchEnvironment     *launch_environment)
75a7a3
+{
75a7a3
+        g_debug ("GdmSession: hostname selected: %s", hostname);
75a7a3
+        g_signal_emit (launch_environment, signals [HOSTNAME_SELECTED], 0, hostname);
75a7a3
+}
75a7a3
+
75a7a3
+static void
75a7a3
 on_conversation_started (GdmSession           *session,
75a7a3
                          const char           *service_name,
75a7a3
                          GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         char             *log_path;
75a7a3
         char             *log_file;
75a7a3
 
75a7a3
         log_file = g_strdup_printf ("%s-greeter.log", launch_environment->priv->x11_display_name);
75a7a3
         log_path = g_build_filename (LOGDIR, log_file, NULL);
75a7a3
         g_free (log_file);
75a7a3
 
75a7a3
         gdm_session_setup_for_program (launch_environment->priv->session,
75a7a3
                                        "gdm-launch-environment",
75a7a3
                                        launch_environment->priv->user_name,
75a7a3
                                        log_path);
75a7a3
         g_free (log_path);
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
 on_conversation_stopped (GdmSession           *session,
75a7a3
                          const char           *service_name,
75a7a3
                          GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         GdmSession *conversation_session;
75a7a3
 
75a7a3
         conversation_session = launch_environment->priv->session;
75a7a3
         launch_environment->priv->session = NULL;
75a7a3
 
75a7a3
         g_debug ("GdmLaunchEnvironment: conversation stopped");
75a7a3
 
75a7a3
@@ -382,60 +392,65 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment)
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "conversation-stopped",
75a7a3
                                  G_CALLBACK (on_conversation_stopped),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "setup-complete",
75a7a3
                                  G_CALLBACK (on_session_setup_complete),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "session-opened",
75a7a3
                                  G_CALLBACK (on_session_opened),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "session-started",
75a7a3
                                  G_CALLBACK (on_session_started),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "session-exited",
75a7a3
                                  G_CALLBACK (on_session_exited),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
         g_signal_connect_object (launch_environment->priv->session,
75a7a3
                                  "session-died",
75a7a3
                                  G_CALLBACK (on_session_died),
75a7a3
                                  launch_environment,
75a7a3
                                  0);
75a7a3
+        g_signal_connect_object (launch_environment->priv->session,
75a7a3
+                                 "hostname-selected",
75a7a3
+                                 G_CALLBACK (on_hostname_selected),
75a7a3
+                                 launch_environment,
75a7a3
+                                 0);
75a7a3
 
75a7a3
         gdm_session_start_conversation (launch_environment->priv->session, "gdm-launch-environment");
75a7a3
         gdm_session_select_program (launch_environment->priv->session, launch_environment->priv->command);
75a7a3
 
75a7a3
         if (launch_environment->priv->session_type != NULL) {
75a7a3
                 g_object_set (G_OBJECT (launch_environment->priv->session),
75a7a3
                               "session-type",
75a7a3
                               launch_environment->priv->session_type,
75a7a3
                               NULL);
75a7a3
         }
75a7a3
 
75a7a3
         res = TRUE;
75a7a3
  out:
75a7a3
         if (local_error) {
75a7a3
                 g_critical ("GdmLaunchEnvironment: %s", local_error->message);
75a7a3
                 g_clear_error (&local_error);
75a7a3
         }
75a7a3
         return res;
75a7a3
 }
75a7a3
 
75a7a3
 gboolean
75a7a3
 gdm_launch_environment_stop (GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
         if (launch_environment->priv->pid > 1) {
75a7a3
                 gdm_signal_pid (-launch_environment->priv->pid, SIGTERM);
75a7a3
         }
75a7a3
 
75a7a3
         if (launch_environment->priv->session != NULL) {
75a7a3
                 gdm_session_close (launch_environment->priv->session);
75a7a3
 
75a7a3
@@ -780,60 +795,72 @@ gdm_launch_environment_class_init (GdmLaunchEnvironmentClass *klass)
75a7a3
                               G_OBJECT_CLASS_TYPE (object_class),
75a7a3
                               G_SIGNAL_RUN_FIRST,
75a7a3
                               G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, stopped),
75a7a3
                               NULL,
75a7a3
                               NULL,
75a7a3
                               g_cclosure_marshal_VOID__VOID,
75a7a3
                               G_TYPE_NONE,
75a7a3
                               0);
75a7a3
         signals [EXITED] =
75a7a3
                 g_signal_new ("exited",
75a7a3
                               G_OBJECT_CLASS_TYPE (object_class),
75a7a3
                               G_SIGNAL_RUN_FIRST,
75a7a3
                               G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, exited),
75a7a3
                               NULL,
75a7a3
                               NULL,
75a7a3
                               g_cclosure_marshal_VOID__INT,
75a7a3
                               G_TYPE_NONE,
75a7a3
                               1,
75a7a3
                               G_TYPE_INT);
75a7a3
         signals [DIED] =
75a7a3
                 g_signal_new ("died",
75a7a3
                               G_OBJECT_CLASS_TYPE (object_class),
75a7a3
                               G_SIGNAL_RUN_FIRST,
75a7a3
                               G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, died),
75a7a3
                               NULL,
75a7a3
                               NULL,
75a7a3
                               g_cclosure_marshal_VOID__INT,
75a7a3
                               G_TYPE_NONE,
75a7a3
                               1,
75a7a3
                               G_TYPE_INT);
75a7a3
+
75a7a3
+        signals [HOSTNAME_SELECTED] =
75a7a3
+                g_signal_new ("hostname-selected",
75a7a3
+                              G_OBJECT_CLASS_TYPE (object_class),
75a7a3
+                              G_SIGNAL_RUN_FIRST,
75a7a3
+                              G_STRUCT_OFFSET (GdmLaunchEnvironmentClass, hostname_selected),
75a7a3
+                              NULL,
75a7a3
+                              NULL,
75a7a3
+                              g_cclosure_marshal_VOID__STRING,
75a7a3
+                              G_TYPE_NONE,
75a7a3
+                              1,
75a7a3
+                              G_TYPE_STRING);
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
 gdm_launch_environment_init (GdmLaunchEnvironment *launch_environment)
75a7a3
 {
75a7a3
 
75a7a3
         launch_environment->priv = GDM_LAUNCH_ENVIRONMENT_GET_PRIVATE (launch_environment);
75a7a3
 
75a7a3
         launch_environment->priv->command = NULL;
75a7a3
         launch_environment->priv->session = NULL;
75a7a3
 }
75a7a3
 
75a7a3
 static void
75a7a3
 gdm_launch_environment_finalize (GObject *object)
75a7a3
 {
75a7a3
         GdmLaunchEnvironment *launch_environment;
75a7a3
 
75a7a3
         g_return_if_fail (object != NULL);
75a7a3
         g_return_if_fail (GDM_IS_LAUNCH_ENVIRONMENT (object));
75a7a3
 
75a7a3
         launch_environment = GDM_LAUNCH_ENVIRONMENT (object);
75a7a3
 
75a7a3
         g_return_if_fail (launch_environment->priv != NULL);
75a7a3
 
75a7a3
         gdm_launch_environment_stop (launch_environment);
75a7a3
 
75a7a3
         if (launch_environment->priv->session) {
75a7a3
                 g_object_unref (launch_environment->priv->session);
75a7a3
         }
75a7a3
 
75a7a3
diff --git a/daemon/gdm-launch-environment.h b/daemon/gdm-launch-environment.h
75a7a3
index 3fd875c2..c2a09d1c 100644
75a7a3
--- a/daemon/gdm-launch-environment.h
75a7a3
+++ b/daemon/gdm-launch-environment.h
75a7a3
@@ -32,55 +32,57 @@ G_BEGIN_DECLS
75a7a3
 #define GDM_LAUNCH_ENVIRONMENT_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_LAUNCH_ENVIRONMENT, GdmLaunchEnvironmentClass))
75a7a3
 #define GDM_IS_LAUNCH_ENVIRONMENT(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_LAUNCH_ENVIRONMENT))
75a7a3
 #define GDM_IS_LAUNCH_ENVIRONMENT_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_LAUNCH_ENVIRONMENT))
75a7a3
 #define GDM_LAUNCH_ENVIRONMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_LAUNCH_ENVIRONMENT, GdmLaunchEnvironmentClass))
75a7a3
 
75a7a3
 typedef struct GdmLaunchEnvironmentPrivate GdmLaunchEnvironmentPrivate;
75a7a3
 
75a7a3
 typedef struct
75a7a3
 {
75a7a3
         GObject                   parent;
75a7a3
         GdmLaunchEnvironmentPrivate *priv;
75a7a3
 } GdmLaunchEnvironment;
75a7a3
 
75a7a3
 typedef struct
75a7a3
 {
75a7a3
         GObjectClass   parent_class;
75a7a3
 
75a7a3
         /* methods */
75a7a3
         gboolean (*start)          (GdmLaunchEnvironment  *launch_environment);
75a7a3
         gboolean (*stop)           (GdmLaunchEnvironment  *launch_environment);
75a7a3
 
75a7a3
 
75a7a3
         /* signals */
75a7a3
         void (* opened)            (GdmLaunchEnvironment  *launch_environment);
75a7a3
         void (* started)           (GdmLaunchEnvironment  *launch_environment);
75a7a3
         void (* stopped)           (GdmLaunchEnvironment  *launch_environment);
75a7a3
         void (* exited)            (GdmLaunchEnvironment  *launch_environment,
75a7a3
                                     int                    exit_code);
75a7a3
         void (* died)              (GdmLaunchEnvironment  *launch_environment,
75a7a3
                                     int                    signal_number);
75a7a3
+        void (* hostname_selected) (GdmLaunchEnvironment  *launch_environment,
75a7a3
+                                    const char            *hostname);
75a7a3
 } GdmLaunchEnvironmentClass;
75a7a3
 
75a7a3
 GType                 gdm_launch_environment_get_type           (void);
75a7a3
 
75a7a3
 gboolean              gdm_launch_environment_start              (GdmLaunchEnvironment *launch_environment);
75a7a3
 gboolean              gdm_launch_environment_stop               (GdmLaunchEnvironment *launch_environment);
75a7a3
 GdmSession *          gdm_launch_environment_get_session        (GdmLaunchEnvironment *launch_environment);
75a7a3
 char *                gdm_launch_environment_get_session_id     (GdmLaunchEnvironment *launch_environment);
75a7a3
 
75a7a3
 GdmLaunchEnvironment *gdm_create_greeter_launch_environment (const char *display_name,
75a7a3
                                                              const char *seat_id,
75a7a3
                                                              const char *session_type,
75a7a3
                                                              const char *display_hostname,
75a7a3
                                                              gboolean    display_is_local);
75a7a3
 GdmLaunchEnvironment *gdm_create_initial_setup_launch_environment (const char *display_name,
75a7a3
                                                                    const char *seat_id,
75a7a3
                                                                    const char *display_hostname,
75a7a3
                                                                    gboolean    display_is_local);
75a7a3
 GdmLaunchEnvironment *gdm_create_chooser_launch_environment (const char *display_name,
75a7a3
                                                              const char *seat_id,
75a7a3
                                                              const char *display_hostname);
75a7a3
 
75a7a3
 G_END_DECLS
75a7a3
 
75a7a3
 #endif /* __GDM_LAUNCH_ENVIRONMENT_H */
75a7a3
-- 
75a7a3
2.12.0
75a7a3