mirror of
https://github.com/samba-team/samba.git
synced 2025-02-15 05:57:49 +03:00
r658: Oops - make smbclient work again with widelinks = no :-).
Jeremy.
This commit is contained in:
parent
a03b6a05e0
commit
a697941706
@ -2865,7 +2865,7 @@ NTSTATUS set_delete_on_close_over_all(files_struct *fsp, BOOL delete_on_close)
|
|||||||
Returns true if this pathname is within the share, and thus safe.
|
Returns true if this pathname is within the share, and thus safe.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int ensure_link_is_safe(connection_struct *conn, const char *link_dest_in, char *link_dest_out)
|
static int ensure_link_is_safe(connection_struct *conn, const char *link_dest_in)
|
||||||
{
|
{
|
||||||
#ifdef PATH_MAX
|
#ifdef PATH_MAX
|
||||||
char resolved_name[PATH_MAX+1];
|
char resolved_name[PATH_MAX+1];
|
||||||
@ -2882,9 +2882,6 @@ static int ensure_link_is_safe(connection_struct *conn, const char *link_dest_in
|
|||||||
pstrcpy(link_dest, link_dest_in);
|
pstrcpy(link_dest, link_dest_in);
|
||||||
unix_convert(link_dest,conn,0,&bad_path,&sbuf);
|
unix_convert(link_dest,conn,0,&bad_path,&sbuf);
|
||||||
|
|
||||||
/* Store the UNIX converted path. */
|
|
||||||
pstrcpy(link_dest_out, link_dest);
|
|
||||||
|
|
||||||
p = strrchr_m(link_dest, '/');
|
p = strrchr_m(link_dest, '/');
|
||||||
if (p) {
|
if (p) {
|
||||||
fstrcpy(last_component, p+1);
|
fstrcpy(last_component, p+1);
|
||||||
@ -2998,7 +2995,8 @@ NTSTATUS hardlink_internals(connection_struct *conn, char *oldname, char *newnam
|
|||||||
return NT_STATUS_FILE_IS_A_DIRECTORY;
|
return NT_STATUS_FILE_IS_A_DIRECTORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ensure_link_is_safe(conn, oldname, oldname) != 0)
|
/* Ensure this is within the share. */
|
||||||
|
if (!reduce_name(conn, oldname) != 0)
|
||||||
return NT_STATUS_ACCESS_DENIED;
|
return NT_STATUS_ACCESS_DENIED;
|
||||||
|
|
||||||
DEBUG(10,("hardlink_internals: doing hard link %s -> %s\n", newname, oldname ));
|
DEBUG(10,("hardlink_internals: doing hard link %s -> %s\n", newname, oldname ));
|
||||||
@ -3522,7 +3520,7 @@ size = %.0f, uid = %u, gid = %u, raw perms = 0%o\n",
|
|||||||
pstrcpy(rel_name, "./");
|
pstrcpy(rel_name, "./");
|
||||||
}
|
}
|
||||||
pstrcat(rel_name, link_target);
|
pstrcat(rel_name, link_target);
|
||||||
if (ensure_link_is_safe(conn, rel_name, rel_name) != 0) {
|
if (ensure_link_is_safe(conn, rel_name) != 0) {
|
||||||
return(UNIXERROR(ERRDOS,ERRnoaccess));
|
return(UNIXERROR(ERRDOS,ERRnoaccess));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -829,7 +829,11 @@ BOOL reduce_name(connection_struct *conn, pstring fname)
|
|||||||
if (p) {
|
if (p) {
|
||||||
*p++ = '\0';
|
*p++ = '\0';
|
||||||
fstrcpy(last_component, p);
|
fstrcpy(last_component, p);
|
||||||
|
} else {
|
||||||
|
fstrcpy(last_component, tmp_fname);
|
||||||
|
pstrcpy(tmp_fname, ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef REALPATH_TAKES_NULL
|
#ifdef REALPATH_TAKES_NULL
|
||||||
resolved_name = SMB_VFS_REALPATH(conn,tmp_fname,NULL);
|
resolved_name = SMB_VFS_REALPATH(conn,tmp_fname,NULL);
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user