summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs-xml/smbdotconf/misc/spotlight_backend.xml19
-rw-r--r--lib/param/loadparm.c2
-rw-r--r--lib/param/loadparm.h5
-rw-r--r--lib/param/param_table.c5
-rw-r--r--source3/param/loadparm.c1
-rw-r--r--source3/rpc_server/mdssvc/mdssvc.c28
-rw-r--r--source3/rpc_server/mdssvc/mdssvc.h2
-rw-r--r--source3/rpc_server/wscript_build16
-rw-r--r--source3/wscript32
-rw-r--r--source3/wscript_build2
10 files changed, 87 insertions, 25 deletions
diff --git a/docs-xml/smbdotconf/misc/spotlight_backend.xml b/docs-xml/smbdotconf/misc/spotlight_backend.xml
new file mode 100644
index 00000000000..3175d543f5e
--- /dev/null
+++ b/docs-xml/smbdotconf/misc/spotlight_backend.xml
@@ -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>
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 883d4167bf4..78510a338b9 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -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;
diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index 0b2e302d2a9..b57290da230 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -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.
*/
diff --git a/lib/param/param_table.c b/lib/param/param_table.c
index f9d3b55adf2..8b1d1e31f60 100644
--- a/lib/param/param_table.c
+++ b/lib/param/param_table.c
@@ -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:
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 9e97d719f4e..31819b3930c 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -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 = ""
};
diff --git a/source3/rpc_server/mdssvc/mdssvc.c b/source3/rpc_server/mdssvc/mdssvc.c
index d8dff563c1b..ef567595a4d 100644
--- a/source3/rpc_server/mdssvc/mdssvc.c
+++ b/source3/rpc_server/mdssvc/mdssvc.c
@@ -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;
diff --git a/source3/rpc_server/mdssvc/mdssvc.h b/source3/rpc_server/mdssvc/mdssvc.h
index e6ed08709ed..bd76476dd32 100644
--- a/source3/rpc_server/mdssvc/mdssvc.h
+++ b/source3/rpc_server/mdssvc/mdssvc.h
@@ -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;
diff --git a/source3/rpc_server/wscript_build b/source3/rpc_server/wscript_build
index 7907cbb78b0..91f1d16195d 100644
--- a/source3/rpc_server/wscript_build
+++ b/source3/rpc_server/wscript_build
@@ -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'))
diff --git a/source3/wscript b/source3/wscript
index d6333f03386..81480de3900 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -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
diff --git a/source3/wscript_build b/source3/wscript_build
index 091cbea7ab9..2c444155d8c 100644
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -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',