diff options
author | Garming Sam <garming@catalyst.net.nz> | 2014-01-17 10:16:12 +1300 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-02-20 10:11:00 +1300 |
commit | bce62e600085270f26053882c5a4e35f5fe4fb5e (patch) | |
tree | 36be15d3c9867498693ae247c119c18b933e835f /source4/rpc_server | |
parent | 497f0327a08fbfa444308c90a418ccb6b45b96d6 (diff) | |
download | samba-bce62e600085270f26053882c5a4e35f5fe4fb5e.tar.gz samba-bce62e600085270f26053882c5a4e35f5fe4fb5e.tar.xz samba-bce62e600085270f26053882c5a4e35f5fe4fb5e.zip |
s4: pass down a memory context when performing share_string_option, to allow substitutions
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Change-Id: I24b36db3ac11834c3268b2da929e214c10268b16
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/common/share_info.c | 23 | ||||
-rw-r--r-- | source4/rpc_server/srvsvc/dcesrv_srvsvc.c | 18 | ||||
-rw-r--r-- | source4/rpc_server/srvsvc/srvsvc_ntvfs.c | 6 |
3 files changed, 29 insertions, 18 deletions
diff --git a/source4/rpc_server/common/share_info.c b/source4/rpc_server/common/share_info.c index 218901026f4..34330b92ca1 100644 --- a/source4/rpc_server/common/share_info.c +++ b/source4/rpc_server/common/share_info.c @@ -53,23 +53,26 @@ enum srvsvc_ShareType dcesrv_common_get_share_type(TALLOC_CTX *mem_ctx, struct d * this ones are hidden in NetShareEnum, but shown in NetShareEnumAll */ enum srvsvc_ShareType share_type = 0; - const char *sharetype; + char *sharetype; if (!share_bool_option(scfg, SHARE_BROWSEABLE, SHARE_BROWSEABLE_DEFAULT)) { share_type |= STYPE_HIDDEN; } - sharetype = share_string_option(scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); + sharetype = share_string_option(mem_ctx, scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); if (sharetype && strcasecmp(sharetype, "IPC") == 0) { share_type |= STYPE_IPC; + TALLOC_FREE(sharetype); return share_type; } if (sharetype && strcasecmp(sharetype, "PRINTER") == 0) { share_type |= STYPE_PRINTQ; + TALLOC_FREE(sharetype); return share_type; } + TALLOC_FREE(sharetype); share_type |= STYPE_DISKTREE; return share_type; @@ -78,16 +81,20 @@ enum srvsvc_ShareType dcesrv_common_get_share_type(TALLOC_CTX *mem_ctx, struct d /* This hardcoded value should go into a ldb database! */ const char *dcesrv_common_get_share_path(TALLOC_CTX *mem_ctx, struct dcesrv_context *dce_ctx, struct share_config *scfg) { - const char *sharetype; + char *sharetype; char *p; - - sharetype = share_string_option(scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); + char *path; + + sharetype = share_string_option(mem_ctx, scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); if (sharetype && strcasecmp(sharetype, "IPC") == 0) { + TALLOC_FREE(sharetype); return talloc_strdup(mem_ctx, ""); } - p = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PATH, "")); + TALLOC_FREE(sharetype); + + p = share_string_option(mem_ctx, scfg, SHARE_PATH, ""); if (!p) { return NULL; } @@ -96,7 +103,9 @@ const char *dcesrv_common_get_share_path(TALLOC_CTX *mem_ctx, struct dcesrv_cont } all_string_sub(p, "/", "\\", 0); - return talloc_asprintf(mem_ctx, "C:%s", p); + path = talloc_asprintf(mem_ctx, "C:%s", p); + TALLOC_FREE(p); + return path; } /* This hardcoded value should go into a ldb database! */ diff --git a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c index 0ef676638bc..6521aea5039 100644 --- a/source4/rpc_server/srvsvc/dcesrv_srvsvc.c +++ b/source4/rpc_server/srvsvc/dcesrv_srvsvc.c @@ -622,7 +622,7 @@ static WERROR dcesrv_srvsvc_fiel_ShareInfo(struct dcesrv_call_state *dce_call, T info->info1->name = talloc_strdup(mem_ctx, scfg->name); W_ERROR_HAVE_NO_MEMORY(info->info1->name); info->info1->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg); - info->info1->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); + info->info1->comment = share_string_option(mem_ctx, scfg, SHARE_COMMENT, ""); W_ERROR_HAVE_NO_MEMORY(info->info1->comment); return WERR_OK; @@ -632,14 +632,14 @@ static WERROR dcesrv_srvsvc_fiel_ShareInfo(struct dcesrv_call_state *dce_call, T info->info2->name = talloc_strdup(mem_ctx, scfg->name); W_ERROR_HAVE_NO_MEMORY(info->info2->name); info->info2->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg); - info->info2->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); + info->info2->comment = share_string_option(mem_ctx, scfg, SHARE_COMMENT, ""); W_ERROR_HAVE_NO_MEMORY(info->info2->comment); info->info2->permissions = dcesrv_common_get_share_permissions(mem_ctx, dce_ctx, scfg); info->info2->max_users = share_int_option(scfg, SHARE_MAX_CONNECTIONS, SHARE_MAX_CONNECTIONS_DEFAULT); info->info2->current_users = dcesrv_common_get_share_current_users(mem_ctx, dce_ctx, scfg); info->info2->path = dcesrv_common_get_share_path(mem_ctx, dce_ctx, scfg); W_ERROR_HAVE_NO_MEMORY(info->info2->path); - info->info2->password = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PASSWORD, NULL)); + info->info2->password = share_string_option(mem_ctx, scfg, SHARE_PASSWORD, NULL); return WERR_OK; } @@ -648,7 +648,7 @@ static WERROR dcesrv_srvsvc_fiel_ShareInfo(struct dcesrv_call_state *dce_call, T info->info501->name = talloc_strdup(mem_ctx, scfg->name); W_ERROR_HAVE_NO_MEMORY(info->info501->name); info->info501->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg); - info->info501->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); + info->info501->comment = share_string_option(mem_ctx, scfg, SHARE_COMMENT, ""); W_ERROR_HAVE_NO_MEMORY(info->info501->comment); info->info501->csc_policy = share_int_option(scfg, SHARE_CSC_POLICY, SHARE_CSC_POLICY_DEFAULT); @@ -659,14 +659,14 @@ static WERROR dcesrv_srvsvc_fiel_ShareInfo(struct dcesrv_call_state *dce_call, T info->info502->name = talloc_strdup(mem_ctx, scfg->name); W_ERROR_HAVE_NO_MEMORY(info->info502->name); info->info502->type = dcesrv_common_get_share_type(mem_ctx, dce_ctx, scfg); - info->info502->comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); + info->info502->comment = share_string_option(mem_ctx, scfg, SHARE_COMMENT, ""); W_ERROR_HAVE_NO_MEMORY(info->info502->comment); info->info502->permissions = dcesrv_common_get_share_permissions(mem_ctx, dce_ctx, scfg); info->info502->max_users = share_int_option(scfg, SHARE_MAX_CONNECTIONS, SHARE_MAX_CONNECTIONS_DEFAULT); info->info502->current_users = dcesrv_common_get_share_current_users(mem_ctx, dce_ctx, scfg); info->info502->path = dcesrv_common_get_share_path(mem_ctx, dce_ctx, scfg); W_ERROR_HAVE_NO_MEMORY(info->info502->path); - info->info502->password = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_PASSWORD, NULL)); + info->info502->password = share_string_option(mem_ctx, scfg, SHARE_PASSWORD, NULL); info->info502->sd_buf.sd = dcesrv_common_get_security_descriptor(mem_ctx, dce_ctx, scfg); return WERR_OK; @@ -1396,11 +1396,11 @@ static WERROR dcesrv_srvsvc_NetShareCheck(struct dcesrv_call_state *dce_call, TA if (!NT_STATUS_IS_OK(nterr)) { return ntstatus_to_werror(nterr); } - path = share_string_option(scfg, SHARE_PATH, NULL); + path = share_string_option(mem_ctx, scfg, SHARE_PATH, NULL); if (!path) continue; - if (strcmp(device, path) == 0) { - type = share_string_option(scfg, SHARE_TYPE, NULL); + if (strcmp(device, path) == 0) { + type = share_string_option(mem_ctx, scfg, SHARE_TYPE, NULL); if (!type) continue; if (strcmp(type, "DISK") == 0) { diff --git a/source4/rpc_server/srvsvc/srvsvc_ntvfs.c b/source4/rpc_server/srvsvc/srvsvc_ntvfs.c index 49beb50d869..5d6fc92859a 100644 --- a/source4/rpc_server/srvsvc/srvsvc_ntvfs.c +++ b/source4/rpc_server/srvsvc/srvsvc_ntvfs.c @@ -45,7 +45,7 @@ NTSTATUS srvsvc_create_ntvfs_context(struct dcesrv_call_state *dce_call, enum ntvfs_type type; struct share_context *sctx; struct share_config *scfg; - const char *sharetype; + char *sharetype; union smb_tcon tcon; const struct tsocket_address *local_address; const struct tsocket_address *remote_address; @@ -71,7 +71,7 @@ NTSTATUS srvsvc_create_ntvfs_context(struct dcesrv_call_state *dce_call, #endif /* work out what sort of connection this is */ - sharetype = share_string_option(scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); + sharetype = share_string_option(mem_ctx, scfg, SHARE_TYPE, SHARE_TYPE_DEFAULT); if (sharetype && strcmp(sharetype, "IPC") == 0) { type = NTVFS_IPC; } else if (sharetype && strcmp(sharetype, "PRINTER")) { @@ -80,6 +80,8 @@ NTSTATUS srvsvc_create_ntvfs_context(struct dcesrv_call_state *dce_call, type = NTVFS_DISK; } + TALLOC_FREE(sharetype); + c = talloc(mem_ctx, struct srvsvc_ntvfs_ctx); NT_STATUS_HAVE_NO_MEMORY(c); |