Visible symlinks under Windows

Corinna Vinschen corinna at
Wed Feb 6 18:40:58 GMT 2008


On Feb  6 09:37, James Peach wrote:
> On Feb 6, 2008, at 3:27 AM, Corinna Vinschen wrote:
>> While most Windws applications have no idea how to handle symlinks,
>> that's obviously not the case for a Linux emulator.  However, right now,
>> due to the fact that Cygwin has no idea how to create a symlink on a
>> Samba share, it always creates fake symlinks on a Samba share which only
>> work in the Windws environment, and it only recognizes symlinks as files
>> or directories, depending on the target of the symlink.
> The Apple and Linux SMB clients have a format of storing a symlink in a 
> file. If you used this format, then you would be able to interoperate 
> symlinks created by these clients.
> see smbfs_windows_readlink() and smbfs_create_windows_symlink_data()

This file is only available for registered Apple ID owners.  I can't
find a version on the net which is freely available and has these
functions implemented, unfortunately.

>> We could fake an Extended Attribute which contain the symlink information.
>> When requesting a symlink's file information, it could return an EA
>> called, say, ".smb.symlink".  The EA value consists of the relevant
>> parts of the content of the stat buffer returned by lstat, plus the
>> target path of the symlink in UNIX path notation.
>> Creating a symlink could work by creating a simple file with an
>> EA in the EA list, called, say, ".smb.symlink.create".  The value is
>> the target path in UNIX path notation.  Given that ZwCreateFile (and its
>> SMB protocol counterpart) allows to define EAs at file creation time,
>> creating a symlink would be a simple one step operation.
> This is a nice idea.
> The advantage of Minshall+French symlink format
> 	- it is already supported by other SMB clients
> 	- it doesn't require server changes
> 	- it works on Windows and Samba volumes
> The main disadvantage is that it doesn't address your goal of getting 
> resolving actual symlinks that are on the server.


As far as the Windows client is concerned, we already have a method
(actually two) of creating symlinks which works fine on a Samba share,
as long as the symlink is utilized by the Windows client (especially
Cygwin) only.  Using the above outlined method wouldn't add anything new.

The idea was to have a technique which allows to utilize real symlinks
of the underlying file system and to recognize them as such by an
initiated Windows application.  Since Cygwin is a Linux emulator anyway,
I think it makes sense to be able to recognize real symlinks correctly.
It knows what symlinks are, and it knows how to work with them.


More information about the samba-technical mailing list