summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/vfs-wrap.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c
index bae304096c..491fa70e68 100644
--- a/source3/smbd/vfs-wrap.c
+++ b/source3/smbd/vfs-wrap.c
@@ -298,10 +298,10 @@ int vfswrap_chmod(connection_struct *conn, const char *path, mode_t mode)
int vfswrap_fchmod(files_struct *fsp, int fd, mode_t mode)
{
- int result;
+ int result;
struct vfs_ops *vfs_ops = &fsp->conn->vfs_ops;
- START_PROFILE(syscall_fchmod);
+ START_PROFILE(syscall_fchmod);
/*
* We need to do this due to the fact that the default POSIX ACL
@@ -319,9 +319,15 @@ int vfswrap_fchmod(files_struct *fsp, int fd, mode_t mode)
errno = saved_errno;
}
- result = fchmod(fd, mode);
- END_PROFILE(syscall_fchmod);
- return result;
+#if defined(HAVE_FCHMOD)
+ result = fchmod(fd, mode);
+#else
+ result = -1;
+ errno = ENOSYS;
+#endif
+
+ END_PROFILE(syscall_fchmod);
+ return result;
}
int vfswrap_chown(connection_struct *conn, const char *path, uid_t uid, gid_t gid)
@@ -336,6 +342,7 @@ int vfswrap_chown(connection_struct *conn, const char *path, uid_t uid, gid_t gi
int vfswrap_fchown(files_struct *fsp, int fd, uid_t uid, gid_t gid)
{
+#ifdef HAVE_FCHOWN
int result;
START_PROFILE(syscall_fchown);
@@ -343,6 +350,10 @@ int vfswrap_fchown(files_struct *fsp, int fd, uid_t uid, gid_t gid)
result = fchown(fd, uid, gid);
END_PROFILE(syscall_fchown);
return result;
+#else
+ errno = ENOSYS;
+ return -1;
+#endif
}
int vfswrap_chdir(connection_struct *conn, const char *path)