Existing caller passes NULL, no change in behaviour. Prepares for
replacing symlink_target_below_conn() in open.c.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15549
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
(cherry picked from commit
fc80c72d658a41fe4d93b24b793b52c91b350175)
uint32_t flags);
NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
const char *connectpath,
uint32_t flags);
NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
const char *connectpath,
const char *target,
size_t unparsed,
char **_relative);
const char *target,
size_t unparsed,
char **_relative);
NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
const char *connectpath,
NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
const char *connectpath,
const char *target,
size_t unparsed,
char **_relative)
const char *target,
size_t unparsed,
char **_relative)
if (target[0] == '/') {
abs_target = talloc_strdup(mem_ctx, target);
if (target[0] == '/') {
abs_target = talloc_strdup(mem_ctx, target);
+ } else if (dir == NULL) {
+ abs_target = talloc_asprintf(mem_ctx,
+ "%s/%s",
+ connectpath,
+ target);
+ } else if (dir[0] == '/') {
abs_target = talloc_asprintf(mem_ctx,
"%s/%s",
abs_target = talloc_asprintf(mem_ctx,
"%s/%s",
+ dir,
+ target);
+ } else {
+ abs_target = talloc_asprintf(mem_ctx,
+ "%s/%s/%s",
target);
}
if (abs_target == NULL) {
target);
}
if (abs_target == NULL) {
status = safe_symlink_target_path(mem_ctx,
conn->connectpath,
status = safe_symlink_target_path(mem_ctx,
conn->connectpath,
target,
unparsed,
&safe_target);
target,
unparsed,
&safe_target);