Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package polkit for openSUSE:Factory checked 
in at 2022-11-10 14:19:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/polkit (Old)
 and      /work/SRC/openSUSE:Factory/.polkit.new.1597 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "polkit"

Thu Nov 10 14:19:33 2022 rev:87 rq:1034882 version:121

Changes:
--------
--- /work/SRC/openSUSE:Factory/polkit/polkit.changes    2022-09-16 
13:32:35.841318434 +0200
+++ /work/SRC/openSUSE:Factory/.polkit.new.1597/polkit.changes  2022-11-10 
14:19:38.537456739 +0100
@@ -1,0 +2,6 @@
+Wed Nov 09 07:39:53 CET 2022 - [email protected]
+
+- read actions also from /etc/polkit-1/actions (jsc#PED-1405)
+  added polkit-actions-in-etc.patch
+
+-------------------------------------------------------------------

New:
----
  polkit-actions-in-etc.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ polkit.spec ++++++
--- /var/tmp/diff_new_pack.FGU3rW/_old  2022-11-10 14:19:39.125459978 +0100
+++ /var/tmp/diff_new_pack.FGU3rW/_new  2022-11-10 14:19:39.129460001 +0100
@@ -50,6 +50,8 @@
 # PATCH-FIX-UPSTREAM polkit-fix-pam-prefix.patch [email protected] -- Make
 # intended use of pam_prefix meson option rather than hard-coded path
 Patch5:         polkit-fix-pam-prefix.patch
+# Read actions also from /etc/polkit-1/actions
+Patch6:         polkit-actions-in-etc.patch
 
 BuildRequires:  gcc-c++
 BuildRequires:  gettext
@@ -204,6 +206,9 @@
 mkdir -p %{buildroot}%{_sysusersdir}
 install -m0644 %{SOURCE3} %{buildroot}%{_sysusersdir}/
 
+# create actions dir in /etc
+mkdir %{buildroot}/%{_sysconfdir}/polkit-1/actions
+
 %pre -f polkit.pre
 %service_add_pre polkit.service
 
@@ -264,6 +269,7 @@
 %{_pam_vendordir}/polkit-1
 %dir %{_sysconfdir}/polkit-1
 %attr(0700,polkitd,root) %dir %{_sysconfdir}/polkit-1/rules.d
+%dir %{_sysconfdir}/polkit-1/actions
 %{_bindir}/pkaction
 %{_bindir}/pkcheck
 %{_bindir}/pkttyagent


++++++ polkit-actions-in-etc.patch ++++++
diff --git a/docs/man/polkit.xml b/docs/man/polkit.xml
index 90715a5..10dd217 100644
--- a/docs/man/polkit.xml
+++ b/docs/man/polkit.xml
@@ -104,6 +104,7 @@ System Context         |                        |
 +------------------+          |
           ^                   |
           |            +--------------------------------------+
+          |            | /etc/polkit-1/actions/*.policy       |
           |            | /usr/share/polkit-1/actions/*.policy |
           |            +--------------------------------------+
           |
diff --git a/src/polkitbackend/polkitbackendactionpool.c 
b/src/polkitbackend/polkitbackendactionpool.c
index 3894fe9..17652e6 100644
--- a/src/polkitbackend/polkitbackendactionpool.c
+++ b/src/polkitbackend/polkitbackendactionpool.c
@@ -91,8 +91,10 @@ typedef struct
 {
   /* directory with .policy files, e.g. /usr/share/polkit-1/actions */
   GFile *directory;
+  GFile *directory_alt;
 
   GFileMonitor *dir_monitor;
+  GFileMonitor *dir_monitor_alt;
 
   /* maps from action_id to a ParsedAction struct */
   GHashTable *parsed_actions;
@@ -109,6 +111,8 @@ enum
 {
   PROP_0,
   PROP_DIRECTORY,
+  /* TODO combine into PROP_DIRECTORIES? */
+  PROP_DIRECTORY_ALT,
 };
 
 #define POLKIT_BACKEND_ACTION_POOL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE 
((o), POLKIT_BACKEND_TYPE_ACTION_POOL, PolkitBackendActionPoolPrivate))
@@ -153,9 +157,15 @@ polkit_backend_action_pool_finalize (GObject *object)
   if (priv->directory != NULL)
     g_object_unref (priv->directory);
 
+  if (priv->directory_alt != NULL)
+    g_object_unref (priv->directory_alt);
+
   if (priv->dir_monitor != NULL)
     g_object_unref (priv->dir_monitor);
 
+  if (priv->dir_monitor_alt != NULL)
+    g_object_unref (priv->dir_monitor_alt);
+
   if (priv->parsed_actions != NULL)
     g_hash_table_unref (priv->parsed_actions);
 
@@ -183,6 +193,10 @@ polkit_backend_action_pool_get_property (GObject     
*object,
       g_value_set_object (value, priv->directory);
       break;
 
+    case PROP_DIRECTORY_ALT:
+      g_value_set_object (value, priv->directory_alt);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -274,6 +288,28 @@ polkit_backend_action_pool_set_property (GObject       
*object,
         }
       break;
 
+    case PROP_DIRECTORY_ALT:
+      priv->directory_alt = g_value_dup_object (value);
+
+      error = NULL;
+      priv->dir_monitor_alt = g_file_monitor_directory (priv->directory_alt,
+                                                    G_FILE_MONITOR_NONE,
+                                                    NULL,
+                                                    &error);
+      if (priv->dir_monitor_alt == NULL)
+        {
+          g_warning ("Error monitoring actions alt directory: %s", 
error->message);
+          g_error_free (error);
+        }
+      else
+        {
+          g_signal_connect (priv->dir_monitor_alt,
+                            "changed",
+                            (GCallback) dir_monitor_changed,
+                            pool);
+        }
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -308,6 +344,18 @@ polkit_backend_action_pool_class_init 
(PolkitBackendActionPoolClass *klass)
                                                         G_PARAM_STATIC_NICK |
                                                         G_PARAM_STATIC_BLURB));
 
+  g_object_class_install_property (gobject_class,
+                                   PROP_DIRECTORY_ALT,
+                                   g_param_spec_object ("directoryalt",
+                                                        "DirectoryAlt",
+                                                        "Alternative directory 
to load action description files from",
+                                                        G_TYPE_FILE,
+                                                        G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT_ONLY 
|
+                                                        G_PARAM_STATIC_NAME |
+                                                        G_PARAM_STATIC_NICK |
+                                                        G_PARAM_STATIC_BLURB));
+
   /**
    * PolkitBackendActionPool::changed:
    * @action_pool: A #PolkitBackendActionPool.
@@ -334,12 +382,13 @@ polkit_backend_action_pool_class_init 
(PolkitBackendActionPoolClass *klass)
  * Returns: A #PolkitBackendActionPool. Free with g_object_unref().
  **/
 PolkitBackendActionPool *
-polkit_backend_action_pool_new (GFile *directory)
+polkit_backend_action_pool_new (GFile *directory, GFile *directory_alt)
 {
   PolkitBackendActionPool *pool;
 
   pool = POLKIT_BACKEND_ACTION_POOL (g_object_new 
(POLKIT_BACKEND_TYPE_ACTION_POOL,
                                                    "directory", directory,
+                                                   "directoryalt", 
directory_alt,
                                                    NULL));
 
   return pool;
@@ -505,12 +554,14 @@ ensure_all_files (PolkitBackendActionPool *pool)
 {
   PolkitBackendActionPoolPrivate *priv;
   GFileEnumerator *e;
+  GFileEnumerator *e_alt;
   GFileInfo *file_info;
   GError *error;
 
   priv = POLKIT_BACKEND_ACTION_POOL_GET_PRIVATE (pool);
 
   e = NULL;
+  e_alt = NULL;
 
   if (priv->has_loaded_all_files)
     goto out;
@@ -548,12 +599,48 @@ ensure_all_files (PolkitBackendActionPool *pool)
 
     } /* for all files */
 
+  /* TODO priority for files in /etc */
+
+  e_alt = g_file_enumerate_children (priv->directory_alt,
+                                    "standard::name",
+                                    G_FILE_QUERY_INFO_NONE,
+                                    NULL,
+                                    &error);
+  if (error != NULL)
+    {
+      g_warning ("Error enumerating files: %s", error->message);
+      goto out;
+    }
+
+  while ((file_info = g_file_enumerator_next_file (e_alt, NULL, &error)) != 
NULL)
+    {
+      const gchar *name;
+
+      name = g_file_info_get_name (file_info);
+      /* only consider files with the right suffix */
+      if (g_str_has_suffix (name, ".policy"))
+        {
+          GFile *file;
+
+          file = g_file_get_child (priv->directory_alt, name);
+
+          ensure_file (pool, file);
+
+          g_object_unref (file);
+        }
+
+      g_object_unref (file_info);
+
+    } /* for all files */
+
   priv->has_loaded_all_files = TRUE;
 
  out:
 
   if (e != NULL)
     g_object_unref (e);
+  if (e_alt != NULL)
+    g_object_unref (e_alt);
 }
 
 /* 
----------------------------------------------------------------------------------------------------
 */
diff --git a/src/polkitbackend/polkitbackendactionpool.h 
b/src/polkitbackend/polkitbackendactionpool.h
index e992eea..9ccb526 100644
--- a/src/polkitbackend/polkitbackendactionpool.h
+++ b/src/polkitbackend/polkitbackendactionpool.h
@@ -64,7 +64,7 @@ struct _PolkitBackendActionPoolClass
 };
 
 GType                    polkit_backend_action_pool_get_type         (void) 
G_GNUC_CONST;
-PolkitBackendActionPool *polkit_backend_action_pool_new              (GFile 
*directory);
+PolkitBackendActionPool *polkit_backend_action_pool_new              (GFile 
*directory, GFile *directory_alt);
 GList                   *polkit_backend_action_pool_get_all_actions  
(PolkitBackendActionPool  *pool,
                                                                       const 
gchar              *locale);
 
diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c 
b/src/polkitbackend/polkitbackendinteractiveauthority.c
index 1cfc88e..a975cac 100644
--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
@@ -292,6 +292,7 @@ polkit_backend_interactive_authority_init 
(PolkitBackendInteractiveAuthority *au
 {
   PolkitBackendInteractiveAuthorityPrivate *priv;
   GFile *directory;
+  GFile *directory_alt;
   GError *error;
 
   /* Force registering error domain */
@@ -300,8 +301,10 @@ polkit_backend_interactive_authority_init 
(PolkitBackendInteractiveAuthority *au
   priv = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_GET_PRIVATE (authority);
 
   directory = g_file_new_for_path (PACKAGE_DATA_DIR "/polkit-1/actions");
-  priv->action_pool = polkit_backend_action_pool_new (directory);
+  directory_alt = g_file_new_for_path (PACKAGE_SYSCONF_DIR 
"/polkit-1/actions");
+  priv->action_pool = polkit_backend_action_pool_new (directory, 
directory_alt);
   g_object_unref (directory);
+  g_object_unref (directory_alt);
   g_signal_connect (priv->action_pool,
                     "changed",
                     (GCallback) action_pool_changed,

Reply via email to