1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +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 used to be commit b0e1183b2c)
This commit is contained in:
Andrew Tridgell 1998-03-14 11:24:01 +00:00
parent a62ff8003e
commit e2b50d04ad
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);
}
}
}