mirror of
https://github.com/samba-team/samba.git
synced 2025-03-01 04:58:35 +03:00
s3-param check for aliases with both p_class and offset
This bug was found when comparing with the source4 loadparm code. Andrew Bartlett
This commit is contained in:
parent
6e6aaacedb
commit
3ab3159f75
@ -6359,6 +6359,7 @@ done:
|
||||
static bool is_synonym_of(int parm1, int parm2, bool *inverse)
|
||||
{
|
||||
if ((parm_table[parm1].offset == parm_table[parm2].offset) &&
|
||||
(parm_table[parm1].p_class == parm_table[parm2].p_class) &&
|
||||
(parm_table[parm1].flags & FLAG_HIDE) &&
|
||||
!(parm_table[parm2].flags & FLAG_HIDE))
|
||||
{
|
||||
@ -7483,10 +7484,13 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
|
||||
|
||||
/* this handles the aliases - set the copymap for other entries with
|
||||
the same data pointer */
|
||||
for (i = 0; parm_table[i].label; i++)
|
||||
if (parm_table[i].offset == parm_table[parmnum].offset)
|
||||
for (i = 0; parm_table[i].label; i++) {
|
||||
if ((parm_table[i].offset == parm_table[parmnum].offset)
|
||||
&& (parm_table[i].p_class == parm_table[parmnum].p_class)) {
|
||||
bitmap_clear(ServicePtrs[snum]->copymap, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* if it is a special case then go ahead */
|
||||
if (parm_table[parmnum].special) {
|
||||
@ -7567,10 +7571,14 @@ static bool lp_set_cmdline_helper(const char *pszParmName, const char *pszParmVa
|
||||
/* we have to also set FLAG_CMDLINE on aliases. Aliases must
|
||||
* be grouped in the table, so we don't have to search the
|
||||
* whole table */
|
||||
for (i=parmnum-1;i>=0 && parm_table[i].offset == parm_table[parmnum].offset;i--) {
|
||||
for (i=parmnum-1;
|
||||
i>=0 && parm_table[i].offset == parm_table[parmnum].offset
|
||||
&& parm_table[i].p_class == parm_table[parmnum].p_class;
|
||||
i--) {
|
||||
parm_table[i].flags |= FLAG_CMDLINE;
|
||||
}
|
||||
for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].offset == parm_table[parmnum].offset;i++) {
|
||||
for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].offset == parm_table[parmnum].offset
|
||||
&& parm_table[i].p_class == parm_table[parmnum].p_class;i++) {
|
||||
parm_table[i].flags |= FLAG_CMDLINE;
|
||||
}
|
||||
|
||||
@ -8044,7 +8052,9 @@ struct parm_struct *lp_next_parameter(int snum, int *i, int allparameters)
|
||||
|
||||
if ((*i) > 0
|
||||
&& (parm_table[*i].offset ==
|
||||
parm_table[(*i) - 1].offset))
|
||||
parm_table[(*i) - 1].offset)
|
||||
&& (parm_table[*i].p_class ==
|
||||
parm_table[(*i) - 1].p_class))
|
||||
continue;
|
||||
|
||||
if (is_default(*i) && !allparameters)
|
||||
@ -8231,7 +8241,8 @@ static void lp_save_defaults(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; parm_table[i].label; i++) {
|
||||
if (i > 0 && parm_table[i].offset == parm_table[i - 1].offset)
|
||||
if (i > 0 && parm_table[i].offset == parm_table[i - 1].offset
|
||||
&& parm_table[i].p_class == parm_table[i - 1].p_class)
|
||||
continue;
|
||||
switch (parm_table[i].type) {
|
||||
case P_LIST:
|
||||
|
Loading…
x
Reference in New Issue
Block a user