diff options
author | Sam Thursfield <sam@afuera.me.uk> | 2018-08-11 20:42:18 +0200 |
---|---|---|
committer | Sam Thursfield <sam@afuera.me.uk> | 2018-08-11 21:33:08 +0200 |
commit | dd59bb4ff5088064c28cca2313255396f97920bf (patch) | |
tree | 2616fb8c884392ff2d425611b2ac542c051a8b28 | |
parent | 9840ab01f1b609fe2f9674b4a491cf4c452b6273 (diff) | |
download | tracker-sam/domain-rules-outside-usr.tar.gz |
Allow use of domain rules that aren't installed into /usrsam/domain-rules-outside-usr
Currently Tracker domain rules must be installed inside Tracker's data
directory (usually /usr/share/tracker). This is limiting as it means
only system packages can add them. A program installed into /opt is
unable to use a custom domain, for example. Since Tracker is implemented
as a system of daemons, it's not particularly straight forward to work
around this by setting XDG_DATA_DIRS= to point somewhere non-standard
either.
This patch removes this restriction in a simple way: it allows users to
pass a full path to the domain rule, rather than just the base name.
-rw-r--r-- | docs/reference/libtracker-sparql/private-store.xml | 4 | ||||
-rw-r--r-- | src/libtracker-common/tracker-domain-ontology.c | 12 | ||||
-rw-r--r-- | src/tracker-store/tracker-main.vala | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/docs/reference/libtracker-sparql/private-store.xml b/docs/reference/libtracker-sparql/private-store.xml index 6fe587200..c598173ac 100644 --- a/docs/reference/libtracker-sparql/private-store.xml +++ b/docs/reference/libtracker-sparql/private-store.xml @@ -75,6 +75,10 @@ Miners=Miner.Files;Miner.Extract; <programlisting> tracker_sparql_connection_set_domain ("org.example.App"); </programlisting> + <para> + It is also possible to pass a full path to the domain rule. If the first + character of the domain name is / it will be treated as a full path. + </para> </chapter> <chapter id="recommendations"> <title>Additional precautions and recommendations</title> diff --git a/src/libtracker-common/tracker-domain-ontology.c b/src/libtracker-common/tracker-domain-ontology.c index 65a3fda0b..f8de59ab5 100644 --- a/src/libtracker-common/tracker-domain-ontology.c +++ b/src/libtracker-common/tracker-domain-ontology.c @@ -302,7 +302,17 @@ tracker_domain_ontology_initable_init (GInitable *initable, domain_ontology = TRACKER_DOMAIN_ONTOLOGY (initable); priv = tracker_domain_ontology_get_instance_private (domain_ontology); - if (priv->name) { + if (priv->name && priv->name[0] == '/') { + if (!g_file_test (priv->name, G_FILE_TEST_IS_REGULAR)) { + inner_error = g_error_new (G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_NOT_FOUND, + "Could not find rule at '%s'", + priv->name); + goto end; + } + + path = g_strdup (priv->name); + } else if (priv->name) { path = find_rule_in_data_dirs (priv->name); if (!path) { diff --git a/src/tracker-store/tracker-main.vala b/src/tracker-store/tracker-main.vala index 935ebc8d1..5ad40892b 100644 --- a/src/tracker-store/tracker-main.vala +++ b/src/tracker-store/tracker-main.vala @@ -320,7 +320,7 @@ License which can be viewed at: main_loop = new MainLoop (); if (domain_ontology != null) - Tracker.DBus.watch_domain (domain_ontology, main_loop); + Tracker.DBus.watch_domain (domain_ontology_config.get_domain(), main_loop); initialize_signal_handler (); |