The branch, master has been updated via 8e43af0 s3: VFS: Change SMB_VFS_SYMLINK to use const struct smb_filename * instead of const char *. via 6ae2d86 s3: VFS: Change SMB_VFS_READLINK to use const struct smb_filename * instead of const char *. via 4ad426a s3: VFS: Change SMB_VFS_STATVFS to use const struct smb_filename * instead of const char *. via fc92d45 s3: VFS: Change SMB_VFS_LINK to use const struct smb_filename * instead of const char *. via 0da7641 s3: VFS: Change SMB_VFS_GET_QUOTA to use const struct smb_filename * instead of const char *. via 0037815 s3: VFS: Change SMB_VFS_DISK_FREE to use const struct smb_filename * instead of const char *. via 730de8e s3: VFS: Change SMB_VFS_CHFLAGS to use const struct smb_filename * instead of const char *. via c3d4521 s3: VFS: Change SMB_VFS_MKNOD to use const struct smb_filename * instead of const char *. via fed54ca s3: VFS: Remove old traces of smb_vfs_call_llistxattr(). from 156fe6e s4:libcli/smb_composite: make the additional gensec_update steps async
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 8e43af0f81e644411f5a719860383373b210cc8b Author: Jeremy Allison <j...@samba.org> Date: Thu Jun 8 16:25:58 2017 -0700 s3: VFS: Change SMB_VFS_SYMLINK to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Sun Jun 18 07:03:18 CEST 2017 on sn-devel-144 commit 6ae2d86b9ccc0ebe73dc911a1d5f06bd53613acf Author: Jeremy Allison <j...@samba.org> Date: Wed Jun 7 15:03:37 2017 -0700 s3: VFS: Change SMB_VFS_READLINK to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit 4ad426a7c6c9fffa41df5bcafd9f420c257b6805 Author: Jeremy Allison <j...@samba.org> Date: Fri Jun 2 15:26:06 2017 -0700 s3: VFS: Change SMB_VFS_STATVFS to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit fc92d451cf3162807e2493c62fa7617863adf2ba Author: Jeremy Allison <j...@samba.org> Date: Fri Jun 2 14:21:54 2017 -0700 s3: VFS: Change SMB_VFS_LINK to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit 0da76414fdc6a0aacea6282a76b384a702615408 Author: Jeremy Allison <j...@samba.org> Date: Thu Jun 1 11:45:25 2017 -0700 s3: VFS: Change SMB_VFS_GET_QUOTA to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit 0037815453fa6141d3c0325c3ab197326324ab53 Author: Jeremy Allison <j...@samba.org> Date: Tue May 23 10:40:47 2017 -0700 s3: VFS: Change SMB_VFS_DISK_FREE to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit 730de8e091879a53493a0c96b542603cd52174a2 Author: Jeremy Allison <j...@samba.org> Date: Fri May 19 16:15:55 2017 -0700 s3: VFS: Change SMB_VFS_CHFLAGS to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit c3d45216dd7df2a084b7d1af63f207db0c87b53d Author: Jeremy Allison <j...@samba.org> Date: Fri May 19 15:01:52 2017 -0700 s3: VFS: Change SMB_VFS_MKNOD to use const struct smb_filename * instead of const char *. We need to migrate all pathname based VFS calls to use a struct to finish modernising the VFS with extra timestamp and flags parameters. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> commit fed54ca01d4dc7796edb9ab337b3529416ce1424 Author: Jeremy Allison <j...@samba.org> Date: Thu Jun 1 10:51:45 2017 -0700 s3: VFS: Remove old traces of smb_vfs_call_llistxattr(). This call doesn't exist anymore. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Richard Sharpe <realrichardsha...@gmail.com> ----------------------------------------------------------------------- Summary of changes: examples/VFS/skel_opaque.c | 44 +++--- examples/VFS/skel_transparent.c | 60 +++++---- source3/include/vfs.h | 102 ++++++++++---- source3/include/vfs_macros.h | 48 +++---- source3/modules/vfs_cap.c | 196 +++++++++++++++++++++++---- source3/modules/vfs_catia.c | 27 +++- source3/modules/vfs_ceph.c | 84 +++++++----- source3/modules/vfs_default.c | 59 ++++++--- source3/modules/vfs_default_quota.c | 17 ++- source3/modules/vfs_expand_msdfs.c | 6 +- source3/modules/vfs_fake_dfq.c | 31 +++-- source3/modules/vfs_full_audit.c | 65 +++++---- source3/modules/vfs_glusterfs.c | 54 +++++--- source3/modules/vfs_gpfs.c | 35 +++-- source3/modules/vfs_media_harmony.c | 187 +++++++++++--------------- source3/modules/vfs_shadow_copy2.c | 184 +++++++++++++++++-------- source3/modules/vfs_snapper.c | 258 ++++++++++++++++++++++++------------ source3/modules/vfs_syncops.c | 68 +++++----- source3/modules/vfs_time_audit.c | 71 ++++++---- source3/modules/vfs_unityed_media.c | 139 +++++++++---------- source3/smbd/dfree.c | 2 +- source3/smbd/msdfs.c | 99 +++++++------- source3/smbd/ntquotas.c | 20 ++- source3/smbd/open.c | 2 +- source3/smbd/proto.h | 3 +- source3/smbd/quotas.c | 10 +- source3/smbd/trans2.c | 31 ++--- source3/smbd/vfs.c | 61 +++++---- source3/torture/cmd_vfs.c | 59 ++++++++- 29 files changed, 1292 insertions(+), 730 deletions(-) Changeset truncated at 500 lines: diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c index c5d4359..d5c468e 100644 --- a/examples/VFS/skel_opaque.c +++ b/examples/VFS/skel_opaque.c @@ -44,9 +44,11 @@ static void skel_disconnect(vfs_handle_struct *handle) ; } -static uint64_t skel_disk_free(vfs_handle_struct *handle, const char *path, - uint64_t *bsize, - uint64_t *dfree, uint64_t *dsize) +static uint64_t skel_disk_free(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize) { *bsize = 0; *dfree = 0; @@ -54,9 +56,11 @@ static uint64_t skel_disk_free(vfs_handle_struct *handle, const char *path, return 0; } -static int skel_get_quota(vfs_handle_struct *handle, const char *path, - enum SMB_QUOTA_TYPE qtype, unid_t id, - SMB_DISK_QUOTA *dq) +static int skel_get_quota(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + enum SMB_QUOTA_TYPE qtype, + unid_t id, + SMB_DISK_QUOTA *dq) { errno = ENOSYS; return -1; @@ -79,7 +83,8 @@ static int skel_get_shadow_copy_data(vfs_handle_struct *handle, } static int skel_statvfs(struct vfs_handle_struct *handle, - const char *path, struct vfs_statvfs_struct *statbuf) + const struct smb_filename *smb_fname, + struct vfs_statvfs_struct *statbuf) { errno = ENOSYS; return -1; @@ -471,29 +476,35 @@ static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp, return false; } -static int skel_symlink(vfs_handle_struct *handle, const char *oldpath, - const char *newpath) +static int skel_symlink(vfs_handle_struct *handle, + const char *link_contents, + const struct smb_filename *new_smb_fname) { errno = ENOSYS; return -1; } -static int skel_vfs_readlink(vfs_handle_struct *handle, const char *path, - char *buf, size_t bufsiz) +static int skel_vfs_readlink(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + char *buf, + size_t bufsiz) { errno = ENOSYS; return -1; } -static int skel_link(vfs_handle_struct *handle, const char *oldpath, - const char *newpath) +static int skel_link(vfs_handle_struct *handle, + const struct smb_filename *old_smb_fname, + const struct smb_filename *new_smb_fname) { errno = ENOSYS; return -1; } -static int skel_mknod(vfs_handle_struct *handle, const char *path, mode_t mode, - SMB_DEV_T dev) +static int skel_mknod(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + mode_t mode, + SMB_DEV_T dev) { errno = ENOSYS; return -1; @@ -505,7 +516,8 @@ static char *skel_realpath(vfs_handle_struct *handle, const char *path) return NULL; } -static int skel_chflags(vfs_handle_struct *handle, const char *path, +static int skel_chflags(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, uint flags) { errno = ENOSYS; diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c index 91ea5c6..9387276 100644 --- a/examples/VFS/skel_transparent.c +++ b/examples/VFS/skel_transparent.c @@ -48,18 +48,22 @@ static void skel_disconnect(vfs_handle_struct *handle) SMB_VFS_NEXT_DISCONNECT(handle); } -static uint64_t skel_disk_free(vfs_handle_struct *handle, const char *path, - uint64_t *bsize, - uint64_t *dfree, uint64_t *dsize) +static uint64_t skel_disk_free(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize) { - return SMB_VFS_NEXT_DISK_FREE(handle, path, bsize, dfree, dsize); + return SMB_VFS_NEXT_DISK_FREE(handle, smb_fname, bsize, dfree, dsize); } -static int skel_get_quota(vfs_handle_struct *handle, const char *path, - enum SMB_QUOTA_TYPE qtype, unid_t id, - SMB_DISK_QUOTA *dq) +static int skel_get_quota(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + enum SMB_QUOTA_TYPE qtype, + unid_t id, + SMB_DISK_QUOTA *dq) { - return SMB_VFS_NEXT_GET_QUOTA(handle, path, qtype, id, dq); + return SMB_VFS_NEXT_GET_QUOTA(handle, smb_fname, qtype, id, dq); } static int skel_set_quota(vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, @@ -77,10 +81,11 @@ static int skel_get_shadow_copy_data(vfs_handle_struct *handle, labels); } -static int skel_statvfs(struct vfs_handle_struct *handle, const char *path, +static int skel_statvfs(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, struct vfs_statvfs_struct *statbuf) { - return SMB_VFS_NEXT_STATVFS(handle, path, statbuf); + return SMB_VFS_NEXT_STATVFS(handle, smb_fname, statbuf); } static uint32_t skel_fs_capabilities(struct vfs_handle_struct *handle, @@ -565,28 +570,34 @@ static bool skel_getlock(vfs_handle_struct *handle, files_struct *fsp, return SMB_VFS_NEXT_GETLOCK(handle, fsp, poffset, pcount, ptype, ppid); } -static int skel_symlink(vfs_handle_struct *handle, const char *oldpath, - const char *newpath) +static int skel_symlink(vfs_handle_struct *handle, + const char *link_contents, + const struct smb_filename *new_smb_fname) { - return SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath); + return SMB_VFS_NEXT_SYMLINK(handle, link_contents, new_smb_fname); } -static int skel_vfs_readlink(vfs_handle_struct *handle, const char *path, - char *buf, size_t bufsiz) +static int skel_vfs_readlink(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + char *buf, + size_t bufsiz) { - return SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz); + return SMB_VFS_NEXT_READLINK(handle, smb_fname, buf, bufsiz); } -static int skel_link(vfs_handle_struct *handle, const char *oldpath, - const char *newpath) +static int skel_link(vfs_handle_struct *handle, + const struct smb_filename *old_smb_fname, + const struct smb_filename *new_smb_fname) { - return SMB_VFS_NEXT_LINK(handle, oldpath, newpath); + return SMB_VFS_NEXT_LINK(handle, old_smb_fname, new_smb_fname); } -static int skel_mknod(vfs_handle_struct *handle, const char *path, mode_t mode, - SMB_DEV_T dev) +static int skel_mknod(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + mode_t mode, + SMB_DEV_T dev) { - return SMB_VFS_NEXT_MKNOD(handle, path, mode, dev); + return SMB_VFS_NEXT_MKNOD(handle, smb_fname, mode, dev); } static char *skel_realpath(vfs_handle_struct *handle, const char *path) @@ -594,10 +605,11 @@ static char *skel_realpath(vfs_handle_struct *handle, const char *path) return SMB_VFS_NEXT_REALPATH(handle, path); } -static int skel_chflags(vfs_handle_struct *handle, const char *path, +static int skel_chflags(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, uint flags) { - return SMB_VFS_NEXT_CHFLAGS(handle, path, flags); + return SMB_VFS_NEXT_CHFLAGS(handle, smb_fname, flags); } static struct file_id skel_file_id_create(vfs_handle_struct *handle, diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 30002bd..db555f2 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -213,6 +213,21 @@ to const struct smb_filename * */ /* Version 37 - Change getxattr from const char * to const struct smb_filename * */ +/* Version 37 - Change mknod from const char * to const struct smb_filename * */ +/* Version 37 - Change chflags from const char * + to const struct smb_filename * */ +/* Version 37 - Change disk_free from const char * + to const struct smb_filename * */ +/* Version 37 - Change get_quota from const char * + to const struct smb_filename * */ +/* Version 37 - Change link from const char * + to const struct smb_filename * */ +/* Version 37 - Change statvfs from const char * + to const struct smb_filename * */ +/* Version 37 - Change readlink from const char * + to const struct smb_filename * */ +/* Version 37 - Change symlink from const char * + to const struct smb_filename * */ #define SMB_VFS_INTERFACE_VERSION 37 @@ -597,14 +612,21 @@ struct vfs_fn_pointers { int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user); void (*disconnect_fn)(struct vfs_handle_struct *handle); - uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle, const char *path, uint64_t *bsize, - uint64_t *dfree, uint64_t *dsize); - int (*get_quota_fn)(struct vfs_handle_struct *handle, const char *path, - enum SMB_QUOTA_TYPE qtype, unid_t id, - SMB_DISK_QUOTA *qt); + uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize); + int (*get_quota_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + enum SMB_QUOTA_TYPE qtype, + unid_t id, + SMB_DISK_QUOTA *qt); int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt); int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels); - int (*statvfs_fn)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf); + int (*statvfs_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + struct vfs_statvfs_struct *statbuf); uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res); /* @@ -725,12 +747,24 @@ struct vfs_fn_pointers { uint32_t share_mode, uint32_t access_mask); int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype); bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid); - int (*symlink_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath); - int (*readlink_fn)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz); - int (*link_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath); - int (*mknod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev); + int (*symlink_fn)(struct vfs_handle_struct *handle, + const char *link_contents, + const struct smb_filename *new_smb_fname); + int (*readlink_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + char *buf, + size_t bufsiz); + int (*link_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *old_smb_fname, + const struct smb_filename *new_smb_fname); + int (*mknod_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + mode_t mode, + SMB_DEV_T dev); char *(*realpath_fn)(struct vfs_handle_struct *handle, const char *path); - int (*chflags_fn)(struct vfs_handle_struct *handle, const char *path, unsigned int flags); + int (*chflags_fn)(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + unsigned int flags); struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle, const SMB_STRUCT_STAT *sbuf); struct tevent_req *(*copy_chunk_send_fn)(struct vfs_handle_struct *handle, @@ -1048,11 +1082,15 @@ int smb_vfs_call_connect(struct vfs_handle_struct *handle, const char *service, const char *user); void smb_vfs_call_disconnect(struct vfs_handle_struct *handle); uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle, - const char *path, uint64_t *bsize, - uint64_t *dfree, uint64_t *dsize); -int smb_vfs_call_get_quota(struct vfs_handle_struct *handle, const char *path, - enum SMB_QUOTA_TYPE qtype, unid_t id, - SMB_DISK_QUOTA *qt); + const struct smb_filename *smb_filename, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize); +int smb_vfs_call_get_quota(struct vfs_handle_struct *handle, + const struct smb_filename *smb_filename, + enum SMB_QUOTA_TYPE qtype, + unid_t id, + SMB_DISK_QUOTA *qt); int smb_vfs_call_set_quota(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt); @@ -1060,8 +1098,9 @@ int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels); -int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, const char *path, - struct vfs_statvfs_struct *statbuf); +int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + struct vfs_statvfs_struct *statbuf); uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res); /* @@ -1216,17 +1255,24 @@ int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle, bool smb_vfs_call_getlock(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid); -int smb_vfs_call_symlink(struct vfs_handle_struct *handle, const char *oldpath, - const char *newpath); +int smb_vfs_call_symlink(struct vfs_handle_struct *handle, + const char *link_contents, + const struct smb_filename *new_smb_fname); int smb_vfs_call_readlink(struct vfs_handle_struct *handle, - const char *path, char *buf, size_t bufsiz); -int smb_vfs_call_link(struct vfs_handle_struct *handle, const char *oldpath, - const char *newpath); -int smb_vfs_call_mknod(struct vfs_handle_struct *handle, const char *path, - mode_t mode, SMB_DEV_T dev); + const struct smb_filename *smb_fname, + char *buf, + size_t bufsiz); +int smb_vfs_call_link(struct vfs_handle_struct *handle, + const struct smb_filename *old_smb_fname, + const struct smb_filename *new_smb_fname); +int smb_vfs_call_mknod(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + mode_t mode, + SMB_DEV_T dev); char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path); -int smb_vfs_call_chflags(struct vfs_handle_struct *handle, const char *path, - unsigned int flags); +int smb_vfs_call_chflags(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + unsigned int flags); struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle, const SMB_STRUCT_STAT *sbuf); NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle, @@ -1381,8 +1427,6 @@ ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle, const struct smb_filename *smb_fname, char *list, size_t size); -ssize_t smb_vfs_call_llistxattr(struct vfs_handle_struct *handle, - const char *path, char *list, size_t size); ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size); diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h index 0ebd469..77646b4 100644 --- a/source3/include/vfs_macros.h +++ b/source3/include/vfs_macros.h @@ -39,15 +39,15 @@ #define SMB_VFS_NEXT_DISCONNECT(handle) \ smb_vfs_call_disconnect((handle)->next) -#define SMB_VFS_DISK_FREE(conn, path, bsize, dfree ,dsize) \ - smb_vfs_call_disk_free((conn)->vfs_handles, (path), (bsize), (dfree), (dsize)) -#define SMB_VFS_NEXT_DISK_FREE(handle, path, bsize, dfree ,dsize)\ - smb_vfs_call_disk_free((handle)->next, (path), (bsize), (dfree), (dsize)) +#define SMB_VFS_DISK_FREE(conn, smb_fname, bsize, dfree ,dsize) \ + smb_vfs_call_disk_free((conn)->vfs_handles, (smb_fname), (bsize), (dfree), (dsize)) +#define SMB_VFS_NEXT_DISK_FREE(handle, smb_fname, bsize, dfree ,dsize)\ + smb_vfs_call_disk_free((handle)->next, (smb_fname), (bsize), (dfree), (dsize)) -#define SMB_VFS_GET_QUOTA(conn, path, qtype, id, qt) \ - smb_vfs_call_get_quota((conn)->vfs_handles, (path), (qtype), (id), (qt)) -#define SMB_VFS_NEXT_GET_QUOTA(handle, path, qtype, id, qt) \ - smb_vfs_call_get_quota((handle)->next, (path), (qtype), (id), (qt)) +#define SMB_VFS_GET_QUOTA(conn, smb_fname, qtype, id, qt) \ + smb_vfs_call_get_quota((conn)->vfs_handles, (smb_fname), (qtype), (id), (qt)) +#define SMB_VFS_NEXT_GET_QUOTA(handle, smb_fname, qtype, id, qt) \ + smb_vfs_call_get_quota((handle)->next, (smb_fname), (qtype), (id), (qt)) #define SMB_VFS_SET_QUOTA(conn, qtype, id, qt) \ smb_vfs_call_set_quota((conn)->vfs_handles, (qtype), (id), (qt)) @@ -59,10 +59,10 @@ #define SMB_VFS_NEXT_GET_SHADOW_COPY_DATA(handle, fsp, shadow_copy_data ,labels) \ smb_vfs_call_get_shadow_copy_data((handle)->next, (fsp), (shadow_copy_data), (labels)) -#define SMB_VFS_STATVFS(conn, path, statbuf) \ - smb_vfs_call_statvfs((conn)->vfs_handles, (path), (statbuf)) -#define SMB_VFS_NEXT_STATVFS(handle, path, statbuf) \ - smb_vfs_call_statvfs((handle)->next, (path), (statbuf)) +#define SMB_VFS_STATVFS(conn, smb_fname, statbuf) \ + smb_vfs_call_statvfs((conn)->vfs_handles, (smb_fname), (statbuf)) +#define SMB_VFS_NEXT_STATVFS(handle, smb_fname, statbuf) \ + smb_vfs_call_statvfs((handle)->next, (smb_fname), (statbuf)) #define SMB_VFS_FS_CAPABILITIES(conn, p_ts_res) \ smb_vfs_call_fs_capabilities((conn)->vfs_handles, (p_ts_res)) @@ -316,30 +316,30 @@ #define SMB_VFS_NEXT_SYMLINK(handle, oldpath, newpath) \ smb_vfs_call_symlink((handle)->next, (oldpath), (newpath)) -#define SMB_VFS_READLINK(conn, path, buf, bufsiz) \ - smb_vfs_call_readlink((conn)->vfs_handles, (path), (buf), (bufsiz)) -#define SMB_VFS_NEXT_READLINK(handle, path, buf, bufsiz) \ - smb_vfs_call_readlink((handle)->next, (path), (buf), (bufsiz)) +#define SMB_VFS_READLINK(conn, smb_fname, buf, bufsiz) \ + smb_vfs_call_readlink((conn)->vfs_handles, (smb_fname), (buf), (bufsiz)) +#define SMB_VFS_NEXT_READLINK(handle, smb_fname, buf, bufsiz) \ + smb_vfs_call_readlink((handle)->next, (smb_fname), (buf), (bufsiz)) #define SMB_VFS_LINK(conn, oldpath, newpath) \ smb_vfs_call_link((conn)->vfs_handles, (oldpath), (newpath)) #define SMB_VFS_NEXT_LINK(handle, oldpath, newpath) \ smb_vfs_call_link((handle)->next, (oldpath), (newpath)) -#define SMB_VFS_MKNOD(conn, path, mode, dev) \ - smb_vfs_call_mknod((conn)->vfs_handles, (path), (mode), (dev)) -#define SMB_VFS_NEXT_MKNOD(handle, path, mode, dev) \ - smb_vfs_call_mknod((handle)->next, (path), (mode), (dev)) +#define SMB_VFS_MKNOD(conn, smb_fname, mode, dev) \ + smb_vfs_call_mknod((conn)->vfs_handles, (smb_fname), (mode), (dev)) +#define SMB_VFS_NEXT_MKNOD(handle, smb_fname, mode, dev) \ + smb_vfs_call_mknod((handle)->next, (smb_fname), (mode), (dev)) #define SMB_VFS_REALPATH(conn, path) \ smb_vfs_call_realpath((conn)->vfs_handles, (path)) #define SMB_VFS_NEXT_REALPATH(handle, path) \ smb_vfs_call_realpath((handle)->next, (path)) -#define SMB_VFS_CHFLAGS(conn, path, flags) \ - smb_vfs_call_chflags((conn)->vfs_handles, (path), (flags)) -#define SMB_VFS_NEXT_CHFLAGS(handle, path, flags) \ - smb_vfs_call_chflags((handle)->next, (path), (flags)) +#define SMB_VFS_CHFLAGS(conn, smb_fname, flags) \ + smb_vfs_call_chflags((conn)->vfs_handles, (smb_fname), (flags)) +#define SMB_VFS_NEXT_CHFLAGS(handle, smb_fname, flags) \ + smb_vfs_call_chflags((handle)->next, (smb_fname), (flags)) #define SMB_VFS_FILE_ID_CREATE(conn, sbuf) \ smb_vfs_call_file_id_create((conn)->vfs_handles, (sbuf)) diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c index c124592..c07a059 100644 --- a/source3/modules/vfs_cap.c +++ b/source3/modules/vfs_cap.c @@ -29,29 +29,57 @@ static char *capencode(TALLOC_CTX *ctx, const char *from); static char *capdecode(TALLOC_CTX *ctx, const char *from); -static uint64_t cap_disk_free(vfs_handle_struct *handle, const char *path, - uint64_t *bsize, uint64_t *dfree, uint64_t *dsize) +static uint64_t cap_disk_free(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + uint64_t *bsize, + uint64_t *dfree, + uint64_t *dsize) { - char *cappath = capencode(talloc_tos(), path); + char *capname = capencode(talloc_tos(), smb_fname->base_name); + struct smb_filename *cap_smb_fname = NULL; - if (!cappath) { + if (!capname) { + errno = ENOMEM; + return (uint64_t)-1; + } + cap_smb_fname = synthetic_smb_fname(talloc_tos(), + capname, + NULL, + NULL, + smb_fname->flags); + if (cap_smb_fname == NULL) { + TALLOC_FREE(capname); errno = ENOMEM; return (uint64_t)-1; } - return SMB_VFS_NEXT_DISK_FREE(handle, cappath, bsize, dfree, dsize); + return SMB_VFS_NEXT_DISK_FREE(handle, cap_smb_fname, + bsize, dfree, dsize); } -static int cap_get_quota(vfs_handle_struct *handle, const char *path, - enum SMB_QUOTA_TYPE qtype, unid_t id, - SMB_DISK_QUOTA *dq) +static int cap_get_quota(vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + enum SMB_QUOTA_TYPE qtype, -- Samba Shared Repository