[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#51773: 28.0.60; Issue writing files over WebDAV on MS-Windows
From: |
Ioannis Kappas |
Subject: |
bug#51773: 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