summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/param/loadparm.c38
-rw-r--r--source4/utils/testparm.c19
2 files changed, 50 insertions, 7 deletions
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c
index 6e7716b1f2..3d079f3e3e 100644
--- a/source4/param/loadparm.c
+++ b/source4/param/loadparm.c
@@ -2228,6 +2228,44 @@ static void dump_a_service(service * pService, FILE * f)
}
}
+BOOL lp_dump_a_parameter(int snum, char *parm_name, FILE * f, BOOL isGlobal)
+{
+ service * pService = ServicePtrs[snum];
+ int i, result = False;
+ parm_class p_class;
+ unsigned flag = 0;
+
+ if (isGlobal) {
+ p_class = P_GLOBAL;
+ flag = FLAG_GLOBAL;
+ } else
+ p_class = P_LOCAL;
+
+ for (i = 0; parm_table[i].label; i++) {
+ if (strwicmp(parm_table[i].label, parm_name) == 0 &&
+ (parm_table[i].class == p_class || parm_table[i].flags & flag) &&
+ parm_table[i].ptr &&
+ (*parm_table[i].label != '-') &&
+ (i == 0 || (parm_table[i].ptr != parm_table[i - 1].ptr)))
+ {
+ void *ptr;
+
+ if (isGlobal)
+ ptr = parm_table[i].ptr;
+ else
+ ptr = ((char *)pService) +
+ PTR_DIFF(parm_table[i].ptr, &sDefault);
+
+ print_parameter(&parm_table[i],
+ ptr, f);
+ fprintf(f, "\n");
+ result = True;
+ break;
+ }
+ }
+
+ return result;
+}
/***************************************************************************
Return info about the next service in a service. snum==-1 gives the globals.
diff --git a/source4/utils/testparm.c b/source4/utils/testparm.c
index c4b7dd38d8..fd990221ed 100644
--- a/source4/utils/testparm.c
+++ b/source4/utils/testparm.c
@@ -81,17 +81,17 @@ static int do_global_checks(void)
static const char *term_code = "";
/*
static BOOL show_all_parameters = False;
- static char *parameter_name = NULL;
static char *new_local_machine = NULL;
*/
static const char *section_name = NULL;
+ static char *parameter_name = NULL;
static const char *cname;
static const char *caddr;
static int show_defaults;
struct poptOption long_options[] = {
POPT_AUTOHELP
- {"suppress-prompt", 's', POPT_ARG_VAL, &silent_mode, 1, "Suppress prompt for enter"},
+ {"suppress-prompt", '\0', POPT_ARG_VAL, &silent_mode, 1, "Suppress prompt for enter"},
{"verbose", 'v', POPT_ARG_NONE, &show_defaults, 1, "Show default options too"},
/*
We need support for smb.conf macros before this will work again
@@ -100,11 +100,12 @@ static int do_global_checks(void)
/*
These are harder to do with the new code structure
{"show-all-parameters", '\0', POPT_ARG_VAL, &show_all_parameters, True, "Show the parameters, type, possible values" },
- {"parameter-name", '\0', POPT_ARG_STRING, &parameter_name, 0, "Limit testparm to a named parameter" },
*/
{"section-name", '\0', POPT_ARG_STRING, &section_name, 0, "Limit testparm to a named section" },
+ {"parameter-name", '\0', POPT_ARG_STRING, &parameter_name, 0, "Limit testparm to a named parameter" },
{"client-name", '\0', POPT_ARG_STRING, &cname, 0, "Client DNS name for 'hosts allow' checking (should match reverse lookup)"},
{"client-ip", '\0', POPT_ARG_STRING, &caddr, 0, "Client IP address for 'hosts allow' checking"},
+ POPT_COMMON_SAMBA
POPT_COMMON_VERSION
POPT_TABLEEND
};
@@ -196,7 +197,7 @@ static int do_global_checks(void)
fflush(stdout);
getc(stdin);
}
- if (section_name) {
+ if (section_name || parameter_name) {
BOOL isGlobal = False;
if (!section_name) {
section_name = GLOBAL_NAME;
@@ -207,10 +208,14 @@ static int do_global_checks(void)
section_name);
return(1);
}
- if (isGlobal == True) {
- lp_dump(stdout, show_defaults, 0);
+ if (!parameter_name) {
+ if (isGlobal == True) {
+ lp_dump(stdout, show_defaults, 0);
+ } else {
+ lp_dump_one(stdout, show_defaults, s);
+ }
} else {
- lp_dump_one(stdout, show_defaults, s);
+ ret = lp_dump_a_parameter(s, parameter_name, stdout, isGlobal);
}
} else {
lp_dump(stdout, show_defaults, lp_numservices());