From e2b50d04ad5eb5fa7c10b59cf5ba0cfe374ab240 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 14 Mar 1998 11:24:01 +0000 Subject: if a local parameter is changed at the global level then propogate the change to all shares that are currently set to the default value. (This used to be commit b0e1183b2cbeb7a3150b7250cd19d14c9e5508b6) --- source3/include/proto.h | 1 + source3/param/loadparm.c | 13 +++++++++++++ source3/web/swat.c | 24 +++++++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-) (limited to 'source3') diff --git a/source3/include/proto.h b/source3/include/proto.h index b324ae6bb1..9c7c37f1a6 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1017,6 +1017,7 @@ BOOL lp_add_printer(char *pszPrintername, int iDefaultService); BOOL lp_file_list_changed(void); void *lp_local_ptr(int snum, void *ptr); BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue); +BOOL lp_is_default(int snum, struct parm_struct *parm); struct parm_struct *lp_next_parameter(int snum, int *i, int allparameters); BOOL lp_snum_ok(int iService); BOOL lp_loaded(void); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 4bd167798c..27cbc8c8dd 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -1982,6 +1982,19 @@ static void dump_globals(FILE *f) } } +/*************************************************************************** +return True if a local parameter is currently set to the global default +***************************************************************************/ +BOOL lp_is_default(int snum, struct parm_struct *parm) +{ + int pdiff = PTR_DIFF(parm->ptr,&sDefault); + + return equal_parameter(parm->type, + ((char *)pSERVICE(snum)) + pdiff, + ((char *)&sDefault) + pdiff); +} + + /*************************************************************************** Display the contents of a single services record. ***************************************************************************/ diff --git a/source3/web/swat.c b/source3/web/swat.c index 323dfc5adf..650740428f 100644 --- a/source3/web/swat.c +++ b/source3/web/swat.c @@ -198,6 +198,27 @@ static int save_reload(void) +/* commit one parameter */ +static void commit_parameter(int snum, struct parm_struct *parm, char *v) +{ + int i; + char *s; + + if (snum < 0 && parm->class == P_LOCAL) { + /* this handles the case where we are changing a local + variable globally. We need to change the parameter in + all shares where it is currently set to the default */ + for (i=0;ilabel, v); + } + } + } + + lp_do_parameter(snum, parm->label, v); +} + /* commit a set of parameters for a service */ static void commit_parameters(int snum) { @@ -209,7 +230,8 @@ static void commit_parameters(int snum) while ((parm = lp_next_parameter(snum, &i, 1))) { sprintf(label, "parm_%s", parm->label); if ((v = cgi_variable(label))) { - lp_do_parameter(snum, parm->label, v); + if (parm->flags & FLAG_HIDE) continue; + commit_parameter(snum, parm, v); } } } -- cgit