1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-03 12:58:35 +03:00

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 commit is contained in:
Andrew Tridgell -
parent a565ff6050
commit b0e1183b2c
3 changed files with 37 additions and 1 deletions

View File

@ -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);

View File

@ -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.
***************************************************************************/

View File

@ -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;i<lp_numservices();i++) {
s = lp_servicename(i);
if (s && (*s) && lp_is_default(i, parm)) {
lp_do_parameter(i, parm->label, 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);
}
}
}