2 Unix SMB/CIFS implementation.
3 Wrap disk only vfs functions to sidestep dodgy compilers.
4 Copyright (C) Tim Potter 1998
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #define DBGC_CLASS DBGC_VFS
27 /* Check for NULL pointer parameters in vfswrap_* functions */
29 /* We don't want to have NULL function pointers lying around. Someone
30 is sure to try and execute them. These stubs are used to prevent
33 int vfswrap_dummy_connect(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *service
, const char *user
)
35 return 0; /* Return >= 0 for success */
38 void vfswrap_dummy_disconnect(vfs_handle_struct
*handle
, connection_struct
*conn
)
44 SMB_BIG_UINT
vfswrap_disk_free(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, BOOL small_query
, SMB_BIG_UINT
*bsize
,
45 SMB_BIG_UINT
*dfree
, SMB_BIG_UINT
*dsize
)
49 result
= sys_disk_free(path
, small_query
, bsize
, dfree
, dsize
);
53 int vfswrap_get_quota(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
, enum SMB_QUOTA_TYPE qtype
, unid_t id
, SMB_DISK_QUOTA
*qt
)
55 #ifdef HAVE_SYS_QUOTAS
58 START_PROFILE(syscall_get_quota
);
59 result
= sys_get_quota(conn
->connectpath
, qtype
, id
, qt
);
60 END_PROFILE(syscall_get_quota
);
68 int vfswrap_set_quota(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
, enum SMB_QUOTA_TYPE qtype
, unid_t id
, SMB_DISK_QUOTA
*qt
)
70 #ifdef HAVE_SYS_QUOTAS
73 START_PROFILE(syscall_set_quota
);
74 result
= sys_set_quota(conn
->connectpath
, qtype
, id
, qt
);
75 END_PROFILE(syscall_set_quota
);
83 int vfswrap_get_shadow_copy_data(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SHADOW_COPY_DATA
*shadow_copy_data
, BOOL labels
)
86 return -1; /* Not implemented. */
89 /* Directory operations */
91 SMB_STRUCT_DIR
*vfswrap_opendir(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *fname
, const char *mask
, uint32 attr
)
93 SMB_STRUCT_DIR
*result
;
95 START_PROFILE(syscall_opendir
);
96 result
= sys_opendir(fname
);
97 END_PROFILE(syscall_opendir
);
101 SMB_STRUCT_DIRENT
*vfswrap_readdir(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
)
103 SMB_STRUCT_DIRENT
*result
;
105 START_PROFILE(syscall_readdir
);
106 result
= sys_readdir(dirp
);
107 END_PROFILE(syscall_readdir
);
111 void vfswrap_seekdir(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
, long offset
)
113 START_PROFILE(syscall_seekdir
);
114 sys_seekdir(dirp
, offset
);
115 END_PROFILE(syscall_seekdir
);
118 long vfswrap_telldir(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
)
121 START_PROFILE(syscall_telldir
);
122 result
= sys_telldir(dirp
);
123 END_PROFILE(syscall_telldir
);
127 void vfswrap_rewinddir(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
)
129 START_PROFILE(syscall_rewinddir
);
131 END_PROFILE(syscall_rewinddir
);
134 int vfswrap_mkdir(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, mode_t mode
)
137 BOOL has_dacl
= False
;
139 START_PROFILE(syscall_mkdir
);
141 if (lp_inherit_acls(SNUM(conn
)) && (has_dacl
= directory_has_default_acl(conn
, parent_dirname(path
))))
144 result
= mkdir(path
, mode
);
146 if (result
== 0 && !has_dacl
) {
148 * We need to do this as the default behavior of POSIX ACLs
149 * is to set the mask to be the requested group permission
150 * bits, not the group permission bits to be the requested
151 * group permission bits. This is not what we want, as it will
152 * mess up any inherited ACL bits that were set. JRA.
154 int saved_errno
= errno
; /* We may get ENOSYS */
155 if ((SMB_VFS_CHMOD_ACL(conn
, path
, mode
) == -1) && (errno
== ENOSYS
))
159 END_PROFILE(syscall_mkdir
);
163 int vfswrap_rmdir(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
)
167 START_PROFILE(syscall_rmdir
);
168 result
= rmdir(path
);
169 END_PROFILE(syscall_rmdir
);
173 int vfswrap_closedir(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_STRUCT_DIR
*dirp
)
177 START_PROFILE(syscall_closedir
);
178 result
= sys_closedir(dirp
);
179 END_PROFILE(syscall_closedir
);
183 /* File operations */
185 int vfswrap_open(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *fname
, int flags
, mode_t mode
)
189 START_PROFILE(syscall_open
);
190 result
= sys_open(fname
, flags
, mode
);
191 END_PROFILE(syscall_open
);
195 int vfswrap_close(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
)
199 START_PROFILE(syscall_close
);
202 END_PROFILE(syscall_close
);
206 ssize_t
vfswrap_read(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, void *data
, size_t n
)
210 START_PROFILE_BYTES(syscall_read
, n
);
211 result
= sys_read(fd
, data
, n
);
212 END_PROFILE(syscall_read
);
216 ssize_t
vfswrap_pread(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, void *data
,
217 size_t n
, SMB_OFF_T offset
)
221 #if defined(HAVE_PREAD) || defined(HAVE_PREAD64)
222 START_PROFILE_BYTES(syscall_pread
, n
);
223 result
= sys_pread(fd
, data
, n
, offset
);
224 END_PROFILE(syscall_pread
);
226 if (result
== -1 && errno
== ESPIPE
) {
227 /* Maintain the fiction that pipes can be seeked (sought?) on. */
228 result
= SMB_VFS_READ(fsp
, fd
, data
, n
);
232 #else /* HAVE_PREAD */
236 curr
= SMB_VFS_LSEEK(fsp
, fd
, 0, SEEK_CUR
);
237 if (curr
== -1 && errno
== ESPIPE
) {
238 /* Maintain the fiction that pipes can be seeked (sought?) on. */
239 result
= SMB_VFS_READ(fsp
, fd
, data
, n
);
244 if (SMB_VFS_LSEEK(fsp
, fd
, offset
, SEEK_SET
) == -1) {
249 result
= SMB_VFS_READ(fsp
, fd
, data
, n
);
252 SMB_VFS_LSEEK(fsp
, fd
, curr
, SEEK_SET
);
255 #endif /* HAVE_PREAD */
260 ssize_t
vfswrap_write(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, const void *data
, size_t n
)
264 START_PROFILE_BYTES(syscall_write
, n
);
265 result
= sys_write(fd
, data
, n
);
266 END_PROFILE(syscall_write
);
270 ssize_t
vfswrap_pwrite(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, const void *data
,
271 size_t n
, SMB_OFF_T offset
)
275 #if defined(HAVE_PWRITE) || defined(HAVE_PRWITE64)
276 START_PROFILE_BYTES(syscall_pwrite
, n
);
277 result
= sys_pwrite(fd
, data
, n
, offset
);
278 END_PROFILE(syscall_pwrite
);
280 if (result
== -1 && errno
== ESPIPE
) {
281 /* Maintain the fiction that pipes can be sought on. */
282 result
= SMB_VFS_WRITE(fsp
, fd
, data
, n
);
285 #else /* HAVE_PWRITE */
289 curr
= SMB_VFS_LSEEK(fsp
, fd
, 0, SEEK_CUR
);
294 if (SMB_VFS_LSEEK(fsp
, fd
, offset
, SEEK_SET
) == -1) {
298 result
= SMB_VFS_WRITE(fsp
, fd
, data
, n
);
301 SMB_VFS_LSEEK(fsp
, fd
, curr
, SEEK_SET
);
304 #endif /* HAVE_PWRITE */
309 SMB_OFF_T
vfswrap_lseek(vfs_handle_struct
*handle
, files_struct
*fsp
, int filedes
, SMB_OFF_T offset
, int whence
)
311 SMB_OFF_T result
= 0;
313 START_PROFILE(syscall_lseek
);
315 /* Cope with 'stat' file opens. */
317 result
= sys_lseek(filedes
, offset
, whence
);
320 * We want to maintain the fiction that we can seek
321 * on a fifo for file system purposes. This allows
322 * people to set up UNIX fifo's that feed data to Windows
326 if((result
== -1) && (errno
== ESPIPE
)) {
331 END_PROFILE(syscall_lseek
);
335 ssize_t
vfswrap_sendfile(vfs_handle_struct
*handle
, int tofd
, files_struct
*fsp
, int fromfd
, const DATA_BLOB
*hdr
,
336 SMB_OFF_T offset
, size_t n
)
340 START_PROFILE_BYTES(syscall_sendfile
, n
);
341 result
= sys_sendfile(tofd
, fromfd
, hdr
, offset
, n
);
342 END_PROFILE(syscall_sendfile
);
346 /*********************************************************
347 For rename across filesystems Patch from Warren Birnbaum
348 <warrenb@hpcvscdp.cv.hp.com>
349 **********************************************************/
351 static int copy_reg(const char *source
, const char *dest
)
353 SMB_STRUCT_STAT source_stats
;
358 if (sys_lstat (source
, &source_stats
) == -1)
361 if (!S_ISREG (source_stats
.st_mode
))
364 if((ifd
= sys_open (source
, O_RDONLY
, 0)) < 0)
367 if (unlink (dest
) && errno
!= ENOENT
)
371 if((ofd
= sys_open (dest
, O_WRONLY
| O_CREAT
| O_TRUNC
| O_NOFOLLOW
, 0600)) < 0 )
373 if((ofd
= sys_open (dest
, O_WRONLY
| O_CREAT
| O_TRUNC
, 0600)) < 0 )
377 if (transfer_file(ifd
, ofd
, (size_t)-1) == -1)
381 * Try to preserve ownership. For non-root it might fail, but that's ok.
382 * But root probably wants to know, e.g. if NFS disallows it.
386 if ((fchown(ofd
, source_stats
.st_uid
, source_stats
.st_gid
) == -1) && (errno
!= EPERM
))
388 if ((chown(dest
, source_stats
.st_uid
, source_stats
.st_gid
) == -1) && (errno
!= EPERM
))
393 * fchown turns off set[ug]id bits for non-root,
394 * so do the chmod last.
397 #if defined(HAVE_FCHMOD)
398 if (fchmod (ofd
, source_stats
.st_mode
& 07777))
400 if (chmod (dest
, source_stats
.st_mode
& 07777))
404 if (close (ifd
) == -1)
407 if (close (ofd
) == -1)
410 /* Try to copy the old file's modtime and access time. */
414 tv
.actime
= source_stats
.st_atime
;
415 tv
.modtime
= source_stats
.st_mtime
;
419 if (unlink (source
) == -1)
435 int vfswrap_rename(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *oldname
, const char *newname
)
439 START_PROFILE(syscall_rename
);
440 result
= rename(oldname
, newname
);
441 if (errno
== EXDEV
) {
442 /* Rename across filesystems needed. */
443 result
= copy_reg(oldname
, newname
);
446 END_PROFILE(syscall_rename
);
450 int vfswrap_fsync(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
)
455 START_PROFILE(syscall_fsync
);
457 END_PROFILE(syscall_fsync
);
464 int vfswrap_stat(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *fname
, SMB_STRUCT_STAT
*sbuf
)
468 START_PROFILE(syscall_stat
);
469 result
= sys_stat(fname
, sbuf
);
470 END_PROFILE(syscall_stat
);
474 int vfswrap_fstat(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, SMB_STRUCT_STAT
*sbuf
)
478 START_PROFILE(syscall_fstat
);
479 result
= sys_fstat(fd
, sbuf
);
480 END_PROFILE(syscall_fstat
);
484 int vfswrap_lstat(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, SMB_STRUCT_STAT
*sbuf
)
488 START_PROFILE(syscall_lstat
);
489 result
= sys_lstat(path
, sbuf
);
490 END_PROFILE(syscall_lstat
);
494 int vfswrap_unlink(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
)
498 START_PROFILE(syscall_unlink
);
499 result
= unlink(path
);
500 END_PROFILE(syscall_unlink
);
504 int vfswrap_chmod(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, mode_t mode
)
508 START_PROFILE(syscall_chmod
);
511 * We need to do this due to the fact that the default POSIX ACL
512 * chmod modifies the ACL *mask* for the group owner, not the
513 * group owner bits directly. JRA.
518 int saved_errno
= errno
; /* We might get ENOSYS */
519 if ((result
= SMB_VFS_CHMOD_ACL(conn
, path
, mode
)) == 0) {
520 END_PROFILE(syscall_chmod
);
523 /* Error - return the old errno. */
527 result
= chmod(path
, mode
);
528 END_PROFILE(syscall_chmod
);
532 int vfswrap_fchmod(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, mode_t mode
)
536 START_PROFILE(syscall_fchmod
);
539 * We need to do this due to the fact that the default POSIX ACL
540 * chmod modifies the ACL *mask* for the group owner, not the
541 * group owner bits directly. JRA.
545 int saved_errno
= errno
; /* We might get ENOSYS */
546 if ((result
= SMB_VFS_FCHMOD_ACL(fsp
, fd
, mode
)) == 0) {
547 END_PROFILE(syscall_chmod
);
550 /* Error - return the old errno. */
554 #if defined(HAVE_FCHMOD)
555 result
= fchmod(fd
, mode
);
561 END_PROFILE(syscall_fchmod
);
565 int vfswrap_chown(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, uid_t uid
, gid_t gid
)
569 START_PROFILE(syscall_chown
);
570 result
= sys_chown(path
, uid
, gid
);
571 END_PROFILE(syscall_chown
);
575 int vfswrap_fchown(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, uid_t uid
, gid_t gid
)
580 START_PROFILE(syscall_fchown
);
581 result
= fchown(fd
, uid
, gid
);
582 END_PROFILE(syscall_fchown
);
590 int vfswrap_chdir(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
)
594 START_PROFILE(syscall_chdir
);
595 result
= chdir(path
);
596 END_PROFILE(syscall_chdir
);
600 char *vfswrap_getwd(vfs_handle_struct
*handle
, connection_struct
*conn
, char *path
)
604 START_PROFILE(syscall_getwd
);
605 result
= sys_getwd(path
);
606 END_PROFILE(syscall_getwd
);
610 int vfswrap_utime(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, struct utimbuf
*times
)
614 START_PROFILE(syscall_utime
);
615 result
= utime(path
, times
);
616 END_PROFILE(syscall_utime
);
620 /*********************************************************************
621 A version of ftruncate that will write the space on disk if strict
623 **********************************************************************/
625 static int strict_allocate_ftruncate(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, SMB_OFF_T len
)
628 SMB_OFF_T currpos
= SMB_VFS_LSEEK(fsp
, fd
, 0, SEEK_CUR
);
629 unsigned char zero_space
[4096];
630 SMB_OFF_T space_to_write
;
635 if (SMB_VFS_FSTAT(fsp
, fd
, &st
) == -1)
638 space_to_write
= len
- st
.st_size
;
641 if (S_ISFIFO(st
.st_mode
))
645 if (st
.st_size
== len
)
648 /* Shrink - just ftruncate. */
649 if (st
.st_size
> len
)
650 return sys_ftruncate(fd
, len
);
652 /* Write out the real space on disk. */
653 if (SMB_VFS_LSEEK(fsp
, fd
, st
.st_size
, SEEK_SET
) != st
.st_size
)
656 space_to_write
= len
- st
.st_size
;
658 memset(zero_space
, '\0', sizeof(zero_space
));
659 while ( space_to_write
> 0) {
661 SMB_OFF_T current_len_to_write
= MIN(sizeof(zero_space
),space_to_write
);
663 retlen
= SMB_VFS_WRITE(fsp
,fsp
->fh
->fd
,(char *)zero_space
,current_len_to_write
);
667 space_to_write
-= retlen
;
670 /* Seek to where we were */
671 if (SMB_VFS_LSEEK(fsp
, fd
, currpos
, SEEK_SET
) != currpos
)
677 int vfswrap_ftruncate(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, SMB_OFF_T len
)
684 START_PROFILE(syscall_ftruncate
);
686 if (lp_strict_allocate(SNUM(fsp
->conn
))) {
687 result
= strict_allocate_ftruncate(handle
, fsp
, fd
, len
);
688 END_PROFILE(syscall_ftruncate
);
692 /* we used to just check HAVE_FTRUNCATE_EXTEND and only use
693 sys_ftruncate if the system supports it. Then I discovered that
694 you can have some filesystems that support ftruncate
695 expansion and some that don't! On Linux fat can't do
696 ftruncate extend but ext2 can. */
698 result
= sys_ftruncate(fd
, len
);
702 /* According to W. R. Stevens advanced UNIX prog. Pure 4.3 BSD cannot
703 extend a file with ftruncate. Provide alternate implementation
705 currpos
= SMB_VFS_LSEEK(fsp
, fd
, 0, SEEK_CUR
);
710 /* Do an fstat to see if the file is longer than the requested
711 size in which case the ftruncate above should have
712 succeeded or shorter, in which case seek to len - 1 and
713 write 1 byte of zero */
714 if (SMB_VFS_FSTAT(fsp
, fd
, &st
) == -1) {
719 if (S_ISFIFO(st
.st_mode
)) {
725 if (st
.st_size
== len
) {
730 if (st
.st_size
> len
) {
731 /* the sys_ftruncate should have worked */
735 if (SMB_VFS_LSEEK(fsp
, fd
, len
-1, SEEK_SET
) != len
-1)
738 if (SMB_VFS_WRITE(fsp
, fd
, &c
, 1)!=1)
741 /* Seek to where we were */
742 if (SMB_VFS_LSEEK(fsp
, fd
, currpos
, SEEK_SET
) != currpos
)
748 END_PROFILE(syscall_ftruncate
);
752 BOOL
vfswrap_lock(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, int op
, SMB_OFF_T offset
, SMB_OFF_T count
, int type
)
756 START_PROFILE(syscall_fcntl_lock
);
757 result
= fcntl_lock(fd
, op
, offset
, count
,type
);
758 END_PROFILE(syscall_fcntl_lock
);
762 int vfswrap_symlink(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *oldpath
, const char *newpath
)
766 START_PROFILE(syscall_symlink
);
767 result
= sys_symlink(oldpath
, newpath
);
768 END_PROFILE(syscall_symlink
);
772 int vfswrap_readlink(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, char *buf
, size_t bufsiz
)
776 START_PROFILE(syscall_readlink
);
777 result
= sys_readlink(path
, buf
, bufsiz
);
778 END_PROFILE(syscall_readlink
);
782 int vfswrap_link(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *oldpath
, const char *newpath
)
786 START_PROFILE(syscall_link
);
787 result
= sys_link(oldpath
, newpath
);
788 END_PROFILE(syscall_link
);
792 int vfswrap_mknod(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *pathname
, mode_t mode
, SMB_DEV_T dev
)
796 START_PROFILE(syscall_mknod
);
797 result
= sys_mknod(pathname
, mode
, dev
);
798 END_PROFILE(syscall_mknod
);
802 char *vfswrap_realpath(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
, char *resolved_path
)
806 START_PROFILE(syscall_realpath
);
807 result
= sys_realpath(path
, resolved_path
);
808 END_PROFILE(syscall_realpath
);
812 size_t vfswrap_fget_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, uint32 security_info
, SEC_DESC
**ppdesc
)
816 START_PROFILE(fget_nt_acl
);
817 result
= get_nt_acl(fsp
, security_info
, ppdesc
);
818 END_PROFILE(fget_nt_acl
);
822 size_t vfswrap_get_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
, const char *name
, uint32 security_info
, SEC_DESC
**ppdesc
)
826 START_PROFILE(get_nt_acl
);
827 result
= get_nt_acl(fsp
, security_info
, ppdesc
);
828 END_PROFILE(get_nt_acl
);
832 BOOL
vfswrap_fset_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, uint32 security_info_sent
, SEC_DESC
*psd
)
836 START_PROFILE(fset_nt_acl
);
837 result
= set_nt_acl(fsp
, security_info_sent
, psd
);
838 END_PROFILE(fset_nt_acl
);
842 BOOL
vfswrap_set_nt_acl(vfs_handle_struct
*handle
, files_struct
*fsp
, const char *name
, uint32 security_info_sent
, SEC_DESC
*psd
)
846 START_PROFILE(set_nt_acl
);
847 result
= set_nt_acl(fsp
, security_info_sent
, psd
);
848 END_PROFILE(set_nt_acl
);
852 int vfswrap_chmod_acl(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *name
, mode_t mode
)
860 START_PROFILE(chmod_acl
);
861 result
= chmod_acl(conn
, name
, mode
);
862 END_PROFILE(chmod_acl
);
867 int vfswrap_fchmod_acl(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, mode_t mode
)
875 START_PROFILE(fchmod_acl
);
876 result
= fchmod_acl(fsp
, fd
, mode
);
877 END_PROFILE(fchmod_acl
);
882 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
)
884 return sys_acl_get_entry(theacl
, entry_id
, entry_p
);
887 int vfswrap_sys_acl_get_tag_type(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry_d
, SMB_ACL_TAG_T
*tag_type_p
)
889 return sys_acl_get_tag_type(entry_d
, tag_type_p
);
892 int vfswrap_sys_acl_get_permset(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry_d
, SMB_ACL_PERMSET_T
*permset_p
)
894 return sys_acl_get_permset(entry_d
, permset_p
);
897 void * vfswrap_sys_acl_get_qualifier(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry_d
)
899 return sys_acl_get_qualifier(entry_d
);
902 SMB_ACL_T
vfswrap_sys_acl_get_file(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path_p
, SMB_ACL_TYPE_T type
)
904 return sys_acl_get_file(path_p
, type
);
907 SMB_ACL_T
vfswrap_sys_acl_get_fd(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
)
909 return sys_acl_get_fd(fd
);
912 int vfswrap_sys_acl_clear_perms(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_PERMSET_T permset
)
914 return sys_acl_clear_perms(permset
);
917 int vfswrap_sys_acl_add_perm(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_PERMSET_T permset
, SMB_ACL_PERM_T perm
)
919 return sys_acl_add_perm(permset
, perm
);
922 char * vfswrap_sys_acl_to_text(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_T theacl
, ssize_t
*plen
)
924 return sys_acl_to_text(theacl
, plen
);
927 SMB_ACL_T
vfswrap_sys_acl_init(vfs_handle_struct
*handle
, connection_struct
*conn
, int count
)
929 return sys_acl_init(count
);
932 int vfswrap_sys_acl_create_entry(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_T
*pacl
, SMB_ACL_ENTRY_T
*pentry
)
934 return sys_acl_create_entry(pacl
, pentry
);
937 int vfswrap_sys_acl_set_tag_type(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry
, SMB_ACL_TAG_T tagtype
)
939 return sys_acl_set_tag_type(entry
, tagtype
);
942 int vfswrap_sys_acl_set_qualifier(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry
, void *qual
)
944 return sys_acl_set_qualifier(entry
, qual
);
947 int vfswrap_sys_acl_set_permset(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_ENTRY_T entry
, SMB_ACL_PERMSET_T permset
)
949 return sys_acl_set_permset(entry
, permset
);
952 int vfswrap_sys_acl_valid(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_T theacl
)
954 return sys_acl_valid(theacl
);
957 int vfswrap_sys_acl_set_file(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *name
, SMB_ACL_TYPE_T acltype
, SMB_ACL_T theacl
)
959 return sys_acl_set_file(name
, acltype
, theacl
);
962 int vfswrap_sys_acl_set_fd(vfs_handle_struct
*handle
, files_struct
*fsp
, int fd
, SMB_ACL_T theacl
)
964 return sys_acl_set_fd(fd
, theacl
);
967 int vfswrap_sys_acl_delete_def_file(vfs_handle_struct
*handle
, connection_struct
*conn
, const char *path
)
969 return sys_acl_delete_def_file(path
);
972 int vfswrap_sys_acl_get_perm(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_PERMSET_T permset
, SMB_ACL_PERM_T perm
)
974 return sys_acl_get_perm(permset
, perm
);
977 int vfswrap_sys_acl_free_text(vfs_handle_struct
*handle
, connection_struct
*conn
, char *text
)
979 return sys_acl_free_text(text
);
982 int vfswrap_sys_acl_free_acl(vfs_handle_struct
*handle
, connection_struct
*conn
, SMB_ACL_T posix_acl
)
984 return sys_acl_free_acl(posix_acl
);
987 int vfswrap_sys_acl_free_qualifier(vfs_handle_struct
*handle
, connection_struct
*conn
, void *qualifier
, SMB_ACL_TAG_T tagtype
)
989 return sys_acl_free_qualifier(qualifier
, tagtype
);
992 /****************************************************************
993 Extended attribute operations.
994 *****************************************************************/
996 ssize_t
vfswrap_getxattr(struct vfs_handle_struct
*handle
,struct connection_struct
*conn
,const char *path
, const char *name
, void *value
, size_t size
)
998 return sys_getxattr(path
, name
, value
, size
);
1001 ssize_t
vfswrap_lgetxattr(struct vfs_handle_struct
*handle
,struct connection_struct
*conn
,const char *path
, const char *name
, void *value
, size_t size
)
1003 return sys_lgetxattr(path
, name
, value
, size
);
1006 ssize_t
vfswrap_fgetxattr(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
,int fd
, const char *name
, void *value
, size_t size
)
1008 return sys_fgetxattr(fd
, name
, value
, size
);
1011 ssize_t
vfswrap_listxattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, char *list
, size_t size
)
1013 return sys_listxattr(path
, list
, size
);
1016 ssize_t
vfswrap_llistxattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, char *list
, size_t size
)
1018 return sys_llistxattr(path
, list
, size
);
1021 ssize_t
vfswrap_flistxattr(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
,int fd
, char *list
, size_t size
)
1023 return sys_flistxattr(fd
, list
, size
);
1026 int vfswrap_removexattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, const char *name
)
1028 return sys_removexattr(path
, name
);
1031 int vfswrap_lremovexattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, const char *name
)
1033 return sys_lremovexattr(path
, name
);
1036 int vfswrap_fremovexattr(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
,int fd
, const char *name
)
1038 return sys_fremovexattr(fd
, name
);
1041 int vfswrap_setxattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, const char *name
, const void *value
, size_t size
, int flags
)
1043 return sys_setxattr(path
, name
, value
, size
, flags
);
1046 int vfswrap_lsetxattr(struct vfs_handle_struct
*handle
, struct connection_struct
*conn
,const char *path
, const char *name
, const void *value
, size_t size
, int flags
)
1048 return sys_lsetxattr(path
, name
, value
, size
, flags
);
1051 int vfswrap_fsetxattr(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
,int fd
, const char *name
, const void *value
, size_t size
, int flags
)
1053 return sys_fsetxattr(fd
, name
, value
, size
, flags
);
1056 int vfswrap_aio_read(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1058 return sys_aio_read(aiocb
);
1061 int vfswrap_aio_write(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1063 return sys_aio_write(aiocb
);
1066 ssize_t
vfswrap_aio_return(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1068 return sys_aio_return(aiocb
);
1071 int vfswrap_aio_cancel(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int fd
, SMB_STRUCT_AIOCB
*aiocb
)
1073 return sys_aio_cancel(fd
, aiocb
);
1076 int vfswrap_aio_error(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, SMB_STRUCT_AIOCB
*aiocb
)
1078 return sys_aio_error(aiocb
);
1081 int vfswrap_aio_fsync(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, int op
, SMB_STRUCT_AIOCB
*aiocb
)
1083 return sys_aio_fsync(op
, aiocb
);
1086 int vfswrap_aio_suspend(struct vfs_handle_struct
*handle
, struct files_struct
*fsp
, const SMB_STRUCT_AIOCB
* const aiocb
[], int n
, const struct timespec
*timeout
)
1088 return sys_aio_suspend(aiocb
, n
, timeout
);