• Pali Rohár's avatar
    cifs: Improve creating native symlinks pointing to directory · 3eb40512
    Pali Rohár authored
    SMB protocol for native symlinks distinguish between symlink to directory
    and symlink to file. These two symlink types cannot be exchanged, which
    means that symlink of file type pointing to directory cannot be resolved at
    all (and vice-versa).
    
    Windows follows this rule for local filesystems (NTFS) and also for SMB.
    
    Linux SMB client currenly creates all native symlinks of file type. Which
    means that Windows (and some other SMB clients) cannot resolve symlinks
    pointing to directory created by Linux SMB client.
    
    As Linux system does not distinguish between directory and file symlinks,
    its API does not provide enough information for Linux SMB client during
    creating of native symlinks.
    
    Add some heuristic into the Linux SMB client for choosing the correct
    symlink type during symlink creation. Check if the symlink target location
    ends with slash, or last path component is dot or dot-dot, and check if the
    target location on SMB share exists and is a directory. If at least one
    condition is truth then create a new SMB symlink of directory type.
    Otherwise create it as file type symlink.
    
    This change improves interoperability with Windows systems. Windows systems
    would be able to resolve more SMB symlinks created by Linux SMB client
    which points to existing directory.
    Signed-off-by: default avatarPali Rohár <pali@kernel.org>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    3eb40512
reparse.c 19.8 KB