GNU bug report logs - #51773
28.0.60; Issue writing files over WebDAV on MS-Windows

Previous Next

Package: emacs;

Reported by: Ioannis Kappas <ioannis.kappas <at> gmail.com>

Date: Thu, 11 Nov 2021 19:17:02 UTC

Severity: normal

Found in version 28.0.60

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 51773 <at> debbugs.gnu.org (full text, mbox):

From: Ioannis Kappas <ioannis.kappas <at> gmail.com>
To: 51773 <at> debbugs.gnu.org
Subject: 28.0.60; Issue writing files over WebDAV on MS-Windows
Date: Thu, 11 Nov 2021 19:22:16 +0000
The issue is caused by the ERROR_INVALID_FUNCTION error returned by
w32.c:get_security_info()'s GetSecurityInfo win32 fn when it is called
on a WebDAV file.

The caller w32.c:acl_get_file() doesn't know how to handle the error
and returns it as is, causing the write to fail and the error message to be
displayed.

Looking at the caller, it does have a clause to return ENOSUP for WebDAV files:

  else if (err == ERROR_NOT_SUPPORTED
   /* ERROR_ACCESS_DENIED is what we get for a volume
      mounted by WebDAV, which evidently doesn't
      support ACLs.  */
   || err == ERROR_ACCESS_DENIED)
    errno = ENOTSUP;


Thus a solution, which I have tested it to work, is to add the
ERROR_INVALID_FUNCTION to the predicate

diff --git a/src/w32.c b/src/w32.c
index 9fe698d28d..0e066b12e7 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -6614,10 +6614,11 @@ acl_get_file (const char *fname, acl_type_t type)
     || err == ERROR_INVALID_NAME)
      errno = ENOENT;
    else if (err == ERROR_NOT_SUPPORTED
-    /* ERROR_ACCESS_DENIED is what we get for a volume
-       mounted by WebDAV, which evidently doesn't
-       support ACLs.  */
-    || err == ERROR_ACCESS_DENIED)
+    /* ERROR_ACCESS_DENIED or ERROR_INVALID_FUNCTION is
+       what we get for a volume mounted by WebDAV,
+       which evidently doesn't support ACLs.  */
+    || err == ERROR_ACCESS_DENIED
+    || err == ERROR_INVALID_FUNCTION)
      errno = ENOTSUP;
    else
      errno = EIO;

Please let me know if you require more info.

Thanks




This bug report was last modified 3 years and 189 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.