cygwin: try unprivileged symlink creation on W10 1703 and later
Add new SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE flag to CreateSymbolicLinkW call when running on W10 1703 or later. Don't do that on older versions to avoid ERROR_INVALID_PARAMETER. Preliminary, needs testing. There's an off-chance that the flag results in the same ERROR_INVALID_PARAMETER on 1703 if the developer settings are not enabled. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
e7bcf4633e
commit
ffcfbf4b66
|
@ -1621,6 +1621,10 @@ cnt_bs (PWCHAR s, PWCHAR e)
|
|||
return num;
|
||||
}
|
||||
|
||||
#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
|
||||
#define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE 2
|
||||
#endif
|
||||
|
||||
static int
|
||||
symlink_native (const char *oldpath, path_conv &win32_newpath)
|
||||
{
|
||||
|
@ -1628,6 +1632,7 @@ symlink_native (const char *oldpath, path_conv &win32_newpath)
|
|||
path_conv win32_oldpath;
|
||||
PUNICODE_STRING final_oldpath, final_newpath;
|
||||
UNICODE_STRING final_oldpath_buf;
|
||||
DWORD flags;
|
||||
|
||||
if (isabspath (oldpath))
|
||||
{
|
||||
|
@ -1724,9 +1729,11 @@ symlink_native (const char *oldpath, path_conv &win32_newpath)
|
|||
final_oldpath->Buffer[1] = L'\\';
|
||||
}
|
||||
/* Try to create native symlink. */
|
||||
flags = win32_oldpath.isdir () ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0;
|
||||
if (wincap.has_unprivileged_createsymlink ())
|
||||
flags |= SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE;
|
||||
if (!CreateSymbolicLinkW (final_newpath->Buffer, final_oldpath->Buffer,
|
||||
win32_oldpath.isdir ()
|
||||
? SYMBOLIC_LINK_FLAG_DIRECTORY : 0))
|
||||
flags))
|
||||
{
|
||||
/* Repair native newpath, we still need it. */
|
||||
final_newpath->Buffer[1] = L'?';
|
||||
|
|
Loading…
Reference in New Issue