diff options
-rw-r--r-- | source4/param/loadparm.c | 35 | ||||
-rw-r--r-- | source4/param/loadparm.h | 14 | ||||
-rw-r--r-- | source4/utils/testparm.c | 25 |
3 files changed, 55 insertions, 19 deletions
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c index 08abc3aa48..6e7716b1f2 100644 --- a/source4/param/loadparm.c +++ b/source4/param/loadparm.c @@ -66,18 +66,6 @@ static BOOL bLoaded = False; -#ifndef GLOBAL_NAME -#define GLOBAL_NAME "global" -#endif - -#ifndef PRINTERS_NAME -#define PRINTERS_NAME "printers" -#endif - -#ifndef HOMES_NAME -#define HOMES_NAME "homes" -#endif - /* some helpful bits */ #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && ServicePtrs[(i)]->valid) #define VALID(i) ServicePtrs[i]->valid @@ -706,6 +694,12 @@ static void init_globals(void) do_parameter("tls cafile", "tls/ca.pem", NULL); do_parameter_var("js include", "%s/js", dyn_LIBDIR); do_parameter_var("setup directory", "%s/setup", dyn_LIBDIR); + + for (i = 0; parm_table[i].label; i++) { + if (!(parm_table[i].flags & FLAG_CMDLINE)) { + parm_table[i].flags |= FLAG_DEFAULT; + } + } } static TALLOC_CTX *lp_talloc; @@ -1886,6 +1880,17 @@ BOOL lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue break; } + if (parm_table[parmnum].flags & FLAG_DEFAULT) { + parm_table[parmnum].flags &= ~FLAG_DEFAULT; + /* we have to also unset FLAG_DEFAULT on aliases */ + for (i=parmnum-1;i>=0 && parm_table[i].ptr == parm_table[parmnum].ptr;i--) { + parm_table[i].flags &= ~FLAG_DEFAULT; + } + for (i=parmnum+1;i<NUMPARAMETERS && parm_table[i].ptr == parm_table[parmnum].ptr;i++) { + parm_table[i].flags &= ~FLAG_DEFAULT; + } + } + return (True); } @@ -2151,7 +2156,7 @@ static BOOL is_default(int i) Display the contents of the global structure. ***************************************************************************/ -static void dump_globals(FILE *f) +static void dump_globals(FILE *f, BOOL show_defaults) { int i; struct param_opt *data; @@ -2162,7 +2167,7 @@ static void dump_globals(FILE *f) if (parm_table[i].class == P_GLOBAL && parm_table[i].ptr && (i == 0 || (parm_table[i].ptr != parm_table[i - 1].ptr))) { - if (defaults_saved && is_default(i)) + if (!show_defaults && (parm_table[i].flags & FLAG_DEFAULT)) continue; fprintf(f, "\t%s = ", parm_table[i].label); print_parameter(&parm_table[i], parm_table[i].ptr, f); @@ -2441,7 +2446,7 @@ void lp_dump(FILE *f, BOOL show_defaults, int maxtoprint) if (show_defaults) defaults_saved = False; - dump_globals(f); + dump_globals(f, show_defaults); dump_a_service(&sDefault, f); diff --git a/source4/param/loadparm.h b/source4/param/loadparm.h index 16444c84a2..1bb0ed6618 100644 --- a/source4/param/loadparm.h +++ b/source4/param/loadparm.h @@ -68,6 +68,18 @@ struct parm_struct { #define FLAG_DEVELOPER 0x0040 /* Parameters that the wizard will operate on */ #define FLAG_DEPRECATED 0x1000 /* options that should no longer be used */ #define FLAG_HIDE 0x2000 /* options that should be hidden in SWAT */ -#define FLAG_DOS_STRING 0x4000 /* convert from UNIX to DOS codepage when reading this string. */ +#define FLAG_DEFAULT 0x4000 /* this option was a default */ #define FLAG_CMDLINE 0x8000 /* this option was set from the command line */ +#ifndef GLOBAL_NAME +#define GLOBAL_NAME "global" +#endif + +#ifndef PRINTERS_NAME +#define PRINTERS_NAME "printers" +#endif + +#ifndef HOMES_NAME +#define HOMES_NAME "homes" +#endif + diff --git a/source4/utils/testparm.c b/source4/utils/testparm.c index 05aa5ff547..c4b7dd38d8 100644 --- a/source4/utils/testparm.c +++ b/source4/utils/testparm.c @@ -82,9 +82,9 @@ static int do_global_checks(void) /* static BOOL show_all_parameters = False; static char *parameter_name = NULL; - static const char *section_name = NULL; static char *new_local_machine = NULL; */ + static const char *section_name = NULL; static const char *cname; static const char *caddr; static int show_defaults; @@ -101,8 +101,8 @@ 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, ¶meter_name, 0, "Limit testparm to a named parameter" }, - {"section-name", '\0', POPT_ARG_STRING, §ion_name, 0, "Limit testparm to a named section" }, */ + {"section-name", '\0', POPT_ARG_STRING, §ion_name, 0, "Limit testparm to a named section" }, {"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_VERSION @@ -196,7 +196,26 @@ static int do_global_checks(void) fflush(stdout); getc(stdin); } - lp_dump(stdout, show_defaults, lp_numservices()); + if (section_name) { + BOOL isGlobal = False; + if (!section_name) { + section_name = GLOBAL_NAME; + isGlobal = True; + } else if ((isGlobal=!strwicmp(section_name, GLOBAL_NAME)) == 0 && + (s=lp_servicenumber(section_name)) == -1) { + fprintf(stderr,"Unknown section %s\n", + section_name); + return(1); + } + if (isGlobal == True) { + lp_dump(stdout, show_defaults, 0); + } else { + lp_dump_one(stdout, show_defaults, s); + } + } else { + lp_dump(stdout, show_defaults, lp_numservices()); + } + return(ret); } if(cname && caddr){ |