X-Git-Url: http://git.samba.org/samba.git/?p=sfrench%2Fsamba-autobuild%2F.git;a=blobdiff_plain;f=lib%2Fparam%2Floadparm.c;h=b42855c0fe16890212b04a0abca3bbb386c49903;hp=6bebe0d33581c960dba301040e40de6fac0499b6;hb=1fb1f6bc0dad00d1eb2d1e2aff34e9d3b2714421;hpb=a416edfe3ada6b0541ae3450bcb1916ca5429d43 diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index 6bebe0d3358..b42855c0fe1 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -72,30 +72,6 @@ static bool do_parameter(const char *, const char *, void *); static bool defaults_saved = false; -#define LOADPARM_EXTRA_GLOBALS \ - struct parmlist_entry *param_opt; \ - char *realm_original; \ - char *szConfigFile; \ - int iminreceivefile; \ - char *szPrintcapname; \ - int CupsEncrypt; \ - int iPreferredMaster; \ - char *szLdapMachineSuffix; \ - char *szLdapUserSuffix; \ - char *szLdapIdmapSuffix; \ - char *szLdapGroupSuffix; \ - char *szIdmapUID; \ - char *szIdmapGID; \ - char *szIdmapBackend; \ - int winbindMaxDomainConnections; \ - int ismb2_max_credits; \ - char *tls_keyfile; \ - char *tls_certfile; \ - char *tls_cafile; \ - char *tls_crlfile; \ - char *tls_dhpfile; \ - char *loglevel; - #include "lib/param/param_global.h" #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct)) @@ -231,12 +207,13 @@ static struct loadparm_context *global_loadparm_context; #define lpcfg_global_service(i) global_loadparm_context->services[i] #define FN_GLOBAL_STRING(fn_name,var_name) \ - _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx) {\ + _PUBLIC_ char *lpcfg_ ## fn_name(struct loadparm_context *lp_ctx, TALLOC_CTX *ctx) {\ if (lp_ctx == NULL) return NULL; \ if (lp_ctx->s3_fns) { \ - smb_panic( __location__ ": " #fn_name " not implemented because it is an allocated and substiuted string"); \ + SMB_ASSERT(lp_ctx->s3_fns->fn_name); \ + return lp_ctx->s3_fns->fn_name(ctx); \ } \ - return lp_ctx->globals->var_name ? lp_string(lp_ctx->globals->var_name) : ""; \ + return lp_ctx->globals->var_name ? talloc_strdup(ctx, lp_string(lp_ctx->globals->var_name)) : talloc_strdup(ctx, ""); \ } #define FN_GLOBAL_CONST_STRING(fn_name,var_name) \ @@ -282,13 +259,17 @@ static struct loadparm_context *global_loadparm_context; * loadparm_service is shared and lpcfg_service() checks the ->s3_fns * hook */ #define FN_LOCAL_STRING(fn_name,val) \ + _PUBLIC_ char *lpcfg_ ## fn_name(struct loadparm_service *service, \ + struct loadparm_service *sDefault, TALLOC_CTX *ctx) { \ + return(talloc_strdup(ctx, lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val)))); \ + } + +#define FN_LOCAL_CONST_STRING(fn_name,val) \ _PUBLIC_ const char *lpcfg_ ## fn_name(struct loadparm_service *service, \ struct loadparm_service *sDefault) { \ - return(lp_string((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val))); \ + return((const char *)((service != NULL && service->val != NULL) ? service->val : sDefault->val)); \ } -#define FN_LOCAL_CONST_STRING(fn_name,val) FN_LOCAL_STRING(fn_name, val) - #define FN_LOCAL_LIST(fn_name,val) \ _PUBLIC_ const char **lpcfg_ ## fn_name(struct loadparm_service *service, \ struct loadparm_service *sDefault) {\ @@ -319,11 +300,9 @@ static struct loadparm_context *global_loadparm_context; #include "lib/param/param_functions.c" -/* These functions remain only in lib/param for now */ -FN_GLOBAL_BOOL(readraw, bReadRaw) -FN_GLOBAL_BOOL(writeraw, bWriteRaw) -FN_GLOBAL_CONST_STRING(cachedir, szCacheDir) -FN_GLOBAL_CONST_STRING(statedir, szStateDir) +/* These functions cannot be auto-generated */ +FN_LOCAL_BOOL(autoloaded, autoloaded) +FN_GLOBAL_CONST_STRING(dnsdomain, dnsdomain) /* local prototypes */ static struct loadparm_service *getservicebyname(struct loadparm_context *lp_ctx, @@ -746,7 +725,7 @@ bool lpcfg_add_home(struct loadparm_context *lp_ctx, || strequal(default_service->path, lp_ctx->sDefault->path)) { service->path = talloc_strdup(service, pszHomedir); } else { - service->path = string_sub_talloc(service, lpcfg_path(default_service, lp_ctx->sDefault), "%H", pszHomedir); + service->path = string_sub_talloc(service, lpcfg_path(default_service, lp_ctx->sDefault, service), "%H", pszHomedir); } if (!(*(service->comment))) { @@ -2215,7 +2194,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "enable privileges", "True"); - lpcfg_do_global_parameter(lp_ctx, "smb2 max write", "1048576"); + lpcfg_do_global_parameter_var(lp_ctx, "smb2 max write", "%u", DEFAULT_SMB2_MAX_WRITE); lpcfg_do_global_parameter(lp_ctx, "passdb backend", "tdbsam"); @@ -2225,7 +2204,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "mangled names", "True"); - lpcfg_do_global_parameter(lp_ctx, "smb2 max credits", "8192"); + lpcfg_do_global_parameter_var(lp_ctx, "smb2 max credits", "%u", DEFAULT_SMB2_MAX_CREDITS); lpcfg_do_global_parameter(lp_ctx, "ldap ssl", "start tls"); @@ -2313,9 +2292,9 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "lpq cache time", "30"); - lpcfg_do_global_parameter(lp_ctx, "smb2 max trans", "1048576"); + lpcfg_do_global_parameter_var(lp_ctx, "smb2 max trans", "%u", DEFAULT_SMB2_MAX_TRANSACT); - lpcfg_do_global_parameter(lp_ctx, "smb2 max read", "1048576"); + lpcfg_do_global_parameter_var(lp_ctx, "smb2 max read", "%u", DEFAULT_SMB2_MAX_READ); lpcfg_do_global_parameter(lp_ctx, "durable handles", "yes"); @@ -2447,13 +2426,21 @@ const char *lp_default_path(void) static bool lpcfg_update(struct loadparm_context *lp_ctx) { struct debug_settings settings; - lpcfg_add_auto_services(lp_ctx, lpcfg_auto_services(lp_ctx)); + TALLOC_CTX *tmp_ctx; + + tmp_ctx = talloc_new(lp_ctx); + if (tmp_ctx == NULL) { + return false; + } + + lpcfg_add_auto_services(lp_ctx, lpcfg_auto_services(lp_ctx, tmp_ctx)); if (!lp_ctx->globals->wins_server_list && lp_ctx->globals->we_are_a_wins_server) { lpcfg_do_global_parameter(lp_ctx, "wins server", "127.0.0.1"); } if (!lp_ctx->global) { + TALLOC_FREE(tmp_ctx); return true; } @@ -2482,6 +2469,7 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx) unsetenv("SOCKET_TESTNONBLOCK"); } + TALLOC_FREE(tmp_ctx); return true; } @@ -2714,27 +2702,27 @@ _PUBLIC_ void reload_charcnv(struct loadparm_context *lp_ctx) _PUBLIC_ char *lpcfg_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - return lpcfg_private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_keyfile); + return lpcfg_private_path(mem_ctx, lp_ctx, lpcfg__tls_keyfile(lp_ctx)); } _PUBLIC_ char *lpcfg_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - return lpcfg_private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_certfile); + return lpcfg_private_path(mem_ctx, lp_ctx, lpcfg__tls_certfile(lp_ctx)); } _PUBLIC_ char *lpcfg_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - return lpcfg_private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_cafile); + return lpcfg_private_path(mem_ctx, lp_ctx, lpcfg__tls_cafile(lp_ctx)); } _PUBLIC_ char *lpcfg_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - return lpcfg_private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_crlfile); + return lpcfg_private_path(mem_ctx, lp_ctx, lpcfg__tls_crlfile(lp_ctx)); } _PUBLIC_ char *lpcfg_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) { - return lpcfg_private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_dhpfile); + return lpcfg_private_path(mem_ctx, lp_ctx, lpcfg__tls_dhpfile(lp_ctx)); } struct gensec_settings *lpcfg_gensec_settings(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx)