[tracker-miners/wip/carlosg/dbus-api-changes: 21/29] tracker-control: Move files_indexed/graph properties to a separate interface




commit 3f5e21ab4502a249c0ae0a3de5bf32d100ab50fd
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sat Jun 20 19:51:39 2020 +0200

    tracker-control: Move files_indexed/graph properties to a separate interface
    
    This is not the "public API" that we intend applications to use, better
    to keep the XML definition for it as clean as possible.
    
    Technically this object/interface is still available to clients, if this
    DBus name were made available on a sandbox. And technically letting
    sandboxed clients potentially deduce IndexFile requests from other
    clients is an information leak, it is just not one to care hard about.
    
    These properties could presumably turn into targeted signals to
    tracker-miner-fs/tracker-extract DBus names, and DBus name checks on
    respective DBus requests to ensure no one else has access to these
    properties. Let's go for simplicity at the moment, it's an implementation
    detail and may change anytime.

 src/tracker-control/meson.build                    | 12 +++++++++--
 .../org.freedesktop.Tracker3.Miner.Files.Index.xml |  2 --
 .../org.freedesktop.Tracker3.Miner.Files.Proxy.xml |  6 ++++++
 src/tracker-control/tracker-miner-files-index.c    | 23 ++++++++++++++++++++--
 4 files changed, 37 insertions(+), 6 deletions(-)
---
diff --git a/src/tracker-control/meson.build b/src/tracker-control/meson.build
index f44ae3690..7da2e869b 100644
--- a/src/tracker-control/meson.build
+++ b/src/tracker-control/meson.build
@@ -11,19 +11,27 @@ tracker_index_deps = [
 ]
 
 dbus_index_files_interface = files('org.freedesktop.Tracker3.Miner.Files.Index.xml')
+dbus_index_proxy_interface = files('org.freedesktop.Tracker3.Miner.Files.Proxy.xml')
 
-index_files_built_sources = gnome.gdbus_codegen('tracker-dbus-files-index',
+built_sources = []
+built_sources += gnome.gdbus_codegen('tracker-dbus-files-index',
     dbus_index_files_interface,
     interface_prefix: 'org.freedesktop.Tracker3',
     namespace: 'TrackerDBus',
 )
 
+built_sources += gnome.gdbus_codegen('tracker-dbus-files-proxy',
+    dbus_index_proxy_interface,
+    interface_prefix: 'org.freedesktop.Tracker3',
+    namespace: 'TrackerDBus',
+)
+
 install_data(dbus_index_files_interface,
     install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'dbus-1', 'interfaces')
 )
 
 executable('tracker-miner-fs-control-@0@'.format(tracker_api_major),
-    sources + index_files_built_sources,
+    sources + built_sources,
     dependencies: tracker_index_deps,
     c_args: tracker_c_args,
     install: true,
diff --git a/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Index.xml 
b/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Index.xml
index c2fdb86d8..12c35e493 100644
--- a/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Index.xml
+++ b/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Index.xml
@@ -4,7 +4,5 @@
       <arg type='s' name='file_uri' direction='in' />
       <arg type='as' name='graphs' direction='in' />
     </method>
-    <property name='Graphs' type='as' access='read' />
-    <property name='IndexedFiles' type='as' access='read' />
   </interface>
 </node>
diff --git a/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Proxy.xml 
b/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Proxy.xml
new file mode 100644
index 000000000..a04161ab1
--- /dev/null
+++ b/src/tracker-control/org.freedesktop.Tracker3.Miner.Files.Proxy.xml
@@ -0,0 +1,6 @@
+<node>
+  <interface name='org.freedesktop.Tracker3.Miner.Files.Proxy'>
+    <property name='Graphs' type='as' access='read' />
+    <property name='IndexedFiles' type='as' access='read' />
+  </interface>
+</node>
diff --git a/src/tracker-control/tracker-miner-files-index.c b/src/tracker-control/tracker-miner-files-index.c
index c5fbb76bf..fce427692 100644
--- a/src/tracker-control/tracker-miner-files-index.c
+++ b/src/tracker-control/tracker-miner-files-index.c
@@ -24,6 +24,7 @@
 #include <libtracker-miner/tracker-miner.h>
 
 #include "tracker-dbus-files-index.h"
+#include "tracker-dbus-files-proxy.h"
 #include "tracker-miner-files-index.h"
 #include "tracker-miner-files-peer-listener.h"
 
@@ -37,6 +38,7 @@
 typedef struct {
        TrackerMinerFilesPeerListener *peer_listener;
        TrackerDBusMinerFilesIndex *skeleton;
+       TrackerDBusMinerFilesProxy *proxy_skeleton;
        GDBusConnection *d_connection;
        GArray *indexed_files;
        GStrv graphs;
@@ -101,6 +103,7 @@ index_finalize (GObject *object)
        TrackerMinerFilesIndexPrivate *priv = TRACKER_MINER_FILES_INDEX_GET_PRIVATE (object);
 
        g_object_unref (priv->skeleton);
+       g_object_unref (priv->proxy_skeleton);
 
        if (priv->d_connection) {
                g_object_unref (priv->d_connection);
@@ -119,7 +122,8 @@ update_indexed_files (TrackerMinerFilesIndex *index)
 
        priv = TRACKER_MINER_FILES_INDEX_GET_PRIVATE (index);
 
-       tracker_dbus_miner_files_index_set_indexed_files (priv->skeleton, (const gchar * const *) 
priv->indexed_files->data);
+       tracker_dbus_miner_files_proxy_set_indexed_files (priv->proxy_skeleton,
+                                                         (const gchar * const *) priv->indexed_files->data);
 }
 
 static void
@@ -194,7 +198,8 @@ peer_listener_graphs_changed (TrackerMinerFilesPeerListener *listener,
        g_strfreev (priv->graphs);
        priv->graphs = g_strdupv (graphs);
 
-       tracker_dbus_miner_files_index_set_graphs (priv->skeleton, (const gchar * const *) priv->graphs);
+       tracker_dbus_miner_files_proxy_set_graphs (priv->proxy_skeleton,
+                                                  (const gchar * const *) priv->graphs);
 }
 
 static void
@@ -211,6 +216,8 @@ tracker_miner_files_index_init (TrackerMinerFilesIndex *object)
 
        priv = TRACKER_MINER_FILES_INDEX_GET_PRIVATE (object);
 
+       priv->proxy_skeleton = tracker_dbus_miner_files_proxy_skeleton_new ();
+
        priv->skeleton = tracker_dbus_miner_files_index_skeleton_new ();
        g_signal_connect (priv->skeleton, "handle-index-file",
                          G_CALLBACK (tracker_miner_files_index_handle_index_file),
@@ -261,6 +268,18 @@ tracker_miner_files_index_new (void)
                return NULL;
        }
 
+       if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->proxy_skeleton),
+                                              priv->d_connection,
+                                              "/org/freedesktop/Tracker3/Miner/Files/Proxy",
+                                              &error)) {
+               g_critical ("Could not register the D-Bus object %s, %s",
+                           TRACKER_MINER_DBUS_NAME_PREFIX "Files.Proxy",
+                           error ? error->message : "no error given.");
+               g_clear_error (&error);
+               g_object_unref (miner);
+               return NULL;
+       }
+
        priv->full_path = full_path;
 
        priv->peer_listener = tracker_miner_files_peer_listener_new (priv->d_connection);


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