smbd: add a directory argument to safe_symlink_target_path()
[janger/samba-autobuild-v4-18-test/.git] / source3 / smbd / filename.c
index 606959d0805f5c3e22172269dd8c76d52740ec6b..1e07abacea68cfc843b19dcc6a49443bfc6f19b5 100644 (file)
@@ -945,6 +945,7 @@ static char *symlink_target_path(
 
 NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
                                  const char *connectpath,
+                                 const char *dir,
                                  const char *target,
                                  size_t unparsed,
                                  char **_relative)
@@ -960,10 +961,21 @@ NTSTATUS safe_symlink_target_path(TALLOC_CTX *mem_ctx,
 
        if (target[0] == '/') {
                abs_target = talloc_strdup(mem_ctx, target);
-       } else {
+       } 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",
+                                            dir,
+                                            target);
+       } else {
+               abs_target = talloc_asprintf(mem_ctx,
+                                            "%s/%s/%s",
                                             connectpath,
+                                            dir,
                                             target);
        }
        if (abs_target == NULL) {
@@ -1491,6 +1503,7 @@ next:
 
        status = safe_symlink_target_path(mem_ctx,
                                          conn->connectpath,
+                                         NULL,
                                          target,
                                          unparsed,
                                          &safe_target);