s3:mdssvc: new option "spotlight backend"
authorRalph Boehme <slow@samba.org>
Mon, 6 May 2019 13:03:02 +0000 (15:03 +0200)
committerJeremy Allison <jra@samba.org>
Thu, 8 Aug 2019 20:24:31 +0000 (20:24 +0000)
Currently there's only the tracker backend, but subsequent commits will add
other backends.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
docs-xml/smbdotconf/misc/spotlight_backend.xml [new file with mode: 0644]
lib/param/loadparm.c
lib/param/loadparm.h
lib/param/param_table.c
source3/param/loadparm.c
source3/rpc_server/mdssvc/mdssvc.c
source3/rpc_server/mdssvc/mdssvc.h
source3/rpc_server/wscript_build
source3/wscript
source3/wscript_build

diff --git a/docs-xml/smbdotconf/misc/spotlight_backend.xml b/docs-xml/smbdotconf/misc/spotlight_backend.xml
new file mode 100644 (file)
index 0000000..3175d54
--- /dev/null
@@ -0,0 +1,19 @@
+<samba:parameter name="spotlight backend"
+                context="S"
+                type="enum"
+                 enumlist="enum_spotlight_backend"
+                xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+       <para>
+         Spotlight search backend. Available backends:
+
+       <itemizedlist>
+       <listitem><para><constant>tracker</constant> -
+       Gnome Tracker.
+       </para></listitem>
+
+       </itemizedlist>
+       </para>
+</description>
+<value type="default">tracker</value>
+</samba:parameter>
index 883d4167bf49c1ba0351bfd2e703613073b59d83..78510a338b9b6183ee4b0f67e843acd6e672ec3a 100644 (file)
@@ -3025,6 +3025,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 
        lpcfg_do_global_parameter(lp_ctx, "debug encryption", "no");
 
+       lpcfg_do_global_parameter(lp_ctx, "spotlight backend", "tracker");
+
        for (i = 0; parm_table[i].label; i++) {
                if (!(lp_ctx->flags[i] & FLAG_CMDLINE)) {
                        lp_ctx->flags[i] |= FLAG_DEFAULT;
index 0b2e302d2a90f9ceb2c548612f0c6318e7e1cf94..b57290da2308d1f486ce02a8f7162fae2844c0e7 100644 (file)
@@ -248,6 +248,11 @@ enum inheritowner_options {
 /* mangled names options */
 enum mangled_names_options {MANGLED_NAMES_NO, MANGLED_NAMES_YES, MANGLED_NAMES_ILLEGAL};
 
+/* Spotlight backend options */
+enum spotlight_backend_options {
+       SPOTLIGHT_BACKEND_TRACKER,
+};
+
 /*
  * Default passwd chat script.
  */
index f9d3b55adf2ad93d8b7d43c64f675db14fb06f3a..8b1d1e31f600a46ed740ec31955cb1a4963c8ef5 100644 (file)
@@ -351,6 +351,11 @@ static const struct enum_list enum_ntlm_auth[] = {
        {-1, NULL}
 };
 
+static const struct enum_list enum_spotlight_backend[] = {
+       {SPOTLIGHT_BACKEND_TRACKER, "tracker"},
+       {-1, NULL}
+};
+
 /* Note: We do not initialise the defaults union - it is not allowed in ANSI C
  *
  * NOTE: Handling of duplicated (synonym) parameters:
index 9e97d719f4ee53f138794270dd232ae18f310418..31819b3930cce714c26c3ece30c4c66c67bd795e 100644 (file)
@@ -247,6 +247,7 @@ static const struct loadparm_service _sDefault =
        .param_opt = NULL,
        .smbd_search_ask_sharemode = true,
        .smbd_getinfo_ask_sharemode = true,
+       .spotlight_backend = SPOTLIGHT_BACKEND_TRACKER,
        .dummy = ""
 };
 
index d8dff563c1bd8181b99adc16a70e35023810b437..ef567595a4da7815bb55f3d879b8cce8ed723540 100644 (file)
@@ -27,7 +27,9 @@
 #include "lib/dbwrap/dbwrap_rbt.h"
 #include "libcli/security/dom_sid.h"
 #include "mdssvc.h"
+#ifdef HAVE_SPOTLIGHT_BACKEND_TRACKER
 #include "mdssvc_tracker.h"
+#endif
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
@@ -1046,7 +1048,7 @@ static bool slrpc_open_query(struct mds_ctx *mds_ctx,
 
        DLIST_ADD(mds_ctx->query_list, slq);
 
-       ok = mds_ctx->mdssvc_ctx->backend->search_start(slq);
+       ok = mds_ctx->backend->search_start(slq);
        if (!ok) {
                DBG_ERR("backend search_start failed\n");
                goto error;
@@ -1142,7 +1144,7 @@ static bool slrpc_fetch_query_results(struct mds_ctx *mds_ctx,
                }
                if (slq->state == SLQ_STATE_FULL) {
                        slq->state = SLQ_STATE_RESULTS;
-                       slq->mds_ctx->mdssvc_ctx->backend->search_cont(slq);
+                       slq->mds_ctx->backend->search_cont(slq);
                }
                break;
 
@@ -1534,14 +1536,14 @@ static struct mdssvc_ctx *mdssvc_init(struct tevent_context *ev)
 
        mdssvc_ctx->ev_ctx = ev;
 
-       mdssvc_ctx->backend = &mdsscv_backend_tracker;
-
+#ifdef HAVE_SPOTLIGHT_BACKEND_TRACKER
        ok = mdsscv_backend_tracker.init(mdssvc_ctx);
        if (!ok) {
                DBG_ERR("backend init failed\n");
                TALLOC_FREE(mdssvc_ctx);
                return NULL;
        }
+#endif
 
        return mdssvc_ctx;
 }
@@ -1565,10 +1567,12 @@ bool mds_shutdown(void)
                return false;
        }
 
+#ifdef HAVE_SPOTLIGHT_BACKEND_TRACKER
        ok = mdsscv_backend_tracker.shutdown(mdssvc_ctx);
        if (!ok) {
                goto fail;
        }
+#endif
 
        ok = true;
 fail:
@@ -1612,6 +1616,7 @@ struct mds_ctx *mds_init_ctx(TALLOC_CTX *mem_ctx,
                             const char *path)
 {
        struct mds_ctx *mds_ctx;
+       int backend;
        bool ok;
 
        mds_ctx = talloc_zero(mem_ctx, struct mds_ctx);
@@ -1625,6 +1630,19 @@ struct mds_ctx *mds_init_ctx(TALLOC_CTX *mem_ctx,
                goto error;
        }
 
+       backend = lp_spotlight_backend(snum);
+       switch (backend) {
+#ifdef HAVE_SPOTLIGHT_BACKEND_TRACKER
+       case SPOTLIGHT_BACKEND_TRACKER:
+               mds_ctx->backend = &mdsscv_backend_tracker;
+               break;
+#endif
+       default:
+               DBG_ERR("Unknown backend %d\n", backend);
+               TALLOC_FREE(mdssvc_ctx);
+               return NULL;
+       }
+
        mds_ctx->sharename = talloc_strdup(mds_ctx, sharename);
        if (mds_ctx->sharename == NULL) {
                goto error;
@@ -1650,7 +1668,7 @@ struct mds_ctx *mds_init_ctx(TALLOC_CTX *mem_ctx,
                goto error;
        }
 
-       ok = mds_ctx->mdssvc_ctx->backend->connect(mds_ctx);
+       ok = mds_ctx->backend->connect(mds_ctx);
        if (!ok) {
                DBG_ERR("backend connect failed\n");
                goto error;
index e6ed08709ed047423a46da28a671ee3bd376b205..bd76476dd32104b83772843627ce6a03f88cf0ab 100644 (file)
@@ -111,12 +111,12 @@ struct sl_inode_path_map {
 /* Per process state */
 struct mdssvc_ctx {
        struct tevent_context *ev_ctx;
-       struct mdssvc_backend *backend;
        void *backend_private;
 };
 
 /* Per tree connect state */
 struct mds_ctx {
+       struct mdssvc_backend *backend;
        struct mdssvc_ctx *mdssvc_ctx;
        void *backend_private;
        struct auth_session_info *pipe_session_info;
index 7907cbb78b048cf349e75acd2ff55f155aa3dfbb..91f1d16195d7310cc639a757afa272ae76f99396 100644 (file)
@@ -142,22 +142,26 @@ rpc_mdssvc_sources = '''
                      mdssvc/mdssvc.c
                      mdssvc/dalloc.c
                      mdssvc/marshalling.c
-                     mdssvc/sparql_mapping.c
-                     mdssvc/sparql_parser.y
-                     mdssvc/sparql_lexer.l
                      mdssvc/srv_mdssvc_nt.c
                      ../../librpc/gen_ndr/srv_mdssvc.c
                      '''
+rpc_mdssvc_deps = 'samba-util '
 
-if bld.CONFIG_SET('HAVE_TRACKER'):
-    rpc_mdssvc_sources += ' mdssvc/mdssvc_tracker.c'
+if bld.env.spotlight_backend_tracker:
+    rpc_mdssvc_sources += '''
+                          mdssvc/mdssvc_tracker.c
+                          mdssvc/sparql_mapping.c
+                          mdssvc/sparql_parser.y
+                          mdssvc/sparql_lexer.l
+                          '''
+    rpc_mdssvc_deps += 'tevent-glib-glue ' + bld.env['libtracker']
 
 bld.SAMBA3_MODULE('rpc_mdssvc_module',
                   subsystem='rpc',
                   allow_undefined_symbols=True,
                   source=rpc_mdssvc_sources,
                   init_function='',
-                  deps='samba-util tevent-glib-glue ' + bld.env['libtracker'],
+                  deps=rpc_mdssvc_deps,
                   internal_module=bld.SAMBA3_IS_STATIC_MODULE('rpc_mdssvc_module'),
                   enabled=bld.SAMBA3_IS_ENABLED_MODULE('rpc_mdssvc_module'))
 
index d6333f03386fd1c95601dce5204672492b3e6230..81480de3900d6f1d5e794345c6afb7ea37d43231 100644 (file)
@@ -1677,18 +1677,26 @@ main() {
 
     conf.env.with_spotlight = False
     if Options.options.with_spotlight:
-        if not conf.env['BISON']:
-            conf.fatal("Spotlight support requested but bison missing")
-        if not conf.env['FLEX']:
-            conf.fatal("Spotlight support requested but flex missing")
-
-        if not conf.CONFIG_SET('HAVE_TRACKER'):
-            conf.fatal('Missing Gnome Tracker development files')
-
-        if not conf.CONFIG_SET('HAVE_GLIB'):
-            conf.fatal('Missing glib-2.0 development files')
-
-        Logs.info("building with Spotlight support")
+        backends = []
+        if conf.CONFIG_SET('HAVE_TRACKER') and conf.CONFIG_SET('HAVE_GLIB'):
+            conf.env.spotlight_backend_tracker = True
+            backends.append('tracker')
+            conf.DEFINE('HAVE_SPOTLIGHT_BACKEND_TRACKER', '1')
+
+        if conf.env.spotlight_backend_tracker:
+            if not conf.env['BISON']:
+                conf.fatal("Spotlight support requested but bison missing")
+            if not conf.env['FLEX']:
+                conf.fatal("Spotlight support requested but flex missing")
+
+        if not conf.env.with_spotlight:
+            if not conf.CONFIG_SET('HAVE_TRACKER'):
+                Logs.warn('Missing libtracker-sparql development files for Spotlight backend "tracker"')
+            if not conf.CONFIG_SET('HAVE_GLIB'):
+                Logs.warn('Missing glib-2.0 development files for Spotlight backend "tracker"')
+            conf.fatal("Spotlight support requested, but dependencies missing")
+
+        Logs.info("Building with Spotlight support, available backends: %s" % ', '.join(backends))
         default_static_modules.extend(TO_LIST('rpc_mdssvc_module'))
         conf.DEFINE('WITH_SPOTLIGHT', '1')
         conf.env.with_spotlight = True
index 091cbea7ab9685cca7858fb9e6b5e5457ae21f16..2c444155d8c8592fd3a08c30ce8b4843719a2824 100644 (file)
@@ -1325,7 +1325,7 @@ bld.SAMBA3_BINARY('spotlight2sparql',
                  rpc_server/mdssvc/sparql_lexer.l
                  rpc_server/mdssvc/sparql_mapping.c''',
                  deps='samba3-util talloc ' + bld.env['libtracker'],
-                 enabled=bld.env.with_spotlight,
+                 enabled=bld.env.spotlight_backend_tracker,
                  install=False)
 
 bld.SAMBA3_BINARY('tevent_glib_glue_test',