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:
parent
02599c3933
commit
82979afc46
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user