summaryrefslogtreecommitdiffstats
path: root/source3/param/loadparm.c
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2014-02-25 18:14:44 +1300
committerAndrew Bartlett <abartlet@samba.org>2014-07-07 23:32:35 +0200
commiteda92c7a3d7040be1fb46184f34fdb038eeeb3c7 (patch)
treec0478859578f21b9d1b298cf8b27685d8067a4dd /source3/param/loadparm.c
parent93448f4be92d4e018aaf2f9705f0351360b2ed0f (diff)
downloadsamba-eda92c7a3d7040be1fb46184f34fdb038eeeb3c7.tar.gz
samba-eda92c7a3d7040be1fb46184f34fdb038eeeb3c7.tar.xz
samba-eda92c7a3d7040be1fb46184f34fdb038eeeb3c7.zip
param: Use the plus/minus syntax for reading in lists in s3 loadparm
This changes the behaviour the following parameters: server services, dcerpc endpoint servers and ntvfs handler These parameters were introduced with samba4 and are the parameters which should utilize the newer list syntax. This allows merging between the setting of parameters. Change-Id: Id6226b5bede5cd4908f6718bd1b799faf881927d Signed-off-by: Garming Sam <garming@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
Diffstat (limited to 'source3/param/loadparm.c')
-rw-r--r--source3/param/loadparm.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index c4dd803354..0b6a2a4124 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2685,6 +2685,37 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
}
case P_LIST:
+ {
+ char **new_list = str_list_make_v3(mem_ctx,
+ pszParmValue, NULL);
+ for (i=0; new_list[i]; i++) {
+ if (*(const char ***)parm_ptr != NULL &&
+ new_list[i][0] == '+' &&
+ new_list[i][1])
+ {
+ if (!str_list_check(*(const char ***)parm_ptr,
+ &new_list[i][1])) {
+ *(const char ***)parm_ptr = str_list_add(*(const char ***)parm_ptr,
+ &new_list[i][1]);
+ }
+ } else if (*(const char ***)parm_ptr != NULL &&
+ new_list[i][0] == '-' &&
+ new_list[i][1])
+ {
+ str_list_remove(*(const char ***)parm_ptr,
+ &new_list[i][1]);
+ } else {
+ if (i != 0) {
+ DEBUG(0, ("Unsupported list syntax for: %s = %s\n",
+ pszParmName, pszParmValue));
+ return false;
+ }
+ *(const char * const **)parm_ptr = (const char * const *) new_list;
+ break;
+ }
+ }
+ break;
+ }
case P_CMDLIST:
TALLOC_FREE(*((char ***)parm_ptr));
*(char ***)parm_ptr = str_list_make_v3(