Blob Blame History Raw
From 82f67be72a5c3ef0f2674e6f87a9ced866ebc82a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 24 Jun 2019 14:48:23 -0400
Subject: [PATCH 1/7] session-worker: expose worker state enum to type system

We're going to need to access the worker state as a property on
the worker object.

This commit hooks it up to glib-mkenums so the requisite goo can
get generated
---
 daemon/Makefile.am                        | 14 ++++++++
 daemon/gdm-session-worker-enum-types.c.in | 42 +++++++++++++++++++++++
 daemon/gdm-session-worker-enum-types.h.in | 24 +++++++++++++
 daemon/gdm-session-worker.c               | 16 +++------
 daemon/gdm-session-worker.h               | 12 +++++++
 5 files changed, 96 insertions(+), 12 deletions(-)
 create mode 100644 daemon/gdm-session-worker-enum-types.c.in
 create mode 100644 daemon/gdm-session-worker-enum-types.h.in

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 3b1b15122..7498115cd 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -14,68 +14,75 @@ AM_CPPFLAGS = \
 	-DLIBEXECDIR=\"$(libexecdir)\"			\
 	-DLOCALSTATEDIR=\"$(localstatedir)\"		\
 	-DLOGDIR=\"$(logdir)\"				\
 	-DSBINDIR=\"$(sbindir)\"			\
 	-DSYSCONFDIR=\"$(sysconfdir)\"			\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
 	-DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\"		\
 	-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\"		\
 	-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\"		\
 	-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\"	\
 	-DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
 	$(DISABLE_DEPRECATED_CFLAGS)			\
 	$(DAEMON_CFLAGS)				\
 	$(XLIB_CFLAGS)					\
 	$(WARN_CFLAGS)					\
 	$(DEBUG_CFLAGS)					\
 	$(SYSTEMD_CFLAGS)				\
 	$(JOURNALD_CFLAGS)				\
 	$(LIBSELINUX_CFLAGS)	 			\
 	-DLANG_CONFIG_FILE=\"$(LANG_CONFIG_FILE)\"	\
 	$(NULL)
 
 BUILT_SOURCES =					\
 	gdm-display-glue.h			\
 	gdm-manager-glue.h			\
 	gdm-local-display-glue.h		\
 	gdm-local-display-factory-glue.h	\
 	gdm-session-glue.h			\
 	gdm-session-worker-glue.h		\
 	gdm-session-enum-types.h		\
+	gdm-session-worker-enum-types.h         \
 	$(NULL)
 
 gdm-session-enum-types.h: gdm-session-enum-types.h.in gdm-session.h
 	$(AM_V_GEN) glib-mkenums --template $^ > $@
 
 gdm-session-enum-types.c: gdm-session-enum-types.c.in gdm-session.h
 	$(AM_V_GEN) glib-mkenums --template $^ > $@
 
+gdm-session-worker-enum-types.h: gdm-session-worker-enum-types.h.in gdm-session-worker.h
+	$(AM_V_GEN) glib-mkenums --template $^ > $@
+
+gdm-session-worker-enum-types.c: gdm-session-worker-enum-types.c.in gdm-session-worker.h
+	$(AM_V_GEN) glib-mkenums --template $^ > $@
+
 gdm-display-glue.c gdm-display-glue.h: gdm-display.xml Makefile.am
 	$(AM_V_GEN)gdbus-codegen 					\
 		--c-namespace=GdmDBus					\
 		--interface-prefix=org.gnome.DisplayManager		\
 		--generate-c-code=gdm-display-glue			\
 		$(srcdir)/gdm-display.xml
 
 gdm-local-display-glue.c gdm-local-display-glue.h: gdm-local-display.xml Makefile.am
 	$(AM_V_GEN)gdbus-codegen 					\
 		--c-namespace=GdmDBus					\
 		--interface-prefix=org.gnome.DisplayManager		\
 		--generate-c-code=gdm-local-display-glue		\
 		$(srcdir)/gdm-local-display.xml
 
 gdm-local-display-factory-glue.c gdm-local-display-factory-glue.h : gdm-local-display-factory.xml Makefile.am
 	$(AM_V_GEN)gdbus-codegen 					\
 		--c-namespace=GdmDBus					\
 		--interface-prefix=org.gnome.DisplayManager		\
 		--generate-c-code=gdm-local-display-factory-glue	\
 		$(srcdir)/gdm-local-display-factory.xml
 
 gdm-manager-glue.c gdm-manager-glue.h : gdm-manager.xml Makefile.am
 	$(AM_V_GEN)gdbus-codegen 					\
 		--c-namespace=GdmDBus					\
 		--interface-prefix=org.gnome.DisplayManager		\
 		--generate-c-code=gdm-manager-glue			\
 		$(srcdir)/gdm-manager.xml
 
 gdm-session-glue.c gdm-session-glue.h : gdm-session.xml Makefile.am
 	$(AM_V_GEN)gdbus-codegen 					\
@@ -119,60 +126,62 @@ libexec_PROGRAMS = 			\
 gdm_session_worker_SOURCES = 			\
 	session-worker-main.c 			\
 	gdm-session.c				\
 	gdm-session.h				\
 	gdm-session-settings.h			\
 	gdm-session-settings.c			\
 	gdm-session-auditor.h			\
 	gdm-session-auditor.c			\
 	gdm-session-record.c			\
 	gdm-session-record.h			\
 	gdm-session-worker.h			\
 	gdm-session-worker.c			\
 	gdm-session-worker-job.c		\
 	gdm-session-worker-common.c		\
 	gdm-session-worker-common.h		\
 	gdm-dbus-util.c				\
 	gdm-dbus-util.h				\
 	$(NULL)
 
 if SUPPORTS_PAM_EXTENSIONS
 gdm_session_worker_SOURCES += $(top_srcdir)/pam-extensions/gdm-pam-extensions.h
 endif
 
 nodist_gdm_session_worker_SOURCES =		\
 	gdm-session-glue.h			\
 	gdm-session-glue.c			\
 	gdm-session-worker-glue.c		\
 	gdm-session-worker-glue.h		\
 	gdm-session-enum-types.c		\
 	gdm-session-enum-types.h		\
+	gdm-session-worker-enum-types.h		\
+	gdm-session-worker-enum-types.c		\
 	$(NULL)
 
 gdm_wayland_session_LDADD =		\
 	$(top_builddir)/common/libgdmcommon.la	\
 	$(GTK_LIBS)		\
 	$(COMMON_LIBS)		\
 	$(SYSTEMD_LIBS)         \
 	$(NULL)
 
 gdm_wayland_session_SOURCES =	\
 	gdm-manager-glue.h	\
 	gdm-manager-glue.c	\
 	gdm-wayland-session.c	\
 	$(NULL)
 
 gdm_x_session_LDADD =		\
 	$(top_builddir)/common/libgdmcommon.la	\
 	$(GTK_LIBS)		\
 	$(COMMON_LIBS)		\
 	$(SYSTEMD_LIBS)         \
 	$(XLIB_LIBS)		\
 	$(NULL)
 
 gdm_x_session_SOURCES =	\
 	gdm-manager-glue.h	\
 	gdm-manager-glue.c	\
 	gdm-x-session.c	\
 	$(NULL)
 
 if HAVE_LIBAUDIT
@@ -222,81 +231,86 @@ gdm_SOURCES = 			\
 	gdm-manager.h			\
 	gdm-server.c			\
 	gdm-server.h			\
 	gdm-session.c			\
 	gdm-session.h			\
 	gdm-session-record.c		\
 	gdm-session-record.h		\
 	gdm-session-worker-common.c	\
 	gdm-session-worker-common.h	\
 	gdm-session-worker-job.c	\
 	gdm-session-worker-job.h	\
 	gdm-dbus-util.c			\
 	gdm-dbus-util.h			\
 	$(NULL)
 
 nodist_gdm_SOURCES = 			\
 	gdm-display-glue.h			\
 	gdm-display-glue.c			\
 	gdm-local-display-factory-glue.h	\
 	gdm-local-display-factory-glue.c	\
 	gdm-manager-glue.h			\
 	gdm-manager-glue.c			\
 	gdm-local-display-glue.h		\
 	gdm-local-display-glue.c		\
 	gdm-session-glue.h			\
 	gdm-session-glue.c			\
 	gdm-session-worker-glue.c		\
 	gdm-session-worker-glue.h		\
 	gdm-session-enum-types.c		\
 	gdm-session-enum-types.h		\
+	gdm-session-worker-enum-types.h		\
+	gdm-session-worker-enum-types.c		\
 	$(NULL)
 
 XDMCP_SOURCES =				\
 	gdm-xdmcp-display-factory.c	\
 	gdm-xdmcp-display-factory.h	\
 	gdm-xdmcp-display.c		\
 	gdm-xdmcp-display.h		\
 	gdm-xdmcp-chooser-display.c	\
 	gdm-xdmcp-chooser-display.h	\
 	$(NULL)
 
 if XDMCP_SUPPORT
 gdm_SOURCES += $(XDMCP_SOURCES)
 endif
 
 EXTRA_gdm_SOURCES = 	\
 	$(XDMCP_SOURCES)	\
 	$(NULL)
 
 gdm_LDADD = \
 	$(top_builddir)/common/libgdmcommon.la	\
 	$(XLIB_LIBS)				\
 	$(DAEMON_LIBS)				\
 	$(XDMCP_LIBS)                           \
 	$(LIBWRAP_LIBS)                         \
 	$(SYSTEMD_LIBS)				\
 	$(JOURNALD_LIBS)				\
 	$(EXTRA_DAEMON_LIBS)			\
 	$(NULL)
 
 CLEANFILES =					\
 	gdm-display-glue.c			\
 	gdm-local-display-factory-glue.c	\
 	gdm-manager-glue.c			\
 	gdm-session-glue.c			\
 	gdm-session-worker-glue.c		\
 	gdm-session-enum-types.c		\
+	gdm-session-worker-enum-types.c		\
 	gdm-local-display-glue.c		\
 	$(BUILT_SOURCES)			\
 	$(NULL)
 
 EXTRA_DIST = 				\
 	gdm-manager.xml			\
 	gdm-session-worker.xml		\
 	gdm-session.xml			\
 	gdm-display.xml			\
 	gdm-local-display.xml		\
 	gdm-local-display-factory.xml	\
 	gdm-session-enum-types.c.in	\
 	gdm-session-enum-types.h.in	\
+	gdm-session-worker-enum-types.c.in	\
+	gdm-session-worker-enum-types.h.in	\
 	$(NULL)
diff --git a/daemon/gdm-session-worker-enum-types.c.in b/daemon/gdm-session-worker-enum-types.c.in
new file mode 100644
index 000000000..c02869076
--- /dev/null
+++ b/daemon/gdm-session-worker-enum-types.c.in
@@ -0,0 +1,42 @@
+/*** BEGIN file-header ***/
+
+#include <glib-object.h>
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+#include "@filename@"
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+
+GType
+@enum_name@_get_type (void)
+{
+        static GType etype = 0;
+
+        if (G_UNLIKELY(etype == 0)) {
+                static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+                { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+                { 0, NULL, NULL }
+        };
+
+        etype = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+    }
+
+    return etype;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+ /**/
+/*** END file-tail ***/
diff --git a/daemon/gdm-session-worker-enum-types.h.in b/daemon/gdm-session-worker-enum-types.h.in
new file mode 100644
index 000000000..64f4b4bb6
--- /dev/null
+++ b/daemon/gdm-session-worker-enum-types.h.in
@@ -0,0 +1,24 @@
+/*** BEGIN file-header ***/
+#ifndef GDM_SESSION_WORKER_ENUM_TYPES_H
+#define GDM_SESSION_WORKER_ENUM_TYPES_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* GDM_SESSION_WORKER_ENUM_TYPES_H */
+/*** END file-tail ***/
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index f71594c22..d897779f3 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -83,83 +83,72 @@
 #define GDM_SESSION_WORKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SESSION_WORKER, GdmSessionWorkerPrivate))
 
 #define GDM_SESSION_DBUS_PATH         "/org/gnome/DisplayManager/Session"
 #define GDM_SESSION_DBUS_NAME         "org.gnome.DisplayManager.Session"
 #define GDM_SESSION_DBUS_ERROR_CANCEL "org.gnome.DisplayManager.Session.Error.Cancel"
 
 #define GDM_WORKER_DBUS_PATH "/org/gnome/DisplayManager/Worker"
 
 #ifndef GDM_PASSWD_AUXILLARY_BUFFER_SIZE
 #define GDM_PASSWD_AUXILLARY_BUFFER_SIZE 1024
 #endif
 
 #ifndef GDM_SESSION_DEFAULT_PATH
 #define GDM_SESSION_DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin"
 #endif
 
 #ifndef GDM_SESSION_ROOT_UID
 #define GDM_SESSION_ROOT_UID 0
 #endif
 
 #ifndef GDM_SESSION_LOG_FILENAME
 #define GDM_SESSION_LOG_FILENAME "session.log"
 #endif
 
 #define MAX_FILE_SIZE     65536
 #define MAX_LOGS          5
 
 #define RELEASE_DISPLAY_SIGNAL (SIGRTMAX)
 #define ACQUIRE_DISPLAY_SIGNAL (SIGRTMAX - 1)
 
-enum {
-        GDM_SESSION_WORKER_STATE_NONE = 0,
-        GDM_SESSION_WORKER_STATE_SETUP_COMPLETE,
-        GDM_SESSION_WORKER_STATE_AUTHENTICATED,
-        GDM_SESSION_WORKER_STATE_AUTHORIZED,
-        GDM_SESSION_WORKER_STATE_ACCREDITED,
-        GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED,
-        GDM_SESSION_WORKER_STATE_SESSION_OPENED,
-        GDM_SESSION_WORKER_STATE_SESSION_STARTED
-};
-
 typedef struct
 {
         GdmSessionWorker *worker;
         GdmSession       *session;
         GPid              pid_of_caller;
         uid_t             uid_of_caller;
 
 } ReauthenticationRequest;
 
 struct GdmSessionWorkerPrivate
 {
-        int               state;
+        GdmSessionWorkerState state;
 
         int               exit_code;
 
         pam_handle_t     *pam_handle;
 
         GPid              child_pid;
         guint             child_watch_id;
 
         /* from Setup */
         char             *service;
         char             *x11_display_name;
         char             *x11_authority_file;
         char             *display_device;
         char             *display_seat_id;
         char             *hostname;
         char             *username;
         char             *log_file;
         char             *session_id;
         uid_t             uid;
         gid_t             gid;
         gboolean          password_is_required;
         char            **extensions;
 
         int               cred_flags;
         int               login_vt;
         int               session_vt;
         int               session_tty_fd;
 
         char            **arguments;
         guint32           cancelled : 1;
@@ -2464,60 +2453,63 @@ gdm_session_worker_set_property (GObject      *object,
         switch (prop_id) {
         case PROP_SERVER_ADDRESS:
                 gdm_session_worker_set_server_address (self, g_value_get_string (value));
                 break;
         case PROP_IS_REAUTH_SESSION:
                 gdm_session_worker_set_is_reauth_session (self, g_value_get_boolean (value));
                 break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                 break;
         }
 }
 
 static void
 gdm_session_worker_get_property (GObject    *object,
                                 guint       prop_id,
                                 GValue     *value,
                                 GParamSpec *pspec)
 {
         GdmSessionWorker *self;
 
         self = GDM_SESSION_WORKER (object);
 
         switch (prop_id) {
         case PROP_SERVER_ADDRESS:
                 g_value_set_string (value, self->priv->server_address);
                 break;
         case PROP_IS_REAUTH_SESSION:
                 g_value_set_boolean (value, self->priv->is_reauth_session);
                 break;
+        case PROP_STATE:
+                g_value_set_int (value, self->priv->state);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                 break;
         }
 }
 
 static gboolean
 gdm_session_worker_handle_set_environment_variable (GdmDBusWorker         *object,
                                                     GDBusMethodInvocation *invocation,
                                                     const char            *key,
                                                     const char            *value)
 {
         GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
         gdm_session_worker_set_environment_variable (worker, key, value);
         gdm_dbus_worker_complete_set_environment_variable (object, invocation);
         return TRUE;
 }
 
 static gboolean
 gdm_session_worker_handle_set_session_name (GdmDBusWorker         *object,
                                             GDBusMethodInvocation *invocation,
                                             const char            *session_name)
 {
         GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
         g_debug ("GdmSessionWorker: session name set to %s", session_name);
         gdm_session_settings_set_session_name (worker->priv->user_settings,
                                                session_name);
         gdm_dbus_worker_complete_set_session_name (object, invocation);
         return TRUE;
 }
diff --git a/daemon/gdm-session-worker.h b/daemon/gdm-session-worker.h
index 5603e80e0..2814eab4d 100644
--- a/daemon/gdm-session-worker.h
+++ b/daemon/gdm-session-worker.h
@@ -1,56 +1,68 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
  *
  * Copyright (C) 2006 Ray Strode <rstrode@redhat.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
  * any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 02110-1301, USA.
  */
 
 #ifndef __GDM_SESSION_WORKER_H
 #define __GDM_SESSION_WORKER_H
 
 #include <glib-object.h>
 
 #include "gdm-session-worker-glue.h"
 #include "gdm-session-worker-common.h"
+#include "gdm-session-worker-enum-types.h"
 
 G_BEGIN_DECLS
 
 #define GDM_TYPE_SESSION_WORKER            (gdm_session_worker_get_type ())
 #define GDM_SESSION_WORKER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDM_TYPE_SESSION_WORKER, GdmSessionWorker))
 #define GDM_SESSION_WORKER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GDM_TYPE_SESSION_WORKER, GdmSessionWorkerClass))
 #define GDM_IS_SESSION_WORKER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDM_TYPE_SESSION_WORKER))
 #define GDM_IS_SESSION_WORKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDM_TYPE_SESSION_WORKER))
 #define GDM_SESSION_WORKER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GDM_TYPE_SESSION_WORKER, GdmSessionWorkerClass))
 
+typedef enum {
+        GDM_SESSION_WORKER_STATE_NONE = 0,
+        GDM_SESSION_WORKER_STATE_SETUP_COMPLETE,
+        GDM_SESSION_WORKER_STATE_AUTHENTICATED,
+        GDM_SESSION_WORKER_STATE_AUTHORIZED,
+        GDM_SESSION_WORKER_STATE_ACCREDITED,
+        GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED,
+        GDM_SESSION_WORKER_STATE_SESSION_OPENED,
+        GDM_SESSION_WORKER_STATE_SESSION_STARTED
+} GdmSessionWorkerState;
+
 typedef struct GdmSessionWorkerPrivate GdmSessionWorkerPrivate;
 
 typedef struct
 {
         GdmDBusWorkerSkeleton parent;
         GdmSessionWorkerPrivate *priv;
 } GdmSessionWorker;
 
 typedef struct
 {
         GdmDBusWorkerSkeletonClass parent_class;
 } GdmSessionWorkerClass;
 
 GType              gdm_session_worker_get_type                 (void);
 
 GdmSessionWorker * gdm_session_worker_new                      (const char *server_address,
                                                                 gboolean    is_for_reauth) G_GNUC_MALLOC;
 G_END_DECLS
 #endif /* GDM_SESSION_WORKER_H */
-- 
2.21.0