r25379: Use loadparm context parameter in a lot more places.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 27 Sep 2007 19:49:53 +0000 (19:49 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 20:07:22 +0000 (15:07 -0500)
(This used to be commit 091961b13be665061c7e88ab4e2808c015bc403e)

source4/param/loadparm.c
source4/param/loadparm.h
source4/param/param.h
source4/param/share_classic.c
source4/scripting/ejs/smbcalls_config.c
source4/utils/testparm.c

index f914d706cd7bbf6031c95ece4ab34b9e8c0c4a2c..1582eb6075c12f51dab49a725eda749c96371376 100644 (file)
@@ -66,6 +66,8 @@
 
 static bool bLoaded = false;
 
+struct loadparm_context *global_loadparm = NULL;
+
 #define standard_sub_basic talloc_strdup
 
 static bool do_parameter(const char *, const char *, void *);
@@ -2293,6 +2295,8 @@ bool loadparm_init(struct loadparm_context *lp_ctx)
        int i;
        char *myname;
 
+       lp_ctx->bInGlobalSection = true;
+
        DEBUG(3, ("Initialising global parameters\n"));
 
        for (i = 0; parm_table[i].label; i++) {
@@ -2458,6 +2462,8 @@ bool lp_load(void)
        struct param_opt *data;
        struct loadparm_context *lp_ctx = &loadparm;
 
+       global_loadparm = lp_ctx;
+
        bRetval = false;
 
        if (lp_ctx->Globals.param_opt != NULL) {
@@ -2509,22 +2515,20 @@ bool lp_load(void)
  Return the max number of services.
 ***************************************************************************/
 
-int lp_numservices(void)
+int lp_numservices(struct loadparm_context *lp_ctx)
 {
-       return loadparm.iNumServices;
+       return lp_ctx->iNumServices;
 }
 
 /***************************************************************************
 Display the contents of the services array in human-readable form.
 ***************************************************************************/
 
-void lp_dump(FILE *f, bool show_defaults, int maxtoprint)
+void lp_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults, 
+            int maxtoprint)
 {
-       struct loadparm_context *lp_ctx;
        int iService;
 
-       lp_ctx = &loadparm;
-
        if (show_defaults)
                defaults_saved = false;
 
@@ -2549,28 +2553,30 @@ void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service)
        }
 }
 
-struct loadparm_service *lp_servicebynum(int snum)
+struct loadparm_service *lp_servicebynum(struct loadparm_context *lp_ctx,
+                                        int snum)
 {
-       return loadparm.ServicePtrs[snum];
+       return lp_ctx->ServicePtrs[snum];
 }
 
-struct loadparm_service *lp_service(const char *service_name)
+struct loadparm_service *lp_service(struct loadparm_context *lp_ctx, 
+                                   const char *service_name)
 {
        int iService;
         char *serviceName;
  
-       for (iService = loadparm.iNumServices - 1; iService >= 0; iService--) {
-               if (loadparm.ServicePtrs[iService] && 
-                   loadparm.ServicePtrs[iService]->szService) {
+       for (iService = lp_ctx->iNumServices - 1; iService >= 0; iService--) {
+               if (lp_ctx->ServicePtrs[iService] && 
+                   lp_ctx->ServicePtrs[iService]->szService) {
                        /*
                         * The substitution here is used to support %U is
                         * service names
                         */
                        serviceName = standard_sub_basic(
-                                       loadparm.ServicePtrs[iService],
-                                       loadparm.ServicePtrs[iService]->szService);
+                                       lp_ctx->ServicePtrs[iService],
+                                       lp_ctx->ServicePtrs[iService]->szService);
                        if (strequal(serviceName, service_name))
-                               return loadparm.ServicePtrs[iService];
+                               return lp_ctx->ServicePtrs[iService];
                }
        }
 
index d74f70aef02d45316f35ca82e0c6be7569c9ecee..7f8b375e9ae0a82ddda055c90a464ee6ea2a5ac1 100644 (file)
@@ -80,4 +80,3 @@ struct parm_struct {
 #define HOMES_NAME "homes"
 #endif
 
-
index 22c32cb28f6bd8f0ad29180c6bbf0dd44dd4d500..caa5a763bbcba318714f634a7950749ed4f7b295 100644 (file)
@@ -62,4 +62,6 @@ struct loadparm_service;
 
 #include "param/proto.h"
 
+extern struct loadparm_context *global_loadparm;
+
 #endif /* _PARAM_H */
index df86e2be4fca4a4636260945e1218e2e7dbe756e..c9786d06bd9d7913bf4375157f3fe1e4a52573a0 100644 (file)
@@ -268,7 +268,7 @@ static NTSTATUS sclassic_list_all(TALLOC_CTX *mem_ctx,
        int num_services;
        const char **n;
        
-       num_services = lp_numservices();
+       num_services = lp_numservices(global_loadparm);
 
        n = talloc_array(mem_ctx, const char *, num_services);
        if (!n) {
@@ -277,7 +277,7 @@ static NTSTATUS sclassic_list_all(TALLOC_CTX *mem_ctx,
        }
 
        for (i = 0; i < num_services; i++) {
-               n[i] = talloc_strdup(n, lp_servicename(lp_servicebynum(i)));
+               n[i] = talloc_strdup(n, lp_servicename(lp_servicebynum(global_loadparm, i)));
                if (!n[i]) {
                        DEBUG(0,("ERROR: Out of memory!\n"));
                        talloc_free(n);
@@ -299,7 +299,7 @@ static NTSTATUS sclassic_get_config(TALLOC_CTX *mem_ctx,
        struct share_config *s;
        struct loadparm_service *service;
 
-       service = lp_service(name);
+       service = lp_service(global_loadparm, name);
 
        if (service == NULL) {
                return NT_STATUS_OBJECT_NAME_NOT_FOUND;
index 7161ca49adfafa23ff558f08647d0453ede5f33a..8f1339db345446d239de13b37687a7b0b48957fa 100644 (file)
@@ -36,8 +36,8 @@ static int ejs_lpServices(MprVarHandle eid, int argc, char **argv)
        const char **list = NULL;
        if (argc != 0) return -1;
        
-       for (i=0;i<lp_numservices();i++) {
-               list = str_list_add(list, lp_servicename(lp_servicebynum(i)));
+       for (i=0;i<lp_numservices(global_loadparm);i++) {
+               list = str_list_add(list, lp_servicename(lp_servicebynum(global_loadparm, i)));
        }
        talloc_steal(mprMemCtx(), list);
        mpr_Return(eid, mprList("services", list));
@@ -89,7 +89,7 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
        if (argc == 2) {
                struct loadparm_service *service;
                /* its a share parameter */
-               service = lp_service(argv[0]);
+               service = lp_service(global_loadparm, argv[0]);
                if (service == NULL) {
                        mpr_Return(eid, mprCreateUndefinedVar());
                        return 0;
index d884adc7f63a80dd6b74528abd3d1095b9766cdb..160cf1cc0aefbb90f28353a3a1543c50203d793c 100644 (file)
@@ -150,10 +150,10 @@ static int do_global_checks(void)
 
        ret = do_global_checks();
 
-       for (s=0;s<lp_numservices();s++) {
-               struct loadparm_service *service = lp_servicebynum(s);
+       for (s=0;s<lp_numservices(global_loadparm);s++) {
+               struct loadparm_service *service = lp_servicebynum(global_loadparm, s);
                if (service != NULL)
-                       if (strlen(lp_servicename(lp_servicebynum(s))) > 12) {
+                       if (strlen(lp_servicename(lp_servicebynum(global_loadparm, s))) > 12) {
                                fprintf(stderr, "WARNING: You have some share names that are longer than 12 characters.\n" );
                                fprintf(stderr, "These may not be accessible to some older clients.\n" );
                                fprintf(stderr, "(Eg. Windows9x, WindowsMe, and not listed in smbclient in Samba 3.0.)\n" );
@@ -161,8 +161,8 @@ static int do_global_checks(void)
                        }
        }
 
-       for (s=0;s<lp_numservices();s++) {
-               struct loadparm_service *service = lp_servicebynum(s);
+       for (s=0;s<lp_numservices(global_loadparm);s++) {
+               struct loadparm_service *service = lp_servicebynum(global_loadparm, s);
                if (service != NULL) {
                        const char **deny_list = lp_hostsdeny(service);
                        const char **allow_list = lp_hostsallow(service);
@@ -204,7 +204,7 @@ static int do_global_checks(void)
                                section_name = GLOBAL_NAME;
                                service = NULL;
                        } else if ((!strwicmp(section_name, GLOBAL_NAME)) == 0 &&
-                                (service=lp_service(section_name)) == NULL) {
+                                (service=lp_service(global_loadparm, section_name)) == NULL) {
                                        fprintf(stderr,"Unknown section %s\n",
                                                section_name);
                                        return(1);
@@ -215,15 +215,15 @@ static int do_global_checks(void)
                                ret = !lp_dump_a_parameter(s, parameter_name, stdout, (service == NULL));
                        }
                } else {
-                       lp_dump(stdout, show_defaults, lp_numservices());
+                       lp_dump(global_loadparm, stdout, show_defaults, lp_numservices(global_loadparm));
                }
                return(ret);
        }
 
        if(cname && caddr){
                /* this is totally ugly, a real `quick' hack */
-               for (s=0;s<lp_numservices();s++) {
-                       struct loadparm_service *service = lp_servicebynum(s);
+               for (s=0;s<lp_numservices(global_loadparm);s++) {
+                       struct loadparm_service *service = lp_servicebynum(global_loadparm, s);
                        if (service != NULL) {
                                if (allow_access(NULL, lp_hostsdeny(NULL), lp_hostsallow(NULL), cname, caddr)
                                    && allow_access(NULL, lp_hostsdeny(service), lp_hostsallow(service), cname, caddr)) {