Remove sDefault as static variable.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 28 Feb 2008 19:04:58 +0000 (20:04 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 28 Feb 2008 19:04:58 +0000 (20:04 +0100)
(This used to be commit 16f36ce499e93860dd535034a584ec2b93e7a172)

13 files changed:
source4/param/generic.c
source4/param/loadparm.c
source4/param/loadparm.h
source4/param/param.h
source4/param/param.i
source4/param/param.py
source4/param/param_wrap.c
source4/param/share_classic.c
source4/param/tests/loadparm.c
source4/script/mkproto.pl
source4/scripting/python/config.mk
source4/smbd/service_stream.c
source4/utils/testparm.c

index 2327000fc917d1fdb8d4bffd2556e753db294a6d..b86e3ad2342db1003ca812177121633e8e981ed3 100644 (file)
@@ -259,11 +259,8 @@ int param_use(struct loadparm_context *lp_ctx, struct param_context *ctx)
                                struct loadparm_service *service = 
                                                        lp_service(lp_ctx, section->name);
                                if (service == NULL)
-                                       service = lp_add_service(lp_ctx, &sDefault, section->name);
-                               lp_do_service_parameter(lp_ctx, 
-                                                       service,
-                                                       param->key,
-                                                       param->value);
+                                       service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), section->name);
+                               lp_do_service_parameter(lp_ctx, service, param->key, param->value);
                        }
                }
        }
index bad90fc74a975abfa162757f02700fc91b9c27f9..d94ab92ac942aae1c31e87a35cbc817cc8a77017 100644 (file)
@@ -224,44 +224,11 @@ struct loadparm_service
 };
 
 
-/* This is a default service used to prime a services structure */
-struct loadparm_service sDefault = {
-       .szService = NULL,
-       .szPath = NULL,
-       .szCopy = NULL,
-       .szInclude = NULL,
-       .szPrintername = NULL,
-       .szHostsallow = NULL,
-       .szHostsdeny = NULL,
-       .comment = NULL,
-       .volume = NULL,
-       .fstype = NULL,
-       .ntvfs_handler = NULL,
-       .iMaxPrintJobs = 1000,
-       .iMaxConnections = 0,
-       .iCSCPolicy = 0,
-       .bAvailable = true,
-       .bBrowseable = true,
-       .bRead_only = true,
-       .bPrint_ok = false,
-       .bMap_system = false,
-       .bMap_hidden = false,
-       .bMap_archive = true,
-       .bStrictLocking = true,
-       .iCreate_mask = 0744,
-       .iCreate_force_mode = 0000,
-       .iDir_mask = 0755,
-       .iDir_force_mode = 0000,
-       .copymap = NULL,
-       .bMSDfsRoot = false,
-       .bStrictSync = false,
-       .bCIFileSystem = false,
-};
-
 struct loadparm_context *global_loadparm = NULL;
 
 #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
 
+
 /* prototypes for the special type handlers */
 static bool handle_include(struct loadparm_context *lp_ctx,
                           const char *pszParmValue, char **ptr);
@@ -521,11 +488,13 @@ static struct parm_struct parm_table[] = {
        {NULL, P_BOOL, P_NONE, 0, NULL, NULL}
 };
 
+
 /* local variables */
 struct loadparm_context {
        const char *szConfigFile;
        struct loadparm_global *globals;
        struct loadparm_service **services;
+       struct loadparm_service *sDefault;
        int iNumServices;
        struct loadparm_service *currentService;
        bool bInGlobalSection;
@@ -540,6 +509,10 @@ struct loadparm_context {
 };
 
 
+struct loadparm_service *lp_default_service(struct loadparm_context *lp_ctx)
+{
+       return lp_ctx->sDefault;
+}
 
 /*
   return the parameter table
@@ -619,15 +592,13 @@ static const char *lp_string(const char *s)
  int fn_name(struct loadparm_context *lp_ctx) {return lp_ctx->globals->var_name;}
 
 #define FN_LOCAL_STRING(fn_name,val) \
- const char *fn_name(struct loadparm_service *service) {return(lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault.val)));}
-#define FN_LOCAL_CONST_STRING(fn_name,val) \
- const char *fn_name(struct loadparm_service *service) {return (const char *)(service != NULL && service->val != NULL) ? service->val : sDefault.val;}
+ const char *fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val)));}
 #define FN_LOCAL_LIST(fn_name,val) \
- const char **fn_name(struct loadparm_service *service) {return(const char **)(service != NULL && service->val != NULL? service->val : sDefault.val);}
+ const char **fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return(const char **)(service != NULL && service->val != NULL? service->val : sDefault->val);}
 #define FN_LOCAL_BOOL(fn_name,val) \
- bool fn_name(struct loadparm_service *service) {return((service != NULL)? service->val : sDefault.val);}
+ bool fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
 #define FN_LOCAL_INTEGER(fn_name,val) \
- int fn_name(struct loadparm_service *service) {return((service != NULL)? service->val : sDefault.val);}
+ int fn_name(struct loadparm_service *service, struct loadparm_service *sDefault) {return((service != NULL)? service->val : sDefault->val);}
 
 _PUBLIC_ FN_GLOBAL_INTEGER(lp_server_role, server_role)
 _PUBLIC_ FN_GLOBAL_LIST(lp_smb_ports, smb_ports)
@@ -722,8 +693,11 @@ _PUBLIC_ FN_GLOBAL_INTEGER(lp_security, security)
 _PUBLIC_ FN_GLOBAL_BOOL(lp_paranoid_server_security, paranoid_server_security)
 _PUBLIC_ FN_GLOBAL_INTEGER(lp_announce_as, announce_as)
 _PUBLIC_ FN_GLOBAL_LIST(lp_js_include, jsInclude)
-_PUBLIC_ FN_LOCAL_STRING(lp_servicename, szService)
-_PUBLIC_ FN_LOCAL_CONST_STRING(lp_const_servicename, szService)
+const char *lp_servicename(const struct loadparm_service *service)
+{
+       return lp_string((const char *)service->szService);
+}
+
 _PUBLIC_ FN_LOCAL_STRING(lp_pathname, szPath)
 static FN_LOCAL_STRING(_lp_printername, szPrintername)
 _PUBLIC_ FN_LOCAL_LIST(lp_hostsallow, szHostsallow)
@@ -999,11 +973,11 @@ bool lp_parm_bool(struct loadparm_context *lp_ctx,
  * Initialise a service to the defaults.
  */
 
-static struct loadparm_service *init_service(TALLOC_CTX *mem_ctx)
+static struct loadparm_service *init_service(TALLOC_CTX *mem_ctx, struct loadparm_service *sDefault)
 {
        struct loadparm_service *pservice =
                talloc_zero(mem_ctx, struct loadparm_service);
-       copy_service(pservice, &sDefault, NULL);
+       copy_service(pservice, sDefault, NULL);
        return pservice;
 }
 
@@ -1085,7 +1059,7 @@ struct loadparm_service *lp_add_service(struct loadparm_context *lp_ctx,
                lp_ctx->iNumServices++;
        }
 
-       lp_ctx->services[i] = init_service(lp_ctx->services);
+       lp_ctx->services[i] = init_service(lp_ctx->services, lp_ctx->sDefault);
        if (lp_ctx->services[i] == NULL) {
                DEBUG(0,("lp_add_service: out of memory!\n"));
                return NULL;
@@ -1114,10 +1088,10 @@ bool lp_add_home(struct loadparm_context *lp_ctx,
                return false;
 
        if (!(*(default_service->szPath))
-           || strequal(default_service->szPath, sDefault.szPath)) {
+           || strequal(default_service->szPath, lp_ctx->sDefault->szPath)) {
                service->szPath = talloc_strdup(service, pszHomedir);
        } else {
-               service->szPath = string_sub_talloc(service, lp_pathname(default_service),"%H", pszHomedir); 
+               service->szPath = string_sub_talloc(service, lp_pathname(default_service, lp_ctx->sDefault), "%H", pszHomedir); 
        }
 
        if (!(*(service->comment))) {
@@ -1139,7 +1113,7 @@ bool lp_add_home(struct loadparm_context *lp_ctx,
 static bool lp_add_hidden(struct loadparm_context *lp_ctx, const char *name,
                          const char *fstype)
 {
-       struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, name);
+       struct loadparm_service *service = lp_add_service(lp_ctx, lp_ctx->sDefault, name);
 
        if (service == NULL)
                return false;
@@ -1243,7 +1217,7 @@ void *lp_parm_ptr(struct loadparm_context *lp_ctx,
 {
        if (service == NULL) {
                if (parm->class == P_LOCAL)
-                       return ((char *)&sDefault)+parm->offset;
+                       return ((char *)lp_ctx->sDefault)+parm->offset;
                else if (parm->class == P_GLOBAL)
                        return ((char *)lp_ctx->globals)+parm->offset;
                else return NULL;
@@ -2019,7 +1993,7 @@ static bool do_section(const char *pszSectionName, void *userdata)
                /* issued by the post-processing of a previous section. */
                DEBUG(2, ("Processing section \"[%s]\"\n", pszSectionName));
 
-               if ((lp_ctx->currentService = lp_add_service(lp_ctx, &sDefault,
+               if ((lp_ctx->currentService = lp_add_service(lp_ctx, lp_ctx->sDefault,
                                                             pszSectionName))
                    == NULL) {
                        DEBUG(0, ("Failed to add a new service\n"));
@@ -2032,12 +2006,12 @@ static bool do_section(const char *pszSectionName, void *userdata)
 
 
 /**
- * Determine if a partcular base parameter is currentl set to the default value.
+ * Determine if a particular base parameter is currently set to the default value.
  */
 
-static bool is_default(int i)
+static bool is_default(struct loadparm_service *sDefault, int i)
 {
-       void *def_ptr = ((char *)&sDefault) + parm_table[i].offset;
+       void *def_ptr = ((char *)sDefault) + parm_table[i].offset;
        if (!defaults_saved)
                return false;
        switch (parm_table[i].type) {
@@ -2096,12 +2070,12 @@ static void dump_globals(struct loadparm_context *lp_ctx, FILE *f,
  * Display the contents of a single services record.
  */
 
-static void dump_a_service(struct loadparm_service * pService, FILE * f)
+static void dump_a_service(struct loadparm_service * pService, struct loadparm_service *sDefault, FILE * f)
 {
        int i;
        struct param_opt *data;
 
-       if (pService != &sDefault)
+       if (pService != sDefault)
                fprintf(f, "\n[%s]\n", pService->szService);
 
        for (i = 0; parm_table[i].label; i++)
@@ -2109,14 +2083,14 @@ static void dump_a_service(struct loadparm_service * pService, FILE * f)
                    parm_table[i].offset != -1 &&
                    (*parm_table[i].label != '-') &&
                    (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
-                       if (pService == &sDefault) {
-                               if (defaults_saved && is_default(i))
+                       if (pService == sDefault) {
+                               if (defaults_saved && is_default(sDefault, i))
                                        continue;
                        } else {
                                if (equal_parameter(parm_table[i].type,
                                                    ((char *)pService) +
                                                    parm_table[i].offset,
-                                                   ((char *)&sDefault) +
+                                                   ((char *)sDefault) +
                                                    parm_table[i].offset))
                                        continue;
                        }
@@ -2189,7 +2163,7 @@ struct parm_struct *lp_next_parameter(struct loadparm_context *lp_ctx, int snum,
                                    !equal_parameter(parm_table[*i].type,
                                                     ((char *)pService) +
                                                     parm_table[*i].offset,
-                                                    ((char *)&sDefault) +
+                                                    ((char *)lp_ctx->sDefault) +
                                                     parm_table[*i].offset))
                                {
                                        return &parm_table[(*i)++];
@@ -2266,6 +2240,18 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
        talloc_set_destructor(lp_ctx, lp_destructor);
        lp_ctx->bInGlobalSection = true;
        lp_ctx->globals = talloc_zero(lp_ctx, struct loadparm_global);
+       lp_ctx->sDefault = talloc_zero(lp_ctx, struct loadparm_service);
+
+       lp_ctx->sDefault->iMaxPrintJobs = 1000;
+       lp_ctx->sDefault->bAvailable = true;
+       lp_ctx->sDefault->bBrowseable = true;
+       lp_ctx->sDefault->bRead_only = true;
+       lp_ctx->sDefault->bMap_archive = true;
+       lp_ctx->sDefault->bStrictLocking = true;
+       lp_ctx->sDefault->iCreate_mask = 0744;
+       lp_ctx->sDefault->iCreate_force_mode = 0000;
+       lp_ctx->sDefault->iDir_mask = 0755;
+       lp_ctx->sDefault->iDir_force_mode = 0000;
 
        DEBUG(3, ("Initialising global parameters\n"));
 
@@ -2276,7 +2262,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
                    !(lp_ctx->flags[i] & FLAG_CMDLINE)) {
                        char **r;
                        if (parm_table[i].class == P_LOCAL) {
-                               r = (char **)(((char *)&sDefault) + parm_table[i].offset);
+                               r = (char **)(((char *)lp_ctx->sDefault) + parm_table[i].offset);
                        } else {
                                r = (char **)(((char *)lp_ctx->globals) + parm_table[i].offset);
                        }
@@ -2512,21 +2498,21 @@ void lp_dump(struct loadparm_context *lp_ctx, FILE *f, bool show_defaults,
 
        dump_globals(lp_ctx, f, show_defaults);
 
-       dump_a_service(&sDefault, f);
+       dump_a_service(lp_ctx->sDefault, lp_ctx->sDefault, f);
 
        for (iService = 0; iService < maxtoprint; iService++)
-               lp_dump_one(f, show_defaults, lp_ctx->services[iService]);
+               lp_dump_one(f, show_defaults, lp_ctx->services[iService], lp_ctx->sDefault);
 }
 
 /**
  * Display the contents of one service in human-readable form.
  */
-void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service)
+void lp_dump_one(FILE *f, bool show_defaults, struct loadparm_service *service, struct loadparm_service *sDefault)
 {
        if (service != NULL) {
                if (service->szService[0] == '\0')
                        return;
-               dump_a_service(service, f);
+               dump_a_service(service, sDefault, f);
        }
 }
 
@@ -2565,9 +2551,9 @@ struct loadparm_service *lp_service(struct loadparm_context *lp_ctx,
 /**
  * A useful volume label function.
  */
-const char *volume_label(struct loadparm_service *service)
+const char *volume_label(struct loadparm_service *service, struct loadparm_service *sDefault)
 {
-       const char *ret = lp_volume(service);
+       const char *ret = lp_volume(service, sDefault);
        if (!*ret)
                return lp_servicename(service);
        return ret;
@@ -2577,11 +2563,11 @@ const char *volume_label(struct loadparm_service *service)
 /**
  * If we are PDC then prefer us as DMB
  */
-const char *lp_printername(struct loadparm_service *service)
+const char *lp_printername(struct loadparm_service *service, struct loadparm_service *sDefault)
 {
-       const char *ret = _lp_printername(service);
+       const char *ret = _lp_printername(service, sDefault);
        if (ret == NULL || (ret != NULL && *ret == '\0'))
-               ret = lp_const_servicename(service);
+               ret = lp_servicename(service);
 
        return ret;
 }
@@ -2590,9 +2576,9 @@ const char *lp_printername(struct loadparm_service *service)
 /**
  * Return the max print jobs per queue.
  */
-int lp_maxprintjobs(struct loadparm_service *service)
+int lp_maxprintjobs(struct loadparm_service *service, struct loadparm_service *sDefault)
 {
-       int maxjobs = (service != NULL) ? service->iMaxPrintJobs : sDefault.iMaxPrintJobs;
+       int maxjobs = (service != NULL) ? service->iMaxPrintJobs : sDefault->iMaxPrintJobs;
        if (maxjobs <= 0 || maxjobs >= PRINT_MAX_JOBID)
                maxjobs = PRINT_MAX_JOBID - 1;
 
index 842e1ce437601083a68b0ead09a69aebd90d2208..cd3c0b9595d0fc423695ccbc1ae084321a44a082 100644 (file)
@@ -59,6 +59,9 @@ struct parm_struct {
        } def;
 };
 
+
+
+
 #define FLAG_DEFAULT    0x0001 /* this option was a default */
 #define FLAG_CMDLINE    0x0002 /* this option was set from the command line */
 
index 098a73deec5126fb7bf510847119dc3164c97a30..84f864edaab70ae3dc954b5e3aaa9eed37b4e342 100644 (file)
@@ -64,6 +64,5 @@ struct smbcli_options;
 #include "param/proto.h"
 
 extern struct loadparm_context *global_loadparm;
-extern struct loadparm_service sDefault;
 
 #endif /* _PARAM_H */
index 7322302117ef43c3ffb374948ac5eab60af0a9a9..77d781d6ffe32293e8cb0038636aca330dee7055 100644 (file)
@@ -49,6 +49,7 @@ typedef struct param_opt param_opt;
 typedef struct loadparm_context {
     %extend {
         loadparm_context(TALLOC_CTX *mem_ctx) { return loadparm_init(mem_ctx); }
+        struct loadparm_service *default_service() { return lp_default_service($self); }
         bool load(const char *filename) { return lp_load($self, filename); }
         bool load_default() { return lp_load_default($self); }
 #ifdef SWIGPYTHON
@@ -167,9 +168,9 @@ typedef struct loadparm_context {
 
 typedef struct loadparm_service {
     %extend { 
-        const char *volume_label() { return volume_label($self); }
-        const char *printername() { return lp_printername($self); }
-        int maxprintjobs() { return lp_maxprintjobs($self); } 
+        const char *volume_label(struct loadparm_service *sDefault) { return volume_label($self, sDefault); }
+        const char *printername(struct loadparm_service *sDefault) { return lp_printername($self, sDefault); }
+        int maxprintjobs(struct loadparm_service *sDefault) { return lp_maxprintjobs($self, sDefault); } 
     }
 } loadparm_service;
 
index 5adf7a4ecc39f0b27572c2e3bd830347f81e3436..025acc6be1e556d9cf161cdf67ad93faecb1d23b 100644 (file)
@@ -63,6 +63,7 @@ class LoadParm(object):
     def __init__(self, *args, **kwargs): 
         _param.LoadParm_swiginit(self,_param.new_LoadParm(*args, **kwargs))
     __swig_destroy__ = _param.delete_LoadParm
+LoadParm.default_service = new_instancemethod(_param.LoadParm_default_service,None,LoadParm)
 LoadParm.load = new_instancemethod(_param.LoadParm_load,None,LoadParm)
 LoadParm.load_default = new_instancemethod(_param.LoadParm_load_default,None,LoadParm)
 LoadParm.__len__ = new_instancemethod(_param.LoadParm___len__,None,LoadParm)
index 275e2d67ecbe36819bf608ac018a456396c49948..e74f902645329fe1cc84134a25f74f09eb57bed8 100644 (file)
@@ -2526,6 +2526,7 @@ typedef struct param_section param_section;
 typedef struct param_opt param_opt;
 
 SWIGINTERN loadparm_context *new_loadparm_context(TALLOC_CTX *mem_ctx){ return loadparm_init(mem_ctx); }
+SWIGINTERN struct loadparm_service *loadparm_context_default_service(loadparm_context *self){ return lp_default_service(self); }
 
 SWIGINTERN swig_type_info*
 SWIG_pchar_descriptor(void)
@@ -2742,9 +2743,9 @@ SWIGINTERN PyObject *loadparm_context_get(loadparm_context *self,char const *par
             return Py_None;
         }
 SWIGINTERN void delete_loadparm_context(loadparm_context *self){ talloc_free(self); }
-SWIGINTERN char const *loadparm_service_volume_label(loadparm_service *self){ return volume_label(self); }
-SWIGINTERN char const *loadparm_service_printername(loadparm_service *self){ return lp_printername(self); }
-SWIGINTERN int loadparm_service_maxprintjobs(loadparm_service *self){ return lp_maxprintjobs(self); }
+SWIGINTERN char const *loadparm_service_volume_label(loadparm_service *self,struct loadparm_service *sDefault){ return volume_label(self, sDefault); }
+SWIGINTERN char const *loadparm_service_printername(loadparm_service *self,struct loadparm_service *sDefault){ return lp_printername(self, sDefault); }
+SWIGINTERN int loadparm_service_maxprintjobs(loadparm_service *self,struct loadparm_service *sDefault){ return lp_maxprintjobs(self, sDefault); }
 SWIGINTERN param *new_param(TALLOC_CTX *mem_ctx){ return param_init(mem_ctx); }
 SWIGINTERN int param_set(param *self,char const *parameter,PyObject *ob,char const *section_name){
             struct param_opt *opt = param_get_add(self, parameter, section_name);
@@ -2799,6 +2800,34 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_LoadParm_default_service(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+  PyObject *resultobj = 0;
+  loadparm_context *arg1 = (loadparm_context *) 0 ;
+  struct loadparm_service *result = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  char *  kwnames[] = {
+    (char *) "self", NULL 
+  };
+  
+  arg1 = loadparm_init(NULL);
+  if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"|O:LoadParm_default_service",kwnames,&obj0)) SWIG_fail;
+  if (obj0) {
+    res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_loadparm_context, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LoadParm_default_service" "', argument " "1"" of type '" "loadparm_context *""'"); 
+    }
+    arg1 = (loadparm_context *)(argp1);
+  }
+  result = (struct loadparm_service *)loadparm_context_default_service(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_loadparm_service, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_LoadParm_load(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
   PyObject *resultobj = 0;
   loadparm_context *arg1 = (loadparm_context *) 0 ;
@@ -3241,22 +3270,33 @@ SWIGINTERN PyObject *LoadParm_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_loadparm_service_volume_label(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_loadparm_service_volume_label(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
   PyObject *resultobj = 0;
   loadparm_service *arg1 = (loadparm_service *) 0 ;
+  struct loadparm_service *arg2 = (struct loadparm_service *) 0 ;
   char *result = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char *  kwnames[] = {
+    (char *) "self",(char *) "sDefault", NULL 
+  };
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:loadparm_service_volume_label",kwnames,&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "loadparm_service_volume_label" "', argument " "1"" of type '" "loadparm_service *""'"); 
   }
   arg1 = (loadparm_service *)(argp1);
-  result = (char *)loadparm_service_volume_label(arg1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "loadparm_service_volume_label" "', argument " "2"" of type '" "struct loadparm_service *""'"); 
+  }
+  arg2 = (struct loadparm_service *)(argp2);
+  result = (char *)loadparm_service_volume_label(arg1,arg2);
   resultobj = SWIG_FromCharPtr((const char *)result);
   return resultobj;
 fail:
@@ -3264,22 +3304,33 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_loadparm_service_printername(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_loadparm_service_printername(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
   PyObject *resultobj = 0;
   loadparm_service *arg1 = (loadparm_service *) 0 ;
+  struct loadparm_service *arg2 = (struct loadparm_service *) 0 ;
   char *result = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char *  kwnames[] = {
+    (char *) "self",(char *) "sDefault", NULL 
+  };
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:loadparm_service_printername",kwnames,&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "loadparm_service_printername" "', argument " "1"" of type '" "loadparm_service *""'"); 
   }
   arg1 = (loadparm_service *)(argp1);
-  result = (char *)loadparm_service_printername(arg1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "loadparm_service_printername" "', argument " "2"" of type '" "struct loadparm_service *""'"); 
+  }
+  arg2 = (struct loadparm_service *)(argp2);
+  result = (char *)loadparm_service_printername(arg1,arg2);
   resultobj = SWIG_FromCharPtr((const char *)result);
   return resultobj;
 fail:
@@ -3287,22 +3338,33 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_loadparm_service_maxprintjobs(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_loadparm_service_maxprintjobs(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
   PyObject *resultobj = 0;
   loadparm_service *arg1 = (loadparm_service *) 0 ;
+  struct loadparm_service *arg2 = (struct loadparm_service *) 0 ;
   int result;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  char *  kwnames[] = {
+    (char *) "self",(char *) "sDefault", NULL 
+  };
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:loadparm_service_maxprintjobs",kwnames,&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_loadparm_service, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "loadparm_service_maxprintjobs" "', argument " "1"" of type '" "loadparm_service *""'"); 
   }
   arg1 = (loadparm_service *)(argp1);
-  result = (int)loadparm_service_maxprintjobs(arg1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_loadparm_service, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "loadparm_service_maxprintjobs" "', argument " "2"" of type '" "struct loadparm_service *""'"); 
+  }
+  arg2 = (struct loadparm_service *)(argp2);
+  result = (int)loadparm_service_maxprintjobs(arg1,arg2);
   resultobj = SWIG_From_int((int)(result));
   return resultobj;
 fail:
@@ -4078,6 +4140,7 @@ SWIGINTERN PyObject *Swig_var_default_config_get(void) {
 
 static PyMethodDef SwigMethods[] = {
         { (char *)"new_LoadParm", (PyCFunction)_wrap_new_LoadParm, METH_NOARGS, NULL},
+        { (char *)"LoadParm_default_service", (PyCFunction) _wrap_LoadParm_default_service, METH_VARARGS | METH_KEYWORDS, NULL},
         { (char *)"LoadParm_load", (PyCFunction) _wrap_LoadParm_load, METH_VARARGS | METH_KEYWORDS, NULL},
         { (char *)"LoadParm_load_default", (PyCFunction) _wrap_LoadParm_load_default, METH_VARARGS | METH_KEYWORDS, NULL},
         { (char *)"LoadParm___len__", (PyCFunction) _wrap_LoadParm___len__, METH_VARARGS | METH_KEYWORDS, NULL},
@@ -4091,9 +4154,9 @@ static PyMethodDef SwigMethods[] = {
         { (char *)"delete_LoadParm", (PyCFunction) _wrap_delete_LoadParm, METH_VARARGS | METH_KEYWORDS, NULL},
         { (char *)"LoadParm_swigregister", LoadParm_swigregister, METH_VARARGS, NULL},
         { (char *)"LoadParm_swiginit", LoadParm_swiginit, METH_VARARGS, NULL},
-        { (char *)"loadparm_service_volume_label", (PyCFunction)_wrap_loadparm_service_volume_label, METH_O, NULL},
-        { (char *)"loadparm_service_printername", (PyCFunction)_wrap_loadparm_service_printername, METH_O, NULL},
-        { (char *)"loadparm_service_maxprintjobs", (PyCFunction)_wrap_loadparm_service_maxprintjobs, METH_O, NULL},
+        { (char *)"loadparm_service_volume_label", (PyCFunction) _wrap_loadparm_service_volume_label, METH_VARARGS | METH_KEYWORDS, NULL},
+        { (char *)"loadparm_service_printername", (PyCFunction) _wrap_loadparm_service_printername, METH_VARARGS | METH_KEYWORDS, NULL},
+        { (char *)"loadparm_service_maxprintjobs", (PyCFunction) _wrap_loadparm_service_maxprintjobs, METH_VARARGS | METH_KEYWORDS, NULL},
         { (char *)"loadparm_service_swigregister", loadparm_service_swigregister, METH_VARARGS, NULL},
         { (char *)"new_ParamFile", (PyCFunction)_wrap_new_ParamFile, METH_NOARGS, NULL},
         { (char *)"ParamFile_get_section", (PyCFunction) _wrap_ParamFile_get_section, METH_VARARGS | METH_KEYWORDS, NULL},
index eb5e486c449957480a7fa9544c4c56303c23d32a..f5a6fa67a483de372cd05fc288c20780df6f9d91 100644 (file)
@@ -73,25 +73,25 @@ static const char *sclassic_string_option(struct share_config *scfg,
        }
 
        if (strcmp(opt_name, SHARE_PATH) == 0) {
-               return lp_pathname(s);
+               return lp_pathname(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_COMMENT) == 0) {
-               return lp_comment(s);
+               return lp_comment(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_VOLUME) == 0) {
-               return volume_label(s);
+               return volume_label(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_TYPE) == 0) {
-               if (lp_print_ok(s)) {
+               if (lp_print_ok(s, lp_default_service(lp_ctx))) {
                        return "PRINTER";
                }
-               if (strcmp("NTFS", lp_fstype(s)) == 0) {
+               if (strcmp("NTFS", lp_fstype(s, lp_default_service(lp_ctx))) == 0) {
                        return "DISK";
                }
-               return lp_fstype(s);
+               return lp_fstype(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_PASSWORD) == 0) {
@@ -131,27 +131,27 @@ static int sclassic_int_option(struct share_config *scfg, const char *opt_name,
        }
 
        if (strcmp(opt_name, SHARE_CSC_POLICY) == 0) {
-               return lp_csc_policy(s);
+               return lp_csc_policy(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_MAX_CONNECTIONS) == 0) {
-               return lp_max_connections(s);
+               return lp_max_connections(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_CREATE_MASK) == 0) {
-               return lp_create_mask(s);
+               return lp_create_mask(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_DIR_MASK) == 0) {
-               return lp_dir_mask(s);
+               return lp_dir_mask(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_FORCE_DIR_MODE) == 0) {
-               return lp_force_dir_mode(s);
+               return lp_force_dir_mode(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_FORCE_CREATE_MODE) == 0) {
-               return lp_force_create_mode(s);
+               return lp_force_create_mode(s, lp_default_service(lp_ctx));
        }
 
 
@@ -190,39 +190,39 @@ static bool sclassic_bool_option(struct share_config *scfg, const char *opt_name
        }
 
        if (strcmp(opt_name, SHARE_BROWSEABLE) == 0) {
-               return lp_browseable(s);
+               return lp_browseable(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_READONLY) == 0) {
-               return lp_readonly(s);
+               return lp_readonly(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_MAP_SYSTEM) == 0) {
-               return lp_map_system(s);
+               return lp_map_system(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_MAP_HIDDEN) == 0) {
-               return lp_map_hidden(s);
+               return lp_map_hidden(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_MAP_ARCHIVE) == 0) {
-               return lp_map_archive(s);
+               return lp_map_archive(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_STRICT_LOCKING) == 0) {
-               return lp_strict_locking(s);
+               return lp_strict_locking(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_STRICT_SYNC) == 0) {
-               return lp_strict_sync(s);
+               return lp_strict_sync(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_MSDFS_ROOT) == 0) {
-               return lp_msdfs_root(s);
+               return lp_msdfs_root(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_CI_FILESYSTEM) == 0) {
-               return lp_ci_filesystem(s);
+               return lp_ci_filesystem(s, lp_default_service(lp_ctx));
        }
 
        DEBUG(0,("request for unknown share bool option '%s'\n",
@@ -255,15 +255,15 @@ static const char **sclassic_string_list_option(TALLOC_CTX *mem_ctx, struct shar
        }
 
        if (strcmp(opt_name, SHARE_HOSTS_ALLOW) == 0) {
-               return lp_hostsallow(s);
+               return lp_hostsallow(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_HOSTS_DENY) == 0) {
-               return lp_hostsdeny(s);
+               return lp_hostsdeny(s, lp_default_service(lp_ctx));
        }
 
        if (strcmp(opt_name, SHARE_NTVFS_HANDLER) == 0) {
-               return lp_ntvfs_handler(s);
+               return lp_ntvfs_handler(s, lp_default_service(lp_ctx));
        }
 
        DEBUG(0,("request for unknown share list option '%s'\n",
index 92871e043d85e87b14b24f291442c0212b667816..49fcdf7249f284d38d238ed32ee42bf8fb90486b 100644 (file)
@@ -129,7 +129,7 @@ static bool test_lp_parm_bytes(struct torture_context *tctx)
 static bool test_lp_do_service_parameter(struct torture_context *tctx)
 {
        struct loadparm_context *lp_ctx = loadparm_init(tctx);
-       struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, "foo");
+       struct loadparm_service *service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), "foo");
        torture_assert(tctx, lp_do_service_parameter(lp_ctx, service, 
                                                     "some:thing", "foo"), "lp_set_option failed");
        torture_assert_str_equal(tctx, lp_parm_string(lp_ctx, service, "some", "thing"), "foo",
@@ -140,7 +140,7 @@ static bool test_lp_do_service_parameter(struct torture_context *tctx)
 static bool test_lp_service(struct torture_context *tctx)
 {
        struct loadparm_context *lp_ctx = loadparm_init(tctx);
-       struct loadparm_service *service = lp_add_service(lp_ctx, &sDefault, "foo");
+       struct loadparm_service *service = lp_add_service(lp_ctx, lp_default_service(lp_ctx), "foo");
        torture_assert(tctx, service == lp_service(lp_ctx, "foo"), "invalid service");
        return true;
 }
index 3ed845e2bb558c293c73f459b81c1cf4c74a72d3..5aeece71558a2711517da89bbba0d570a5295ba7 100755 (executable)
@@ -144,7 +144,7 @@ sub handle_loadparm($$)
 
                my %smap = (
                            "GLOBAL" => "struct loadparm_context *",
-                           "LOCAL" => "struct loadparm_service *"
+                           "LOCAL" => "struct loadparm_service *, struct loadparm_service *"
                            );
 
                $file->("$tmap{$type}$name($smap{$scope});\n");
index b15e1fcda78def5dbcb47e51443245dbf2d6109a..0d47c8c5427a592d1679414000ef70729ab1788f 100644 (file)
@@ -25,7 +25,7 @@ swig:: pythonmods
 
 realdistclean::
        @echo "Removing SWIG output files"
-       @-rm -f bin/python/*
+       @-rm -rf bin/python/*
        # FIXME: Remove _wrap.c files
 
 pythonmods:: $(PYTHON_DSOS) $(PYTHON_PYS)
index 23cf830b291ea1af1fadb56cc9c2f9c5216a133c..9f744efa812e4b7e6fab84e308fff11eccbce25d 100644 (file)
@@ -178,7 +178,7 @@ static void stream_new_connection(struct event_context *ev,
        srv_conn->event.fde     = event_add_fd(ev, srv_conn, socket_get_fd(sock),
                                               0, stream_io_handler_fde, srv_conn);
 
-       if (!socket_check_access(sock, "smbd", lp_hostsallow(NULL), lp_hostsdeny(NULL))) {
+       if (!socket_check_access(sock, "smbd", lp_hostsallow(NULL, lp_default_service(lp_ctx)), lp_hostsdeny(NULL, lp_default_service(lp_ctx)))) {
                stream_terminate_connection(srv_conn, "denied by access rules");
                return;
        }
index a4ff5221866ec50e3a6b68e47d6a1dd0a782a0d1..286a4a61fb14195e33f20fee095803764b52faad 100644 (file)
@@ -93,8 +93,8 @@ static int do_share_checks(struct loadparm_context *lp_ctx, const char *cname, c
        for (s=0;s<lp_numservices(lp_ctx);s++) {
                struct loadparm_service *service = lp_servicebynum(lp_ctx, s);
                if (service != NULL) {
-                       const char **deny_list = lp_hostsdeny(service);
-                       const char **allow_list = lp_hostsallow(service);
+                       const char **deny_list = lp_hostsdeny(service, lp_default_service(lp_ctx));
+                       const char **allow_list = lp_hostsallow(service, lp_default_service(lp_ctx));
                        int i;
                        if(deny_list) {
                                for (i=0; deny_list[i]; i++) {
@@ -139,7 +139,7 @@ static int do_share_checks(struct loadparm_context *lp_ctx, const char *cname, c
                                        return(1);
                        }
                        if (!parameter_name) {
-                               lp_dump_one(stdout, show_defaults, service);
+                               lp_dump_one(stdout, show_defaults, service, lp_default_service(lp_ctx));
                        } else {
                                ret = !lp_dump_a_parameter(lp_ctx, service, parameter_name, stdout);
                        }
@@ -154,8 +154,8 @@ static int do_share_checks(struct loadparm_context *lp_ctx, const char *cname, c
                for (s=0;s<lp_numservices(lp_ctx);s++) {
                        struct loadparm_service *service = lp_servicebynum(lp_ctx, 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)) {
+                               if (allow_access(NULL, lp_hostsdeny(NULL, lp_default_service(lp_ctx)), lp_hostsallow(NULL, lp_default_service(lp_ctx)), cname, caddr)
+                                   && allow_access(NULL, lp_hostsdeny(service, lp_default_service(lp_ctx)), lp_hostsallow(service, lp_default_service(lp_ctx)), cname, caddr)) {
                                        fprintf(stderr,"Allow connection from %s (%s) to %s\n",
                                                   cname,caddr,lp_servicename(service));
                                } else {