1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

Remove sDefault as static variable.

This commit is contained in:
Jelmer Vernooij 2008-02-28 20:04:58 +01:00
parent 6cbb241c05
commit 16f36ce499
13 changed files with 188 additions and 138 deletions

View 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);
}
}
}

View 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;

View 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 */

View 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 */

View 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;

View 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)

View 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},

View 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",

View 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;
}

View File

@ -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");

View 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)

View 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;
}

View 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 {