From 65c0d86d18cb9b71d21c5018e8a6e50fde487d1e Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Wed, 6 May 2009 02:08:33 +0200 Subject: [PATCH] s3:loadparm: handle registry config source in file_list - fixes bug #6320 I.e. does not require smbd restart after changing share default options in the global registry section with "include = registry". Michael --- source/param/loadparm.c | 78 ++++++++++++++++++++++++++-------------------- 1 files changed, 44 insertions(+), 34 deletions(-) diff --git a/source/param/loadparm.c b/source/param/loadparm.c index c7b06a4..3908aef 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -670,6 +670,8 @@ static void set_server_role(void); static void set_default_server_announce_type(void); static void set_allowed_client_auth(void); +static void add_to_file_list(const char *fname, const char *subfname); + static const struct enum_list enum_protocol[] = { {PROTOCOL_NT1, "NT1"}, {PROTOCOL_LANMAN2, "LANMAN2"}, @@ -6606,6 +6608,8 @@ static bool process_registry_globals(void) goto done; } + add_to_file_list(INCLUDE_REGISTRY_NAME, INCLUDE_REGISTRY_NAME); + ret = do_parameter("registry shares", "yes", NULL); if (!ret) { goto done; @@ -6751,45 +6755,51 @@ bool lp_file_list_changed(void) DEBUG(6, ("lp_file_list_changed()\n")); - if (lp_config_backend_is_registry()) { - struct smbconf_ctx *conf_ctx = lp_smbconf_ctx(); - - if (conf_ctx == NULL) { - return false; - } - if (smbconf_changed(conf_ctx, &conf_last_csn, NULL, NULL)) { - DEBUGADD(6, ("registry config changed\n")); - return true; - } - } - while (f) { char *n2 = NULL; time_t mod_time; - n2 = alloc_sub_basic(get_current_username(), - current_user_info.domain, - f->name); - if (!n2) { - return false; - } - DEBUGADD(6, ("file %s -> %s last mod_time: %s\n", - f->name, n2, ctime(&f->modtime))); - - mod_time = file_modtime(n2); - - if (mod_time && ((f->modtime != mod_time) || (f->subfname == NULL) || (strcmp(n2, f->subfname) != 0))) { - DEBUGADD(6, - ("file %s modified: %s\n", n2, - ctime(&mod_time))); - f->modtime = mod_time; - SAFE_FREE(f->subfname); - f->subfname = n2; /* Passing ownership of - return from alloc_sub_basic - above. */ - return true; + if (strequal(f->name, INCLUDE_REGISTRY_NAME)) { + struct smbconf_ctx *conf_ctx = lp_smbconf_ctx(); + + if (conf_ctx == NULL) { + return false; + } + if (smbconf_changed(conf_ctx, &conf_last_csn, NULL, + NULL)) + { + DEBUGADD(6, ("registry config changed\n")); + return true; + } + } else { + n2 = alloc_sub_basic(get_current_username(), + current_user_info.domain, + f->name); + if (!n2) { + return false; + } + DEBUGADD(6, ("file %s -> %s last mod_time: %s\n", + f->name, n2, ctime(&f->modtime))); + + mod_time = file_modtime(n2); + + if (mod_time && + ((f->modtime != mod_time) || + (f->subfname == NULL) || + (strcmp(n2, f->subfname) != 0))) + { + DEBUGADD(6, + ("file %s modified: %s\n", n2, + ctime(&mod_time))); + f->modtime = mod_time; + SAFE_FREE(f->subfname); + f->subfname = n2; /* Passing ownership of + return from alloc_sub_basic + above. */ + return true; + } + SAFE_FREE(n2); } - SAFE_FREE(n2); f = f->next; } return (False); -- 1.6.0.2