X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=blobdiff_plain;f=source4%2Fparam%2Floadparm.c;h=2d9af333259d1b61218e232064e476af073d69ea;hp=15edbd1f89c737239ffb71f38be03724e88f7559;hb=ee9dff71e1a3e6749b946e19e15ef1c077a021cf;hpb=442d31c7f699628a603ee3bef3831441b43afb69 diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c index 15edbd1f89c..2d9af333259 100644 --- a/source4/param/loadparm.c +++ b/source4/param/loadparm.c @@ -60,10 +60,13 @@ #include "system/network.h" /* needed for TCP_NODELAY */ #include "smb_server/smb_server.h" #include "libcli/raw/signing.h" -#include "lib/util/dlinklist.h" +#include "../lib/util/dlinklist.h" #include "param/param.h" #include "param/loadparm.h" #include "libcli/raw/libcliraw.h" +#include "rpc_server/common/common.h" +#include "lib/socket/socket.h" +#include "auth/gensec/gensec.h" #define standard_sub_basic talloc_strdup @@ -225,8 +228,6 @@ struct loadparm_service }; -struct loadparm_context *global_loadparm = NULL; - #define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct)) @@ -616,11 +617,6 @@ _PUBLIC_ FN_GLOBAL_INTEGER(lp_kpasswd_port, kpasswd_port) _PUBLIC_ FN_GLOBAL_INTEGER(lp_web_port, web_port) _PUBLIC_ FN_GLOBAL_STRING(lp_swat_directory, swat_directory) _PUBLIC_ FN_GLOBAL_BOOL(lp_tls_enabled, tls_enabled) -_PUBLIC_ FN_GLOBAL_STRING(lp_tls_keyfile, tls_keyfile) -_PUBLIC_ FN_GLOBAL_STRING(lp_tls_certfile, tls_certfile) -_PUBLIC_ FN_GLOBAL_STRING(lp_tls_cafile, tls_cafile) -_PUBLIC_ FN_GLOBAL_STRING(lp_tls_crlfile, tls_crlfile) -_PUBLIC_ FN_GLOBAL_STRING(lp_tls_dhpfile, tls_dhpfile) _PUBLIC_ FN_GLOBAL_STRING(lp_share_backend, szShareBackend) _PUBLIC_ FN_GLOBAL_STRING(lp_sam_url, szSAM_URL) _PUBLIC_ FN_GLOBAL_STRING(lp_idmap_url, szIDMAP_URL) @@ -885,7 +881,7 @@ const char **lp_parm_string_list(TALLOC_CTX *mem_ctx, const char *value = lp_get_parametric(lp_ctx, service, type, option); if (value != NULL) - return str_list_make(mem_ctx, value, separator); + return (const char **)str_list_make(mem_ctx, value, separator); return NULL; } @@ -1299,7 +1295,7 @@ static void copy_service(struct loadparm_service *pserviceDest, strupper(*(char **)dest_ptr); break; case P_LIST: - *(const char ***)dest_ptr = str_list_copy(pserviceDest, + *(const char ***)dest_ptr = (const char **)str_list_copy(pserviceDest, *(const char ***)src_ptr); break; default: @@ -1574,14 +1570,14 @@ static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx, /* If we already have the option set, override it unless it was a command line option and the new one isn't */ if (strcmp(paramo->key, name) == 0) { - if ((paramo->flags & FLAG_CMDLINE) && + if ((paramo->priority & FLAG_CMDLINE) && !(flags & FLAG_CMDLINE)) { return true; } talloc_free(paramo->value); paramo->value = talloc_strdup(paramo, pszParmValue); - paramo->flags = flags; + paramo->priority = flags; free(name); return true; } @@ -1592,7 +1588,7 @@ static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx, smb_panic("OOM"); paramo->key = talloc_strdup(paramo, name); paramo->value = talloc_strdup(paramo, pszParmValue); - paramo->flags = flags; + paramo->priority = flags; if (service == NULL) { DLIST_ADD(lp_ctx->globals->param_opt, paramo); } else { @@ -1653,7 +1649,7 @@ static bool set_variable(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr, } case P_LIST: - *(const char ***)parm_ptr = str_list_make(mem_ctx, + *(const char ***)parm_ptr = (const char **)str_list_make(mem_ctx, pszParmValue, NULL); break; @@ -2224,7 +2220,7 @@ static int lp_destructor(struct loadparm_context *lp_ctx) struct param_opt *next; for (data = lp_ctx->globals->param_opt; data; data=next) { next = data->next; - if (data->flags & FLAG_CMDLINE) continue; + if (data->priority & FLAG_CMDLINE) continue; DLIST_REMOVE(lp_ctx->globals->param_opt, data); talloc_free(data); } @@ -2295,11 +2291,12 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) SAFE_FREE(myname); lp_do_global_parameter(lp_ctx, "name resolve order", "wins host bcast"); - lp_do_global_parameter(lp_ctx, "fstype", FSTYPE_STRING); + lp_do_global_parameter(lp_ctx, "fstype", "NTFS"); + lp_do_global_parameter(lp_ctx, "ntvfs handler", "unixuid default"); lp_do_global_parameter(lp_ctx, "max connections", "-1"); - lp_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo"); + lp_do_global_parameter(lp_ctx, "dcerpc endpoint servers", "epmapper srvsvc wkssvc rpcecho samr netlogon lsarpc spoolss drsuapi winreg dssetup unixinfo browser"); lp_do_global_parameter(lp_ctx, "server services", "smb rpc nbt wrepl ldap cldap kdc drepl winbind ntp_signd"); lp_do_global_parameter(lp_ctx, "ntptr providor", "simple_ldb"); lp_do_global_parameter(lp_ctx, "auth methods:domain controller", "anonymous sam_ignoredomain"); @@ -2365,8 +2362,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lp_do_global_parameter(lp_ctx, "TimeServer", "False"); lp_do_global_parameter(lp_ctx, "BindInterfacesOnly", "False"); lp_do_global_parameter(lp_ctx, "Unicode", "True"); - lp_do_global_parameter(lp_ctx, "ClientLanManAuth", "True"); - lp_do_global_parameter(lp_ctx, "LanmanAuth", "True"); + lp_do_global_parameter(lp_ctx, "ClientLanManAuth", "False"); + lp_do_global_parameter(lp_ctx, "LanmanAuth", "False"); lp_do_global_parameter(lp_ctx, "NTLMAuth", "True"); lp_do_global_parameter(lp_ctx, "client use spnego principal", "False"); @@ -2432,7 +2429,19 @@ const char *lp_configfile(struct loadparm_context *lp_ctx) bool lp_load_default(struct loadparm_context *lp_ctx) { - return lp_load(lp_ctx, dyn_CONFIGFILE); + const char *path; + if (getenv("SMB_CONF_PATH")) + path = getenv("SMB_CONF_PATH"); + else + path = dyn_CONFIGFILE; + + if (!file_exist(path)) { + /* We allow the default smb.conf file to not exist, + * basically the equivalent of an empty file. */ + return true; + } + + return lp_load(lp_ctx, path); } /** @@ -2478,6 +2487,16 @@ bool lp_load(struct loadparm_context *lp_ctx, const char *filename) reload_charcnv(lp_ctx); + /* FIXME: ntstatus_check_dos_mapping = lp_nt_status_support(lp_ctx); */ + + /* FIXME: This is a bit of a hack, but we can't use a global, since + * not everything that uses lp also uses the socket library */ + if (lp_parm_bool(lp_ctx, NULL, "socket", "testnonblock", false)) { + setenv("SOCKET_TESTNONBLOCK", "1", 1); + } else { + unsetenv("SOCKET_TESTNONBLOCK"); + } + /* FIXME: Check locale in environment for this: */ if (strcmp(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx)) != 0) d_set_iconv(smb_iconv_open(lp_display_charset(lp_ctx), lp_unix_charset(lp_ctx))); @@ -2612,7 +2631,7 @@ struct smb_iconv_convenience *lp_iconv_convenience(struct loadparm_context *lp_c _PUBLIC_ void reload_charcnv(struct loadparm_context *lp_ctx) { talloc_free(lp_ctx->iconv_convenience); - lp_ctx->iconv_convenience = smb_iconv_convenience_init_lp(lp_ctx, lp_ctx); + global_iconv_convenience = lp_ctx->iconv_convenience = smb_iconv_convenience_init_lp(lp_ctx, lp_ctx); } void lp_smbcli_options(struct loadparm_context *lp_ctx, @@ -2629,3 +2648,60 @@ void lp_smbcli_options(struct loadparm_context *lp_ctx, options->use_oplocks = true; options->use_level2_oplocks = true; } + +void lp_smbcli_session_options(struct loadparm_context *lp_ctx, + struct smbcli_session_options *options) +{ + options->lanman_auth = lp_client_lanman_auth(lp_ctx); + options->ntlmv2_auth = lp_client_ntlmv2_auth(lp_ctx); + options->plaintext_auth = lp_client_plaintext_auth(lp_ctx); +} + +_PUBLIC_ char *lp_tls_keyfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_keyfile); +} + +_PUBLIC_ char *lp_tls_certfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_certfile); +} + +_PUBLIC_ char *lp_tls_cafile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_cafile); +} + +_PUBLIC_ char *lp_tls_crlfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_crlfile); +} + +_PUBLIC_ char *lp_tls_dhpfile(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + return private_path(mem_ctx, lp_ctx, lp_ctx->globals->tls_dhpfile); +} + +_PUBLIC_ struct dcerpc_server_info *lp_dcerpc_server_info(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + struct dcerpc_server_info *ret = talloc_zero(mem_ctx, struct dcerpc_server_info); + + ret->domain_name = talloc_reference(mem_ctx, lp_workgroup(lp_ctx)); + ret->version_major = lp_parm_int(lp_ctx, NULL, "server_info", "version_major", 5); + ret->version_minor = lp_parm_int(lp_ctx, NULL, "server_info", "version_minor", 2); + ret->version_build = lp_parm_int(lp_ctx, NULL, "server_info", "version_build", 3790); + + return ret; +} + +struct gensec_settings *lp_gensec_settings(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx) +{ + struct gensec_settings *settings = talloc(mem_ctx, struct gensec_settings); + if (settings == NULL) + return NULL; + SMB_ASSERT(lp_ctx != NULL); + settings->lp_ctx = talloc_reference(settings, lp_ctx); + settings->iconv_convenience = lp_iconv_convenience(lp_ctx); + settings->target_hostname = lp_parm_string(lp_ctx, NULL, "gensec", "target_hostname"); + return settings; +}