diff options
Diffstat (limited to 'source4')
31 files changed, 93 insertions, 81 deletions
diff --git a/source4/auth/auth_server.c b/source4/auth/auth_server.c index d391793bd9..900ca8d05e 100644 --- a/source4/auth/auth_server.c +++ b/source4/auth/auth_server.c @@ -24,7 +24,7 @@ Support for server level security. ****************************************************************************/ -static struct smbcli_state *server_cryptkey(TALLOC_CTX *mem_ctx, int maxprotocol) +static struct smbcli_state *server_cryptkey(TALLOC_CTX *mem_ctx, bool unicode, int maxprotocol) { struct smbcli_state *cli = NULL; fstring desthost; @@ -92,7 +92,7 @@ static struct smbcli_state *server_cryptkey(TALLOC_CTX *mem_ctx, int maxprotocol DEBUG(3,("got session\n")); - if (!smbcli_negprot(cli, maxprotocol)) { + if (!smbcli_negprot(cli, unicode, maxprotocol)) { DEBUG(1,("%s rejected the negprot\n",desthost)); release_server_mutex(); talloc_free(cli); @@ -215,7 +215,7 @@ static NTSTATUS check_smbserver_security(const struct auth_context *auth_context if (cli) { } else { - cli = server_cryptkey(mem_ctx, lp_cli_maxprotocol(auth_context->lp_ctx)); + cli = server_cryptkey(mem_ctx, lp_unicode(auth_context->lp_ctx), lp_cli_maxprotocol(auth_context->lp_ctx)); locally_made_cli = true; } diff --git a/source4/auth/gensec/gensec_krb5.c b/source4/auth/gensec/gensec_krb5.c index 1227a48ada..391d231f97 100644 --- a/source4/auth/gensec/gensec_krb5.c +++ b/source4/auth/gensec/gensec_krb5.c @@ -116,7 +116,7 @@ static NTSTATUS gensec_krb5_start(struct gensec_security *gensec_security) talloc_set_destructor(gensec_krb5_state, gensec_krb5_destroy); - if (cli_credentials_get_krb5_context(creds, &gensec_krb5_state->smb_krb5_context)) { + if (cli_credentials_get_krb5_context(creds, global_loadparm, &gensec_krb5_state->smb_krb5_context)) { talloc_free(gensec_krb5_state); return NT_STATUS_INTERNAL_ERROR; } diff --git a/source4/client/smbmount.c b/source4/client/smbmount.c index 1ac524dd0c..34fb90fca6 100644 --- a/source4/client/smbmount.c +++ b/source4/client/smbmount.c @@ -111,7 +111,7 @@ static void usr1_handler(int x) /***************************************************** return a connection to a server *******************************************************/ -static struct smbcli_state *do_connection(char *the_service, int maxprotocol) +static struct smbcli_state *do_connection(const char *the_service, bool unicode, int maxprotocol) { struct smbcli_state *c; struct nmb_name called, calling; @@ -181,7 +181,7 @@ static struct smbcli_state *do_connection(char *the_service, int maxprotocol) DEBUG(4,("%d: session request ok\n", sys_getpid())); - if (!smbcli_negprot(c, maxprotocol)) { + if (!smbcli_negprot(c, unicode, maxprotocol)) { DEBUG(0,("%d: protocol negotiation failed\n", sys_getpid())); talloc_free(c); return NULL; @@ -323,7 +323,7 @@ static void smb_umount(char *mount_point) * not exit after open_sockets() or send_login() errors, * as the smbfs mount would then have no way to recover. */ -static void send_fs_socket(char *the_service, char *mount_point, struct smbcli_state *c) +static void send_fs_socket(const char *the_service, char *mount_point, struct smbcli_state *c) { int fd, closed = 0, res = 1; pid_t parentpid = getppid(); @@ -406,7 +406,7 @@ static void send_fs_socket(char *the_service, char *mount_point, struct smbcli_s CatchSignal(SIGUSR1, &usr1_handler); pause(); DEBUG(2,("mount.smbfs[%d]: got signal, getting new socket\n", sys_getpid())); - c = do_connection(the_service); + c = do_connection(the_service, lp_unicode(global_loadparm), lp_cli_maxprotocol(global_loadparm)); } } @@ -434,7 +434,7 @@ static void init_mount(void) } - c = do_connection(service, lp_cli_maxprotocol(global_loadparm)); + c = do_connection(service, lp_unicode(global_loadparm), lp_cli_maxprotocol(global_loadparm)); if (!c) { fprintf(stderr,"SMB connection failed\n"); exit(1); diff --git a/source4/lib/cmdline/popt_common.c b/source4/lib/cmdline/popt_common.c index 41eb70094e..1c96bf64cf 100644 --- a/source4/lib/cmdline/popt_common.c +++ b/source4/lib/cmdline/popt_common.c @@ -47,6 +47,7 @@ static void popt_common_callback(poptContext con, const char *arg, const void *data) { const char *pname; + struct loadparm_context *lp_ctx = global_loadparm; /* FIXME: allow overriding */ if (reason == POPT_CALLBACK_REASON_POST) { if (!lp_loaded()) { @@ -81,7 +82,7 @@ static void popt_common_callback(poptContext con, switch(opt->val) { case 'd': - lp_set_cmdline(global_loadparm, "log level", arg); + lp_set_cmdline(lp_ctx, "log level", arg); break; case OPT_DEBUG_STDERR: @@ -94,7 +95,7 @@ static void popt_common_callback(poptContext con, case 'O': if (arg) { - lp_set_cmdline(global_loadparm, "socket options", arg); + lp_set_cmdline(lp_ctx, "socket options", arg); } break; @@ -107,37 +108,37 @@ static void popt_common_callback(poptContext con, case 'l': if (arg) { char *new_logfile = talloc_asprintf(NULL, "%s/log.%s", arg, pname); - lp_set_cmdline(global_loadparm, "log file", new_logfile); + lp_set_cmdline(lp_ctx, "log file", new_logfile); talloc_free(new_logfile); } break; case 'W': - lp_set_cmdline(global_loadparm, "workgroup", arg); + lp_set_cmdline(lp_ctx, "workgroup", arg); break; case 'r': - lp_set_cmdline(global_loadparm, "realm", arg); + lp_set_cmdline(lp_ctx, "realm", arg); break; case 'n': - lp_set_cmdline(global_loadparm, "netbios name", arg); + lp_set_cmdline(lp_ctx, "netbios name", arg); break; case 'i': - lp_set_cmdline(global_loadparm, "netbios scope", arg); + lp_set_cmdline(lp_ctx, "netbios scope", arg); break; case 'm': - lp_set_cmdline(global_loadparm, "client max protocol", arg); + lp_set_cmdline(lp_ctx, "client max protocol", arg); break; case 'R': - lp_set_cmdline(global_loadparm, "name resolve order", arg); + lp_set_cmdline(lp_ctx, "name resolve order", arg); break; case OPT_OPTION: - if (!lp_set_option(global_loadparm, arg)) { + if (!lp_set_option(lp_ctx, arg)) { fprintf(stderr, "Error setting option '%s'\n", arg); exit(1); } diff --git a/source4/lib/registry/registry.h b/source4/lib/registry/registry.h index c1159dde2e..c53e3dfbe5 100644 --- a/source4/lib/registry/registry.h +++ b/source4/lib/registry/registry.h @@ -164,6 +164,7 @@ struct registry_context { struct auth_session_info; struct event_context; +struct loadparm_context; /** * Open the locally defined registry. @@ -175,6 +176,7 @@ WERROR reg_open_local(TALLOC_CTX *mem_ctx, WERROR reg_open_samba(TALLOC_CTX *mem_ctx, struct registry_context **ctx, + struct loadparm_context *lp_ctx, struct auth_session_info *session_info, struct cli_credentials *credentials); diff --git a/source4/lib/registry/registry.i b/source4/lib/registry/registry.i index 7e33f43a14..330f0856e1 100644 --- a/source4/lib/registry/registry.i +++ b/source4/lib/registry/registry.i @@ -135,6 +135,7 @@ typedef struct hive_key { WERROR reg_open_samba(TALLOC_CTX *mem_ctx, struct registry_context **ctx, + struct loadparm_context *lp_ctx, struct auth_session_info *session_info, struct cli_credentials *credentials); diff --git a/source4/lib/registry/samba.c b/source4/lib/registry/samba.c index 2397432f0b..a5a60ba610 100644 --- a/source4/lib/registry/samba.c +++ b/source4/lib/registry/samba.c @@ -26,6 +26,7 @@ */ static WERROR mount_samba_hive(struct registry_context *ctx, + struct loadparm_context *lp_ctx, struct auth_session_info *auth_info, struct cli_credentials *creds, const char *name, @@ -36,7 +37,7 @@ static WERROR mount_samba_hive(struct registry_context *ctx, const char *location; location = talloc_asprintf(ctx, "%s/%s.ldb", - lp_private_dir(global_loadparm), + lp_private_dir(lp_ctx), name); error = reg_open_hive(ctx, location, auth_info, creds, &hive); @@ -54,6 +55,7 @@ static WERROR mount_samba_hive(struct registry_context *ctx, _PUBLIC_ WERROR reg_open_samba(TALLOC_CTX *mem_ctx, struct registry_context **ctx, + struct loadparm_context *lp_ctx, struct auth_session_info *session_info, struct cli_credentials *credentials) { @@ -64,18 +66,18 @@ _PUBLIC_ WERROR reg_open_samba(TALLOC_CTX *mem_ctx, return result; } - mount_samba_hive(*ctx, session_info, credentials, + mount_samba_hive(*ctx, lp_ctx, session_info, credentials, "hklm", HKEY_LOCAL_MACHINE); - mount_samba_hive(*ctx, session_info, credentials, + mount_samba_hive(*ctx, lp_ctx, session_info, credentials, "hkcr", HKEY_CLASSES_ROOT); /* FIXME: Should be mounted from NTUSER.DAT in the home directory of the * current user */ - mount_samba_hive(*ctx, session_info, credentials, + mount_samba_hive(*ctx, lp_ctx, session_info, credentials, "hkcu", HKEY_CURRENT_USER); - mount_samba_hive(*ctx, session_info, credentials, + mount_samba_hive(*ctx, lp_ctx, session_info, credentials, "hku", HKEY_USERS); /* FIXME: Different hive backend for HKEY_CLASSES_ROOT: merged view of HKEY_LOCAL_MACHINE\Software\Classes diff --git a/source4/lib/registry/tools/common.c b/source4/lib/registry/tools/common.c index 0233f27437..6d766fd25c 100644 --- a/source4/lib/registry/tools/common.c +++ b/source4/lib/registry/tools/common.c @@ -65,12 +65,12 @@ struct registry_key *reg_common_open_file(const char *path, return reg_import_hive_key(h, hive_root, -1, NULL); } -struct registry_context *reg_common_open_local(struct cli_credentials *creds) +struct registry_context *reg_common_open_local(struct cli_credentials *creds, struct loadparm_context *lp_ctx) { WERROR error; struct registry_context *h; - error = reg_open_samba(NULL, &h, NULL, creds); + error = reg_open_samba(NULL, &h, lp_ctx, NULL, creds); if(!W_ERROR_IS_OK(error)) { fprintf(stderr, "Unable to open local registry:%s \n", diff --git a/source4/lib/registry/tools/regdiff.c b/source4/lib/registry/tools/regdiff.c index f96761cda0..1996861a2a 100644 --- a/source4/lib/registry/tools/regdiff.c +++ b/source4/lib/registry/tools/regdiff.c @@ -24,10 +24,12 @@ #include "lib/events/events.h" #include "lib/cmdline/popt_common.h" #include "lib/registry/tools/common.h" +#include "param/param.h" enum reg_backend { REG_UNKNOWN, REG_LOCAL, REG_REMOTE, REG_NULL }; static struct registry_context *open_backend(poptContext pc, + struct loadparm_context *lp_ctx, enum reg_backend backend, const char *remote_host) { @@ -39,7 +41,7 @@ static struct registry_context *open_backend(poptContext pc, poptPrintUsage(pc, stderr, 0); return NULL; case REG_LOCAL: - error = reg_open_samba(NULL, &ctx, NULL, cmdline_credentials); + error = reg_open_samba(NULL, &ctx, lp_ctx, NULL, cmdline_credentials); break; case REG_REMOTE: error = reg_open_remote(&ctx, NULL, cmdline_credentials, @@ -114,11 +116,11 @@ int main(int argc, const char **argv) } - h1 = open_backend(pc, backend1, remote1); + h1 = open_backend(pc, global_loadparm, backend1, remote1); if (h1 == NULL) return 1; - h2 = open_backend(pc, backend2, remote2); + h2 = open_backend(pc, global_loadparm, backend2, remote2); if (h2 == NULL) return 1; diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c index 35f12c7e62..2f2cf789a9 100644 --- a/source4/lib/registry/tools/regpatch.c +++ b/source4/lib/registry/tools/regpatch.c @@ -24,6 +24,7 @@ #include "lib/cmdline/popt_common.h" #include "lib/registry/tools/common.h" #include "lib/registry/patchfile.h" +#include "param/param.h" int main(int argc, char **argv) { @@ -50,7 +51,7 @@ int main(int argc, char **argv) if (remote) { h = reg_common_open_remote (remote, cmdline_credentials); } else { - h = reg_common_open_local (cmdline_credentials); + h = reg_common_open_local (cmdline_credentials, global_loadparm); } if (h == NULL) diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c index 7dbcf2f875..9b582c3c02 100644 --- a/source4/lib/registry/tools/regshell.c +++ b/source4/lib/registry/tools/regshell.c @@ -26,6 +26,7 @@ #include "lib/smbreadline/smbreadline.h" #include "librpc/gen_ndr/ndr_security.h" #include "lib/registry/tools/common.h" +#include "param/param.h" struct regshell_context { struct registry_context *registry; @@ -505,7 +506,7 @@ int main(int argc, char **argv) ctx->registry = ctx->current->context; ctx->path = talloc_strdup(ctx, ""); } else { - ctx->registry = reg_common_open_local(cmdline_credentials); + ctx->registry = reg_common_open_local(cmdline_credentials, global_loadparm); } if (ctx->registry == NULL) diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c index 9f8d8c012d..f95fc1968d 100644 --- a/source4/lib/registry/tools/regtree.c +++ b/source4/lib/registry/tools/regtree.c @@ -23,6 +23,7 @@ #include "lib/registry/tools/common.h" #include "lib/events/events.h" #include "lib/cmdline/popt_common.h" +#include "param/param.h" /** * Print a registry key recursively @@ -132,7 +133,7 @@ int main(int argc, char **argv) } else if (file != NULL) { start_key = reg_common_open_file(file, cmdline_credentials); } else { - h = reg_common_open_local(cmdline_credentials); + h = reg_common_open_local(cmdline_credentials, global_loadparm); } if (h == NULL && start_key == NULL) diff --git a/source4/libcli/cliconnect.c b/source4/libcli/cliconnect.c index d806653758..39f97f4d8c 100644 --- a/source4/libcli/cliconnect.c +++ b/source4/libcli/cliconnect.c @@ -55,9 +55,9 @@ bool smbcli_transport_establish(struct smbcli_state *cli, } /* wrapper around smb_raw_negotiate() */ -NTSTATUS smbcli_negprot(struct smbcli_state *cli, int maxprotocol) +NTSTATUS smbcli_negprot(struct smbcli_state *cli, bool unicode, int maxprotocol) { - return smb_raw_negotiate(cli->transport, maxprotocol); + return smb_raw_negotiate(cli->transport, unicode, maxprotocol); } /* wrapper around smb_raw_sesssetup() */ diff --git a/source4/libcli/raw/rawnegotiate.c b/source4/libcli/raw/rawnegotiate.c index 82d6fe5236..78b9082521 100644 --- a/source4/libcli/raw/rawnegotiate.c +++ b/source4/libcli/raw/rawnegotiate.c @@ -46,6 +46,7 @@ static const struct { Send a negprot command. */ struct smbcli_request *smb_raw_negotiate_send(struct smbcli_transport *transport, + bool unicode, int maxprotocol) { struct smbcli_request *req; @@ -58,7 +59,7 @@ struct smbcli_request *smb_raw_negotiate_send(struct smbcli_transport *transport } flags2 |= FLAGS2_32_BIT_ERROR_CODES; - if (lp_unicode(global_loadparm)) { + if (unicode) { flags2 |= FLAGS2_UNICODE_STRINGS; } flags2 |= FLAGS2_EXTENDED_ATTRIBUTES; @@ -190,8 +191,8 @@ failed: /* Send a negprot command (sync interface) */ -NTSTATUS smb_raw_negotiate(struct smbcli_transport *transport, int maxprotocol) +NTSTATUS smb_raw_negotiate(struct smbcli_transport *transport, bool unicode, int maxprotocol) { - struct smbcli_request *req = smb_raw_negotiate_send(transport, maxprotocol); + struct smbcli_request *req = smb_raw_negotiate_send(transport, unicode, maxprotocol); return smb_raw_negotiate_recv(req); } diff --git a/source4/libcli/smb_composite/connect.c b/source4/libcli/smb_composite/connect.c index 9f18c0d924..0238d5c550 100644 --- a/source4/libcli/smb_composite/connect.c +++ b/source4/libcli/smb_composite/connect.c @@ -63,7 +63,7 @@ static NTSTATUS connect_send_negprot(struct composite_context *c, { struct connect_state *state = talloc_get_type(c->private_data, struct connect_state); - state->req = smb_raw_negotiate_send(state->transport, + state->req = smb_raw_negotiate_send(state->transport, lp_unicode(global_loadparm), lp_cli_maxprotocol(global_loadparm)); NT_STATUS_HAVE_NO_MEMORY(state->req); diff --git a/source4/ntptr/ntptr.h b/source4/ntptr/ntptr.h index 458d90c616..56cb4176f4 100644 --- a/source4/ntptr/ntptr.h +++ b/source4/ntptr/ntptr.h @@ -229,4 +229,7 @@ struct ntptr_critical_sizes { int sizeof_ntptr_context; int sizeof_ntptr_ops; }; + +struct loadparm_context; + #include "ntptr/ntptr_proto.h" diff --git a/source4/ntptr/ntptr_base.c b/source4/ntptr/ntptr_base.c index 379c4e5413..1a14c3b33e 100644 --- a/source4/ntptr/ntptr_base.c +++ b/source4/ntptr/ntptr_base.c @@ -69,10 +69,10 @@ NTSTATUS ntptr_register(const void *_ops) return NT_STATUS_OK; } -NTSTATUS ntptr_init(void) +NTSTATUS ntptr_init(struct loadparm_context *lp_ctx) { init_module_fn static_init[] = STATIC_ntptr_MODULES; - init_module_fn *shared_init = load_samba_modules(NULL, global_loadparm, "ntptr"); + init_module_fn *shared_init = load_samba_modules(NULL, lp_ctx, "ntptr"); run_init_functions(static_init); run_init_functions(shared_init); diff --git a/source4/param/share.c b/source4/param/share.c index 489049f39f..6c0269d5fc 100644 --- a/source4/param/share.c +++ b/source4/param/share.c @@ -149,10 +149,10 @@ NTSTATUS share_get_context(TALLOC_CTX *mem_ctx, struct share_context **ctx) /* initialise the SHARE subsystem */ -NTSTATUS share_init(void) +NTSTATUS share_init(struct loadparm_context *lp_ctx) { init_module_fn static_init[] = STATIC_share_MODULES; - init_module_fn *shared_init = load_samba_modules(NULL, global_loadparm, "share"); + init_module_fn *shared_init = load_samba_modules(NULL, lp_ctx, "share"); run_init_functions(static_init); run_init_functions(shared_init); diff --git a/source4/param/share.h b/source4/param/share.h index c93d0d9857..fae1c31c13 100644 --- a/source4/param/share.h +++ b/source4/param/share.h @@ -61,6 +61,8 @@ struct share_ops { NTSTATUS (*remove)(struct share_context *, const char *); }; +struct loadparm_context; + #include "param/share_proto.h" /* list of shares options */ diff --git a/source4/param/tests/share.c b/source4/param/tests/share.c index de93e3c591..26af71d06f 100644 --- a/source4/param/tests/share.c +++ b/source4/param/tests/share.c @@ -21,6 +21,7 @@ #include "includes.h" #include "param/share.h" +#include "param/param.h" #include "torture/torture.h" static bool test_list_empty(struct torture_context *tctx, @@ -196,7 +197,7 @@ struct torture_suite *torture_local_share(TALLOC_CTX *mem_ctx) struct torture_suite *suite = torture_suite_create(mem_ctx, "SHARE"); struct torture_tcase *tcase; - share_init(); + share_init(global_loadparm); tcase = torture_suite_add_tcase(suite, "ldb"); torture_tcase_set_fixture(tcase, setup_ldb, teardown); diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c index 14da907dfa..5be9d837e1 100644 --- a/source4/rpc_server/winreg/rpc_winreg.c +++ b/source4/rpc_server/winreg/rpc_winreg.c @@ -25,6 +25,7 @@ #include "librpc/gen_ndr/ndr_winreg.h" #include "rpc_server/common/common.h" #include "librpc/gen_ndr/ndr_security.h" +#include "param/param.h" enum handle_types { HTYPE_REGVAL, HTYPE_REGKEY }; @@ -35,6 +36,7 @@ static NTSTATUS dcerpc_winreg_bind(struct dcesrv_call_state *dce_call, WERROR err; err = reg_open_samba(dce_call->context, + global_loadparm, &ctx, dce_call->conn->auth_state.session_info, NULL); diff --git a/source4/scripting/ejs/smbcalls_reg.c b/source4/scripting/ejs/smbcalls_reg.c index 38634b996c..fee11b66d9 100644 --- a/source4/scripting/ejs/smbcalls_reg.c +++ b/source4/scripting/ejs/smbcalls_reg.c @@ -70,7 +70,7 @@ static int ejs_reg_open(MprVarHandle eid, int argc, struct MprVar **argv) struct registry_context *rctx; WERROR error; - error = reg_open_samba(mprMemCtx(), &rctx, NULL, NULL); + error = reg_open_samba(mprMemCtx(), &rctx, global_loadparm, NULL, NULL); SMB_ASSERT(W_ERROR_IS_OK(error)); mprSetPtrChild(reg, "registry", rctx); diff --git a/source4/smb_server/smb/receive.c b/source4/smb_server/smb/receive.c index 973b6b993e..3f590decca 100644 --- a/source4/smb_server/smb/receive.c +++ b/source4/smb_server/smb/receive.c @@ -643,7 +643,7 @@ error: /* * init the SMB protocol related stuff */ -NTSTATUS smbsrv_init_smb_connection(struct smbsrv_connection *smb_conn) +NTSTATUS smbsrv_init_smb_connection(struct smbsrv_connection *smb_conn, struct loadparm_context *lp_ctx) { NTSTATUS status; @@ -652,12 +652,12 @@ NTSTATUS smbsrv_init_smb_connection(struct smbsrv_connection *smb_conn) /* this is the size that w2k uses, and it appears to be important for good performance */ - smb_conn->negotiate.max_recv = lp_max_xmit(global_loadparm); + smb_conn->negotiate.max_recv = lp_max_xmit(lp_ctx); smb_conn->negotiate.zone_offset = get_time_zone(time(NULL)); - smb_conn->config.security = lp_security(global_loadparm); - smb_conn->config.nt_status_support = lp_nt_status_support(global_loadparm); + smb_conn->config.security = lp_security(lp_ctx); + smb_conn->config.nt_status_support = lp_nt_status_support(lp_ctx); status = smbsrv_init_sessions(smb_conn, UINT16_MAX); NT_STATUS_NOT_OK_RETURN(status); diff --git a/source4/smb_server/smb_server.c b/source4/smb_server/smb_server.c index 9242fb1a12..923c1bdfe5 100644 --- a/source4/smb_server/smb_server.c +++ b/source4/smb_server/smb_server.c @@ -42,7 +42,7 @@ static NTSTATUS smbsrv_recv_generic_request(void *private, DATA_BLOB blob) /* see if its a special NBT packet */ if (CVAL(blob.data,0) != 0) { - status = smbsrv_init_smb_connection(smb_conn); + status = smbsrv_init_smb_connection(smb_conn, global_loadparm); NT_STATUS_NOT_OK_RETURN(status); packet_set_callback(smb_conn->packet, smbsrv_recv_smb_request); return smbsrv_recv_smb_request(smb_conn, blob); @@ -58,7 +58,7 @@ static NTSTATUS smbsrv_recv_generic_request(void *private, DATA_BLOB blob) switch (protocol_version) { case SMB_MAGIC: - status = smbsrv_init_smb_connection(smb_conn); + status = smbsrv_init_smb_connection(smb_conn, global_loadparm); NT_STATUS_NOT_OK_RETURN(status); packet_set_callback(smb_conn->packet, smbsrv_recv_smb_request); return smbsrv_recv_smb_request(smb_conn, blob); diff --git a/source4/smb_server/smb_server.h b/source4/smb_server/smb_server.h index 8ebd3e683f..4af6ef1362 100644 --- a/source4/smb_server/smb_server.h +++ b/source4/smb_server/smb_server.h @@ -382,6 +382,8 @@ NTSTATUS smbsrv_add_socket(struct event_context *event_context, const struct model_ops *model_ops, const char *address); +struct loadparm_context; + #include "smb_server/smb_server_proto.h" #include "smb_server/smb/smb_proto.h" diff --git a/source4/smbd/pidfile.c b/source4/smbd/pidfile.c index 4847ddd7b5..3567846070 100644 --- a/source4/smbd/pidfile.c +++ b/source4/smbd/pidfile.c @@ -33,14 +33,14 @@ * return the pid in a pidfile. return 0 if the process (or pidfile) * does not exist */ -pid_t pidfile_pid(const char *name) +pid_t pidfile_pid(const char *piddir, const char *name) { int fd; char pidstr[20]; pid_t ret; char *pidFile; - asprintf(&pidFile, "%s/%s.pid", lp_piddir(global_loadparm), name); + asprintf(&pidFile, "%s/%s.pid", piddir, name); fd = open(pidFile, O_NONBLOCK | O_RDONLY, 0644); @@ -80,16 +80,16 @@ pid_t pidfile_pid(const char *name) /** * create a pid file in the pid directory. open it and leave it locked */ -void pidfile_create(const char *name) +void pidfile_create(const char *piddir, const char *name) { int fd; char buf[20]; char *pidFile; pid_t pid; - asprintf(&pidFile, "%s/%s.pid", lp_piddir(global_loadparm), name); + asprintf(&pidFile, "%s/%s.pid", piddir, name); - pid = pidfile_pid(name); + pid = pidfile_pid(piddir, name); if (pid != 0) { DEBUG(0,("ERROR: %s is already running. File %s exists and process id %d is running.\n", name, pidFile, (int)pid)); diff --git a/source4/smbd/process_model.c b/source4/smbd/process_model.c index bb4d3a53bb..e240ae2c60 100644 --- a/source4/smbd/process_model.c +++ b/source4/smbd/process_model.c @@ -80,10 +80,10 @@ _PUBLIC_ NTSTATUS register_process_model(const void *_ops) return NT_STATUS_OK; } -NTSTATUS process_model_init(void) +NTSTATUS process_model_init(struct loadparm_context *lp_ctx) { init_module_fn static_init[] = STATIC_process_model_MODULES; - init_module_fn *shared_init = load_samba_modules(NULL, global_loadparm, "process_model"); + init_module_fn *shared_init = load_samba_modules(NULL, lp_ctx, "process_model"); run_init_functions(static_init); run_init_functions(shared_init); diff --git a/source4/smbd/server.c b/source4/smbd/server.c index 5dac250ee8..65196618db 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -88,12 +88,12 @@ static void recursive_delete(const char *path) range locking system. So instead of putting the burden on tdb to cleanup tmp files, this function deletes them. */ -static void cleanup_tmp_files(void) +static void cleanup_tmp_files(struct loadparm_context *lp_ctx) { char *path; TALLOC_CTX *mem_ctx = talloc_new(NULL); - path = smbd_tmp_path(mem_ctx, global_loadparm, NULL); + path = smbd_tmp_path(mem_ctx, lp_ctx, NULL); recursive_delete(path); talloc_free(mem_ctx); @@ -267,13 +267,13 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[ become_daemon(true); } - cleanup_tmp_files(); + cleanup_tmp_files(global_loadparm); if (!directory_exist(lp_lockdir(global_loadparm))) { mkdir(lp_lockdir(global_loadparm), 0755); } - pidfile_create(binary_name); + pidfile_create(lp_piddir(global_loadparm), binary_name); /* Do *not* remove this, until you have removed * passdb/secrets.c, and proved that Samba still builds... */ @@ -284,17 +284,17 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[ ldb_global_init(); /* FIXME: */ - share_init(); + share_init(global_loadparm); gensec_init(global_loadparm); /* FIXME: */ - ntptr_init(); /* FIXME: maybe run this in the initialization function + ntptr_init(global_loadparm); /* FIXME: maybe run this in the initialization function of the spoolss RPC server instead? */ ntvfs_init(); /* FIXME: maybe run this in the initialization functions of the SMB[,2] server instead? */ - process_model_init(); + process_model_init(global_loadparm); shared_init = load_samba_modules(NULL, global_loadparm, "service"); diff --git a/source4/torture/basic/base.c b/source4/torture/basic/base.c index 1415b4195f..5c5428d61f 100644 --- a/source4/torture/basic/base.c +++ b/source4/torture/basic/base.c @@ -355,7 +355,7 @@ static bool run_negprot_nowait(struct torture_context *tctx) for (i=0;i<100;i++) { struct smbcli_request *req; - req = smb_raw_negotiate_send(cli->transport, PROTOCOL_NT1); + req = smb_raw_negotiate_send(cli->transport, lp_unicode(global_loadparm), PROTOCOL_NT1); event_loop_once(cli->transport->socket->event.ctx); if (req->state == SMBCLI_REQUEST_ERROR) { if (i > 0) { diff --git a/source4/torture/rpc/wkssvc.c b/source4/torture/rpc/wkssvc.c index ff5c20e258..9a2f518535 100644 --- a/source4/torture/rpc/wkssvc.c +++ b/source4/torture/rpc/wkssvc.c @@ -1228,17 +1228,11 @@ static bool test_NetrJoinDomain2(struct torture_context *tctx, break; } - domain_admin_account = lp_parm_string(global_loadparm, NULL, - "torture", - "domain_admin_account"); + domain_admin_account = torture_setting_string(tctx, "domain_admin_account", NULL); - domain_admin_password = lp_parm_string(global_loadparm, NULL, - "torture", - "domain_admin_password"); + domain_admin_password = torture_setting_string(tctx, "domain_admin_password", NULL); - domain_name = lp_parm_string(global_loadparm, NULL, - "torture", - "domain_name"); + domain_name = torture_setting_string(tctx, "domain_name", NULL); if ((domain_admin_account == NULL) || (domain_admin_password == NULL) || @@ -1318,13 +1312,9 @@ static bool test_NetrUnjoinDomain2(struct torture_context *tctx, break; } - domain_admin_account = lp_parm_string(global_loadparm, NULL, - "torture", - "domain_admin_account"); + domain_admin_account = torture_setting_string(tctx, "domain_admin_account", NULL); - domain_admin_password = lp_parm_string(global_loadparm, NULL, - "torture", - "domain_admin_password"); + domain_admin_password = torture_setting_string(tctx, "domain_admin_password", NULL); if ((domain_admin_account == NULL) || (domain_admin_password == NULL)) { diff --git a/source4/utils/ntlm_auth.c b/source4/utils/ntlm_auth.c index 75c87fc111..72c99c1126 100644 --- a/source4/utils/ntlm_auth.c +++ b/source4/utils/ntlm_auth.c @@ -129,7 +129,7 @@ static bool parse_ntlm_auth_domain_user(const char *domuser, fstring domain, fstring user) { - char *p = strchr(domuser,*lp_winbind_separator(global_loadparm)); + char *p = strchr(domuser, *lp_winbind_separator(global_loadparm)); if (!p) { return false; |