[gnome-flashback] screensaver: disable locking without PAM configuration file



commit fd860950be39ea2554783a6b07511e78fdd0759b
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Mon Mar 16 18:11:06 2020 +0200

    screensaver: disable locking without PAM configuration file
    
    https://gitlab.gnome.org/GNOME/gnome-flashback/issues/38

 gnome-flashback/libscreensaver/gf-screensaver.c | 58 +++++++++++++++++--------
 1 file changed, 40 insertions(+), 18 deletions(-)
---
diff --git a/gnome-flashback/libscreensaver/gf-screensaver.c b/gnome-flashback/libscreensaver/gf-screensaver.c
index 7079de7..c2dd07e 100644
--- a/gnome-flashback/libscreensaver/gf-screensaver.c
+++ b/gnome-flashback/libscreensaver/gf-screensaver.c
@@ -30,6 +30,8 @@
 #include "gf-prefs.h"
 #include "gf-watcher.h"
 
+#define PAM_CONFIG_FILE "/etc/pam.d/gnome-flashback"
+
 struct _GfScreensaver
 {
   GObject     parent;
@@ -49,6 +51,13 @@ struct _GfScreensaver
 
 G_DEFINE_TYPE (GfScreensaver, gf_screensaver, G_TYPE_OBJECT)
 
+static gboolean
+pam_config_exists (void)
+{
+  return g_file_test (PAM_CONFIG_FILE, G_FILE_TEST_EXISTS) &&
+         g_file_test (PAM_CONFIG_FILE, G_FILE_TEST_IS_REGULAR);
+}
+
 static gboolean
 release_grab_cb (gpointer user_data)
 {
@@ -81,6 +90,13 @@ update_from_prefs (GfScreensaver *self)
   lock_enabled = gf_prefs_get_lock_enabled (self->prefs) &&
                  !gf_prefs_get_lock_disabled (self->prefs);
 
+  if (lock_enabled && !pam_config_exists ())
+    {
+      g_warning ("Locking disabled because PAM configuration file `"
+                 PAM_CONFIG_FILE "` does not exist");
+      lock_enabled = FALSE;
+    }
+
   gf_manager_set_lock_enabled (self->manager, lock_enabled);
 
   lock_timeout = gf_prefs_get_lock_delay (self->prefs);
@@ -113,31 +129,37 @@ static void
 listener_lock_cb (GfListener    *listener,
                   GfScreensaver *self)
 {
-  if (!gf_prefs_get_lock_disabled (self->prefs))
+  gboolean locked;
+
+  if (gf_prefs_get_lock_disabled (self->prefs))
+    {
+      g_debug ("Locking disabled by the administrator");
+      return;
+    }
+
+  if (!pam_config_exists ())
     {
-      gboolean locked;
+      g_warning ("Locking disabled because PAM configuration file `"
+                 PAM_CONFIG_FILE "` does not exist");
+      return;
+    }
 
-      /* set lock flag before trying to activate screensaver
-       * in case something tries to react to the ActiveChanged signal
-       */
+  /* set lock flag before trying to activate screensaver
+   * in case something tries to react to the ActiveChanged signal
+   */
 
-      locked = gf_manager_get_lock_active (self->manager);
-      gf_manager_set_lock_active (self->manager, TRUE);
+  locked = gf_manager_get_lock_active (self->manager);
+  gf_manager_set_lock_active (self->manager, TRUE);
 
-      if (!gf_manager_get_active (self->manager))
+  if (!gf_manager_get_active (self->manager))
+    {
+      if (!gf_listener_set_active (self->listener, TRUE))
         {
-          if (!gf_listener_set_active (self->listener, TRUE))
-            {
-              /* If we've failed then restore lock status */
-              gf_manager_set_lock_active (self->manager, locked);
-              g_debug ("Unable to lock the screen");
-            }
+          /* If we've failed then restore lock status */
+          gf_manager_set_lock_active (self->manager, locked);
+          g_debug ("Unable to lock the screen");
         }
     }
-  else
-    {
-      g_debug ("Locking disabled by the administrator");
-    }
 }
 
 static gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]