diff options
author | Ondrej Holy <oholy@redhat.com> | 2018-05-09 12:54:59 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2018-05-14 14:14:30 +0200 |
commit | 1e6bdaaed308a2534fd11df7ee990ebbbe49ced6 (patch) | |
tree | 0038dfac806cebb6733e77719fabdc211c8c5aa0 | |
parent | 42f65062a3c72f920ba35d4fa1437c104355e207 (diff) | |
download | gvfs-1e6bdaaed308a2534fd11df7ee990ebbbe49ced6.tar.gz |
smb: Use O_RDWR to fix fstat when writing
fstat fails with EINVAL on Windows servers if O_WRONLY is used to open
(though it works properly on SAMBA servers). O_RDWR is needed to make
it work. This causes issues when copying files over gvfsd-fuse among
others.
https://bugzilla.gnome.org/show_bug.cgi?id=795805
-rw-r--r-- | daemon/gvfsbackendsmb.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c index d4944197..9571fa0d 100644 --- a/daemon/gvfsbackendsmb.c +++ b/daemon/gvfsbackendsmb.c @@ -808,7 +808,7 @@ do_create (GVfsBackend *backend, smbc_open = smbc_getFunctionOpen (op_backend->smb_context); errno = 0; file = smbc_open (op_backend->smb_context, uri, - O_CREAT|O_WRONLY|O_EXCL, 0666); + O_CREAT|O_RDWR|O_EXCL, 0666); g_free (uri); if (file == NULL) @@ -850,7 +850,7 @@ do_append_to (GVfsBackend *backend, smbc_open = smbc_getFunctionOpen (op_backend->smb_context); errno = 0; file = smbc_open (op_backend->smb_context, uri, - O_CREAT|O_WRONLY|O_APPEND, 0666); + O_CREAT|O_RDWR|O_APPEND, 0666); g_free (uri); if (file == NULL) @@ -916,7 +916,7 @@ open_tmpfile (GVfsBackendSmb *backend, smbc_open = smbc_getFunctionOpen (backend->smb_context); errno = 0; file = smbc_open (backend->smb_context, tmp_uri, - O_CREAT|O_WRONLY|O_EXCL, 0666); + O_CREAT|O_RDWR|O_EXCL, 0666); } while (file == NULL && errno == EEXIST); g_free (dir_uri); @@ -1040,7 +1040,7 @@ do_replace (GVfsBackend *backend, errno = 0; file = smbc_open (op_backend->smb_context, uri, - O_CREAT|O_WRONLY|O_EXCL, 0); + O_CREAT|O_RDWR|O_EXCL, 0); if (file == NULL && errno != EEXIST) { int errsv = fixup_open_errno (errno); @@ -1110,7 +1110,7 @@ do_replace (GVfsBackend *backend, errno = 0; file = smbc_open (op_backend->smb_context, uri, - O_CREAT|O_WRONLY|O_TRUNC, 0); + O_CREAT|O_RDWR|O_TRUNC, 0); if (file == NULL) { int errsv = fixup_open_errno (errno); |