pastebin - collaborative debugging tool
nrubsig.kpaste.net RSS


msnfs41client: diff -w tarball generation prototype+idmapper fix 2023-12-07
Posted by Anonymous on Fri 8th Dec 2023 10:08
raw | new post
modification of post by Anonymous (view diff)

  1. diff --git a/cygwin/Makefile b/cygwin/Makefile
  2. index b7a3b1e..e423d6f 100644
  3. --- a/cygwin/Makefile
  4. +++ b/cygwin/Makefile
  5. @@ -57,7 +57,12 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
  6.         fi
  7.         mkdir -p $(DESTDIR)
  8.         mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/sbin/
  9. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/usr/bin
  10. +       # /usr/bin is a bind mount to C:/cygwin64/bin, so copy binaries to /cygdrive/c/cygwin64/bin
  11. +       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/bin
  12. +       # /usr/lib is a bind mount to C:/cygwin64/lib, so copy library data to /cygdrive/c/cygwin64/lib
  13. +       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib
  14. +       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client
  15. +       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/src/msnfs41client
  16.         cp -r $(VS_BUILD_DIR)/nfsd.exe          $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.exe
  17.         cp -r $(VS_BUILD_DIR)/nfsd.pdb          $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.pdb
  18.         cp -r $(VS_BUILD_DIR)/nfs_mount.*       $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  19. @@ -70,15 +75,21 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
  20.         cp $(PROJECT_BASEDIR_DIR)/etc_netconfig $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  21.         cp $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf           $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  22.         cp $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash      $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  23. +       cp $(PROJECT_BASEDIR_DIR)/cygwin_idmapper.ksh           $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  24. +       @ printf "# Package sources and diffs\n"
  25. +       git bundle create "$(DESTDIR)/cygdrive/c/cygwin64/src/msnfs41client/msnfs41client_git.bundle" HEAD
  26. +       git diff -w     >"$(DESTDIR)/cygdrive/c/cygwin64/src/msnfs41client/msnfs41client_diff_w.diff"
  27. +       git diff        >"$(DESTDIR)/cygdrive/c/cygwin64/src/msnfs41client/msnfs41client_diff.diff"
  28. +       @ printf "# Package utilties\n"
  29.         cp $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
  30.         chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
  31.         cp $(CYGWIN_MAKEFILE_DIR)/utils/sshnfs/sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
  32.         chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
  33.         @ printf "# Package tests\n"
  34. -       cp tests/winfsinfo1/winfsinfo.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/winfsinfo.exe
  35. +       cp tests/winfsinfo1/winfsinfo.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/winfsinfo.exe
  36.         @ printf "# Package ksh93&co (if available) since Cygwin does not ship with it yet\n"
  37. -       [[ -x /usr/bin/ksh93.exe ]] && cp /usr/bin/ksh93.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/ksh93.exe
  38. -       [[ -x /usr/bin/shcomp.exe ]] && cp /usr/bin/shcomp.exe $(DESTDIR)/cygdrive/c/cygwin64/usr/bin/shcomp.exe
  39. +       [[ -x /usr/bin/ksh93.exe ]] && cp /usr/bin/ksh93.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/ksh93.exe
  40. +       [[ -x /usr/bin/shcomp.exe ]] && cp /usr/bin/shcomp.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/shcomp.exe
  41.         @ printf "# Set file flags\n"
  42.         (cd $(DESTDIR)/cygdrive/c/cygwin64/sbin/ ; chmod a+x *.exe *.dll *.sys *.bash)
  43.         @printf "\n#\n# TEST sbin dir is %s\n#\n" "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
  44. @@ -86,6 +97,14 @@ installdest: $(VS_BUILD_DIR)/nfsd.exe \
  45.         @printf "\n#\n# Now use\n# $$ cd '%s' && bash ./msnfs41client.bash install #\n# to install the kernel driver as Admin\n#\n" \
  46.                 "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
  47.  
  48. +bintarball: installdest
  49. +       (cd destdir && \
  50. +       tar -cvf - \
  51. +               --owner=SYSTEM \
  52. +               --group=SYSTEM \
  53. +               cygdrive/c/cygwin64 | \
  54. +                       bzip2 -9 >msnfs41client_cygwin_binaries.tar.bz2)
  55. +
  56.  #
  57.  # clean destdir/, but only if nfsd*.exe does not use it right now
  58.  #
  59. @@ -94,6 +113,6 @@ cleandest:
  60.                 printf 'DIR %q is in use by a process\n' "$DESTDIR" 1>&2 ; \
  61.                 exit 1 ; \
  62.         fi
  63. -       rm -r "$(DESTDIR)"
  64. +       rm -rvf "$(DESTDIR)"
  65.  
  66.  # EOF.
  67. diff --git a/cygwin/utils/mount_sshnfs/mount_sshnfs.ksh b/cygwin/utils/mount_sshnfs/mount_sshnfs.ksh
  68. index 9b5c76e..4193d56 100755
  69. --- a/cygwin/utils/mount_sshnfs/mount_sshnfs.ksh
  70. +++ b/cygwin/utils/mount_sshnfs/mount_sshnfs.ksh
  71. @@ -312,7 +312,7 @@ function cmd_mount
  72.  
  73.         # fixme: Need better text layout for $ mount_sshnfs mount --man #
  74.         typeset -r mount_sshnfs_cmdmount_usage=$'+
  75. -       [-?\n@(#)\$Id: mount_sshnfs mount (Roland Mainz) 2023-07-24 \$\n]
  76. +       [-?\n@(#)\$Id: mount_sshnfs mount (Roland Mainz) 2023-12-08 \$\n]
  77.         [-author?Roland Mainz <roland.mainz@nrubsig.org>]
  78.         [+NAME?mount_sshnfs mount - mount NFSv4 filesystem through ssh
  79.                 tunnel]
  80. @@ -668,7 +668,7 @@ function cmd_umount
  81.         typeset mydebug=false # fixme: should be "bool" for ksh93v
  82.         # fixme: Need better text layout for $ mount_sshnfs mount --man #
  83.         typeset -r mount_sshnfs_cmdumount_usage=$'+
  84. -       [-?\n@(#)\$Id: mount_sshnfs umount (Roland Mainz) 2023-07-24 \$\n]
  85. +       [-?\n@(#)\$Id: mount_sshnfs umount (Roland Mainz) 2023-12-08 \$\n]
  86.         [-author?Roland Mainz <roland.mainz@nrubsig.org>]
  87.         [+NAME?mount_sshnfs umount - unmount NFSv4 filesystem mounted
  88.                 via mount_sshnfs mount]
  89. @@ -772,7 +772,7 @@ function main
  90.  
  91.         # fixme: Need better text layout for $ mount_sshnfs --man #
  92.         typeset -r mount_sshnfs_usage=$'+
  93. -       [-?\n@(#)\$Id: mount_sshnfs (Roland Mainz) 2023-07-24 \$\n]
  94. +       [-?\n@(#)\$Id: mount_sshnfs (Roland Mainz) 2023-12-08 \$\n]
  95.         [-author?Roland Mainz <roland.mainz@nrubsig.org>]
  96.         [+NAME?mount_sshnfs - mount/umount NFSv4 filesystem via ssh
  97.                 tunnel]
  98. @@ -809,8 +809,8 @@ function main
  99.         if [[ "${ uname -o ;}" == 'Cygwin' ]] ; then
  100.                 integer c.is_ccygwin=1
  101.  
  102. -               # only for testing!!
  103. -               PATH+=':/cygdrive/c/Users/roland_mainz/Downloads/ms-nfs41-client-x64/ms-nfs41-client-x64/'
  104. +               # Cygwin has nfs_mount.exe in /sbin
  105. +               PATH+=':/sbin:/usr/sbin:/usr/bin:/bin'
  106.  
  107.                 typeset c.msnfsv41_nfsmountcmd="$(which 'nfs_mount.exe')"
  108.  
  109. diff --git a/daemon/getattr.c b/daemon/getattr.c
  110. index 7c5f241..7621dba 100644
  111. --- a/daemon/getattr.c
  112. +++ b/daemon/getattr.c
  113. @@ -59,8 +59,19 @@ int nfs41_cached_getattr(
  114.  static int parse_getattr(unsigned char *buffer, uint32_t length, nfs41_upcall *upcall)
  115.  {
  116.      int status;
  117. +#if 1
  118. +    EASSERT(length > 4);
  119. +    if (length <= 4) {
  120. +        status = ERROR_INVALID_PARAMETER;
  121. +        goto out;
  122. +    }
  123. +    EASSERT(upcall->state_ref != NULL);
  124. +    if (upcall->state_ref == NULL) {
  125. +        status = ERROR_INVALID_PARAMETER;
  126. +        goto out;
  127. +    }
  128. +#endif
  129.      getattr_upcall_args *args = &upcall->args.getattr;
  130. -
  131.      status = safe_read(&buffer, &length, &args->query_class, sizeof(args->query_class));
  132.      if (status) goto out;
  133.      status = safe_read(&buffer, &length, &args->buf_len, sizeof(args->buf_len));
  134. @@ -80,6 +91,21 @@ static int handle_getattr(void *daemon_context, nfs41_upcall *upcall)
  135.      nfs41_open_state *state = upcall->state_ref;
  136.      nfs41_file_info info = { 0 };
  137.  
  138. +#if 1
  139. +    if (((char *)state->session) == ((char *)0xdddddddddddddddd)) {
  140. +        eprintf("handle_getattr: Invalid session pointer 0xdddddddddddddddd\n");
  141. +        status = ERROR_INVALID_PARAMETER;
  142. +        goto out;
  143. +    }
  144. +
  145. +    EASSERT(state->file.fh.superblock != NULL);
  146. +    if (state->file.fh.superblock == NULL) {
  147. +        /* gisburn: fixme: maybe this should be |ERROR_INTERNAL_ERROR| ? */
  148. +        status = ERROR_INVALID_PARAMETER;
  149. +        goto out;
  150. +    }
  151. +#endif
  152. +
  153.      status = nfs41_cached_getattr(state->session, &state->file, &info);
  154.      if (status) {
  155.          eprintf("nfs41_cached_getattr() failed with %d\n", status);
  156. diff --git a/daemon/idmap_cygwin.c b/daemon/idmap_cygwin.c
  157. index 64c1bff..f8bb74e 100644
  158. --- a/daemon/idmap_cygwin.c
  159. +++ b/daemon/idmap_cygwin.c
  160. @@ -40,7 +40,7 @@
  161.  
  162.  #define CYGWIN_IDMAPPER_SCRIPT \
  163.      ("C:\\cygwin64\\bin\\ksh93.exe " \
  164. -    "/home/roland_mainz/work/msnfs41_uidmapping/ms-nfs41-client/cygwin_idmapper.ksh")
  165. +    "/cygdrive/c/cygwin64/lib/msnfs41client/cygwin_idmapper.ksh")
  166.  
  167.  
  168.  #ifdef NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN
  169. diff --git a/daemon/nfs41_daemon.c b/daemon/nfs41_daemon.c
  170. index fe0683e..ecea1db 100644
  171. --- a/daemon/nfs41_daemon.c
  172. +++ b/daemon/nfs41_daemon.c
  173. @@ -415,7 +415,21 @@ VOID ServiceStart(DWORD argc, LPTSTR *argv)
  174.  #ifdef _DEBUG
  175.      /* dump memory leaks to stderr on exit; this requires the debug heap,
  176.      /* available only when built in debug mode under visual studio -cbodley */
  177. -    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
  178. +
  179. +    int crtsetdbgflags = 0;
  180. +    crtsetdbgflags |= _CRTDBG_ALLOC_MEM_DF;  /* use debug heap */
  181. +    crtsetdbgflags |= _CRTDBG_LEAK_CHECK_DF; /* report leaks on exit */
  182. +#if 0
  183. +    /*
  184. +     * _CRTDBG_DELAY_FREE_MEM_DF - Delay freeing of memory, but fill
  185. +     * memory blocks passed to |free()| with 0xdd. We rely on that to
  186. +     * see 0xdddddddddddddddd-pointers for use-after-free and catch
  187. +     * them in stress testing instead of having to deal with a core
  188. +     * dump
  189. +     */
  190. +    crtsetdbgflags |= _CRTDBG_DELAY_FREE_MEM_DF;
  191. +#endif
  192. +    (void)_CrtSetDbgFlag(crtsetdbgflags);
  193.      _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
  194.  
  195.      /*
  196. diff --git a/daemon/nfs41_ops.c b/daemon/nfs41_ops.c
  197. index bcca070..f2a4f22 100644
  198. --- a/daemon/nfs41_ops.c
  199. +++ b/daemon/nfs41_ops.c
  200. @@ -400,6 +400,9 @@ int nfs41_open(
  201.      bool_t already_delegated = delegation->type == OPEN_DELEGATE_READ
  202.          || delegation->type == OPEN_DELEGATE_WRITE;
  203.  
  204. +    EASSERT(parent);
  205. +    EASSERT(parent->fh.superblock);
  206. +
  207.      /* depending on the claim type, OPEN expects CURRENT_FH set
  208.       * to either the parent directory, or to the file itself */
  209.      switch (claim->claim) {
  210. diff --git a/daemon/open.c b/daemon/open.c
  211. index 8c01ac1..1cbac2c 100644
  212. --- a/daemon/open.c
  213. +++ b/daemon/open.c
  214. @@ -99,6 +99,24 @@ static void open_state_free(
  215.  void nfs41_open_state_ref(
  216.      IN nfs41_open_state *state)
  217.  {
  218. +#if 1
  219. +    /*
  220. +     * gisburn: fixme: sometimes this happens under high parallel
  221. +     * usage with multiple mounts - but why ?
  222. +     * 0:038> kp
  223. +     * Child-SP          RetAddr           Call Site
  224. +     * 0000006d`431fde10 00007ff7`32f7d905 nfsd!nfs41_open_state_ref(struct __nfs41_open_state * state = 0x00000000`00000000)+0x31
  225. +     * 0000006d`431fdf30 00007ff7`32f4d284 nfsd!upcall_parse(unsigned char * buffer = 0x0000006d`431fe180 "???", unsigned int length = 8, struct __nfs41_upcall * upcall = 0x0000006d`431ff1e0)+0x2e5
  226. +     * 0000006d`431fe0b0 00007ffc`1ca24c7c nfsd!thread_main(void * args = 0x00007ff7`32fb6080)+0x144
  227. +     * 0000006d`431ffe00 00007ffc`4d4b7344 ucrtbased!thread_start<unsigned int (void * parameter = 0x0000025d`a9c6def0)+0x9c
  228. +     * 0000006d`431ffe60 00007ffc`4efc26b1 KERNEL32!BaseThreadInitThunk+0x14
  229. +     * 0000006d`431ffe90 00000000`00000000 ntdll!RtlUserThreadStart+0x21
  230. +     */
  231. +    EASSERT(state != NULL);
  232. +    if (state == NULL)
  233. +        return;
  234. +#endif
  235. +
  236.      const LONG count = InterlockedIncrement(&state->ref_count);
  237.  
  238.      dprintf(2, "nfs41_open_state_ref(%s) count %d\n", state->path.path, count);
  239. diff --git a/daemon/upcall.c b/daemon/upcall.c
  240. index bd13c61..7778429 100644
  241. --- a/daemon/upcall.c
  242. +++ b/daemon/upcall.c
  243. @@ -121,6 +121,7 @@ int upcall_parse(
  244.      /* parse the operation's arguments */
  245.      op = g_upcall_op_table[upcall->opcode];
  246.      if (op && op->parse) {
  247. +        EASSERT(length > 0);
  248.          status = op->parse(buffer, length, upcall);
  249.          if (status) {
  250.              eprintf("parsing of upcall '%s' failed with %d.\n",
  251. diff --git a/sys/nfs41_build_features.h b/sys/nfs41_build_features.h
  252. index 93ee7a9..d43334a 100644
  253. --- a/sys/nfs41_build_features.h
  254. +++ b/sys/nfs41_build_features.h
  255. @@ -32,19 +32,19 @@
  256.  /*
  257.   * NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES - return local uid/gid values
  258.   */
  259. -// #define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
  260. +#define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
  261.  
  262.  /*
  263.   * NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID - give NFS
  264.   * files which do not map to a local account a SID in the
  265.   * Unix_User+x/Unix_Group+x range
  266.   */
  267. -// #define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
  268. +#define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
  269.  
  270.  /*
  271.   * NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN - use Cygwin /usr/bin/getent
  272.   * as "name service"
  273.   */
  274. -// #define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
  275. +#define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
  276.  
  277.  #endif /* !_NFS41_DRIVER_BUILDFEATURES_ */
  278. diff --git a/tests/winlocktest1/winlocktest1.ksh b/tests/winlocktest1/winlocktest1.ksh
  279. old mode 100644
  280. new mode 100755

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.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at