- diff --git a/cygwin/Makefile b/cygwin/Makefile
- index b7a3b1e..41e2340 100644
- --- a/cygwin/Makefile
- +++ b/cygwin/Makefile
- @@ -57,7 +57,11 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
- fi
- mkdir -p $(DESTDIR)
- mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/sbin/
- - mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/usr/bin
- + # /usr/bin is a bind mount to C:/cygwin64/bin, so copy binaries to /cygdrive/c/cygwin64/bin
- + mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/bin
- + # /usr/lib is a bind mount to C:/cygwin64/lib, so copy library data to /cygdrive/c/cygwin64/lib
- + mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib
- + mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client
- cp -r $(VS_BUILD_DIR)/nfsd.exe $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.exe
- cp -r $(VS_BUILD_DIR)/nfsd.pdb $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.pdb
- cp -r $(VS_BUILD_DIR)/nfs_mount.* $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
- @@ -70,15 +74,16 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
- cp $(PROJECT_BASEDIR_DIR)/etc_netconfig $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
- cp $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
- cp $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
- + cp $(PROJECT_BASEDIR_DIR)/cygwin_idmapper.ksh $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
- cp $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
- chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
- cp $(CYGWIN_MAKEFILE_DIR)/utils/sshnfs/sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
- chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
- @ printf "# Package tests\n"
- - cp tests/winfsinfo1/winfsinfo.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/winfsinfo.exe
- + cp tests/winfsinfo1/winfsinfo.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/winfsinfo.exe
- @ printf "# Package ksh93&co (if available) since Cygwin does not ship with it yet\n"
- - [[ -x /usr/bin/ksh93.exe ]] && cp /usr/bin/ksh93.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/ksh93.exe
- - [[ -x /usr/bin/shcomp.exe ]] && cp /usr/bin/shcomp.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/shcomp.exe
- + [[ -x /usr/bin/ksh93.exe ]] && cp /usr/bin/ksh93.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/ksh93.exe
- + [[ -x /usr/bin/shcomp.exe ]] && cp /usr/bin/shcomp.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/shcomp.exe
- @ printf "# Set file flags\n"
- (cd $(DESTDIR)/cygdrive/c/cygwin64/sbin/ ; chmod a+x *.exe *.dll *.sys *.bash)
- @printf "\n#\n# TEST sbin dir is %s\n#\n" "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
- @@ -86,6 +91,14 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
- @printf "\n#\n# Now use\n# $$ cd '%s' && bash ./msnfs41client.bash install #\n# to install the kernel driver as Admin\n#\n" \
- "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
- +bintarball: installdest
- + (cd destdir && \
- + tar -cvf - \
- + --owner=SYSTEM \
- + --group=SYSTEM \
- + cygdrive/c/cygwin64 | \
- + bzip2 -9 >msnfs41client_cygwin_binaries.tar.bz2)
- +
- #
- # clean destdir/, but only if nfsd*.exe does not use it right now
- #
- @@ -94,6 +107,6 @@ cleandest:
- printf 'DIR %q is in use by a process\n' "$DESTDIR" 1>&2 ; \
- exit 1 ; \
- fi
- - rm -r "$(DESTDIR)"
- + rm -rf "$(DESTDIR)"
- # EOF.
- diff --git a/daemon/getattr.c b/daemon/getattr.c
- index 7c5f241..7621dba 100644
- --- a/daemon/getattr.c
- +++ b/daemon/getattr.c
- @@ -59,8 +59,19 @@ int nfs41_cached_getattr(
- static int parse_getattr(unsigned char *buffer, uint32_t length, nfs41_upcall *upcall)
- {
- int status;
- +#if 1
- + EASSERT(length > 4);
- + if (length <= 4) {
- + status = ERROR_INVALID_PARAMETER;
- + goto out;
- + }
- + EASSERT(upcall->state_ref != NULL);
- + if (upcall->state_ref == NULL) {
- + status = ERROR_INVALID_PARAMETER;
- + goto out;
- + }
- +#endif
- getattr_upcall_args *args = &upcall->args.getattr;
- -
- status = safe_read(&buffer, &length, &args->query_class, sizeof(args->query_class));
- if (status) goto out;
- status = safe_read(&buffer, &length, &args->buf_len, sizeof(args->buf_len));
- @@ -80,6 +91,21 @@ static int handle_getattr(void *daemon_context, nfs41_upcall *upcall)
- nfs41_open_state *state = upcall->state_ref;
- nfs41_file_info info = { 0 };
- +#if 1
- + if (((char *)state->session) == ((char *)0xdddddddddddddddd)) {
- + eprintf("handle_getattr: Invalid session pointer 0xdddddddddddddddd\n");
- + status = ERROR_INVALID_PARAMETER;
- + goto out;
- + }
- +
- + EASSERT(state->file.fh.superblock != NULL);
- + if (state->file.fh.superblock == NULL) {
- + /* gisburn: fixme: maybe this should be |ERROR_INTERNAL_ERROR| ? */
- + status = ERROR_INVALID_PARAMETER;
- + goto out;
- + }
- +#endif
- +
- status = nfs41_cached_getattr(state->session, &state->file, &info);
- if (status) {
- eprintf("nfs41_cached_getattr() failed with %d\n", status);
- diff --git a/daemon/idmap_cygwin.c b/daemon/idmap_cygwin.c
- index 64c1bff..f8bb74e 100644
- --- a/daemon/idmap_cygwin.c
- +++ b/daemon/idmap_cygwin.c
- @@ -40,7 +40,7 @@
- #define CYGWIN_IDMAPPER_SCRIPT \
- ("C:\\cygwin64\\bin\\ksh93.exe " \
- - "/home/roland_mainz/work/msnfs41_uidmapping/ms-nfs41-client/cygwin_idmapper.ksh")
- + "/cygdrive/c/cygwin64/lib/msnfs41client/cygwin_idmapper.ksh")
- #ifdef NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN
- diff --git a/daemon/nfs41_daemon.c b/daemon/nfs41_daemon.c
- index fe0683e..a43d51e 100644
- --- a/daemon/nfs41_daemon.c
- +++ b/daemon/nfs41_daemon.c
- @@ -415,7 +415,21 @@ VOID ServiceStart(DWORD argc, LPTSTR *argv)
- #ifdef _DEBUG
- /* dump memory leaks to stderr on exit; this requires the debug heap,
- /* available only when built in debug mode under visual studio -cbodley */
- - _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
- +
- + int crtsetdbgflags = 0;
- + crtsetdbgflags |= _CRTDBG_ALLOC_MEM_DF; /* use debug heap */
- + crtsetdbgflags |= _CRTDBG_LEAK_CHECK_DF; /* report leaks on exit */
- +#if 1
- + /*
- + * _CRTDBG_DELAY_FREE_MEM_DF - Delay freeing of memory, but fill
- + * memory blocks passed to |free()| with 0xdd. We rely on that to
- + * see 0xdddddddddddddddd-pointers for use-after-free and catch
- + * them in stress testing instead of having to deal with a core
- + * dump
- + */
- + crtsetdbgflags |= _CRTDBG_DELAY_FREE_MEM_DF;
- +#endif
- + (void)_CrtSetDbgFlag(crtsetdbgflags);
- _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
- /*
- diff --git a/daemon/nfs41_ops.c b/daemon/nfs41_ops.c
- index bcca070..f2a4f22 100644
- --- a/daemon/nfs41_ops.c
- +++ b/daemon/nfs41_ops.c
- @@ -400,6 +400,9 @@ int nfs41_open(
- bool_t already_delegated = delegation->type == OPEN_DELEGATE_READ
- || delegation->type == OPEN_DELEGATE_WRITE;
- + EASSERT(parent);
- + EASSERT(parent->fh.superblock);
- +
- /* depending on the claim type, OPEN expects CURRENT_FH set
- * to either the parent directory, or to the file itself */
- switch (claim->claim) {
- diff --git a/daemon/open.c b/daemon/open.c
- index 8c01ac1..1cbac2c 100644
- --- a/daemon/open.c
- +++ b/daemon/open.c
- @@ -99,6 +99,24 @@ static void open_state_free(
- void nfs41_open_state_ref(
- IN nfs41_open_state *state)
- {
- +#if 1
- + /*
- + * gisburn: fixme: sometimes this happens under high parallel
- + * usage with multiple mounts - but why ?
- + * 0:038> kp
- + * Child-SP RetAddr Call Site
- + * 0000006d`431fde10 00007ff7`32f7d905 nfsd!nfs41_open_state_ref(struct __nfs41_open_state * state = 0x00000000`00000000)+0x31
- + * 0000006d`431fdf30 00007ff7`32f4d284 nfsd!upcall_parse(unsigned char * buffer = 0x0000006d`431fe180 "???", unsigned int length = 8, struct __nfs41_upcall * upcall = 0x0000006d`431ff1e0)+0x2e5
- + * 0000006d`431fe0b0 00007ffc`1ca24c7c nfsd!thread_main(void * args = 0x00007ff7`32fb6080)+0x144
- + * 0000006d`431ffe00 00007ffc`4d4b7344 ucrtbased!thread_start<unsigned int (void * parameter = 0x0000025d`a9c6def0)+0x9c
- + * 0000006d`431ffe60 00007ffc`4efc26b1 KERNEL32!BaseThreadInitThunk+0x14
- + * 0000006d`431ffe90 00000000`00000000 ntdll!RtlUserThreadStart+0x21
- + */
- + EASSERT(state != NULL);
- + if (state == NULL)
- + return;
- +#endif
- +
- const LONG count = InterlockedIncrement(&state->ref_count);
- dprintf(2, "nfs41_open_state_ref(%s) count %d\n", state->path.path, count);
- diff --git a/daemon/upcall.c b/daemon/upcall.c
- index bd13c61..7778429 100644
- --- a/daemon/upcall.c
- +++ b/daemon/upcall.c
- @@ -121,6 +121,7 @@ int upcall_parse(
- /* parse the operation's arguments */
- op = g_upcall_op_table[upcall->opcode];
- if (op && op->parse) {
- + EASSERT(length > 0);
- status = op->parse(buffer, length, upcall);
- if (status) {
- eprintf("parsing of upcall '%s' failed with %d.\n",
- diff --git a/sys/nfs41_build_features.h b/sys/nfs41_build_features.h
- index 93ee7a9..d43334a 100644
- --- a/sys/nfs41_build_features.h
- +++ b/sys/nfs41_build_features.h
- @@ -32,19 +32,19 @@
- /*
- * NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES - return local uid/gid values
- */
- -// #define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
- +#define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
- /*
- * NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID - give NFS
- * files which do not map to a local account a SID in the
- * Unix_User+x/Unix_Group+x range
- */
- -// #define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
- +#define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
- /*
- * NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN - use Cygwin /usr/bin/getent
- * as "name service"
- */
- -// #define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
- +#define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
- #endif /* !_NFS41_DRIVER_BUILDFEATURES_ */
- diff --git a/tests/winlocktest1/winlocktest1.ksh b/tests/winlocktest1/winlocktest1.ksh
- old mode 100644
- new mode 100755
msnfs41client: diff -w tarball generation prototype+idmapper fix 2023-12-07
Posted by Anonymous on Thu 7th Dec 2023 14:19
raw | new post
view followups (newest first): msnfs41client: diff -w tarball generation prototype+idmapper fix 2023-12-07 by Anonymous
modification of post by Anonymous (view diff)
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.