https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=01bcd7d29ef7e784088bcea9f851709f0b2ffdf1

commit 01bcd7d29ef7e784088bcea9f851709f0b2ffdf1
Author:     Corinna Vinschen <cori...@vinschen.de>
AuthorDate: Mon Feb 24 16:42:01 2025 +0100
Commit:     Corinna Vinschen <cori...@vinschen.de>
CommitDate: Mon Feb 24 16:42:01 2025 +0100

    Cygwin: fhandler_netdrive: skip enumerating WebDAV shares
    
    So far there's no known way to enumerate connected WebDAV resources.
    WNetGetResourceInformationW/WNetOpenEnumW both return ERROR_BAD_NET_NAME.
    
    Windows Explorer also shows an error dialog when trying to open a
    Nextcloud instance to see the shares.
    
    However, `net use' enumerates the connected cloud shares, so
    there must be a way to do this.
    
    For the time being, we just don't even try to enumerate WebDAV
    shares and return an empty list.
    
    Signed-off-by: Corinna Vinschen <cori...@vinschen.de>

Diff:
---
 winsup/cygwin/fhandler/netdrive.cc | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/fhandler/netdrive.cc 
b/winsup/cygwin/fhandler/netdrive.cc
index bac62c9b1879..5d7621649a26 100644
--- a/winsup/cygwin/fhandler/netdrive.cc
+++ b/winsup/cygwin/fhandler/netdrive.cc
@@ -409,13 +409,25 @@ create_thread_and_wait (DIR *dir)
     }
 
   /* Eventually, try TERMSRV/P9/SMB via WNet for share enumeration,
-     depending on "server" name. */
+     depending on "server" name.
+
+     TODO: There's no known way yet to enumerate connected WebDAV resources.
+     Whatever I try, WNetGetResourceInformationW or WNetOpenEnumW return
+     ERROR_BAD_NET_NAME (67).  Therefore, short-circuit WebDAV here for
+     the time being. */
   if (!strcmp (dir->__d_dirname + 2, TERMSRV_DIR))
     ndi.provider = WNNC_NET_TERMSRV;
   else if (!strcmp (dir->__d_dirname + 2, PLAN9_DIR))
     ndi.provider = WNNC_NET_9P;
+  else if (strchr (dir->__d_dirname + 2, '@') != NULL)
+    {
+      /* ndi.provider = WNNC_NET_DAV; */
+      ndi.err = 0;
+      goto out;
+    }
   else
     ndi.provider = WNNC_NET_SMB;
+
   ndi.sem = CreateSemaphore (&sec_none_nih, 0, 2, NULL);
   thr = new cygthread (thread_netdrive_wnet, &ndi, "netdrive_smb");
   if (thr->detach (ndi.sem))

Reply via email to