lib/param: clean up lpcfg_get_parametric
authorGarming Sam <garming@catalyst.net.nz>
Tue, 25 Feb 2014 03:36:57 +0000 (16:36 +1300)
committerJeremy Allison <jra@samba.org>
Wed, 7 May 2014 17:49:17 +0000 (19:49 +0200)
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/param/loadparm.c

index fda1100eb7bc3b39e7d552fb84190b3b0779909e..e8b0874d4fb5010cbe37aaa3c6b18b47e0b14c19 100644 (file)
@@ -251,26 +251,17 @@ const char *lpcfg_get_parametric(struct loadparm_context *lp_ctx,
                return lp_ctx->s3_fns->get_parametric(service, type, option, NULL);
        }
 
-       data = (service == NULL ? lp_ctx->globals->param_opt : service->param_opt);
-
        vfskey = talloc_asprintf(NULL, "%s:%s", type, option);
        if (vfskey == NULL) {
                DEBUG(0,("asprintf failed!\n"));
                return NULL;
        }
 
-       while (data) {
-               if (strwicmp(data->key, vfskey) == 0) {
-                       talloc_free(vfskey);
-                       return data->value;
-               }
-               data = data->next;
-       }
-
+       /*
+        * Try to fetch the option from the service.
+        */
        if (service != NULL) {
-               /* Try to fetch the same option but from globals */
-               /* but only if we are not already working with globals */
-               for (data = lp_ctx->globals->param_opt; data;
+               for (data = service->param_opt; data;
                     data = data->next) {
                        if (strwicmp(data->key, vfskey) == 0) {
                                talloc_free(vfskey);
@@ -279,6 +270,18 @@ const char *lpcfg_get_parametric(struct loadparm_context *lp_ctx,
                }
        }
 
+       /*
+        * Fall back to fetching from the globals.
+        */
+       data = lp_ctx->globals->param_opt;
+       while (data) {
+               if (strwicmp(data->key, vfskey) == 0) {
+                       talloc_free(vfskey);
+                       return data->value;
+               }
+               data = data->next;
+       }
+
        talloc_free(vfskey);
 
        return NULL;