- From 4e5b7afe2e2417ebd0d821a23b6dc248f22f299c Mon Sep 17 00:00:00 2001
- From: Cedric Blancher <cedric.blancher@gmail.com>
- Date: Thu, 13 Jun 2024 09:08:18 +0200
- Subject: [PATCH 1/4] cygwin,nfs41rdr.inf: Add "removedriver" to msnfs41client,
- fix nfs41rdr.inf, retire install bat
- Add "removedriver" subcmd to msnfs41clientbash, fix nfs41rdr.inf,
- and retire install.bat+uninstall.bat
- Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- ---
- cygwin/devel/msnfs41client.bash | 78 +++++++++++++++++++++++++++------
- install.bat | 2 -
- nfs41rdr.inf | 8 ++--
- uninstall.bat | 2 -
- 4 files changed, 68 insertions(+), 22 deletions(-)
- delete mode 100644 install.bat
- delete mode 100644 uninstall.bat
- diff --git a/cygwin/devel/msnfs41client.bash b/cygwin/devel/msnfs41client.bash
- index 2b66485..c83dcfc 100644
- --- a/cygwin/devel/msnfs41client.bash
- +++ b/cygwin/devel/msnfs41client.bash
- @@ -98,19 +98,8 @@ function nfsclient_install
- chmod a+x *.dll
- chmod a+x ../../sbin/nfs*.exe ../../sbin/libtirpc*.dll
- - if false ; then
- - # install.bat needs PATH to include $PWD
- - PATH="$PWD:$PATH" cmd /c install.bat
- - else
- - # devel: set default in case "nfs_install" ruined it:
- - #regtool -s set '/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder' 'RDPNP,LanmanWorkstation,webclient'
- -
- - printf 'before nfs_install: ProviderOrder="%s"\n' "$( strings -a '/proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder')"
- - nfs_install -D
- - printf 'after nfs_install: ProviderOrder="%s"\n' "$( strings -a '/proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder')"
- -
- - rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 ./nfs41rdr.inf
- - fi
- + # (re-)install driver
- + nfsclient_adddriver
- mkdir -p /cygdrive/c/etc
- cp etc_netconfig /cygdrive/c/etc/netconfig
- @@ -206,6 +195,52 @@ function nfsclient_install
- return 0
- }
- +function nfsclient_adddriver
- +{
- + set -o nounset
- + set -o xtrace
- + set -o errexit
- +
- + # switch to the location where this script is installed,
- + # because on Cygwin the script will be installed
- + # in /cygdrive/c/cygwin/lib/msnfs41client/ (32bit) or
- + # in /cygdrive/c/cygwin64/lib/msnfs41client/ (64bit).
- + cd -P "$(dirname -- "$(realpath "${BASH_SOURCE[0]}")")"
- +
- + # devel: set default in case "nfs_install" ruined it:
- + #regtool -s set '/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder' 'RDPNP,LanmanWorkstation,webclient'
- +
- + printf 'before nfs_install: ProviderOrder="%s"\n' "$( strings -a '/proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder')"
- + nfs_install -D
- + printf 'after nfs_install: ProviderOrder="%s"\n' "$( strings -a '/proc/registry/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/NetworkProvider/Order/ProviderOrder')"
- +
- + rundll32 setupapi.dll,InstallHinfSection DefaultInstall 132 ./nfs41rdr.inf
- +
- + return 0
- +}
- +
- +function nfsclient_removedriver
- +{
- + set -o nounset
- + set -o xtrace
- + set -o errexit
- +
- + # switch to the location where this script is installed,
- + # because on Cygwin the script will be installed
- + # in /cygdrive/c/cygwin/lib/msnfs41client/ (32bit) or
- + # in /cygdrive/c/cygwin64/lib/msnfs41client/ (64bit).
- + cd -P "$(dirname -- "$(realpath "${BASH_SOURCE[0]}")")"
- +
- + nfs_install.exe 0
- + rundll32.exe setupapi.dll,InstallHinfSection DefaultUninstall 132 ./nfs41rdr.inf
- + rm /cygdrive/c/Windows/System32/nfs41_np.dll || true
- + rm /cygdrive/c/Windows/System32/drivers/nfs41_driver.sys || true
- +
- + sync
- +
- + return 0
- +}
- +
- function nfsclient_rundeamon
- {
- set -o nounset
- @@ -591,6 +626,23 @@ function main
- nfsclient_install
- return $?
- ;;
- + #
- + # 'removedriver' should only be used by developers,
- + # as 'install' can always overwrite an existing driver
- + #
- + 'removedriver')
- + check_machine_arch || (( numerr++ ))
- + require_cmd 'nfs_install.exe' || (( numerr++ ))
- + require_cmd 'rundll32.exe' || (( numerr++ ))
- + if ! is_windows_admin_account ; then
- + printf $"%s: %q requires Windows Adminstator permissions.\n" "$0" "$cmd"
- + (( numerr++ ))
- + fi
- + (( numerr > 0 )) && return 1
- +
- + nfsclient_removedriver
- + return $?
- + ;;
- 'run_deamon' | 'run_daemon')
- check_machine_arch || (( numerr++ ))
- #require_cmd 'cdb.exe' || (( numerr++ ))
- diff --git a/install.bat b/install.bat
- deleted file mode 100644
- index cd79372..0000000
- --- a/install.bat
- +++ /dev/null
- @@ -1,2 +0,0 @@
- -nfs_install.exe
- -rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 ./nfs41rdr.inf
- diff --git a/nfs41rdr.inf b/nfs41rdr.inf
- index 02ee912..4274370 100644
- --- a/nfs41rdr.inf
- +++ b/nfs41rdr.inf
- @@ -1,10 +1,8 @@
- [Version]
- Signature="$CHICAGO$"
- -DriverVer=05/27/2009,1.0
- -ClassGUID={00000000-0000-0000-0000-000000000000}
- -;Its possible that we should be using:
- -;Class=NetService
- -;ClassGUID={4d36e974-e325-11ce-bfc1-08002be10318}
- +DriverVer=06/12/2024,1.0.0.0
- +Class=NetService
- +ClassGUID={4d36e974-e325-11ce-bfc1-08002be10318}
- CatalogFile=catalogfile.cat
- Provider=%ProviderName%
- diff --git a/uninstall.bat b/uninstall.bat
- deleted file mode 100644
- index 4c714b3..0000000
- --- a/uninstall.bat
- +++ /dev/null
- @@ -1,2 +0,0 @@
- -nfs_install.exe 0
- -rundll32.exe setupapi.dll,InstallHinfSection DefaultUninstall 132 ./nfs41rdr.inf
- --
- 2.45.1
- From 9d1c82edc9561d3cdd03005d65654c4d0088989a Mon Sep 17 00:00:00 2001
- From: Cedric Blancher <cedric.blancher@gmail.com>
- Date: Thu, 13 Jun 2024 09:11:54 +0200
- Subject: [PATCH 2/4] build.vc19: Kernel drivers for >= Win8 should use
- BufferOverflowfastfailK.lib
- Kernel drivers for >= Win8 should use "BufferOverflowfastfailK.lib"
- instead of "bufferoverflowk.lib".
- Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- ---
- build.vc19/nfs41_driver/nfs41_driver.vcxproj | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
- diff --git a/build.vc19/nfs41_driver/nfs41_driver.vcxproj b/build.vc19/nfs41_driver/nfs41_driver.vcxproj
- index 2165fc2..39f7bae 100644
- --- a/build.vc19/nfs41_driver/nfs41_driver.vcxproj
- +++ b/build.vc19/nfs41_driver/nfs41_driver.vcxproj
- @@ -142,7 +142,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
- @@ -154,7 +154,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- @@ -166,7 +166,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- @@ -178,7 +178,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
- @@ -190,7 +190,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
- @@ -202,7 +202,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- @@ -214,7 +214,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- @@ -226,7 +226,7 @@
- <AdditionalOptions>/std:c17 /Zc:preprocessor- /kernel /wd4100 /wd4201 /wd5104</AdditionalOptions>
- </ClCompile>
- <Link>
- - <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\bufferoverflowk.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- + <AdditionalDependencies>$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ntoskrnl.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\hal.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\BufferOverflowfastfailK.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\ksecdd.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rxce.lib;$(WindowsSdkDir)lib0.0.19041.0\km\$(DDKPlatform)\rdbsslib.lib;$(WindowsSdkDir)lib\win7\km\$(DDKPlatform)\copysup.lib</AdditionalDependencies>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- --
- 2.45.1
- From 2156996d27f265c26d83a443b7d08629a4a65de7 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Thu, 13 Jun 2024 09:14:39 +0200
- Subject: [PATCH 3/4] daemon: Performace regression, new accesstoken.c misses
- SID cache
- Fix performace regression, the new accesstoken.c did not include
- "nfs41_build_features.h", and therefore the SID cache was not used.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/accesstoken.c | 6 ++++++
- 1 file changed, 6 insertions(+)
- diff --git a/daemon/accesstoken.c b/daemon/accesstoken.c
- index a164b4e..8f98b5d 100644
- --- a/daemon/accesstoken.c
- +++ b/daemon/accesstoken.c
- @@ -19,10 +19,16 @@
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- */
- +#include "nfs41_build_features.h"
- #include "accesstoken.h"
- +#include "sid.h"
- #include "daemon_debug.h"
- #include <Lmcons.h>
- +#ifndef _NFS41_DRIVER_BUILDFEATURES_
- +#error NFS41 build config not included
- +#endif
- +
- /*
- * Performance hack:
- * GETTOKINFO_EXTRA_BUFFER - extra space for more data
- --
- 2.45.1
- From eed40554e3cb33c1be038c18c5c9d79084d58e3b Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Thu, 13 Jun 2024 17:17:31 +0200
- Subject: [PATCH 4/4] daemon,dll,nfs41_build_features.h: Separate mount
- namespaces per |AuthenticationId|
- Add new build config
- |NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE| which
- uses |TOKEN_GROUPS_AND_PRIVILEGES.AuthenticationId| for mount
- namespace separation between users and different logons of the
- same user.
- This avoid that mounts from different users can interfere
- with each other, e.g. if they are mounted with different
- mount (e.g. "rw" vs. "ro") options.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/accesstoken.c | 13 ++---
- daemon/mount.c | 39 +++++++++++++++
- daemon/nfs41_client.c | 24 +++++++--
- dll/nfs41_np.c | 111 +++++++++++++++++++++++++++++++++++++++--
- dll/nfs41_np.h | 17 ++++++-
- nfs41_build_features.h | 10 ++++
- 6 files changed, 197 insertions(+), 17 deletions(-)
- diff --git a/daemon/accesstoken.c b/daemon/accesstoken.c
- index 8f98b5d..4ad62b1 100644
- --- a/daemon/accesstoken.c
- +++ b/daemon/accesstoken.c
- @@ -32,12 +32,13 @@
- /*
- * Performance hack:
- * GETTOKINFO_EXTRA_BUFFER - extra space for more data
- - * |GetTokenInformation()| for |TOKEN_USER| and |TOKEN_PRIMARY_GROUP|
- - * always fails in Win10 with |ERROR_INSUFFICIENT_BUFFER| if you
- - * just pass the |sizeof(TOKEN_*)| value. Instead of calling
- - * |GetTokenInformation()| with |NULL| arg to obtain the size to
- - * allocate we just provide 2048 bytes of extra space after the
- - * |TOKEN_*| size, and pray it is enough
- + * |GetTokenInformation()| for |TOKEN_USER|, |TOKEN_PRIMARY_GROUP|
- + * and |TOKEN_GROUPS_AND_PRIVILEGES| always fails in Win10 with
- + * |ERROR_INSUFFICIENT_BUFFER| if you just pass the |sizeof(TOKEN_*)|
- + * value.
- + * Instead of calling |GetTokenInformation()| with |NULL| arg to
- + * obtain the size to allocate we just provide 2048 bytes of extra
- + * space after the |TOKEN_*| size, and pray it is enough.
- */
- #define GETTOKINFO_EXTRA_BUFFER (2048)
- diff --git a/daemon/mount.c b/daemon/mount.c
- index 4703b88..a6dab4e 100644
- --- a/daemon/mount.c
- +++ b/daemon/mount.c
- @@ -24,10 +24,14 @@
- #include <strsafe.h>
- #include <stdio.h>
- +#include "nfs41_build_features.h"
- #include "daemon_debug.h"
- #include "nfs41_ops.h"
- #include "upcall.h"
- #include "util.h"
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- +#include "accesstoken.h"
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- /* NFS41_MOUNT */
- @@ -72,9 +76,24 @@ static int handle_mount(void *daemon_context, nfs41_upcall *upcall)
- EASSERT(args->hostport != NULL);
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID authenticationid = { .LowPart = 0, .HighPart = 0L };
- +
- + /* We ignore errors here since this is for logging only */
- + (void)get_token_authenticationid(upcall->currentthread_token,
- + &authenticationid);
- +
- + logprintf("mount(hostport='%s', path='%s', "
- + "authid=(0x%x.0x%lx)) request\n",
- + args->hostport?args->hostport:"<NULL>",
- + args->path?args->path:"<NULL>",
- + (int)authenticationid.LowPart,
- + (long)authenticationid.HighPart);
- +#else
- logprintf("mount(hostport='%s', path='%s') request\n",
- args->hostport?args->hostport:"<NULL>",
- args->path?args->path:"<NULL>");
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- if (upcall->currentthread_token == INVALID_HANDLE_VALUE){
- eprintf("handle_mount: Thread has no impersonation token\n");
- @@ -167,16 +186,36 @@ static int handle_mount(void *daemon_context, nfs41_upcall *upcall)
- args->lease_time = client->session->lease_time;
- out:
- if (status == 0) {
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + logprintf("mount(hostport='%s', path='%s', "
- + "authid=(0x%x.0x%lx)) success, root=0x%p\n",
- + args->hostport?args->hostport:"<NULL>",
- + args->path?args->path:"<NULL>",
- + (int)authenticationid.LowPart,
- + (long)authenticationid.HighPart,
- + root);
- +#else
- logprintf("mount(hostport='%s', path='%s') success, root=0x%p\n",
- args->hostport?args->hostport:"<NULL>",
- args->path?args->path:"<NULL>",
- root);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- }
- else {
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + logprintf("mount(hostport='%s', path='%s', "
- + "authid=(0x%x.0x%lx))) failed, status=%d\n",
- + args->hostport?args->hostport:"<NULL>",
- + args->path?args->path:"<NULL>",
- + (int)authenticationid.LowPart,
- + (long)authenticationid.HighPart,
- + (int)status);
- +#else
- logprintf("mount(hostport='%s', path='%s') failed, status=%d\n",
- args->hostport?args->hostport:"<NULL>",
- args->path?args->path:"<NULL>",
- (int)status);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- }
- return status;
- diff --git a/daemon/nfs41_client.c b/daemon/nfs41_client.c
- index f817d4e..4380efd 100644
- --- a/daemon/nfs41_client.c
- +++ b/daemon/nfs41_client.c
- @@ -3,6 +3,7 @@
- *
- * Olga Kornievskaia <aglo@umich.edu>
- * Casey Bodley <cbodley@umich.edu>
- + * Roland Mainz <roland.mainz@nrubsig.org>
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- @@ -27,6 +28,7 @@
- #include <wincrypt.h> /* for Crypt*() functions */
- #include <winsock2.h> /* for hostent struct */
- +#include "nfs41_build_features.h"
- #include "tree.h"
- #include "delegation.h"
- #include "daemon_debug.h"
- @@ -370,31 +372,37 @@ int nfs41_client_owner(
- const ULONGLONG time_created = GetTickCount64();
- int status;
- char username[UNLEN+1];
- + HANDLE thrtoken = GetCurrentThreadEffectiveToken();
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- LUID authenticationid;
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- /*
- * gisburn: What about primary group (for /usr/bin/newgrp
- * support) ?
- */
- - if (!get_token_user_name(GetCurrentThreadEffectiveToken(),
- + if (!get_token_user_name(thrtoken,
- username)) {
- status = GetLastError();
- eprintf("get_token_user_name() failed with %d\n", status);
- goto out;
- }
- - if (!get_token_authenticationid(GetCurrentThreadEffectiveToken(),
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + if (!get_token_authenticationid(thrtoken,
- &authenticationid)) {
- status = GetLastError();
- - eprintf("get_token_authenticationid() failed with %d\n", status);
- + eprintf("nfs41_client_owner: get_token_authenticationid() "
- + "failed with %d\n", status);
- goto out;
- }
- - DPRINTF(0, ("nfs41_client_owner: "
- - "username='%s' authenticationid=(0x%x/0x%lx)\n",
- + DPRINTF(1, ("nfs41_client_owner: "
- + "username='%s' authid=(0x%x.0x%lx)\n",
- username,
- (int)authenticationid.LowPart,
- (long)authenticationid.HighPart));
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- /* owner.verifier = "time created" */
- memcpy(owner->co_verifier, &time_created, sizeof(time_created));
- @@ -430,6 +438,11 @@ int nfs41_client_owner(
- goto out_hash;
- }
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + /*
- + * |LUID| may have (hidden) padding fields, so we hash each
- + * member seperately
- + */
- if (!CryptHashData(hash, (const BYTE*)&authenticationid.LowPart, (DWORD)sizeof(DWORD), 0)) {
- status = GetLastError();
- eprintf("CryptHashData() failed with %d\n", status);
- @@ -441,6 +454,7 @@ int nfs41_client_owner(
- eprintf("CryptHashData() failed with %d\n", status);
- goto out_hash;
- }
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- if (!CryptHashData(hash, (const BYTE*)&port, (DWORD)sizeof(port), 0)) {
- status = GetLastError();
- diff --git a/dll/nfs41_np.c b/dll/nfs41_np.c
- index 9a4d7cd..1720558 100644
- --- a/dll/nfs41_np.c
- +++ b/dll/nfs41_np.c
- @@ -73,6 +73,56 @@ ULONG _cdecl NFS41DbgPrint(__in LPTSTR fmt, ...)
- return rc;
- }
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- +/*
- + * |equal_luid()| - |LUID| might contain padding fields, so
- + * we cannot use |memcpy()|!
- + */
- +static
- +bool equal_luid(LUID *l1, LUID *l2)
- +{
- + return((l1->LowPart == l2->LowPart) &&
- + (l1->HighPart == l2->HighPart));
- +}
- +
- +/*
- + * Performance hack:
- + * GETTOKINFO_EXTRA_BUFFER - extra space for more data
- + * |GetTokenInformation()| for |TOKEN_USER|, |TOKEN_PRIMARY_GROUP|
- + * and |TOKEN_GROUPS_AND_PRIVILEGES| always fails in Win10 with
- + * |ERROR_INSUFFICIENT_BUFFER| if you just pass the |sizeof(TOKEN_*)|
- + * value.
- + * Instead of calling |GetTokenInformation()| with |NULL| arg to
- + * obtain the size to allocate we just provide 2048 bytes of extra
- + * space after the |TOKEN_*| size, and pray it is enough.
- + */
- +#define GETTOKINFO_EXTRA_BUFFER (2048)
- +
- +static
- +bool get_token_authenticationid(HANDLE tok, LUID *out_authenticationid)
- +{
- + DWORD tokdatalen;
- + PTOKEN_GROUPS_AND_PRIVILEGES ptgp;
- +
- + tokdatalen =
- + sizeof(TOKEN_GROUPS_AND_PRIVILEGES)+GETTOKINFO_EXTRA_BUFFER;
- + ptgp = _alloca(tokdatalen);
- + if (!GetTokenInformation(tok, TokenGroupsAndPrivileges, ptgp,
- + tokdatalen, &tokdatalen)) {
- + DbgP((L"get_token_authenticationid: "
- + L"GetTokenInformation(tok=0x%p, TokenGroupsAndPrivileges) "
- + L"failed, "
- + L"status=%d\n",
- + (void *)tok, (int)GetLastError()));
- + return false;
- + }
- +
- + *out_authenticationid = ptgp->AuthenticationId;
- +
- + return true;
- +}
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- int filter(unsigned int code)
- {
- DbgP((L"####Got exception %u\n", code));
- @@ -203,9 +253,17 @@ static DWORD StoreConnectionInfo(
- PNFS41NP_NETRESOURCE pNfs41NetResource;
- INT i;
- bool FreeEntryFound = false;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID authenticationid = { .LowPart = 0, .HighPart = 0L };
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- DbgP((L"--> StoreConnectionInfo\n"));
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + (void)get_token_authenticationid(GetCurrentThreadEffectiveToken(),
- + &authenticationid);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- status = OpenSharedMemory(&hMutex, &hMemory,
- &(PVOID)pSharedMemory);
- if (status)
- @@ -243,6 +301,9 @@ static DWORD StoreConnectionInfo(
- pNfs41NetResource->dwDisplayType =
- lpNetResource->dwDisplayType;
- pNfs41NetResource->dwUsage = RESOURCEUSAGE_CONNECTABLE;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + pNfs41NetResource->MountAuthId = authenticationid;
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- pNfs41NetResource->LocalNameLength =
- (USHORT)(wcslen(LocalName) + 1) * sizeof(WCHAR);
- pNfs41NetResource->RemoteNameLength =
- @@ -660,10 +721,18 @@ NPCancelConnection(
- HANDLE hMutex, hMemory;
- PNFS41NP_SHARED_MEMORY pSharedMemory;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID authenticationid = { .LowPart = 0, .HighPart = 0L };
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- DbgP((L"--> NPCancelConnection(lpName='%s', fForce=%d)\n",
- lpName, (int)fForce));
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + (void)get_token_authenticationid(GetCurrentThreadEffectiveToken(),
- + &authenticationid);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- Status = OpenSharedMemory(&hMutex,
- &hMemory,
- (PVOID)&pSharedMemory);
- @@ -684,7 +753,12 @@ NPCancelConnection(
- pNetResource = &pSharedMemory->NetResources[Index];
- if (pNetResource->InUse) {
- - if ((((wcslen(lpName)+1) * sizeof(WCHAR)) ==
- + if (
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + equal_luid(&authenticationid,
- + &pNetResource->MountAuthId) &&
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- + (((wcslen(lpName)+1) * sizeof(WCHAR)) ==
- pNetResource->LocalNameLength) &&
- (!wcscmp(lpName, pNetResource->LocalName))) {
- ULONG CopyBytes;
- @@ -749,9 +823,17 @@ NPGetConnection(
- HANDLE hMutex, hMemory;
- PNFS41NP_SHARED_MEMORY pSharedMemory;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID authenticationid = { .LowPart = 0, .HighPart = 0L };
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- DbgP((L"--> NPGetConnection(lpLocalName='%s')\n", lpLocalName));
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + (void)get_token_authenticationid(GetCurrentThreadEffectiveToken(),
- + &authenticationid);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- Status = OpenSharedMemory(&hMutex,
- &hMemory,
- (PVOID)&pSharedMemory);
- @@ -767,7 +849,13 @@ NPGetConnection(
- pNetResource = &pSharedMemory->NetResources[Index];
- if (pNetResource->InUse) {
- - if ((((wcslen(lpLocalName)+1)*sizeof(WCHAR)) ==
- + if (
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + equal_luid(&authenticationid,
- + &pNetResource->MountAuthId) &&
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- + (((wcslen(lpLocalName)+1)*sizeof(WCHAR)) ==
- +
- pNetResource->LocalNameLength) &&
- (!wcscmp(lpLocalName, pNetResource->LocalName))) {
- if (*lpBufferSize < pNetResource->RemoteNameLength) {
- @@ -853,11 +941,20 @@ NPEnumResource(
- HANDLE hMutex, hMemory;
- PNFS41NP_SHARED_MEMORY pSharedMemory;
- PNFS41NP_NETRESOURCE pNfsNetResource;
- - INT Index = *(PULONG)hEnum;
- + INT Index = *(PULONG)hEnum;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID authenticationid =
- + { .LowPart = 0, .HighPart = 0L };
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- DbgP((L"--> NPEnumResource(hEnum=0x%x, *lpcCount=%d)\n",
- HANDLE2INT(hEnum), (int)*lpcCount));
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + (void)get_token_authenticationid(GetCurrentThreadEffectiveToken(),
- + &authenticationid);
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- pNetResource = (LPNETRESOURCE) lpBuffer;
- SpaceAvailable = *lpBufferSize;
- EntriesCopied = 0;
- @@ -875,8 +972,12 @@ NPEnumResource(
- {
- pNfsNetResource = &pSharedMemory->NetResources[Index];
- - if (pNfsNetResource->InUse)
- - {
- + if (pNfsNetResource->InUse
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + && equal_luid(&authenticationid,
- + &pNfsNetResource->MountAuthId)
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- + ) {
- SpaceNeeded = sizeof(NETRESOURCE);
- SpaceNeeded += pNfsNetResource->LocalNameLength;
- SpaceNeeded += pNfsNetResource->RemoteNameLength;
- diff --git a/dll/nfs41_np.h b/dll/nfs41_np.h
- index 5f3d77c..c4c122d 100644
- --- a/dll/nfs41_np.h
- +++ b/dll/nfs41_np.h
- @@ -3,6 +3,7 @@
- *
- * Olga Kornievskaia <aglo@umich.edu>
- * Casey Bodley <cbodley@umich.edu>
- + * Roland Mainz <roland.mainz@nrubsig.org>
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by
- @@ -22,9 +23,20 @@
- #ifndef __NFS41_NP_H__
- #define __NFS41_NP_H__
- +#include "nfs41_build_features.h"
- +
- #define NFS41NP_MUTEX_NAME "NFS41NPMUTEX"
- -#define NFS41NP_MAX_DEVICES 26
- +/*
- + * Maximum number of devices, 26 letters in alphabet, per user
- + */
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- +#define NFS41NP_MAX_USERS (128)
- +#define NFS41NP_MAX_DEVICES (26*NFS41NP_MAX_USERS)
- +#else
- +#define NFS41NP_MAX_DEVICES (26)
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- +
- typedef struct __NFS41NP_NETRESOURCE {
- BOOL InUse;
- @@ -35,6 +47,9 @@ typedef struct __NFS41NP_NETRESOURCE {
- DWORD dwType;
- DWORD dwDisplayType;
- DWORD dwUsage;
- +#ifdef NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE
- + LUID MountAuthId;
- +#endif /* NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE */
- WCHAR LocalName[NFS41_SYS_MAX_PATH_LEN];
- WCHAR RemoteName[NFS41_SYS_MAX_PATH_LEN];
- WCHAR ConnectionName[NFS41_SYS_MAX_PATH_LEN];
- diff --git a/nfs41_build_features.h b/nfs41_build_features.h
- index 7d12894..697f4d5 100644
- --- a/nfs41_build_features.h
- +++ b/nfs41_build_features.h
- @@ -107,4 +107,14 @@
- */
- #define NFS41_DRIVER_DISABLE_8DOT3_SHORTNAME_GENERATION 1
- +/*
- + * NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE - use
- + * |TOKEN_GROUPS_AND_PRIVILEGES.AuthenticationId| for
- + * mount namespace separation between users.
- + * This avoid that mounts from different users can interfere
- + * with each other, e.g. if they are mounted with different
- + * mount (e.g. "rw" vs. "ro") options.
- + */
- +#define NFS41_DRIVER_USE_AUTHENTICATIONID_FOR_MOUNT_NAMESPACE 1
- +
- #endif /* !_NFS41_DRIVER_BUILDFEATURES_ */
- --
- 2.45.1
msnfs41client: Patches for Win32 *.inf, performance regression, per-user/logon mount namespaces+misc, 2024-06-13
Posted by Anonymous on Thu 13th Jun 2024 16:34
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.