1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-25 17:57:42 +03:00

s3: lib: Fix two old, old bugs in set_conn_connectpath(), now in canonicalize_absolute_path().

Canonicalizing a path of /foo/bar/../baz would return /foo/barbaz
as moving forward 3 characters would delete the / character.

Canonicalizing /foo/.. would end up as '\0'.

Test to follow.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12531

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
This commit is contained in:
Jeremy Allison 2017-01-19 15:18:41 -08:00
parent 02599c3933
commit 82979afc46

View File

@ -138,12 +138,8 @@ char *canonicalize_absolute_path(TALLOC_CTX *ctx, const char *abs_path)
(s[2] == '/' || s[2] == '\0')) {
/* Uh oh - "/../" or "/..\0" ! */
/* Go past the ../ or .. */
if (s[2] == '/') {
s += 3;
} else {
s += 2; /* Go past the .. */
}
/* Go past the .. leaving us on the / or '\0' */
s += 2;
/* If we just added a '/' - delete it */
if ((d > destname) && (*(d-1) == '/')) {
@ -169,6 +165,16 @@ char *canonicalize_absolute_path(TALLOC_CTX *ctx, const char *abs_path)
break;
}
}
/*
* Are we at the start ?
* Can't go back further if so.
*/
if (d <= destname) {
*d++ = '/'; /* Can't delete root */
continue;
}
/*
* We're still at the start of a name
* component, just the previous one.