return 0;
}
+struct defaults_hook_data {
+ const char *name;
+ lpcfg_defaults_hook hook;
+ struct defaults_hook_data *prev, *next;
+} *defaults_hooks = NULL;
+
+
+bool lpcfg_register_defaults_hook(const char *name, lpcfg_defaults_hook hook)
+{
+ struct defaults_hook_data *hook_data = talloc(talloc_autofree_context(),
+ struct defaults_hook_data);
+ hook_data->name = talloc_strdup(hook_data, name);
+ hook_data->hook = hook;
+ DLIST_ADD(defaults_hooks, hook_data);
+ return false;
+}
+
/**
* Initialise the global parameter structure.
*
struct loadparm_context *lp_ctx;
struct parmlist_entry *parm;
char *logfile;
+ struct defaults_hook_data *defaults_hook;
lp_ctx = talloc_zero(mem_ctx, struct loadparm_context);
if (lp_ctx == NULL)
lpcfg_do_global_parameter(lp_ctx, "printjob username", "%U");
+ /* Allow modules to adjust defaults */
+ for (defaults_hook = defaults_hooks; defaults_hook;
+ defaults_hook = defaults_hook->next) {
+ bool ret;
+
+ ret = defaults_hook->hook(lp_ctx);
+ if (!ret) {
+ DEBUG(1, ("Defaults hook %s failed to run.",
+ defaults_hook->name));
+ talloc_free(lp_ctx);
+ return NULL;
+ }
+ }
+
for (i = 0; parm_table[i].label; i++) {
if (!(lp_ctx->flags[i] & FLAG_CMDLINE)) {
lp_ctx->flags[i] |= FLAG_DEFAULT;
}
}
-
return lp_ctx;
}
struct param_context;
struct smbsrv_connection;
+typedef bool (*lpcfg_defaults_hook) (struct loadparm_context *);
+
#define Auto (2)
#include "libds/common/roles.h"
struct dcerpc_server_info *lpcfg_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
struct gensec_settings *lpcfg_gensec_settings(TALLOC_CTX *, struct loadparm_context *);
+/* Hooks to override defaults.
+ *
+ * Every time a loadparm context is initialized, the hooks are
+ * called on it, once Samba itself has set defaults.
+ *
+ * This allows modules to tweak defaults (before any smb.conf file or registry
+ * is loaded). Usually they would do this by calling lpcfg_do_global_parameter
+ * or lpcfg_do_service_parameter.
+ *
+ * A good use case for this is OpenChange, which by default enables its
+ * DCE/RPC services when it is installed.
+ * */
+bool lpcfg_register_defaults_hook(const char *name, lpcfg_defaults_hook hook);
/* The following definitions come from param/util.c */