summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/param/loadparm.c56
1 files changed, 37 insertions, 19 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 12cb8db1d5..5229a5444a 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -3469,12 +3469,41 @@ static bool equal_parameter(parm_type type, void *ptr1, void *ptr2)
}
/***************************************************************************
- Initialize any local varients in the sDefault table.
+ Initialize any local variables in the sDefault table, after parsing a
+ [globals] section.
***************************************************************************/
void init_locals(void)
{
- /* None as yet. */
+ /*
+ * We run this check once the [globals] is parsed, to force
+ * the VFS objects and other per-share settings we need for
+ * the standard way a AD DC is operated. We may change these
+ * as our code evolves, which is why we force these settings.
+ *
+ * We can't do this at the end of lp_load_ex(), as by that
+ * point the services have been loaded and they will already
+ * have "" as their vfs objects.
+ */
+ if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC) {
+ const char **vfs_objects = lp_vfs_objects(-1);
+ if (!vfs_objects || !vfs_objects[0]) {
+ if (lp_parm_const_string(-1, "xattr_tdb", "file", NULL)) {
+ lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr xattr_tdb");
+ } else if (lp_parm_const_string(-1, "posix", "eadb", NULL)) {
+ lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr posix_eadb");
+ } else {
+ lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr");
+ }
+ }
+
+ lp_do_parameter(-1, "map hidden", "no");
+ lp_do_parameter(-1, "map system", "no");
+ lp_do_parameter(-1, "map readonly", "no");
+ lp_do_parameter(-1, "store dos attributes", "yes");
+ lp_do_parameter(-1, "create mask", "0777");
+ lp_do_parameter(-1, "directory mask", "0777");
+ }
}
/***************************************************************************
@@ -4887,17 +4916,13 @@ static bool lp_load_ex(const char *pszFname,
fault_configure(smb_panic_s3);
+ /*
+ * We run this check once the whole smb.conf is parsed, to
+ * force some settings for the standard way a AD DC is
+ * operated. We may changed these as our code evolves, which
+ * is why we force these settings.
+ */
if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC) {
- const char **vfs_objects = lp_vfs_objects(-1);
- if (!vfs_objects || !vfs_objects[0]) {
- if (lp_parm_const_string(-1, "xattr_tdb", "file", NULL)) {
- lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr xattr_tdb");
- } else if (lp_parm_const_string(-1, "posix", "eadb", NULL)) {
- lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr posix_eadb");
- } else {
- lp_do_parameter(-1, "vfs objects", "dfs_samba4 acl_xattr");
- }
- }
lp_do_parameter(-1, "passdb backend", "samba_dsdb");
lp_do_parameter(-1, "rpc_server:default", "external");
@@ -4909,13 +4934,6 @@ static bool lp_load_ex(const char *pszFname,
lp_do_parameter(-1, "rpc_server:spoolss", "embedded");
lp_do_parameter(-1, "rpc_daemon:spoolssd", "embedded");
lp_do_parameter(-1, "rpc_server:tcpip", "no");
-
- lp_do_parameter(-1, "map hidden", "no");
- lp_do_parameter(-1, "map system", "no");
- lp_do_parameter(-1, "map readonly", "no");
- lp_do_parameter(-1, "store dos attributes", "yes");
- lp_do_parameter(-1, "create mask", "0777");
- lp_do_parameter(-1, "directory mask", "0777");
}
bAllowIncludeRegistry = true;