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=ae5f01cd38bac6fe1033d41752451d2c59845512;hb=1fb1f6bc0dad00d1eb2d1e2aff34e9d3b2714421;hpb=0f119aa9c182b0e3be0808b924cf47f73c812ea6 diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index ae5f01cd38b..b42855c0fe1 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -72,31 +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 *szUsershareTemplateShare; \ - 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)) @@ -232,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) \ @@ -283,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) {\ @@ -320,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, @@ -743,11 +721,11 @@ bool lpcfg_add_home(struct loadparm_context *lp_ctx, if (service == NULL) return false; - if (!(*(default_service->pathname)) - || strequal(default_service->pathname, lp_ctx->sDefault->pathname)) { - service->pathname = talloc_strdup(service, pszHomedir); + if (!(*(default_service->path)) + || strequal(default_service->path, lp_ctx->sDefault->path)) { + service->path = talloc_strdup(service, pszHomedir); } else { - service->pathname = string_sub_talloc(service, lpcfg_pathname(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))) { @@ -757,7 +735,7 @@ bool lpcfg_add_home(struct loadparm_context *lp_ctx, service->browseable = default_service->browseable; DEBUG(3, ("adding home's share [%s] for user '%s' at '%s'\n", - pszHomename, user, service->pathname)); + pszHomename, user, service->path)); return true; } @@ -783,13 +761,13 @@ bool lpcfg_add_printer(struct loadparm_context *lp_ctx, /* entry (if/when the 'available' keyword is implemented!). */ /* the printer name is set to the service name. */ - lpcfg_string_set(service, &service->szPrintername, pszPrintername); + lpcfg_string_set(service, &service->_printername, pszPrintername); lpcfg_string_set(service, &service->comment, comment); service->browseable = default_service->browseable; /* Printers cannot be read_only. */ - service->readonly = false; + service->read_only = false; /* Printer services must be printable. */ - service->print_ok = true; + service->printable = true; DEBUG(3, ("adding printer service %s\n", pszPrintername)); @@ -1011,10 +989,10 @@ static bool lpcfg_service_ok(struct loadparm_service *service) /* The [printers] entry MUST be printable. I'm all for flexibility, but */ /* I can't see why you'd want a non-printable printer service... */ if (strwicmp(service->szService, PRINTERS_NAME) == 0) { - if (!service->print_ok) { + if (!service->printable) { DEBUG(0, ("WARNING: [%s] service MUST be printable!\n", service->szService)); - service->print_ok = true; + service->printable = true; } /* [printers] service must also be non-browsable. */ if (service->browseable) @@ -1797,8 +1775,6 @@ static bool do_section(const char *pszSectionName, void *userdata) static bool is_default(struct loadparm_service *sDefault, int i) { void *def_ptr = ((char *)sDefault) + parm_table[i].offset; - if (!defaults_saved) - return false; switch (parm_table[i].type) { case P_CMDLIST: case P_LIST: @@ -2010,14 +1986,14 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lp_ctx->sDefault->iMaxPrintJobs = 1000; lp_ctx->sDefault->bAvailable = true; lp_ctx->sDefault->browseable = true; - lp_ctx->sDefault->readonly = true; + lp_ctx->sDefault->read_only = true; lp_ctx->sDefault->map_archive = true; lp_ctx->sDefault->strict_locking = true; lp_ctx->sDefault->oplocks = true; lp_ctx->sDefault->create_mask = 0744; lp_ctx->sDefault->force_create_mode = 0000; - lp_ctx->sDefault->dir_mask = 0755; - lp_ctx->sDefault->force_dir_mode = 0000; + lp_ctx->sDefault->directory_mask = 0755; + lp_ctx->sDefault->force_directory_mode = 0000; DEBUG(3, ("Initialising global parameters\n")); @@ -2065,7 +2041,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) myname = get_myname(lp_ctx); lpcfg_do_global_parameter(lp_ctx, "netbios name", myname); talloc_free(myname); - lpcfg_do_global_parameter(lp_ctx, "name resolve order", "wins host bcast"); + lpcfg_do_global_parameter(lp_ctx, "name resolve order", "lmhosts wins host bcast"); lpcfg_do_global_parameter(lp_ctx, "fstype", "NTFS"); @@ -2114,7 +2090,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "LargeReadwrite", "True"); lpcfg_do_global_parameter(lp_ctx, "server min protocol", "LANMAN1"); - lpcfg_do_global_parameter(lp_ctx, "server max protocol", "NT1"); + lpcfg_do_global_parameter(lp_ctx, "server max protocol", "SMB3"); lpcfg_do_global_parameter(lp_ctx, "client min protocol", "CORE"); lpcfg_do_global_parameter(lp_ctx, "client max protocol", "NT1"); lpcfg_do_global_parameter(lp_ctx, "security", "AUTO"); @@ -2172,7 +2148,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "nt status support", "True"); lpcfg_do_global_parameter(lp_ctx, "max wins ttl", "518400"); /* 6 days */ - lpcfg_do_global_parameter(lp_ctx, "min wins ttl", "10"); + lpcfg_do_global_parameter(lp_ctx, "min wins ttl", "21600"); lpcfg_do_global_parameter(lp_ctx, "tls enabled", "True"); lpcfg_do_global_parameter(lp_ctx, "tls keyfile", "tls/key.pem"); @@ -2218,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"); @@ -2228,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"); @@ -2316,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"); @@ -2366,6 +2342,22 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "usershare owner only", "yes"); + lpcfg_do_global_parameter(lp_ctx, "-valid", "yes"); + + lpcfg_do_global_parameter_var(lp_ctx, "usershare path", "%s/usershares", get_dyn_STATEDIR()); + +#ifdef DEVELOPER + lpcfg_do_global_parameter_var(lp_ctx, "panic action", "/bin/sleep 999999999"); +#endif + + lpcfg_do_global_parameter(lp_ctx, "smb passwd file", get_dyn_SMB_PASSWD_FILE()); + + lpcfg_do_global_parameter(lp_ctx, "logon home", "\\\\%N\\%U"); + + lpcfg_do_global_parameter(lp_ctx, "logon path", "\\\\%N\\%U\\profile"); + + lpcfg_do_global_parameter(lp_ctx, "printjob username", "%U"); + for (i = 0; parm_table[i].label; i++) { if (!(lp_ctx->flags[i] & FLAG_CMDLINE)) { lp_ctx->flags[i] |= FLAG_DEFAULT; @@ -2434,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; } @@ -2469,6 +2469,7 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx) unsetenv("SOCKET_TESTNONBLOCK"); } + TALLOC_FREE(tmp_ctx); return true; } @@ -2651,13 +2652,13 @@ const char *lpcfg_volume_label(struct loadparm_service *service, struct loadparm } /** - * If we are PDC then prefer us as DMB + * Return the correct printer name. */ const char *lpcfg_printername(struct loadparm_service *service, struct loadparm_service *sDefault) { const char *ret; - ret = lp_string((const char *)((service != NULL && service->szPrintername != NULL) ? - service->szPrintername : sDefault->szPrintername)); + ret = lp_string((const char *)((service != NULL && service->_printername != NULL) ? + service->_printername : sDefault->_printername)); if (ret == NULL || (ret != NULL && *ret == '\0')) ret = lpcfg_servicename(service); @@ -2701,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)