summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Bokovoy <ab@samba.org>2003-05-12 16:03:16 +0000
committerAlexander Bokovoy <ab@samba.org>2003-05-12 16:03:16 +0000
commitc9bfb7660bf60d32c51bfe368ce874770adb6f10 (patch)
tree8236542fe05d4ce2e9ba4f615daab2ed7bdf4f2b
parented1c7282e45b9b962bc2e77a544719bbc506f294 (diff)
downloadsamba-c9bfb7660bf60d32c51bfe368ce874770adb6f10.tar.gz
samba-c9bfb7660bf60d32c51bfe368ce874770adb6f10.tar.bz2
samba-c9bfb7660bf60d32c51bfe368ce874770adb6f10.zip
Eliminate NULL pointers from VFS interface. All hooks now really callable, producing either correct result or returning error if the feature isn't supported in the configuration
(This used to be commit af0a17349e6986eef2e2fd07b4b9f0bcd33bbe1f)
-rw-r--r--source3/smbd/open.c4
-rw-r--r--source3/smbd/vfs-wrap.c20
-rw-r--r--source3/smbd/vfs.c6
3 files changed, 17 insertions, 13 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 412a0dfc50..959439a1b2 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1146,7 +1146,7 @@ flags=0x%X flags2=0x%X mode=0%o returned %d\n",
* selected.
*/
- if (!file_existed && !def_acl && (conn->vfs.ops.fchmod_acl != NULL)) {
+ if (!file_existed && !def_acl) {
int saved_errno = errno; /* We might get ENOSYS in the next call.. */
@@ -1159,7 +1159,7 @@ flags=0x%X flags2=0x%X mode=0%o returned %d\n",
/* Attributes need changing. File already existed. */
- if (conn->vfs.ops.fchmod_acl != NULL) {
+ {
int saved_errno = errno; /* We might get ENOSYS in the next call.. */
ret = VFS_FCHMOD_ACL(fsp, fsp->fd, new_mode);
diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c
index dd8aad1170..e170effd4e 100644
--- a/source3/smbd/vfs-wrap.c
+++ b/source3/smbd/vfs-wrap.c
@@ -93,10 +93,8 @@ int vfswrap_mkdir(vfs_handle_struct *handle, connection_struct *conn, const char
* mess up any inherited ACL bits that were set. JRA.
*/
int saved_errno = errno; /* We may get ENOSYS */
- if (conn->vfs.ops.chmod_acl != NULL) {
- if ((VFS_CHMOD_ACL(conn, path, mode) == -1) && (errno == ENOSYS))
- errno = saved_errno;
- }
+ if ((VFS_CHMOD_ACL(conn, path, mode) == -1) && (errno == ENOSYS))
+ errno = saved_errno;
}
END_PROFILE(syscall_mkdir);
@@ -281,7 +279,7 @@ int vfswrap_chmod(vfs_handle_struct *handle, connection_struct *conn, const char
*/
- if (conn->vfs.ops.chmod_acl != NULL) {
+ {
int saved_errno = errno; /* We might get ENOSYS */
if ((result = VFS_CHMOD_ACL(conn, path, mode)) == 0) {
END_PROFILE(syscall_chmod);
@@ -309,7 +307,7 @@ int vfswrap_fchmod(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t
* group owner bits directly. JRA.
*/
- if (vfs_ops->ops.fchmod_acl != NULL) {
+ {
int saved_errno = errno; /* We might get ENOSYS */
if ((result = VFS_FCHMOD_ACL(fsp, fd, mode)) == 0) {
END_PROFILE(syscall_chmod);
@@ -621,22 +619,32 @@ BOOL vfswrap_set_nt_acl(vfs_handle_struct *handle, files_struct *fsp, const char
int vfswrap_chmod_acl(vfs_handle_struct *handle, connection_struct *conn, const char *name, mode_t mode)
{
+#ifdef HAVE_NO_ACL
+ errno = ENOSYS;
+ return -1;
+#else
int result;
START_PROFILE(chmod_acl);
result = chmod_acl(conn, name, mode);
END_PROFILE(chmod_acl);
return result;
+#endif
}
int vfswrap_fchmod_acl(vfs_handle_struct *handle, files_struct *fsp, int fd, mode_t mode)
{
+#ifdef HAVE_NO_ACL
+ errno = ENOSYS;
+ return -1;
+#else
int result;
START_PROFILE(fchmod_acl);
result = fchmod_acl(fsp, fd, mode);
END_PROFILE(fchmod_acl);
return result;
+#endif
}
int vfswrap_sys_acl_get_entry(vfs_handle_struct *handle, connection_struct *conn, SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p)
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 92342a673b..9f37622c8c 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -100,13 +100,9 @@ static struct vfs_ops default_vfs = {
vfswrap_set_nt_acl,
/* POSIX ACL operations. */
-#if defined(HAVE_NO_ACLS)
- NULL,
- NULL,
-#else
vfswrap_chmod_acl,
vfswrap_fchmod_acl,
-#endif
+
vfswrap_sys_acl_get_entry,
vfswrap_sys_acl_get_tag_type,
vfswrap_sys_acl_get_permset,