[Pkg-samba-maint] [samba] 03/17: s3: smbd: Fix "follow symlink = no" regression part 2.
Mathieu Parent
sathieu at moszumanska.debian.org
Thu Mar 30 22:15:33 UTC 2017
This is an automated email from the git hooks/post-receive script.
sathieu pushed a commit to branch jessie
in repository samba.
commit 3bd6a98ba39a5cb268012ae0925d7343e1f1ecfc
Author: Jeremy Allison <jra at samba.org>
Date: Mon Mar 27 17:09:38 2017 -0700
s3: smbd: Fix "follow symlink = no" regression part 2.
Use the cwd_name parameter to reconstruct the original
client name for symlink testing.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12721
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
(cherry picked from commit e182a4d39e86c9694e255efdf6ee2ea3ccb9af4a)
---
source3/smbd/vfs.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 15896f8..6c46fe5 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -1176,6 +1176,7 @@ NTSTATUS check_reduced_name(connection_struct *conn,
const char *fname)
{
char *resolved_name = NULL;
+ char *new_fname = NULL;
bool allow_symlinks = true;
bool allow_widelinks = false;
@@ -1317,11 +1318,32 @@ NTSTATUS check_reduced_name(connection_struct *conn,
}
p++;
+
+ /*
+ * If cwd_name is present and not ".",
+ * then fname is relative to that, not
+ * the root of the share. Make sure the
+ * path we check is the one the client
+ * sent (cwd_name+fname).
+ */
+ if (cwd_name != NULL && !ISDOT(cwd_name)) {
+ new_fname = talloc_asprintf(talloc_tos(),
+ "%s/%s",
+ cwd_name,
+ fname);
+ if (new_fname == NULL) {
+ SAFE_FREE(resolved_name);
+ return NT_STATUS_NO_MEMORY;
+ }
+ fname = new_fname;
+ }
+
if (strcmp(fname, p)!=0) {
DEBUG(2, ("check_reduced_name: Bad access "
"attempt: %s is a symlink to %s\n",
fname, p));
SAFE_FREE(resolved_name);
+ TALLOC_FREE(new_fname);
return NT_STATUS_ACCESS_DENIED;
}
}
@@ -1332,6 +1354,7 @@ NTSTATUS check_reduced_name(connection_struct *conn,
DEBUG(3,("check_reduced_name: %s reduced to %s\n", fname,
resolved_name));
SAFE_FREE(resolved_name);
+ TALLOC_FREE(new_fname);
return NT_STATUS_OK;
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-samba/samba.git
More information about the Pkg-samba-maint
mailing list