param: flag fixes in s3 loadparm
authorGarming Sam <garming@catalyst.net.nz>
Wed, 26 Feb 2014 03:43:44 +0000 (16:43 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 7 Jul 2014 21:32:36 +0000 (23:32 +0200)
In s3 loadparm, the flags are stored in the param table, while in
lib/param, it is individual to a loadparm context.

Change-Id: I23d72eeec6b935c1897b34b8fc49d5a9992f2993
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
lib/param/loadparm.c
source3/param/loadparm.c

index bda014319ccfcc9526bae6c5d9545f828c2e1b4a..7e37e3507edd500f9a05019c8e507abb512767fe 100644 (file)
@@ -2053,6 +2053,9 @@ void lpcfg_dump_a_service(struct loadparm_service * pService, struct loadparm_se
        }
        if (pService->param_opt != NULL) {
                for (data = pService->param_opt; data; data = data->next) {
+                       if (!show_defaults && (data->priority & FLAG_DEFAULT)) {
+                               continue;
+                       }
                        fprintf(f, "\t%s = %s\n", data->key, data->value);
                }
         }
@@ -2575,6 +2578,13 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
                }
        }
 
+       for (parm=lp_ctx->sDefault->param_opt; parm; parm=parm->next) {
+               if (!(parm->priority & FLAG_CMDLINE)) {
+                       parm->priority |= FLAG_DEFAULT;
+               }
+       }
+
+
        return lp_ctx;
 }
 
index 40852968b90c71d13d117fbbcc6f89d09288dd27..31f6203dd56b8159de227a81785f0e5e1090baca 100644 (file)
@@ -257,6 +257,7 @@ static struct db_context *ServiceHash;
 static bool bInGlobalSection = true;
 static bool bGlobalOnly = false;
 static struct file_lists *file_lists = NULL;
+static unsigned int *flags_list = NULL;
 
 static void set_allowed_client_auth(void);
 
@@ -659,6 +660,7 @@ static void init_globals(bool reinit_globals)
        ZERO_STRUCT(Globals);
 
        Globals.ctx = talloc_pooled_object(NULL, char, 272, 2048);
+       flags_list = talloc_zero_array(Globals.ctx, unsigned int, num_parameters());
 
        for (i = 0; parm_table[i].label; i++) {
                if ((parm_table[i].type == P_STRING ||
@@ -2887,6 +2889,10 @@ static void dump_globals(FILE *f, bool show_defaults)
        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;
                }
@@ -2900,7 +2906,7 @@ static void dump_globals(FILE *f, bool show_defaults)
 
 static void dump_a_service(struct loadparm_service *pService, FILE * f, bool show_defaults)
 {
-       return lpcfg_dump_a_service(pService, &sDefault, f, NULL, show_defaults);
+       return lpcfg_dump_a_service(pService, &sDefault, f, flags_list, show_defaults);
 }
 
 /***************************************************************************
@@ -3093,7 +3099,12 @@ void lp_killservice(int iServiceIn)
 static void lp_save_defaults(void)
 {
        int i;
+       struct parmlist_entry * parm;
        for (i = 0; parm_table[i].label; i++) {
+               if (!(parm_table[i].flags & FLAG_CMDLINE)) {
+                       flags_list[i] |= FLAG_DEFAULT;
+               }
+
                if (i > 0 && parm_table[i].offset == parm_table[i - 1].offset
                    && parm_table[i].p_class == parm_table[i - 1].p_class)
                        continue;
@@ -3130,6 +3141,19 @@ static void lp_save_defaults(void)
                                break;
                }
        }
+
+       for (parm=Globals.param_opt; parm; parm=parm->next) {
+               if (!(parm->priority & FLAG_CMDLINE)) {
+                       parm->priority |= FLAG_DEFAULT;
+               }
+       }
+
+       for (parm=sDefault.param_opt; parm; parm=parm->next) {
+               if (!(parm->priority & FLAG_CMDLINE)) {
+                       parm->priority |= FLAG_DEFAULT;
+               }
+       }
+
        defaults_saved = true;
 }