[PATCH] Merging loadparm further

Michael Adam obnox at samba.org
Tue Jul 29 04:58:05 MDT 2014


Hi Garming,

I am now done reviewing your patches.
Attached find my reviewed version. I:
- adapted a few commit messages
- fixed one formatting
- split one commit in 2
- replaced your comment fix by my comment removal
- added one loadparm patch on top

I indicated in the commit message by "(OBNOX:...)" where I changed
something.

I'm happy with thos changes pushed to master.
My two (trivial) patches would need a team-review.

The patches can also be found in my master-loadparm branch:

git://git.samba.org/obnox/samba/samba-obnox.git

https://git.samba.org/?p=obnox/samba/samba-obnox.git;a=shortlog;h=refs/heads/master-loadparm

Cheers - Michael


On 2014-07-26 at 02:20 +0200, Michael Adam wrote:
> Hi Garming,
> 
> nice progress!
> 
> On 2014-07-25 at 14:33 +1200, Garming Sam wrote:
> > Hi there,
> > 
> > I've run these patches through the usual tests and made sure each
> > patch passes the main tests we identified. It also passes the full
> > autobuild with the winbindd patches in my other mail.
> > 
> > This set of patches actually makes some good progress in merging the
> > two codebases. I managed to remove a reasonable chunk of code.
> > 
> >  lib/param/loadparm.c         | 239 ++++++++++++++++++++++++++----------
> >  lib/param/loadparm.h         |   1 -
> >  lib/param/s3_param.h         |   5 -
> >  source3/param/loadparm.c     | 414
> > +++++++++-----------------------------------------------------
> >  source3/param/loadparm_ctx.c |   5 -
> >  5 files changed, 235 insertions(+), 429 deletions(-)
> > 
> > 
> > Changes from now on should hopefully be quite a bit easier than it
> > was back when I started.
> > 
> > In particular, performing a 'do_parameter' is now equivalent and
> > setting defaults could be done from the same code.
> > 
> > A review would be appreciated.
> 
> I started to look at the patches, and while
> the general train of thought is obvious and
> the patches are clear, and most of them look
> good. But I would like to verify
> in a few places that the replaced calls are
> really equivalend.
> 
> 
> One trivial comment right away:
> 
> > >From 8d0a409e41728dd26b580d4bc722e4ebbe02efc4 Mon Sep 17 00:00:00 2001
> > From: Garming Sam <garming at catalyst.net.nz>
> > Date: Fri, 21 Mar 2014 09:36:04 +1300
> > Subject: [PATCH 09/28] lib/param: fix comment in lpcfg_service_ok
> > 
> > Change-Id: I111836be6d556e0e63c1e4129216f01c74e5e0d5
> > Signed-off-by: Garming Sam <garming at catalyst.net.nz>
> > Reviewed-by: Andrew Bartlett <abartlet at samba.org>
> > ---
> >  lib/param/loadparm.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
> > index 5aaef13..71ee4ad 100644
> > --- a/lib/param/loadparm.c
> > +++ b/lib/param/loadparm.c
> > @@ -964,7 +964,7 @@ bool lpcfg_service_ok(struct loadparm_service *service)
> >  		service->bAvailable = false;
> >  	}
> >  
> > -	/* If a service is flagged unavailable, log the fact at level 0. */
> > +	/* If a service is flagged unavailable, log the fact at level 1. */
> >  	if (!service->bAvailable)
> >  		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
> >  			  service->szService));
> > -- 
> > 1.8.3.2
> 
> I'd rather remove that comment altogehter: It is redundant.
> Alternative patch attached. ;-)
> 
> Cheers - Michael
> 
> 

> From 039412b071ec12492ec1163b88ae45c6e8220335 Mon Sep 17 00:00:00 2001
> From: Michael Adam <obnox at samba.org>
> Date: Sat, 26 Jul 2014 02:17:07 +0200
> Subject: [PATCH] lib/param: remove a redundant (and wrong) comment from
>  lpcfg_service_ok()
> 
> Signed-off-by: Michael Adam <obnox at samba.org>
> ---
>  lib/param/loadparm.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
> index b58a058..cfee591 100644
> --- a/lib/param/loadparm.c
> +++ b/lib/param/loadparm.c
> @@ -964,7 +964,6 @@ static bool lpcfg_service_ok(struct loadparm_service *service)
>  			service->browseable = false;
>  	}
>  
> -	/* If a service is flagged unavailable, log the fact at level 0. */
>  	if (!service->bAvailable)
>  		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
>  			  service->szService));
> -- 
> 1.9.1
> 



-------------- next part --------------
From 38022a24541eb7c8135542cd048de4caa7075d48 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 20 Mar 2014 15:16:37 +1300
Subject: [PATCH 01/31] s3:param: simplify lp_do_parameter to use lpcfg
 functions

Change-Id: I907794fbbc15ecc4e88e0f6b0d510788e0fca745
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 84 +++++-------------------------------------------
 1 file changed, 8 insertions(+), 76 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index deaba21..f4e2dd1 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2571,82 +2571,9 @@ void *lp_parm_ptr(struct loadparm_service *service, struct parm_struct *parm)
 
 bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
 {
-	int parmnum, i;
-	void *parm_ptr = NULL;	/* where we are going to store the result */
-	struct parmlist_entry **opt_list;
-	TALLOC_CTX *mem_ctx;
 	TALLOC_CTX *frame = talloc_stackframe();
-	bool ok;
 	struct loadparm_context *lp_ctx;
-	struct loadparm_service *service = NULL;
-
-	parmnum = lpcfg_map_parameter(pszParmName);
-
-	if (parmnum < 0) {
-		if (strchr(pszParmName, ':') == NULL) {
-			DEBUG(0, ("Ignoring unknown parameter \"%s\"\n",
-				  pszParmName));
-			TALLOC_FREE(frame);
-			return true;
-		}
-
-		/*
-		 * We've got a parametric option
-		 */
-
-		if (snum < 0) {
-			opt_list = &Globals.param_opt;
-			set_param_opt(NULL, opt_list, pszParmName, pszParmValue, 0);
-		} else {
-			opt_list = &ServicePtrs[snum]->param_opt;
-			set_param_opt(ServicePtrs[snum], opt_list, pszParmName, pszParmValue, 0);
-		}
-
-		TALLOC_FREE(frame);
-		return true;
-	}
-
-	/* if it's already been set by the command line, then we don't
-	   override here */
-	if (flags_list[parmnum] & FLAG_CMDLINE) {
-		TALLOC_FREE(frame);
-		return true;
-	}
-
-	if (parm_table[parmnum].flags & FLAG_DEPRECATED) {
-		DEBUG(1, ("WARNING: The \"%s\" option is deprecated\n",
-			  pszParmName));
-	}
-
-	/* we might point at a service, the default service or a global */
-	if (snum < 0) {
-		parm_ptr = lp_parm_ptr(NULL, &parm_table[parmnum]);
-		mem_ctx = Globals.ctx;
-	} else {
-		if (parm_table[parmnum].p_class == P_GLOBAL) {
-			DEBUG(0,
-			      ("Global parameter %s found in service section!\n",
-			       pszParmName));
-			TALLOC_FREE(frame);
-			return true;
-		}
-		parm_ptr = lp_parm_ptr(ServicePtrs[snum], &parm_table[parmnum]);
-
-		if (!ServicePtrs[snum]->copymap)
-			init_copymap(ServicePtrs[snum]);
-
-		/* 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)
-			    && (parm_table[i].p_class == parm_table[parmnum].p_class)) {
-				bitmap_clear(ServicePtrs[snum]->copymap, i);
-			}
-		}
-
-		mem_ctx = ServicePtrs[snum];
-		service = ServicePtrs[snum];
-	}
+	bool ok;
 
 	lp_ctx = loadparm_init_s3(frame,
 				  loadparm_s3_helpers());
@@ -2661,8 +2588,13 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
 	lp_ctx->bInGlobalSection = bInGlobalSection;
 	lp_ctx->flags = flags_list;
 
-	ok = set_variable(mem_ctx, service, parmnum, parm_ptr, pszParmName, pszParmValue,
-			    lp_ctx, (snum < 0));
+	if (snum < 0) {
+		ok = lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue);
+	} else {
+		ok = lpcfg_do_service_parameter(lp_ctx, ServicePtrs[snum],
+						pszParmName, pszParmValue);
+	}
+
 	TALLOC_FREE(frame);
 
 	return ok;
-- 
1.9.1


From 9f1e0f6a734976d6b92b9ded3a351d515a279241 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Wed, 9 Jul 2014 13:15:33 +1200
Subject: [PATCH 02/31] param: Use the correct flag locations with
 lpcfg_parm_is_cmdline

s3 flags are no longer being stored in the param table anymore.
They shouldn't be used in this manner anymore.

Change-Id: Ib97492fd9149e30d7756ca603f79321d7516f19b
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index b58a058..07f32a2 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -770,14 +770,6 @@ bool lpcfg_parm_is_cmdline(struct loadparm_context *lp_ctx, const char *name)
 {
 	int parmnum;
 
-	if (lp_ctx->s3_fns) {
-		struct parm_struct *parm = lp_ctx->s3_fns->get_parm_struct(name);
-		if (parm) {
-			return parm->flags & FLAG_CMDLINE;
-		}
-		return false;
-	}
-
 	parmnum = lpcfg_map_parameter(name);
 	if (parmnum == -1) return false;
 
-- 
1.9.1


From 0860803ca24b715460e0e3da69e6699c3ca8b6b5 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 20 Mar 2014 14:38:37 +1300
Subject: [PATCH 03/31] (OBNOX:fixed commit msg)s3:param: use
 lpcfg_do_*_paramter instead of lp_do_parameter in do_parameter

Change-Id: I08ab5d9db9323a2ef4fa2243ff0b0b7efe73a23b
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index f4e2dd1..d75c8c1 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2673,8 +2673,12 @@ static bool do_parameter(const char *pszParmName, const char *pszParmValue,
 
 	DEBUGADD(4, ("doing parameter %s = %s\n", pszParmName, pszParmValue));
 
-	return (lp_do_parameter(bInGlobalSection ? -2 : iServiceIndex,
-				pszParmName, pszParmValue));
+	if (bInGlobalSection) {
+		return lpcfg_do_global_parameter(userdata, pszParmName, pszParmValue);
+	} else {
+		return lpcfg_do_service_parameter(userdata, ServicePtrs[iServiceIndex],
+						  pszParmName, pszParmValue);
+	}
 }
 
 /***************************************************************************
@@ -2722,6 +2726,7 @@ static void init_locals(void)
 
 bool lp_do_section(const char *pszSectionName, void *userdata)
 {
+	struct loadparm_context *lp_ctx = (struct loadparm_context *)userdata;
 	bool bRetval;
 	bool isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
 			 (strwicmp(pszSectionName, GLOBAL_NAME2) == 0));
@@ -2733,6 +2738,7 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 
 	/* if we've just struck a global section, note the fact. */
 	bInGlobalSection = isglobal;
+	lp_ctx->bInGlobalSection = isglobal;
 
 	/* check for multiple global sections */
 	if (bInGlobalSection) {
@@ -3876,6 +3882,7 @@ static bool lp_load_ex(const char *pszFname,
 	char *n2 = NULL;
 	bool bRetval;
 	TALLOC_CTX *frame = talloc_stackframe();
+	struct loadparm_context *lp_ctx;
 
 	bRetval = false;
 
@@ -3885,6 +3892,12 @@ static bool lp_load_ex(const char *pszFname,
 	bGlobalOnly = global_only;
 	bAllowIncludeRegistry = allow_include_registry;
 
+	lp_ctx = loadparm_init_s3(talloc_tos(),
+				  loadparm_s3_helpers());
+
+	lp_ctx->sDefault = &sDefault;
+	lp_ctx->bInGlobalSection = bInGlobalSection;
+
 	init_globals(initialize_globals);
 
 	free_file_list();
@@ -3914,7 +3927,7 @@ static bool lp_load_ex(const char *pszFname,
 
 		add_to_file_list(NULL, &file_lists, pszFname, n2);
 
-		bRetval = pm_process(n2, lp_do_section, do_parameter, NULL);
+		bRetval = pm_process(n2, lp_do_section, do_parameter, lp_ctx);
 		TALLOC_FREE(n2);
 
 		/* finish up the last section */
@@ -3934,6 +3947,8 @@ static bool lp_load_ex(const char *pszFname,
 			 * for config_backend. Otherwise, init_globals would
 			 *  send us into an endless loop here.
 			 */
+			TALLOC_FREE(lp_ctx);
+
 			config_backend = CONFIG_BACKEND_REGISTRY;
 			/* start over */
 			DEBUG(1, ("lp_load_ex: changing to config backend "
-- 
1.9.1


From 57efec353675038977c998dbc21c1faca2d2b488 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 20 Mar 2014 15:19:15 +1300
Subject: [PATCH 04/31] s3:param: add lp_ctx as a parameter to init_globals

Change-Id: I8804923241d782eb82675c5a56d53b5ba720fdf0
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index d75c8c1..2dbc2538 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -630,7 +630,7 @@ static bool apply_lp_set_cmdline(void)
  Initialise the global parameter structure.
 ***************************************************************************/
 
-static void init_globals(bool reinit_globals)
+static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
 {
 	static bool done_init = false;
 	char *s = NULL;
@@ -3898,7 +3898,7 @@ static bool lp_load_ex(const char *pszFname,
 	lp_ctx->sDefault = &sDefault;
 	lp_ctx->bInGlobalSection = bInGlobalSection;
 
-	init_globals(initialize_globals);
+	init_globals(lp_ctx, initialize_globals);
 
 	free_file_list();
 
@@ -3947,13 +3947,15 @@ static bool lp_load_ex(const char *pszFname,
 			 * for config_backend. Otherwise, init_globals would
 			 *  send us into an endless loop here.
 			 */
-			TALLOC_FREE(lp_ctx);
 
 			config_backend = CONFIG_BACKEND_REGISTRY;
 			/* start over */
 			DEBUG(1, ("lp_load_ex: changing to config backend "
 				  "registry\n"));
-			init_globals(true);
+			init_globals(lp_ctx, true);
+
+			TALLOC_FREE(lp_ctx);
+
 			lp_kill_all_services();
 			ok = lp_load_ex(pszFname, global_only, save_defaults,
 					add_ipc, initialize_globals,
-- 
1.9.1


From 2211db43f26cca4ba2c98cfe7c16952898c11b10 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 09:10:52 +1300
Subject: [PATCH 05/31] (OBNOX: split s3-funcs part)param: remove unnecessary
 uses of lp_string_set

Change-Id: I190e8b62dee24c998f388eae1cc9558e6b8bc925
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 07f32a2..4f13c78 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1082,15 +1082,9 @@ bool handle_realm(struct loadparm_context *lp_ctx, struct loadparm_service *serv
 		return false;
 	}
 
-	if (lp_ctx->s3_fns != NULL) {
-		lp_ctx->s3_fns->lp_string_set(ptr, pszParmValue);
-		lp_ctx->s3_fns->lp_string_set(&lp_ctx->globals->realm, upper);
-		lp_ctx->s3_fns->lp_string_set(&lp_ctx->globals->dnsdomain, lower);
-	} else {
-		lpcfg_string_set(lp_ctx, ptr, pszParmValue);
-		lpcfg_string_set(lp_ctx, &lp_ctx->globals->realm, upper);
-		lpcfg_string_set(lp_ctx, &lp_ctx->globals->dnsdomain, lower);
-	}
+	lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
+	lpcfg_string_set(lp_ctx->globals->ctx, &lp_ctx->globals->realm, upper);
+	lpcfg_string_set(lp_ctx->globals->ctx, &lp_ctx->globals->dnsdomain, lower);
 
 	return true;
 }
@@ -1166,11 +1160,7 @@ bool handle_copy(struct loadparm_context *lp_ctx, struct loadparm_service *servi
 bool handle_debug_list(struct loadparm_context *lp_ctx, struct loadparm_service *service,
 			const char *pszParmValue, char **ptr)
 {
-	if (lp_ctx->s3_fns != NULL) {
-		lp_ctx->s3_fns->lp_string_set(ptr, pszParmValue);
-	} else {
-		lpcfg_string_set(lp_ctx, ptr, pszParmValue);
-	}
+	lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
 
 	return debug_parse_levels(pszParmValue);
 }
@@ -1178,13 +1168,12 @@ bool handle_debug_list(struct loadparm_context *lp_ctx, struct loadparm_service
 bool handle_logfile(struct loadparm_context *lp_ctx, struct loadparm_service *service,
 		    const char *pszParmValue, char **ptr)
 {
-	if (lp_ctx->s3_fns != NULL) {
-		lp_ctx->s3_fns->lp_string_set(ptr, pszParmValue);
-	} else {
+	if (lp_ctx->s3_fns == NULL) {
 		debug_set_logfile(pszParmValue);
-		lpcfg_string_set(lp_ctx, ptr, pszParmValue);
 	}
 
+	lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
+
 	return true;
 }
 
@@ -1197,16 +1186,14 @@ bool handle_charset(struct loadparm_context *lp_ctx, struct loadparm_service *se
 {
 	if (lp_ctx->s3_fns) {
 		if (*ptr == NULL || strcmp(*ptr, pszParmValue) != 0) {
-			lp_ctx->s3_fns->lp_string_set(ptr, pszParmValue);
 			global_iconv_handle = smb_iconv_handle_reinit(NULL,
 							lpcfg_dos_charset(lp_ctx),
 							lpcfg_unix_charset(lp_ctx),
 							true, global_iconv_handle);
 		}
 
-		return true;
 	}
-	return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
+	return lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
 
 }
 
@@ -1243,16 +1230,14 @@ bool handle_dos_charset(struct loadparm_context *lp_ctx, struct loadparm_service
 					DEFAULT_DOS_CHARSET));
 				pszParmValue = DEFAULT_DOS_CHARSET;
 			}
-			lp_ctx->s3_fns->lp_string_set(ptr, pszParmValue);
 			global_iconv_handle = smb_iconv_handle_reinit(NULL,
 							lpcfg_dos_charset(lp_ctx),
 							lpcfg_unix_charset(lp_ctx),
 							true, global_iconv_handle);
 		}
-		return true;
 	}
 
-	return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
+	return lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
 }
 
 bool handle_printing(struct loadparm_context *lp_ctx, struct loadparm_service *service,
-- 
1.9.1


From 9b216e4ee9690699d9583cc1d186870cf2a56ea0 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Tue, 29 Jul 2014 12:05:22 +0200
Subject: [PATCH 06/31] (OBNOX:split from previous commit)s3:param: remove
 lp_string_set from the s3_fns.

This is not used any more.

Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/s3_param.h         | 1 -
 source3/param/loadparm_ctx.c | 1 -
 2 files changed, 2 deletions(-)

diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index 1d499cd..b3dc3f8 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -14,7 +14,6 @@ struct loadparm_s3_helpers
 	bool (*store_cmdline)(const char *pszParmName, const char *pszParmValue);
 	void (*dump)(FILE *f, bool show_defaults, int maxtoprint);
 	char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
-	bool (*lp_string_set)(char **dest, const char *src);
 	bool (*lp_include)(struct loadparm_context*, struct loadparm_service *,
 		       	const char *, char **);
 	void (*init_printer_values)(TALLOC_CTX *, struct loadparm_service *);
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index a3a7284..00ae19d 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -69,7 +69,6 @@ static struct loadparm_s3_helpers s3_fns =
 	.store_cmdline = store_lp_set_cmdline,
 	.dump = lp_dump,
 	.lp_string = lp_string,
-	.lp_string_set = lp_string_set,
 	.lp_include = lp_include,
 	.init_printer_values = init_printer_values,
 	.init_ldap_debugging = init_ldap_debugging,
-- 
1.9.1


From 2267b611bad1855be2b0a07485dc65d5406e848f Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 29 Jul 2014 12:09:39 +0200
Subject: [PATCH 07/31] s3:param: remove unused function lp_string_set()

Signed-off-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.h     | 1 -
 source3/param/loadparm.c | 4 ----
 2 files changed, 5 deletions(-)

diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index 79f12cb..aa8c902 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -280,7 +280,6 @@ bool lp_is_security_and_server_role_valid(int server_role, int security);
 struct loadparm_global * get_globals(void);
 unsigned int * get_flags(void);
 char * lp_string(TALLOC_CTX *, const char *);
-bool lp_string_set(char **, const char *);
 int getservicebyname(const char *, struct loadparm_service *);
 bool lp_include(struct loadparm_context *, struct loadparm_service *,
 	       	const char *, char **);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 2dbc2538..e8c4c02 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -302,10 +302,6 @@ static bool string_set(TALLOC_CTX *mem_ctx, char **dest,const char *src)
 	return true;
 }
 
-bool lp_string_set(char **dest, const char *src) {
-	return string_set(Globals.ctx, dest, src);
-}
-
 /***************************************************************************
  Initialise the sDefault parameter structure for the printer values.
 ***************************************************************************/
-- 
1.9.1


From 8c3be964405d9ff60c06ee0d22baa1ded6ca8dab Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 09:30:26 +1300
Subject: [PATCH 08/31] (OBNOX:fixed formatting)param: add extra condition in
 lpcfg_service_ok

Change-Id: Id9a95748904516fd34869fee61b1e85b6d14f083
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 4f13c78..726aedf 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -956,6 +956,15 @@ static bool lpcfg_service_ok(struct loadparm_service *service)
 			service->browseable = false;
 	}
 
+	if (service->path[0] == '\0' &&
+	    strwicmp(service->szService, HOMES_NAME) != 0 &&
+	    service->msdfs_proxy[0] == '\0')
+	{
+		DEBUG(0, ("WARNING: No path in service %s - making it unavailable!\n",
+			service->szService));
+		service->bAvailable = false;
+	}
+
 	/* If a service is flagged unavailable, log the fact at level 0. */
 	if (!service->bAvailable)
 		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
-- 
1.9.1


From 24ea524fcb2a5b023b4f46ad3afcd5e74736d337 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 09:33:01 +1300
Subject: [PATCH 09/31] param: use lpcfg_service_ok in s3 loadparm

Change-Id: Ic157d3f5ec7ac9a72db86239e76cd743149cb8e0
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c     | 3 +--
 source3/param/loadparm.c | 6 +++---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 726aedf..ed09112 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -229,7 +229,6 @@ FN_GLOBAL_CONST_STRING(dnsdomain, dnsdomain)
 /* local prototypes */
 static struct loadparm_service *lpcfg_getservicebyname(struct loadparm_context *lp_ctx,
 					const char *pszServiceName);
-static bool lpcfg_service_ok(struct loadparm_service *service);
 static bool do_section(const char *pszSectionName, void *);
 static bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
 				const char *pszParmName, const char *pszParmValue);
@@ -932,7 +931,7 @@ void copy_service(struct loadparm_service *pserviceDest,
  * Check a service for consistency. Return False if the service is in any way
  * incomplete or faulty, else True.
  */
-static bool lpcfg_service_ok(struct loadparm_service *service)
+bool lpcfg_service_ok(struct loadparm_service *service)
 {
 	bool bRetval;
 
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index e8c4c02..cce4b3a 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2097,7 +2097,7 @@ static bool process_smbconf_service(struct smbconf_service *service)
 		}
 	}
 	if (iServiceIndex >= 0) {
-		return service_ok(iServiceIndex);
+		return lpcfg_service_ok(ServicePtrs[iServiceIndex]);
 	}
 	return true;
 }
@@ -2749,7 +2749,7 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 	bRetval = true;
 
 	if (iServiceIndex >= 0)
-		bRetval = service_ok(iServiceIndex);
+		bRetval = lpcfg_service_ok(ServicePtrs[iServiceIndex]);
 
 	/* if all is still well, move to the next record in the services array */
 	if (bRetval) {
@@ -3930,7 +3930,7 @@ static bool lp_load_ex(const char *pszFname,
 		DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval)));
 		if (bRetval) {
 			if (iServiceIndex >= 0) {
-				bRetval = service_ok(iServiceIndex);
+				bRetval = lpcfg_service_ok(ServicePtrs[iServiceIndex]);
 			}
 		}
 
-- 
1.9.1


From c83d8ad49a89eeb4b01e6bbec09e145a6d876985 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 09:34:18 +1300
Subject: [PATCH 10/31] (OBNOX:also removed prototype)param: remove unused
 service_ok function

Change-Id: I0736a3b9b73aa80f529327ec70e856dd7fc008c6
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/include/proto.h  |  1 -
 source3/param/loadparm.c | 46 ----------------------------------------------
 2 files changed, 47 deletions(-)

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 285ec7b..c4d1606 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1023,7 +1023,6 @@ bool lp_canonicalize_parameter_with_value(const char *parm_name,
 void show_parameter_list(void);
 bool lp_invert_boolean(const char *str, const char **inverse_str);
 bool lp_canonicalize_boolean(const char *str, const char**canon_str);
-bool service_ok(int iService);
 bool process_registry_service(const char *service_name);
 bool process_registry_shares(void);
 bool lp_config_backend_is_registry(void);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index cce4b3a..fe7b4b1 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2002,52 +2002,6 @@ struct loadparm_service *lp_default_loadparm_service()
 	return &sDefault;
 }
 
-/***************************************************************************
-Check a service for consistency. Return false if the service is in any way
-incomplete or faulty, else true.
-***************************************************************************/
-
-bool service_ok(int iService)
-{
-	bool bRetval;
-
-	bRetval = true;
-	if (ServicePtrs[iService]->szService[0] == '\0') {
-		DEBUG(0, ("The following message indicates an internal error:\n"));
-		DEBUG(0, ("No service name in service entry.\n"));
-		bRetval = false;
-	}
-
-	/* The [printers] entry MUST be printable. I'm all for flexibility, but */
-	/* I can't see why you'd want a non-printable printer service...        */
-	if (strwicmp(ServicePtrs[iService]->szService, PRINTERS_NAME) == 0) {
-		if (!ServicePtrs[iService]->printable) {
-			DEBUG(0, ("WARNING: [%s] service MUST be printable!\n",
-			       ServicePtrs[iService]->szService));
-			ServicePtrs[iService]->printable = true;
-		}
-		/* [printers] service must also be non-browsable. */
-		if (ServicePtrs[iService]->browseable)
-			ServicePtrs[iService]->browseable = false;
-	}
-
-	if (ServicePtrs[iService]->path[0] == '\0' &&
-	    strwicmp(ServicePtrs[iService]->szService, HOMES_NAME) != 0 &&
-	    ServicePtrs[iService]->msdfs_proxy[0] == '\0'
-	    ) {
-		DEBUG(0, ("WARNING: No path in service %s - making it unavailable!\n",
-			ServicePtrs[iService]->szService));
-		ServicePtrs[iService]->bAvailable = false;
-	}
-
-	/* If a service is flagged unavailable, log the fact at level 1. */
-	if (!ServicePtrs[iService]->bAvailable)
-		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
-			  ServicePtrs[iService]->szService));
-
-	return (bRetval);
-}
-
 static struct smbconf_ctx *lp_smbconf_ctx(void)
 {
 	sbcErr err;
-- 
1.9.1


From c406c3d756a8e62b20b5eaa24e3f2021fe3b3d09 Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Tue, 29 Jul 2014 12:19:23 +0200
Subject: [PATCH 11/31] param: remove a redundant (and wrong) comment frop
 lpcfg_service_ok()

Signed-off-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index ed09112..bc2c708 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -964,7 +964,6 @@ bool lpcfg_service_ok(struct loadparm_service *service)
 		service->bAvailable = false;
 	}
 
-	/* If a service is flagged unavailable, log the fact at level 0. */
 	if (!service->bAvailable)
 		DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
 			  service->szService));
-- 
1.9.1


From e070fb1dda81c836b2297267379ed96c458e4c8f Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 10:27:46 +1300
Subject: [PATCH 12/31] param: make is_default more generic

Change-Id: Ie380bb7083d96e4ebb1574b7d1e3df0b34f70352
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index bc2c708..939ed3f 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1996,9 +1996,9 @@ static bool do_section(const char *pszSectionName, void *userdata)
  * Determine if a particular base parameter is currently set to the default value.
  */
 
-static bool is_default(struct loadparm_service *sDefault, int i)
+static bool is_default(void *base_structure, int i)
 {
-	void *def_ptr = ((char *)sDefault) + parm_table[i].offset;
+	void *def_ptr = ((char *)base_structure) + parm_table[i].offset;
 	switch (parm_table[i].type) {
 		case P_CMDLIST:
 		case P_LIST:
-- 
1.9.1


From 18c85a72543fec95834bcab8c3b943f8718fa7e3 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 15:33:03 +1300
Subject: [PATCH 13/31] param: remove is_default method in s3

Change-Id: Ia9c7422c5f7b56eb81ad644b369bfa36849e963e
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c     |  2 +-
 source3/param/loadparm.c | 42 +-----------------------------------------
 2 files changed, 2 insertions(+), 42 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 939ed3f..5f6257f 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1996,7 +1996,7 @@ static bool do_section(const char *pszSectionName, void *userdata)
  * Determine if a particular base parameter is currently set to the default value.
  */
 
-static bool is_default(void *base_structure, int i)
+bool is_default(void *base_structure, int i)
 {
 	void *def_ptr = ((char *)base_structure) + parm_table[i].offset;
 	switch (parm_table[i].type) {
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index fe7b4b1..c59523a 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2724,46 +2724,6 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 	return bRetval;
 }
 
-
-/***************************************************************************
- Determine if a partcular base parameter is currentl set to the default value.
-***************************************************************************/
-
-static bool is_default(int i)
-{
-	switch (parm_table[i].type) {
-		case P_LIST:
-		case P_CMDLIST:
-			return str_list_equal((const char * const *)parm_table[i].def.lvalue,
-					      *(const char ***)lp_parm_ptr(NULL, 
-									   &parm_table[i]));
-		case P_STRING:
-		case P_USTRING:
-			return strequal(parm_table[i].def.svalue,
-					*(char **)lp_parm_ptr(NULL, 
-							      &parm_table[i]));
-		case P_BOOL:
-		case P_BOOLREV:
-			return parm_table[i].def.bvalue ==
-				*(bool *)lp_parm_ptr(NULL, 
-						     &parm_table[i]);
-		case P_CHAR:
-			return parm_table[i].def.cvalue ==
-				*(char *)lp_parm_ptr(NULL, 
-						     &parm_table[i]);
-		case P_INTEGER:
-		case P_OCTAL:
-		case P_ENUM:
-		case P_BYTES:
-			return parm_table[i].def.ivalue ==
-				*(int *)lp_parm_ptr(NULL, 
-						    &parm_table[i]);
-		case P_SEP:
-			break;
-	}
-	return false;
-}
-
 /***************************************************************************
 Display the contents of the global structure.
 ***************************************************************************/
@@ -2779,7 +2739,7 @@ static void dump_globals(FILE *f, bool show_defaults)
 		if (parm_table[i].p_class == P_GLOBAL &&
 		    !(parm_table[i].flags & FLAG_META) &&
 		    (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
-			if (show_defaults && is_default(i))
+			if (show_defaults && is_default(&Globals, i))
 				continue;
 			fprintf(f, "\t%s = ", parm_table[i].label);
 			lpcfg_print_parameter(&parm_table[i], lp_parm_ptr(NULL,
-- 
1.9.1


From 191744c2b23817bbbab6090ee8366c48eb0b91f5 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 10:44:15 +1300
Subject: [PATCH 14/31] param: allow dump_globals to check the actual defaults

Change-Id: Ia5f30b6922b2e836d3e93403c61458ee58d993fd
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 5f6257f..3cbc347 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2040,8 +2040,16 @@ static void dump_globals(struct loadparm_context *lp_ctx, FILE *f,
 	for (i = 0; parm_table[i].label; i++)
 		if (parm_table[i].p_class == P_GLOBAL &&
 		    (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
-			if (!show_defaults && (lp_ctx->flags[i] & FLAG_DEFAULT))
-				continue;
+			if (!show_defaults) {
+				if (lp_ctx->flags && (lp_ctx->flags[i] & FLAG_DEFAULT)) {
+					continue;
+				}
+
+				if (is_default(lp_ctx->globals, i)) {
+					continue;
+				}
+			}
+
 			fprintf(f, "\t%s = ", parm_table[i].label);
 			lpcfg_print_parameter(&parm_table[i], lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[i]), f);
 			fprintf(f, "\n");
-- 
1.9.1


From 90d62393185ebe8227e8769b6b3d36200dd71501 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 21 Mar 2014 10:45:51 +1300
Subject: [PATCH 15/31] param: rename dump_globals

Change-Id: Ia587b8c968dedfcf9b3374d4a4f87bfaa37b01be
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 3cbc347..a625326 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2029,7 +2029,7 @@ bool is_default(void *base_structure, int i)
  *Display the contents of the global structure.
  */
 
-static void dump_globals(struct loadparm_context *lp_ctx, FILE *f,
+static void lpcfg_dump_globals(struct loadparm_context *lp_ctx, FILE *f,
 			 bool show_defaults)
 {
 	int i;
@@ -2844,7 +2844,7 @@ void lpcfg_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
 		return;
 	}
 
-	dump_globals(lp_ctx, f, show_defaults);
+	lpcfg_dump_globals(lp_ctx, f, show_defaults);
 
 	lpcfg_dump_a_service(lp_ctx->sDefault, lp_ctx->sDefault, f, lp_ctx->flags, show_defaults);
 
-- 
1.9.1


From 95d39977a8037e92e0bd542795d2ac76786c90f0 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 08:51:56 +1300
Subject: [PATCH 16/31] param: use lpcfg_dump_globals in s3 loadparm

Change-Id: I7f7f5238a47e0c3634757b74f3f852ce36988614
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c     |  2 +-
 source3/param/loadparm.c | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index a625326..01b6334 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2029,7 +2029,7 @@ bool is_default(void *base_structure, int i)
  *Display the contents of the global structure.
  */
 
-static void lpcfg_dump_globals(struct loadparm_context *lp_ctx, FILE *f,
+void lpcfg_dump_globals(struct loadparm_context *lp_ctx, FILE *f,
 			 bool show_defaults)
 {
 	int i;
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index c59523a..04532e7 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -4059,11 +4059,22 @@ Display the contents of the services array in human-readable form.
 void lp_dump(FILE *f, bool show_defaults, int maxtoprint)
 {
 	int iService;
+	struct loadparm_context *lp_ctx;
 
 	if (show_defaults)
 		defaults_saved = false;
 
-	dump_globals(f, defaults_saved);
+	lp_ctx = loadparm_init_s3(talloc_tos(),
+				  loadparm_s3_helpers());
+	if (lp_ctx == NULL) {
+		DEBUG(0, ("loadparm_init_s3 failed\n"));
+		return;
+	}
+
+	lp_ctx->sDefault = &sDefault;
+	lp_ctx->services = ServicePtrs;
+
+	lpcfg_dump_globals(lp_ctx, f, !defaults_saved);
 
 	lpcfg_dump_a_service(&sDefault, &sDefault, f, flags_list, show_defaults);
 
-- 
1.9.1


From 55161ddd0ad70497fa704ca2eb357467acc3f951 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 15:04:12 +1300
Subject: [PATCH 17/31] param: remove unused dump_globals

Change-Id: Id55884c2809ada9c37a4ae306f3a09ecee0fe992
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 37 -------------------------------------
 1 file changed, 37 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 04532e7..2f0da60 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2725,43 +2725,6 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 }
 
 /***************************************************************************
-Display the contents of the global structure.
-***************************************************************************/
-
-static void dump_globals(FILE *f, bool show_defaults)
-{
-	int i;
-	struct parmlist_entry *data;
-
-	fprintf(f, "[global]\n");
-
-	for (i = 0; parm_table[i].label; i++)
-		if (parm_table[i].p_class == P_GLOBAL &&
-		    !(parm_table[i].flags & FLAG_META) &&
-		    (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
-			if (show_defaults && is_default(&Globals, i))
-				continue;
-			fprintf(f, "\t%s = ", parm_table[i].label);
-			lpcfg_print_parameter(&parm_table[i], lp_parm_ptr(NULL,
-									  &parm_table[i]),
-					f);
-			fprintf(f, "\n");
-	}
-	if (Globals.param_opt != NULL) {
-		data = Globals.param_opt;
-		while(data) {
-			if (!show_defaults && (data->priority & FLAG_DEFAULT)) {
-				data = data->next;
-				continue;
-			}
-			fprintf(f, "\t%s = %s\n", data->key, data->value);
-			data = data->next;
-		}
-        }
-
-}
-
-/***************************************************************************
  Display the contents of a parameter of a single services record.
 ***************************************************************************/
 
-- 
1.9.1


From ac797a2878b08899af19ab2c806729e977064456 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Wed, 9 Jul 2014 11:44:51 +1200
Subject: [PATCH 18/31] param: make is_default method static again

Change-Id: Icf509a5a8098efcc94e4372742ca9a20a987ad9e
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 01b6334..d3bf271 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1996,7 +1996,7 @@ static bool do_section(const char *pszSectionName, void *userdata)
  * Determine if a particular base parameter is currently set to the default value.
  */
 
-bool is_default(void *base_structure, int i)
+static bool is_default(void *base_structure, int i)
 {
 	void *def_ptr = ((char *)base_structure) + parm_table[i].offset;
 	switch (parm_table[i].type) {
-- 
1.9.1


From 10a6ad1e38eec1c7e4ec7082beada268b7c2ddba Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Tue, 6 May 2014 16:04:01 +1200
Subject: [PATCH 19/31] param: add missing talloc_free in
 lpcfg_file_list_changed which are present in s3

Change-Id: Ib363069f5ecc4fc743aadf143efd640e00d74543
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index d3bf271..e71a2b7 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1042,8 +1042,10 @@ bool lpcfg_file_list_changed(struct loadparm_context *lp_ctx)
 			f->modtime = mod_time;
 			talloc_free(f->subfname);
 			f->subfname = talloc_strdup(f, n2);
+			TALLOC_FREE(n2);
 			return true;
 		}
+		TALLOC_FREE(n2);
 	}
 	return false;
 }
-- 
1.9.1


From f56d05cf61be72b9b589deb7ae8f03340f51faca Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 14:22:41 +1300
Subject: [PATCH 20/31] param: add the necessary new line for the debug message
 in handle_copy

Change-Id: Ia6fc12b9d85032b6f501395cd82c31bcfe229822
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index e71a2b7..26d8346 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1142,7 +1142,7 @@ bool handle_copy(struct loadparm_context *lp_ctx, struct loadparm_service *servi
 	serviceTemp = lpcfg_getservicebyname(lp_ctx, pszParmValue);
 
 	if (service == NULL) {
-		DEBUG(0, ("Unable to copy service - invalid service destination"));
+		DEBUG(0, ("Unable to copy service - invalid service destination.\n"));
 		return false;
 	}
 
-- 
1.9.1


From 4ee39c2599bff5951c9bdb9719800d92eb20b48a Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 15:03:37 +1300
Subject: [PATCH 21/31] param: change init_printer_values to take an lp ctx

Change-Id: I55cda94bbf1daf276ec0c45b056bd81645eaa25f
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c     |  4 ++--
 lib/param/loadparm.h     |  2 +-
 lib/param/s3_param.h     |  3 ++-
 source3/param/loadparm.c | 17 ++++++++++-------
 4 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 26d8346..7f1d367 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1266,10 +1266,10 @@ bool handle_printing(struct loadparm_context *lp_ctx, struct loadparm_service *s
 	if (lp_ctx->s3_fns) {
 		if (service == NULL) {
 			s = lp_ctx->sDefault;
-			lp_ctx->s3_fns->init_printer_values(lp_ctx->globals->ctx, s);
+			lp_ctx->s3_fns->init_printer_values(lp_ctx, lp_ctx->globals->ctx, s);
 		} else {
 			s = service;
-			lp_ctx->s3_fns->init_printer_values(s, s);
+			lp_ctx->s3_fns->init_printer_values(lp_ctx, s, s);
 		}
 	}
 
diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index aa8c902..38e2121 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -283,7 +283,7 @@ char * lp_string(TALLOC_CTX *, const char *);
 int getservicebyname(const char *, struct loadparm_service *);
 bool lp_include(struct loadparm_context *, struct loadparm_service *,
 	       	const char *, char **);
-void init_printer_values(TALLOC_CTX *, struct loadparm_service *);
+void init_printer_values(struct loadparm_context *, TALLOC_CTX *, struct loadparm_service *);
 bool lp_do_section(const char *pszSectionName, void *userdata);
 bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
 
diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index b3dc3f8..c8e20a8 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -16,7 +16,8 @@ struct loadparm_s3_helpers
 	char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
 	bool (*lp_include)(struct loadparm_context*, struct loadparm_service *,
 		       	const char *, char **);
-	void (*init_printer_values)(TALLOC_CTX *, struct loadparm_service *);
+	void (*init_printer_values)(struct loadparm_context *, TALLOC_CTX *,
+				    struct loadparm_service *);
 	void (*init_ldap_debugging)(void);
 	bool (*set_netbios_aliases)(const char **);
 	bool (*lp_do_parameter)(int, const char *, const char *);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 2f0da60..007c0e9 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -306,7 +306,8 @@ static bool string_set(TALLOC_CTX *mem_ctx, char **dest,const char *src)
  Initialise the sDefault parameter structure for the printer values.
 ***************************************************************************/
 
-void init_printer_values(TALLOC_CTX *ctx, struct loadparm_service *pService)
+void init_printer_values(struct loadparm_context *lp_ctx, TALLOC_CTX *ctx,
+			 struct loadparm_service *pService)
 {
 	/* choose defaults depending on the type of printing */
 	switch (pService->printing) {
@@ -368,12 +369,14 @@ void init_printer_values(TALLOC_CTX *ctx, struct loadparm_service *pService)
 	case PRINT_VLP: {
 		const char *tdbfile;
 		TALLOC_CTX *tmp_ctx = talloc_new(ctx);
-		char *tmp;
+		const char *tmp;
 
-		tdbfile = talloc_asprintf(
-			tmp_ctx, "tdbfile=%s",
-			lp_parm_const_string(-1, "vlp", "tdbfile",
-					     "/tmp/vlp.tdb"));
+		tmp = lpcfg_parm_string(lp_ctx, NULL, "vlp", "tdbfile");
+		if (tmp == NULL) {
+			tmp = "/tmp/vlp.tdb";
+		}
+
+		tdbfile = talloc_asprintf(tmp_ctx, "tdbfile=%s", tmp);
 		if (tdbfile == NULL) {
 			tdbfile="tdbfile=/tmp/vlp.tdb";
 		}
@@ -674,7 +677,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
 	string_set(Globals.ctx, &sDefault.fstype, FSTYPE_STRING);
 	string_set(Globals.ctx, &sDefault.printjob_username, "%U");
 
-	init_printer_values(Globals.ctx, &sDefault);
+	init_printer_values(lp_ctx, Globals.ctx, &sDefault);
 
 	sDefault.ntvfs_handler = (const char **)str_list_make_v3(NULL, "unixuid default", NULL);
 
-- 
1.9.1


From 3257df1e45cd1f1f5a38524b7e827e2e53ba5058 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 15:27:40 +1300
Subject: [PATCH 22/31] param: move init_printer_values to lib/param

Change-Id: I45df7d589c742d6e5572b0950daed563533cca3c
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c     | 121 +++++++++++++++++++++++++++++++++++++++++++++++
 source3/param/loadparm.c | 121 -----------------------------------------------
 2 files changed, 121 insertions(+), 121 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 7f1d367..422141c 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2178,6 +2178,127 @@ static void lpcfg_add_auto_services(struct loadparm_context *lp_ctx,
 	return;
 }
 
+/***************************************************************************
+ Initialise the sDefault parameter structure for the printer values.
+***************************************************************************/
+
+void init_printer_values(struct loadparm_context *lp_ctx, TALLOC_CTX *ctx,
+			 struct loadparm_service *pService)
+{
+	/* choose defaults depending on the type of printing */
+	switch (pService->printing) {
+		case PRINT_BSD:
+		case PRINT_AIX:
+		case PRINT_LPRNT:
+		case PRINT_LPROS2:
+			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
+			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
+			lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
+			break;
+
+		case PRINT_LPRNG:
+		case PRINT_PLP:
+			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
+			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
+			lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
+			lpcfg_string_set(ctx, &pService->queuepause_command, "lpc stop '%p'");
+			lpcfg_string_set(ctx, &pService->queueresume_command, "lpc start '%p'");
+			lpcfg_string_set(ctx, &pService->lppause_command, "lpc hold '%p' %j");
+			lpcfg_string_set(ctx, &pService->lpresume_command, "lpc release '%p' %j");
+			break;
+
+		case PRINT_CUPS:
+		case PRINT_IPRINT:
+			/* set the lpq command to contain the destination printer
+			   name only.  This is used by cups_queue_get() */
+			lpcfg_string_set(ctx, &pService->lpq_command, "%p");
+			lpcfg_string_set(ctx, &pService->lprm_command, "");
+			lpcfg_string_set(ctx, &pService->print_command, "");
+			lpcfg_string_set(ctx, &pService->lppause_command, "");
+			lpcfg_string_set(ctx, &pService->lpresume_command, "");
+			lpcfg_string_set(ctx, &pService->queuepause_command, "");
+			lpcfg_string_set(ctx, &pService->queueresume_command, "");
+			break;
+
+		case PRINT_SYSV:
+		case PRINT_HPUX:
+			lpcfg_string_set(ctx, &pService->lpq_command, "lpstat -o%p");
+			lpcfg_string_set(ctx, &pService->lprm_command, "cancel %p-%j");
+			lpcfg_string_set(ctx, &pService->print_command, "lp -c -d%p %s; rm %s");
+			lpcfg_string_set(ctx, &pService->queuepause_command, "disable %p");
+			lpcfg_string_set(ctx, &pService->queueresume_command, "enable %p");
+#ifndef HPUX
+			lpcfg_string_set(ctx, &pService->lppause_command, "lp -i %p-%j -H hold");
+			lpcfg_string_set(ctx, &pService->lpresume_command, "lp -i %p-%j -H resume");
+#endif /* HPUX */
+			break;
+
+		case PRINT_QNX:
+			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P%p");
+			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P%p %j");
+			lpcfg_string_set(ctx, &pService->print_command, "lp -r -P%p %s");
+			break;
+
+#if defined(DEVELOPER) || defined(ENABLE_SELFTEST)
+
+	case PRINT_TEST:
+	case PRINT_VLP: {
+		const char *tdbfile;
+		TALLOC_CTX *tmp_ctx = talloc_new(ctx);
+		const char *tmp;
+
+		tmp = lpcfg_parm_string(lp_ctx, NULL, "vlp", "tdbfile");
+		if (tmp == NULL) {
+			tmp = "/tmp/vlp.tdb";
+		}
+
+		tdbfile = talloc_asprintf(tmp_ctx, "tdbfile=%s", tmp);
+		if (tdbfile == NULL) {
+			tdbfile="tdbfile=/tmp/vlp.tdb";
+		}
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s print %%p %%s",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->print_command,
+			   tmp ? tmp : "vlp print %p %s");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s lpq %%p",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->lpq_command,
+			   tmp ? tmp : "vlp lpq %p");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s lprm %%p %%j",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->lprm_command,
+			   tmp ? tmp : "vlp lprm %p %j");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s lppause %%p %%j",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->lppause_command,
+			   tmp ? tmp : "vlp lppause %p %j");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s lpresume %%p %%j",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->lpresume_command,
+			   tmp ? tmp : "vlp lpresume %p %j");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s queuepause %%p",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->queuepause_command,
+			   tmp ? tmp : "vlp queuepause %p");
+
+		tmp = talloc_asprintf(tmp_ctx, "vlp %s queueresume %%p",
+				      tdbfile);
+		lpcfg_string_set(ctx, &pService->queueresume_command,
+			   tmp ? tmp : "vlp queueresume %p");
+		TALLOC_FREE(tmp_ctx);
+
+		break;
+	}
+#endif /* DEVELOPER */
+
+	}
+}
 
 /**
  * Unload unused services.
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 007c0e9..e525df5 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -302,127 +302,6 @@ static bool string_set(TALLOC_CTX *mem_ctx, char **dest,const char *src)
 	return true;
 }
 
-/***************************************************************************
- Initialise the sDefault parameter structure for the printer values.
-***************************************************************************/
-
-void init_printer_values(struct loadparm_context *lp_ctx, TALLOC_CTX *ctx,
-			 struct loadparm_service *pService)
-{
-	/* choose defaults depending on the type of printing */
-	switch (pService->printing) {
-		case PRINT_BSD:
-		case PRINT_AIX:
-		case PRINT_LPRNT:
-		case PRINT_LPROS2:
-			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
-			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
-			lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
-			break;
-
-		case PRINT_LPRNG:
-		case PRINT_PLP:
-			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
-			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
-			lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
-			lpcfg_string_set(ctx, &pService->queuepause_command, "lpc stop '%p'");
-			lpcfg_string_set(ctx, &pService->queueresume_command, "lpc start '%p'");
-			lpcfg_string_set(ctx, &pService->lppause_command, "lpc hold '%p' %j");
-			lpcfg_string_set(ctx, &pService->lpresume_command, "lpc release '%p' %j");
-			break;
-
-		case PRINT_CUPS:
-		case PRINT_IPRINT:
-			/* set the lpq command to contain the destination printer
-			   name only.  This is used by cups_queue_get() */
-			lpcfg_string_set(ctx, &pService->lpq_command, "%p");
-			lpcfg_string_set(ctx, &pService->lprm_command, "");
-			lpcfg_string_set(ctx, &pService->print_command, "");
-			lpcfg_string_set(ctx, &pService->lppause_command, "");
-			lpcfg_string_set(ctx, &pService->lpresume_command, "");
-			lpcfg_string_set(ctx, &pService->queuepause_command, "");
-			lpcfg_string_set(ctx, &pService->queueresume_command, "");
-			break;
-
-		case PRINT_SYSV:
-		case PRINT_HPUX:
-			lpcfg_string_set(ctx, &pService->lpq_command, "lpstat -o%p");
-			lpcfg_string_set(ctx, &pService->lprm_command, "cancel %p-%j");
-			lpcfg_string_set(ctx, &pService->print_command, "lp -c -d%p %s; rm %s");
-			lpcfg_string_set(ctx, &pService->queuepause_command, "disable %p");
-			lpcfg_string_set(ctx, &pService->queueresume_command, "enable %p");
-#ifndef HPUX
-			lpcfg_string_set(ctx, &pService->lppause_command, "lp -i %p-%j -H hold");
-			lpcfg_string_set(ctx, &pService->lpresume_command, "lp -i %p-%j -H resume");
-#endif /* HPUX */
-			break;
-
-		case PRINT_QNX:
-			lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P%p");
-			lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P%p %j");
-			lpcfg_string_set(ctx, &pService->print_command, "lp -r -P%p %s");
-			break;
-
-#if defined(DEVELOPER) || defined(ENABLE_SELFTEST)
-
-	case PRINT_TEST:
-	case PRINT_VLP: {
-		const char *tdbfile;
-		TALLOC_CTX *tmp_ctx = talloc_new(ctx);
-		const char *tmp;
-
-		tmp = lpcfg_parm_string(lp_ctx, NULL, "vlp", "tdbfile");
-		if (tmp == NULL) {
-			tmp = "/tmp/vlp.tdb";
-		}
-
-		tdbfile = talloc_asprintf(tmp_ctx, "tdbfile=%s", tmp);
-		if (tdbfile == NULL) {
-			tdbfile="tdbfile=/tmp/vlp.tdb";
-		}
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s print %%p %%s",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->print_command,
-			   tmp ? tmp : "vlp print %p %s");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s lpq %%p",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->lpq_command,
-			   tmp ? tmp : "vlp lpq %p");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s lprm %%p %%j",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->lprm_command,
-			   tmp ? tmp : "vlp lprm %p %j");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s lppause %%p %%j",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->lppause_command,
-			   tmp ? tmp : "vlp lppause %p %j");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s lpresume %%p %%j",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->lpresume_command,
-			   tmp ? tmp : "vlp lpresume %p %j");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s queuepause %%p",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->queuepause_command,
-			   tmp ? tmp : "vlp queuepause %p");
-
-		tmp = talloc_asprintf(tmp_ctx, "vlp %s queueresume %%p",
-				      tdbfile);
-		lpcfg_string_set(ctx, &pService->queueresume_command,
-			   tmp ? tmp : "vlp queueresume %p");
-		TALLOC_FREE(tmp_ctx);
-
-		break;
-	}
-#endif /* DEVELOPER */
-
-	}
-}
 /**
  *  Function to return the default value for the maximum number of open
  *  file descriptors permitted.  This function tries to consult the
-- 
1.9.1


From 26c91f75b84f107af44dc6c00b1f618d237b041e Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 27 Mar 2014 15:32:42 +1300
Subject: [PATCH 23/31] (OBNOX:adapted commit msg)param: remove init printer
 values from s3-helpers

Change-Id: I2c4a85b4f5039158924982a277be20ebc2d6302e
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c         | 7 ++-----
 lib/param/loadparm.h         | 1 -
 lib/param/s3_param.h         | 2 --
 source3/param/loadparm_ctx.c | 1 -
 4 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 422141c..ea325ec 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1253,7 +1253,6 @@ bool handle_printing(struct loadparm_context *lp_ctx, struct loadparm_service *s
 			    const char *pszParmValue, char **ptr)
 {
 	static int parm_num = -1;
-	struct loadparm_service *s;
 
 	if (parm_num == -1) {
 		parm_num = lpcfg_map_parameter("printing");
@@ -1265,11 +1264,9 @@ bool handle_printing(struct loadparm_context *lp_ctx, struct loadparm_service *s
 
 	if (lp_ctx->s3_fns) {
 		if (service == NULL) {
-			s = lp_ctx->sDefault;
-			lp_ctx->s3_fns->init_printer_values(lp_ctx, lp_ctx->globals->ctx, s);
+			init_printer_values(lp_ctx, lp_ctx->globals->ctx, lp_ctx->sDefault);
 		} else {
-			s = service;
-			lp_ctx->s3_fns->init_printer_values(lp_ctx, s, s);
+			init_printer_values(lp_ctx, service, service);
 		}
 	}
 
diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index 38e2121..11632de 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -283,7 +283,6 @@ char * lp_string(TALLOC_CTX *, const char *);
 int getservicebyname(const char *, struct loadparm_service *);
 bool lp_include(struct loadparm_context *, struct loadparm_service *,
 	       	const char *, char **);
-void init_printer_values(struct loadparm_context *, TALLOC_CTX *, struct loadparm_service *);
 bool lp_do_section(const char *pszSectionName, void *userdata);
 bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
 
diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index c8e20a8..b83a528 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -16,8 +16,6 @@ struct loadparm_s3_helpers
 	char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
 	bool (*lp_include)(struct loadparm_context*, struct loadparm_service *,
 		       	const char *, char **);
-	void (*init_printer_values)(struct loadparm_context *, TALLOC_CTX *,
-				    struct loadparm_service *);
 	void (*init_ldap_debugging)(void);
 	bool (*set_netbios_aliases)(const char **);
 	bool (*lp_do_parameter)(int, const char *, const char *);
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index 00ae19d..a8539d6 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -70,7 +70,6 @@ static struct loadparm_s3_helpers s3_fns =
 	.dump = lp_dump,
 	.lp_string = lp_string,
 	.lp_include = lp_include,
-	.init_printer_values = init_printer_values,
 	.init_ldap_debugging = init_ldap_debugging,
 	.set_netbios_aliases = set_netbios_aliases,
 	.lp_do_parameter = lp_do_parameter,
-- 
1.9.1


From ff7bb57e91aa1ade235ffcc9dbb81833015d7d50 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Mon, 7 Jul 2014 15:40:45 +1200
Subject: [PATCH 24/31] s3:param: Ensure that the service pointers are not used
 directly.

Change-Id: I750301d80981546a84f17995883fae26398d17b8
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index e525df5..ab7d95b4 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2416,7 +2416,7 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
 	}
 
 	lp_ctx->sDefault = &sDefault;
-	lp_ctx->services = ServicePtrs;
+	lp_ctx->services = NULL; /* We do not want to access this directly */
 	lp_ctx->bInGlobalSection = bInGlobalSection;
 	lp_ctx->flags = flags_list;
 
-- 
1.9.1


From 730effed1c24f1d23c5bc7b29c6d3a7596f61d4e Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 17 Apr 2014 13:48:24 +1200
Subject: [PATCH 25/31] s3:param: move all lp context setup to a single
 function

Change-Id: Ife53e3946a4958d81cbe892bc554520561058c65
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 49 +++++++++++++++++++++++++-----------------------
 1 file changed, 26 insertions(+), 23 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index ab7d95b4..f9505f8 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -914,6 +914,26 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
 	apply_lp_set_cmdline();
 }
 
+/* Convenience routine to setup an lp_context with additional s3 variables */
+static struct loadparm_context *setup_lp_context(TALLOC_CTX *mem_ctx)
+{
+	struct loadparm_context *lp_ctx;
+
+	lp_ctx = loadparm_init_s3(mem_ctx,
+				  loadparm_s3_helpers());
+	if (lp_ctx == NULL) {
+		DEBUG(0, ("loadparm_init_s3 failed\n"));
+		return NULL;
+	}
+
+	lp_ctx->sDefault = &sDefault;
+	lp_ctx->services = NULL; /* We do not want to access this directly */
+	lp_ctx->bInGlobalSection = bInGlobalSection;
+	lp_ctx->flags = flags_list;
+
+	return lp_ctx;
+}
+
 /*******************************************************************
  Convenience routine to grab string parameters into talloced memory
  and run standard_sub_basic on them. The buffers can be written to by
@@ -2407,19 +2427,12 @@ bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue
 	struct loadparm_context *lp_ctx;
 	bool ok;
 
-	lp_ctx = loadparm_init_s3(frame,
-				  loadparm_s3_helpers());
+	lp_ctx = setup_lp_context(frame);
 	if (lp_ctx == NULL) {
-		DEBUG(0, ("loadparm_init_s3 failed\n"));
 		TALLOC_FREE(frame);
 		return false;
 	}
 
-	lp_ctx->sDefault = &sDefault;
-	lp_ctx->services = NULL; /* We do not want to access this directly */
-	lp_ctx->bInGlobalSection = bInGlobalSection;
-	lp_ctx->flags = flags_list;
-
 	if (snum < 0) {
 		ok = lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue);
 	} else {
@@ -2481,9 +2494,9 @@ bool lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct loadparm_context *lp_ctx;
 
-	lp_ctx = loadparm_init_s3(talloc_tos(), loadparm_s3_helpers());
+	lp_ctx = setup_lp_context(frame);
 	if (lp_ctx == NULL) {
-		DEBUG(0, ("loadparm_init_s3 failed\n"));
+		TALLOC_FREE(frame);
 		return false;
 	}
 
@@ -2613,10 +2626,9 @@ bool lp_do_section(const char *pszSectionName, void *userdata)
 bool dump_a_parameter(int snum, char *parm_name, FILE * f, bool isGlobal)
 {
 	bool result = false;
-
 	struct loadparm_context *lp_ctx;
 
-	lp_ctx = loadparm_init_s3(talloc_tos(), loadparm_s3_helpers());
+	lp_ctx = setup_lp_context(talloc_tos());
 	if (lp_ctx == NULL) {
 		return false;
 	}
@@ -3647,11 +3659,7 @@ static bool lp_load_ex(const char *pszFname,
 	bGlobalOnly = global_only;
 	bAllowIncludeRegistry = allow_include_registry;
 
-	lp_ctx = loadparm_init_s3(talloc_tos(),
-				  loadparm_s3_helpers());
-
-	lp_ctx->sDefault = &sDefault;
-	lp_ctx->bInGlobalSection = bInGlobalSection;
+	lp_ctx = setup_lp_context(talloc_tos());
 
 	init_globals(lp_ctx, initialize_globals);
 
@@ -3909,16 +3917,11 @@ void lp_dump(FILE *f, bool show_defaults, int maxtoprint)
 	if (show_defaults)
 		defaults_saved = false;
 
-	lp_ctx = loadparm_init_s3(talloc_tos(),
-				  loadparm_s3_helpers());
+	lp_ctx = setup_lp_context(talloc_tos());
 	if (lp_ctx == NULL) {
-		DEBUG(0, ("loadparm_init_s3 failed\n"));
 		return;
 	}
 
-	lp_ctx->sDefault = &sDefault;
-	lp_ctx->services = ServicePtrs;
-
 	lpcfg_dump_globals(lp_ctx, f, !defaults_saved);
 
 	lpcfg_dump_a_service(&sDefault, &sDefault, f, flags_list, show_defaults);
-- 
1.9.1


From 4f501aa5e536378c5ab10998233593657ae362ed Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Wed, 9 Jul 2014 12:25:36 +1200
Subject: [PATCH 26/31] (OBNOX:also remove s3/include prototype)param: remove
 lp_get_parameter

Ensure lpcfg_parm_struct, its counterpart is equivalent

Change-Id: I127ce5d3cf7fe02ebf161aa011ec3b41bc32a656
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c         | 10 ++++------
 lib/param/s3_param.h         |  1 -
 source3/include/proto.h      |  1 -
 source3/param/loadparm.c     | 16 ----------------
 source3/param/loadparm_ctx.c |  1 -
 5 files changed, 4 insertions(+), 25 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index ea325ec..5775353 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -730,15 +730,13 @@ int lpcfg_map_parameter(const char *pszParmName)
 */
 struct parm_struct *lpcfg_parm_struct(struct loadparm_context *lp_ctx, const char *name)
 {
-	int parmnum;
+	int num = lpcfg_map_parameter(name);
 
-	if (lp_ctx->s3_fns) {
-		return lp_ctx->s3_fns->get_parm_struct(name);
+	if (num < 0) {
+		return NULL;
 	}
 
-	parmnum = lpcfg_map_parameter(name);
-	if (parmnum == -1) return NULL;
-	return &parm_table[parmnum];
+	return &parm_table[num];
 }
 
 /**
diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index b83a528..6631bc6 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -3,7 +3,6 @@
 
 struct loadparm_s3_helpers
 {
-	struct parm_struct * (*get_parm_struct)(const char *param_name);
 	void * (*get_parm_ptr)(struct loadparm_service *service, struct parm_struct *parm);
 	struct loadparm_service * (*get_service)(const char *service_name);
 	struct loadparm_service * (*get_default_loadparm_service)(void);
diff --git a/source3/include/proto.h b/source3/include/proto.h
index c4d1606..70fa7f7 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1042,7 +1042,6 @@ void *lp_local_ptr_by_snum(int snum, struct parm_struct *parm);
 bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue);
 bool lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
 bool dump_a_parameter(int snum, char *parm_name, FILE * f, bool isGlobal);
-struct parm_struct *lp_get_parameter(const char *param_name);
 bool lp_snum_ok(int iService);
 void lp_add_one_printer(const char *name, const char *comment,
 			const char *location, void *pdata);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index f9505f8..e75c4a8 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2642,22 +2642,6 @@ bool dump_a_parameter(int snum, char *parm_name, FILE * f, bool isGlobal)
 	return result;
 }
 
-/***************************************************************************
- Return info about the requested parameter (given as a string).
- Return NULL when the string is not a valid parameter name.
-***************************************************************************/
-
-struct parm_struct *lp_get_parameter(const char *param_name)
-{
-	int num = lpcfg_map_parameter(param_name);
-
-	if (num < 0) {
-		return NULL;
-	}
-
-	return &parm_table[num];
-}
-
 #if 0
 /***************************************************************************
  Display the contents of a single copy structure.
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index a8539d6..8f1572f 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -58,7 +58,6 @@ static bool lp_load_for_s4_ctx(const char *filename)
 
 static struct loadparm_s3_helpers s3_fns =
 {
-	.get_parm_struct = lp_get_parameter,
 	.get_parm_ptr = lp_parm_ptr,
 	.get_service = lp_service_for_s4_ctx,
 	.get_servicebynum = lp_servicebynum_for_s4_ctx,
-- 
1.9.1


From 7e3ef77d3f91462e77d66eac845efe6c28d70339 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 17 Apr 2014 13:49:05 +1200
Subject: [PATCH 27/31] param: remove unnecessary lp_do_parameter call

Change-Id: I0cd1842bac3fcb6dde7236b87d5d235f10277e60
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
---
 lib/param/loadparm.c         | 10 ++--------
 source3/param/loadparm_ctx.c |  1 -
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 5775353..0ad909d 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -1750,14 +1750,8 @@ bool lpcfg_set_cmdline(struct loadparm_context *lp_ctx, const char *pszParmName,
 	/* reset the CMDLINE flag in case this has been called before */
 	lp_ctx->flags[parmnum] &= ~FLAG_CMDLINE;
 
-	if (lp_ctx->s3_fns != NULL) {
-		if (!lp_ctx->s3_fns->lp_do_parameter(-1, pszParmName, pszParmValue)) {
-			return false;
-		}
-	} else {
-		if (!lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
-			return false;
-		}
+	if (!lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue)) {
+		return false;
 	}
 
 	lp_ctx->flags[parmnum] |= FLAG_CMDLINE;
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index 8f1572f..5782a96 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -71,7 +71,6 @@ static struct loadparm_s3_helpers s3_fns =
 	.lp_include = lp_include,
 	.init_ldap_debugging = init_ldap_debugging,
 	.set_netbios_aliases = set_netbios_aliases,
-	.lp_do_parameter = lp_do_parameter,
 	.do_section = lp_do_section,
 };
 
-- 
1.9.1


From c77630d87c4325b7097f331e3175d5ee12b43182 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Thu, 17 Apr 2014 13:59:30 +1200
Subject: [PATCH 28/31] param: remove unused lp_do_parameter from s3 helpers

Change-Id: I0de55ee30beb6b94350700afcdb85155e913bda8
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/s3_param.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index 6631bc6..539f0d6 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -17,7 +17,6 @@ struct loadparm_s3_helpers
 		       	const char *, char **);
 	void (*init_ldap_debugging)(void);
 	bool (*set_netbios_aliases)(const char **);
-	bool (*lp_do_parameter)(int, const char *, const char *);
 	bool (*do_section)(const char *pszSectionName, void *userdata);
 	struct loadparm_global *globals;
 	unsigned int *flags;
-- 
1.9.1


From bf734e336950c21c25f15f2a20aab413d4798e28 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Wed, 9 Jul 2014 13:04:00 +1200
Subject: [PATCH 29/31] param: get rid of unnecessary
 get_default_loadparm_service pointer

Change-Id: I9f512be671e5cd738c43fd97c9c3e0b4ee7a2736
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c         | 3 ---
 lib/param/s3_param.h         | 1 -
 source3/param/loadparm_ctx.c | 1 -
 3 files changed, 5 deletions(-)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 0ad909d..34c01e6 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -74,9 +74,6 @@
 
 struct loadparm_service *lpcfg_default_service(struct loadparm_context *lp_ctx)
 {
-	if (lp_ctx->s3_fns) {
-		return lp_ctx->s3_fns->get_default_loadparm_service();
-	}
 	return lp_ctx->sDefault;
 }
 
diff --git a/lib/param/s3_param.h b/lib/param/s3_param.h
index 539f0d6..f31c5bc 100644
--- a/lib/param/s3_param.h
+++ b/lib/param/s3_param.h
@@ -5,7 +5,6 @@ struct loadparm_s3_helpers
 {
 	void * (*get_parm_ptr)(struct loadparm_service *service, struct parm_struct *parm);
 	struct loadparm_service * (*get_service)(const char *service_name);
-	struct loadparm_service * (*get_default_loadparm_service)(void);
 	struct loadparm_service * (*get_servicebynum)(int snum);
 	int (*getservicebyname)(const char *, struct loadparm_service *);
 	int (*get_numservices)(void);
diff --git a/source3/param/loadparm_ctx.c b/source3/param/loadparm_ctx.c
index 5782a96..fdad041 100644
--- a/source3/param/loadparm_ctx.c
+++ b/source3/param/loadparm_ctx.c
@@ -62,7 +62,6 @@ static struct loadparm_s3_helpers s3_fns =
 	.get_service = lp_service_for_s4_ctx,
 	.get_servicebynum = lp_servicebynum_for_s4_ctx,
 	.getservicebyname = getservicebyname,
-	.get_default_loadparm_service = lp_default_loadparm_service,
 	.get_numservices = lp_numservices,
 	.load = lp_load_for_s4_ctx,
 	.store_cmdline = store_lp_set_cmdline,
-- 
1.9.1


From 17796fd5227652aa07f31c351659469f41f7a49c Mon Sep 17 00:00:00 2001
From: Garming Sam <garming at catalyst.net.nz>
Date: Fri, 11 Jul 2014 14:01:33 +1200
Subject: [PATCH 30/31] param: Add errors for when an s3 context is used
 incorrectly

Change-Id: I176b4413769f41739639875ab874a3e340b6a184
Signed-off-by: Garming Sam <garming at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
---
 lib/param/loadparm.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 34c01e6..a7d8d86 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -574,6 +574,10 @@ struct loadparm_service *lpcfg_add_service(struct loadparm_context *lp_ctx,
 	int num_to_alloc = lp_ctx->iNumServices + 1;
 	struct parmlist_entry *data, *pdata;
 
+	if (lp_ctx->s3_fns != NULL) {
+		smb_panic("Add a service should not be called on an s3 loadparm ctx");
+	}
+
 	if (pservice == NULL) {
 		pservice = lp_ctx->sDefault;
 	}
@@ -2295,6 +2299,11 @@ void lpcfg_killunused(struct loadparm_context *lp_ctx,
 		   bool (*snumused) (struct smbsrv_connection *, int))
 {
 	int i;
+
+	if (lp_ctx->s3_fns != NULL) {
+		smb_panic("Cannot be used from an s3 loadparm ctx");
+	}
+
 	for (i = 0; i < lp_ctx->iNumServices; i++) {
 		if (lp_ctx->services[i] == NULL)
 			continue;
-- 
1.9.1


From a82ce7068d52d69e2059f4f038ff3edbca90326f Mon Sep 17 00:00:00 2001
From: Michael Adam <obnox at samba.org>
Date: Sat, 26 Jul 2014 01:30:17 +0200
Subject: [PATCH 31/31] s3:param: move a variable into scope in
 lp_file_list_changed

Signed-off-by: Michael Adam <obnox at samba.org>
---
 source3/param/loadparm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index e75c4a8..7d5c511 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -2147,8 +2147,6 @@ bool lp_file_list_changed(void)
  	DEBUG(6, ("lp_file_list_changed()\n"));
 
 	while (f) {
-		time_t mod_time;
-
 		if (strequal(f->name, INCLUDE_REGISTRY_NAME)) {
 			struct smbconf_ctx *conf_ctx = lp_smbconf_ctx();
 
@@ -2162,7 +2160,9 @@ bool lp_file_list_changed(void)
 				return true;
 			}
 		} else {
+			time_t mod_time;
 			char *n2 = NULL;
+
 			n2 = talloc_sub_basic(talloc_tos(),
 					      get_current_username(),
 					      current_user_info.domain,
-- 
1.9.1

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.samba.org/pipermail/samba-technical/attachments/20140729/edfbae81/attachment.pgp>


More information about the samba-technical mailing list