[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu May 21 22:02:07 UTC 2020


The branch, master has been updated
       via  c68133d41c3 smbd: prepare DH disconnect for AT-names
       via  76118b4830a smbd: prepare fsp_str_dbg() for atnames
       via  75d6943ed88 smbd: use fd_openat()
       via  eaf1c6a338a smbd: add fd_openat()
       via  32588c023e2 vfs: remove SMB_VFS_OPEN()
       via  1a3cf6ba590 s3/torture: use SMB_VFS_OPENAT() in cmd_set_nt_acl()
       via  b1d8bb6a402 s3/torture: use SMB_VFS_OPENAT() in cmd_open()
       via  1304fd92afc s3/pysmbd: use SMB_VFS_OPENAT() in init_files_struct()
       via  c57d76ec1a9 smbd: use SMB_VFS_OPENAT() in non_widelink_open()
       via  643a441edbf vfs_shadow_copy2: use SMB_VFS_NEXT_OPENAT() in shadow_copy2_get_shadow_copy_data()
       via  a912c1d87d6 s3: VFS: fruit. Now we've gotten rid of SMB_VFS_OPEN(), add const to the functions called by fruit_openat().
       via  86ddd9253f8 vfs_fruit: use SMB_VFS_NEXT_OPENAT()
       via  87b2ab8fc2e vfs_xattr_tdb: implement SMB_VFS_OPENAT()
       via  7d0616f5f10 vfs_virusfilter: implement SMB_VFS_OPENAT()
       via  739e100f47c vfs_unityed_media: implement SMB_VFS_OPENAT()
       via  6939beacb06 vfs_syncops: implement SMB_VFS_OPENAT()
       via  35765b8fa43 vfs_streams_xattr: implement SMB_VFS_OPENAT()
       via  dcddc45c4c8 vfs_streams_depot: implement SMB_VFS_OPENAT()
       via  6bd623771ed vfs_snapper: implement SMB_VFS_OPENAT()
       via  3e5cb65fa85 vfs_preopen: implement SMB_VFS_OPENAT()
       via  d93d73189b5 vfs_prealloc: implement SMB_VFS_OPENAT()
       via  01f834513fa vfs_media_harmony: implement SMB_VFS_OPENAT()
       via  91b7ef1c78a vfs_gpfs: implement SMB_VFS_OPENAT()
       via  712cd71f936 vfs_glusterfs: implement SMB_VFS_OPENAT()
       via  3ca5297ac81 vfs_fruit: implement SMB_VFS_OPENAT()
       via  c71215bd64b vfs_widelinks: implement SMB_VFS_OPENAT()
       via  07cb0b409e4 vfs_time_audit: implement SMB_VFS_OPENAT()
       via  d14696f1b93 vfs_shadow_copy2: implement SMB_VFS_OPENAT()
       via  df7882dd083 vfs_full_audit: implement SMB_VFS_OPENAT()
       via  104302ae1ee vfs_extd_audit: implement SMB_VFS_OPENAT()
       via  8aff66d437e vfs_error_inject: implement SMB_VFS_OPENAT()
       via  39b2da610fe vfs_default: implement SMB_VFS_OPENAT()
       via  9173b5fdac3 vfs_commit: implement SMB_VFS_OPENAT()
       via  06e14449891 vfs_ceph_snapshots: implement SMB_VFS_OPENAT()
       via  605c0b3aadc vfs_ceph: implement SMB_VFS_OPENAT()
       via  6efb7013273 vfs_catia: implement SMB_VFS_OPENAT()
       via  f9ef244e785 s3: VFS: catia: Change saved_errno to catia_saved_errno in a macro.
       via  01d949bc95f vfs_cap: implement SMB_VFS_OPENAT()
       via  e7b421832e2 vfs_audit: implement SMB_VFS_OPENAT()
       via  bae76f8644b vfs_aio_pthread: implement SMB_VFS_OPENAT()
       via  42858577d55 vfs_aio_pthread: add dirfsp arg to create_private_open_data()
       via  9bb9d6d12cf vfs_aio_pthread: realign create_private_open_data() args
       via  dc061a23b45 vfs_aio_pthread: realign create_private_open_data args
       via  e4a38916e60 vfs: add SMB_VFS_OPENAT()
       via  d3c16d93d18 vfs_fruit: pass down cwdfsp as dirfsp in fruit_open()
       via  19a1ed2cacf s3/vfs: add vfs_at_fspcwd()
      from  d708d002d7d smbd: remove redundant conn arg from non_widelink_open()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c68133d41c368c52cd5ac3c34dbe888ceccd7619
Author: Ralph Boehme <slow at samba.org>
Date:   Sun May 17 08:05:47 2020 +0200

    smbd: prepare DH disconnect for AT-names
    
    This ensure cookie.base_name is set to the full path to deal with fsp->fsp_name
    being an atname in the future.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu May 21 22:01:25 UTC 2020 on sn-devel-184

commit 76118b4830aa28ac61fb7f43bc103bbffbe3a608
Author: Ralph Boehme <slow at samba.org>
Date:   Sun May 17 07:53:42 2020 +0200

    smbd: prepare fsp_str_dbg() for atnames
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 75d6943ed880019cca1192d4d4d62d5f27b97d2d
Author: Ralph Boehme <slow at samba.org>
Date:   Fri May 8 16:32:56 2020 +0200

    smbd: use fd_openat()
    
    This leaves basically two callers of fd_open():
    
    * open_internal_dirfsp_at()
    * smbd_smb2_query_directory_send()
    
    Those will be the only codepaths that use full paths relative to the share root
    and so require and use the symlink race protection provided by
    non_widelink_open().
    
    Of course, until we actuall start passing real dirfsps to fd_openat(),
    fd_openat() internally calls fd_open().
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit eaf1c6a338a6253068fc3e671605f18c71565dbb
Author: Ralph Boehme <slow at samba.org>
Date:   Thu May 14 21:20:22 2020 +0200

    smbd: add fd_openat()
    
    Until we actually start passing real dirfsps to fd_openat(), fd_openat()
    internally calls fd_open().
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 32588c023e20eb5ab61512d8d5d0b6e9ac2c4d33
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:26:14 2020 +0200

    vfs: remove SMB_VFS_OPEN()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1a3cf6ba590de6644d591a1d96ac74dc68037bcb
Author: Ralph Boehme <slow at samba.org>
Date:   Tue May 19 21:35:56 2020 +0200

    s3/torture: use SMB_VFS_OPENAT() in cmd_set_nt_acl()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit b1d8bb6a40222c19e496c1812a78e7796f82b4e3
Author: Ralph Boehme <slow at samba.org>
Date:   Tue May 19 21:34:26 2020 +0200

    s3/torture: use SMB_VFS_OPENAT() in cmd_open()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1304fd92afc4adbd155baf263531c0cc64ffafa7
Author: Ralph Boehme <slow at samba.org>
Date:   Tue May 19 21:33:00 2020 +0200

    s3/pysmbd: use SMB_VFS_OPENAT() in init_files_struct()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c57d76ec1a9ce26bfab1c4c4c3ac130c15fb71f2
Author: Ralph Boehme <slow at samba.org>
Date:   Tue May 19 21:30:24 2020 +0200

    smbd: use SMB_VFS_OPENAT() in non_widelink_open()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 643a441edbf3ff1707e5b4c1e2966af6d5aed927
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:48:36 2020 +0200

    vfs_shadow_copy2: use SMB_VFS_NEXT_OPENAT() in shadow_copy2_get_shadow_copy_data()
    
    These are paths not under user control, so it should be safe to call it with
    AT_FDCWD and multi-component paths.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a912c1d87d64badd0e7e3aa44e90b6ff6bda46bd
Author: Jeremy Allison <jra at samba.org>
Date:   Thu May 21 11:56:14 2020 -0700

    s3: VFS: fruit. Now we've gotten rid of SMB_VFS_OPEN(), add const to the functions called by fruit_openat().
    
    Remove the hack that allowed openat() to call non-const functions.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 86ddd9253f8da47b0fb845de917210a5089ee386
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:05:07 2020 +0200

    vfs_fruit: use SMB_VFS_NEXT_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 87b2ab8fc2e3d1d981d205334bfc0a37d2ea4091
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:32:57 2020 +0200

    vfs_xattr_tdb: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7d0616f5f10a8fbf15c1293d92b29bd31b633b67
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:31:04 2020 +0200

    vfs_virusfilter: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 739e100f47cdfec0de0e16f77a2f4b78801afa89
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:24:37 2020 +0200

    vfs_unityed_media: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6939beacb0617448a8798a3516dcb899dfcff256
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:22:26 2020 +0200

    vfs_syncops: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 35765b8fa433d930a3d533e8f6728b2910026384
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:18:54 2020 +0200

    vfs_streams_xattr: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit dcddc45c4c8272e236fa2ca918f376ff0b698f1d
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:07:20 2020 +0200

    vfs_streams_depot: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6bd623771ed5517952df84214f9f2aa908f24cbd
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:02:48 2020 +0200

    vfs_snapper: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 3e5cb65fa85f698e8c3d8b7168081a397622f85f
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 21:51:00 2020 +0200

    vfs_preopen: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit d93d73189b5aa447b22b236ab5219a3ebc7b407c
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 21:46:41 2020 +0200

    vfs_prealloc: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 01f834513fa1517d577185b64c39d4b52b43aeb9
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 21:43:26 2020 +0200

    vfs_media_harmony: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 91b7ef1c78a2d20d455f6f7973fc7930d259c39e
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 21:34:35 2020 +0200

    vfs_gpfs: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 712cd71f93677adbe7093499f07771ccbf51c6aa
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 21:32:30 2020 +0200

    vfs_glusterfs: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 3ca5297ac81cb14e25c64886707056a2819e5dbd
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:04:26 2020 +0200

    vfs_fruit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit c71215bd64b012ab6ff485f73c8a42390fb4fba6
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:03:30 2020 +0200

    vfs_widelinks: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 07cb0b409e4d6d1ee6c1d7ad9e93a83e76aad868
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:03:18 2020 +0200

    vfs_time_audit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit d14696f1b93a0856cbc87c362182373e0047049d
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:03:05 2020 +0200

    vfs_shadow_copy2: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit df7882dd0836e0a39314498f75b134209e2feaeb
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:02:39 2020 +0200

    vfs_full_audit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 104302ae1ee72737508c01e1df0da7b91dafc902
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:02:20 2020 +0200

    vfs_extd_audit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8aff66d437e53683c67d10b27b3e85d4e42e80e0
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:02:06 2020 +0200

    vfs_error_inject: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 39b2da610fe1d1115743e14c626a4e1bc7b7deb2
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:01:54 2020 +0200

    vfs_default: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9173b5fdac30e51e8fa59f30789f75fb91f83f6f
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:01:16 2020 +0200

    vfs_commit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 06e144498919ddf9102be05d33f2a86c3d52a9ee
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:01:04 2020 +0200

    vfs_ceph_snapshots: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 605c0b3aadc218df617f9a97932d64676118027b
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 23:00:52 2020 +0200

    vfs_ceph: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6efb7013273ae62f38db42d811c791a102f5266a
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:59:05 2020 +0200

    vfs_catia: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f9ef244e78599c13500edce7180bf17a9e1f7f47
Author: Jeremy Allison <jra at samba.org>
Date:   Thu May 21 11:03:14 2020 -0700

    s3: VFS: catia: Change saved_errno to catia_saved_errno in a macro.
    
    This is a common variable name.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 01d949bc95fcb5d89d2318adf0d0d05b9d0ede9c
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:58:56 2020 +0200

    vfs_cap: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e7b421832e22aa7ee92b64f9769af6b6f13f0b71
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:58:47 2020 +0200

    vfs_audit: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit bae76f8644b349d1eeca7992c0741f4d6be78213
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 22:58:29 2020 +0200

    vfs_aio_pthread: implement SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 42858577d552ba66ce9cda8f8eda16fdf0e34197
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 16:47:05 2020 +0200

    vfs_aio_pthread: add dirfsp arg to create_private_open_data()
    
    Prepares for an upcoming aio_pthread_openat_fn(). open_async() passes fspcwd.
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9bb9d6d12cf2da2783b8ba1676b8019385b5d741
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 16:44:15 2020 +0200

    vfs_aio_pthread: realign create_private_open_data() args
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit dc061a23b45b06fdb6ee166cb822bd68fe1c33a3
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 16:43:11 2020 +0200

    vfs_aio_pthread: realign create_private_open_data args
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e4a38916e60dd092901cd5c431980b012978e2ee
Author: Ralph Boehme <slow at samba.org>
Date:   Fri May 15 16:29:44 2020 +0200

    vfs: add SMB_VFS_OPENAT()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit d3c16d93d1833ef2756012def053996372245245
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 17:51:23 2020 +0200

    vfs_fruit: pass down cwdfsp as dirfsp in fruit_open()
    
    Not yet used, that comes when we add fruit_openat(). Passing cwdfsp as dirfsp
    ensures when calling openat() we get the same behaviour as open().
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 19a1ed2cacf691cdf003f44cbe80a772e871254c
Author: Ralph Boehme <slow at samba.org>
Date:   Wed May 20 17:01:48 2020 +0200

    s3/vfs: add vfs_at_fspcwd()
    
    Signed-off-by: Ralph Boehme <slow at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 examples/VFS/skel_opaque.c              |  10 +++-
 examples/VFS/skel_transparent.c         |  12 ++--
 source3/include/proto.h                 |   4 ++
 source3/include/smbprofile.h            |   1 +
 source3/include/vfs.h                   |  26 ++++++--
 source3/include/vfs_macros.h            |   8 +--
 source3/lib/filename_util.c             |  24 +++++++-
 source3/modules/vfs_aio_pthread.c       |  66 +++++++++++++-------
 source3/modules/vfs_audit.c             |  20 ++++---
 source3/modules/vfs_cap.c               |  43 +++++++++----
 source3/modules/vfs_catia.c             |  55 +++++++++++------
 source3/modules/vfs_ceph.c              |  19 ++++--
 source3/modules/vfs_ceph_snapshots.c    |  58 +++++++++++++-----
 source3/modules/vfs_commit.c            |  23 ++++---
 source3/modules/vfs_default.c           |  24 ++++----
 source3/modules/vfs_error_inject.c      |  18 +++---
 source3/modules/vfs_extd_audit.c        |  38 +++++++-----
 source3/modules/vfs_fruit.c             | 103 +++++++++++++++++++++++---------
 source3/modules/vfs_full_audit.c        |  21 ++++---
 source3/modules/vfs_glusterfs.c         |  24 +++++---
 source3/modules/vfs_gpfs.c              |  26 ++++----
 source3/modules/vfs_media_harmony.c     |  49 +++++++--------
 source3/modules/vfs_not_implemented.c   |  11 ++--
 source3/modules/vfs_prealloc.c          |  18 +++---
 source3/modules/vfs_preopen.c           |  22 ++++---
 source3/modules/vfs_shadow_copy2.c      |  79 +++++++++++++++++-------
 source3/modules/vfs_snapper.c           |  53 ++++++++++------
 source3/modules/vfs_streams_depot.c     |  39 ++++++++++--
 source3/modules/vfs_streams_xattr.c     |  23 +++++--
 source3/modules/vfs_syncops.c           |  16 ++---
 source3/modules/vfs_time_audit.c        |  21 ++++---
 source3/modules/vfs_unityed_media.c     |  39 +++++++-----
 source3/modules/vfs_virusfilter.c       |  34 +++++++----
 source3/modules/vfs_widelinks.c         |  61 +++++++------------
 source3/modules/vfs_xattr_tdb.c         |  35 ++++++-----
 source3/script/tests/test_open_eintr.sh |   2 +-
 source3/smbd/durable.c                  |   4 +-
 source3/smbd/open.c                     |  94 +++++++++++++++++++++++++++--
 source3/smbd/proto.h                    |   3 +
 source3/smbd/pysmbd.c                   |  14 ++++-
 source3/smbd/vfs.c                      |  49 +++++++++++++--
 source3/torture/cmd_vfs.c               |  33 +++++++++-
 42 files changed, 923 insertions(+), 399 deletions(-)


Changeset truncated at 500 lines:

diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index 77bd471315e..1a9b472634d 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -191,8 +191,12 @@ static int skel_closedir(vfs_handle_struct *handle, DIR *dir)
 	return -1;
 }
 
-static int skel_open(vfs_handle_struct *handle, struct smb_filename *smb_fname,
-		     files_struct *fsp, int flags, mode_t mode)
+static int skel_openat(struct vfs_handle_struct *handle,
+		       const struct files_struct *dirfsp,
+		       const struct smb_filename *smb_fname,
+		       struct files_struct *fsp,
+		       int flags,
+		       mode_t mode)
 {
 	errno = ENOSYS;
 	return -1;
@@ -1062,7 +1066,7 @@ static struct vfs_fn_pointers skel_opaque_fns = {
 
 	/* File operations */
 
-	.open_fn = skel_open,
+	.openat_fn = skel_openat,
 	.create_file_fn = skel_create_file,
 	.close_fn = skel_close_fn,
 	.pread_fn = skel_pread,
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index 5c758f2fc5f..fdb6d0d5f54 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -200,10 +200,14 @@ static int skel_closedir(vfs_handle_struct *handle, DIR *dir)
 	return SMB_VFS_NEXT_CLOSEDIR(handle, dir);
 }
 
-static int skel_open(vfs_handle_struct *handle, struct smb_filename *smb_fname,
-		     files_struct *fsp, int flags, mode_t mode)
+static int skel_openat(struct vfs_handle_struct *handle,
+		       const struct files_struct *dirfsp,
+		       const struct smb_filename *smb_fname,
+		       struct files_struct *fsp,
+		       int flags,
+		       mode_t mode)
 {
-	return SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+	return SMB_VFS_NEXT_OPENAT(handle, dirfsp, smb_fname, fsp, flags, mode);
 }
 
 static NTSTATUS skel_create_file(struct vfs_handle_struct *handle,
@@ -1370,7 +1374,7 @@ static struct vfs_fn_pointers skel_transparent_fns = {
 
 	/* File operations */
 
-	.open_fn = skel_open,
+	.openat_fn = skel_openat,
 	.create_file_fn = skel_create_file,
 	.close_fn = skel_close_fn,
 	.pread_fn = skel_pread,
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 0e96fcccc65..12aa392abae 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -80,6 +80,10 @@ int map_errno_from_nt_status(NTSTATUS status);
 
 struct file_id vfs_file_id_from_sbuf(connection_struct *conn, const SMB_STRUCT_STAT *sbuf);
 
+NTSTATUS vfs_at_fspcwd(TALLOC_CTX *mem_ctx,
+		       struct connection_struct *conn,
+		       struct files_struct **_fsp);
+
 /* The following definitions come from lib/interface.c  */
 
 bool ismyaddr(const struct sockaddr *ip);
diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h
index 91f30661240..1dc3a088655 100644
--- a/source3/include/smbprofile.h
+++ b/source3/include/smbprofile.h
@@ -51,6 +51,7 @@ struct tevent_context;
 	SMBPROFILE_STATS_BASIC(syscall_mkdirat) \
 	SMBPROFILE_STATS_BASIC(syscall_closedir) \
 	SMBPROFILE_STATS_BASIC(syscall_open) \
+	SMBPROFILE_STATS_BASIC(syscall_openat) \
 	SMBPROFILE_STATS_BASIC(syscall_createfile) \
 	SMBPROFILE_STATS_BASIC(syscall_close) \
 	SMBPROFILE_STATS_BYTES(syscall_pread) \
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index 12d048f2138..3126f228626 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -322,6 +322,8 @@
  * Version 43 - Remove root_dir_fid from SMB_VFS_CREATE_FILE().
  * Version 43 - Add dirfsp to struct files_struct
  * Version 43 - Add dirfsp args to SMB_VFS_CREATE_FILE()
+ * Version 43 - Add SMB_VFS_OPENAT()
+ * Version 43 - Remove SMB_VFS_OPEN()
  */
 
 #define SMB_VFS_INTERFACE_VERSION 43
@@ -761,9 +763,12 @@ struct vfs_fn_pointers {
 
 	/* File operations */
 
-	int (*open_fn)(struct vfs_handle_struct *handle,
-		       struct smb_filename *smb_fname, files_struct *fsp,
-		       int flags, mode_t mode);
+	int (*openat_fn)(struct vfs_handle_struct *handle,
+			 const struct files_struct *dirfsp,
+			 const struct smb_filename *smb_fname,
+			 struct files_struct *fsp,
+			 int flags,
+			 mode_t mode);
 	NTSTATUS (*create_file_fn)(struct vfs_handle_struct *handle,
 				   struct smb_request *req,
 				   struct files_struct **dirfsp,
@@ -1273,9 +1278,12 @@ int smb_vfs_call_mkdirat(struct vfs_handle_struct *handle,
 			mode_t mode);
 int smb_vfs_call_closedir(struct vfs_handle_struct *handle,
 			  DIR *dir);
-int smb_vfs_call_open(struct vfs_handle_struct *handle,
-		      struct smb_filename *smb_fname, struct files_struct *fsp,
-		      int flags, mode_t mode);
+int smb_vfs_call_openat(struct vfs_handle_struct *handle,
+			const struct files_struct *dirfsp,
+			const struct smb_filename *smb_fname,
+			struct files_struct *fsp,
+			int flags,
+			mode_t mode);
 NTSTATUS smb_vfs_call_create_file(struct vfs_handle_struct *handle,
 				  struct smb_request *req,
 				  struct files_struct **dirfsp,
@@ -1731,6 +1739,12 @@ int vfs_not_implemented_closedir(vfs_handle_struct *handle, DIR *dir);
 int vfs_not_implemented_open(vfs_handle_struct *handle,
 			     struct smb_filename *smb_fname,
 			     files_struct *fsp, int flags, mode_t mode);
+int vfs_not_implemented_openat(vfs_handle_struct *handle,
+			       const struct files_struct *dirfsp,
+			       const struct smb_filename *smb_fname,
+			       struct files_struct *fsp,
+			       int flags,
+			       mode_t mode);
 NTSTATUS vfs_not_implemented_create_file(struct vfs_handle_struct *handle,
 				struct smb_request *req,
 				struct files_struct **dirfsp,
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index 5ab825ec312..e0a8d391945 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -142,10 +142,10 @@
 	smb_vfs_call_closedir((handle)->next, (dir))
 
 /* File operations */
-#define SMB_VFS_OPEN(conn, fname, fsp, flags, mode) \
-	smb_vfs_call_open((conn)->vfs_handles, (fname), (fsp), (flags), (mode))
-#define SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode) \
-	smb_vfs_call_open((handle)->next, (fname), (fsp), (flags), (mode))
+#define SMB_VFS_OPENAT(conn, dirfsp, smb_fname, fsp, flags, mode) \
+	smb_vfs_call_openat((conn)->vfs_handles, (dirfsp), (smb_fname), (fsp), (flags), (mode))
+#define SMB_VFS_NEXT_OPENAT(handle, dirfsp, smb_fname, fsp, flags, mode) \
+	smb_vfs_call_openat((handle)->next, (dirfsp), (smb_fname), (fsp), (flags), (mode))
 
 #define SMB_VFS_CREATE_FILE(conn, req, dirfsp, smb_fname, access_mask, share_access, create_disposition, \
         create_options, file_attributes, oplock_request, lease, allocation_size, private_flags, sd, ea_list, result, pinfo, in_context_blobs, out_context_blobs) \
diff --git a/source3/lib/filename_util.c b/source3/lib/filename_util.c
index 00a5fcda997..418dd20327b 100644
--- a/source3/lib/filename_util.c
+++ b/source3/lib/filename_util.c
@@ -180,7 +180,29 @@ const char *smb_fname_str_dbg(const struct smb_filename *smb_fname)
  */
 const char *fsp_str_dbg(const struct files_struct *fsp)
 {
-	return smb_fname_str_dbg(fsp->fsp_name);
+	const char *name = NULL;
+
+	name = smb_fname_str_dbg(fsp->fsp_name);
+	if (name == NULL) {
+		return "";
+	}
+
+	if (fsp->dirfsp == NULL || fsp->dirfsp == fsp->conn->cwd_fsp) {
+		return name;
+	}
+
+	if (ISDOT(fsp->dirfsp->fsp_name->base_name)) {
+		return name;
+	}
+
+	name = talloc_asprintf(talloc_tos(),
+			       "%s/%s",
+			       fsp->dirfsp->fsp_name->base_name,
+			       fsp->fsp_name->base_name);
+	if (name == NULL) {
+		return "";
+	}
+	return name;
 }
 
 /**
diff --git a/source3/modules/vfs_aio_pthread.c b/source3/modules/vfs_aio_pthread.c
index 65a7c28e7b3..265bae411d6 100644
--- a/source3/modules/vfs_aio_pthread.c
+++ b/source3/modules/vfs_aio_pthread.c
@@ -44,6 +44,7 @@ struct aio_open_private_data {
 	struct aio_open_private_data *prev, *next;
 	/* Inputs. */
 	int dir_fd;
+	bool opened_dir_fd;
 	int flags;
 	mode_t mode;
 	uint64_t mid;
@@ -235,7 +236,7 @@ static void aio_open_do(struct aio_open_private_data *opd)
 
 static void opd_free(struct aio_open_private_data *opd)
 {
-	if (opd->dir_fd != -1) {
+	if (opd->opened_dir_fd && opd->dir_fd != -1) {
 		close(opd->dir_fd);
 	}
 	DLIST_REMOVE(open_pd_list, opd);
@@ -246,11 +247,13 @@ static void opd_free(struct aio_open_private_data *opd)
  Create and initialize a private data struct for async open.
 ***********************************************************************/
 
-static struct aio_open_private_data *create_private_open_data(TALLOC_CTX *ctx,
-					const struct smb_filename *smb_fname,
-					const files_struct *fsp,
-					int flags,
-					mode_t mode)
+static struct aio_open_private_data *create_private_open_data(
+	TALLOC_CTX *ctx,
+	const struct files_struct *dirfsp,
+	const struct smb_filename *smb_fname,
+	const files_struct *fsp,
+	int flags,
+	mode_t mode)
 {
 	struct aio_open_private_data *opd = talloc_zero(ctx,
 					struct aio_open_private_data);
@@ -299,11 +302,16 @@ static struct aio_open_private_data *create_private_open_data(TALLOC_CTX *ctx,
 		return NULL;
 	}
 
+	if (dirfsp->fh->fd != AT_FDCWD) {
+		opd->dir_fd = dirfsp->fh->fd;
+	} else {
 #if defined(O_DIRECTORY)
-	opd->dir_fd = open(".", O_RDONLY|O_DIRECTORY);
+		opd->dir_fd = open(".", O_RDONLY|O_DIRECTORY);
 #else
-	opd->dir_fd = open(".", O_RDONLY);
+		opd->dir_fd = open(".", O_RDONLY);
 #endif
+		opd->opened_dir_fd = true;
+	}
 	if (opd->dir_fd == -1) {
 		opd_free(opd);
 		return NULL;
@@ -332,7 +340,8 @@ static int opd_inflight_destructor(struct aio_open_private_data *opd)
  Setup an async open.
 *****************************************************************/
 
-static int open_async(const struct smb_filename *smb_fname,
+static int open_async(const struct files_struct *dirfsp,
+		      const struct smb_filename *smb_fname,
 		      const files_struct *fsp,
 		      int flags,
 		      mode_t mode)
@@ -351,7 +360,12 @@ static int open_async(const struct smb_filename *smb_fname,
 	 * opd is always safely freed in all codepath so no
 	 * memory leaks.
 	 */
-	opd = create_private_open_data(fsp->conn, smb_fname, fsp, flags, mode);
+	opd = create_private_open_data(fsp->conn,
+				       dirfsp,
+				       smb_fname,
+				       fsp,
+				       flags,
+				       mode);
 	if (opd == NULL) {
 		DEBUG(10, ("open_async: Could not create private data.\n"));
 		return -1;
@@ -432,18 +446,19 @@ static bool find_completed_open(files_struct *fsp,
  opens to prevent any race conditions.
 *****************************************************************/
 
-static int aio_pthread_open_fn(vfs_handle_struct *handle,
-			struct smb_filename *smb_fname,
-			files_struct *fsp,
-			int flags,
-			mode_t mode)
+static int aio_pthread_openat_fn(vfs_handle_struct *handle,
+				 const struct files_struct *dirfsp,
+				 const struct smb_filename *smb_fname,
+				 struct files_struct *fsp,
+				 int flags,
+				 mode_t mode)
 {
 	int my_errno = 0;
 	int fd = -1;
 	bool aio_allow_open = lp_parm_bool(
 		SNUM(handle->conn), "aio_pthread", "aio open", false);
 
-	if (smb_fname->stream_name) {
+	if (smb_fname->stream_name != NULL) {
 		/* Don't handle stream opens. */
 		errno = ENOENT;
 		return -1;
@@ -451,17 +466,26 @@ static int aio_pthread_open_fn(vfs_handle_struct *handle,
 
 	if (!aio_allow_open) {
 		/* aio opens turned off. */
-		return open(smb_fname->base_name, flags, mode);
+		return openat(dirfsp->fh->fd,
+			      smb_fname->base_name,
+			      flags,
+			      mode);
 	}
 
 	if (!(flags & O_CREAT)) {
 		/* Only creates matter. */
-		return open(smb_fname->base_name, flags, mode);
+		return openat(dirfsp->fh->fd,
+			      smb_fname->base_name,
+			      flags,
+			      mode);
 	}
 
 	if (!(flags & O_EXCL)) {
 		/* Only creates with O_EXCL matter. */
-		return open(smb_fname->base_name, flags, mode);
+		return openat(dirfsp->fh->fd,
+			      smb_fname->base_name,
+			      flags,
+			      mode);
 	}
 
 	/*
@@ -477,13 +501,13 @@ static int aio_pthread_open_fn(vfs_handle_struct *handle,
 	}
 
 	/* Ok, it's a create exclusive call - pass it to a thread helper. */
-	return open_async(smb_fname, fsp, flags, mode);
+	return open_async(dirfsp, smb_fname, fsp, flags, mode);
 }
 #endif
 
 static struct vfs_fn_pointers vfs_aio_pthread_fns = {
 #if defined(HAVE_OPENAT) && defined(HAVE_LINUX_THREAD_CREDENTIALS)
-	.open_fn = aio_pthread_open_fn,
+	.openat_fn = aio_pthread_openat_fn,
 #endif
 };
 
diff --git a/source3/modules/vfs_audit.c b/source3/modules/vfs_audit.c
index 916d8a04206..ce7eb7a46fb 100644
--- a/source3/modules/vfs_audit.c
+++ b/source3/modules/vfs_audit.c
@@ -197,17 +197,21 @@ static int audit_mkdirat(vfs_handle_struct *handle,
 	return result;
 }
 
-static int audit_open(vfs_handle_struct *handle,
-		      struct smb_filename *smb_fname, files_struct *fsp,
-		      int flags, mode_t mode)
+static int audit_openat(vfs_handle_struct *handle,
+			const struct files_struct *dirfsp,
+			const struct smb_filename *smb_fname,
+			struct files_struct *fsp,
+			int flags,
+			mode_t mode)
 {
 	int result;
 
-	result = SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+	result = SMB_VFS_NEXT_OPENAT(handle, dirfsp, smb_fname, fsp, flags, mode);
 
-	syslog(audit_syslog_priority(handle), "open %s (fd %d) %s%s%s\n", 
-	       smb_fname->base_name, result,
-	       ((flags & O_WRONLY) || (flags & O_RDWR)) ? "for writing " : "", 
+	syslog(audit_syslog_priority(handle),
+	       "openat %s (fd %d) %s%s%s\n",
+	       fsp_str_dbg(fsp), result,
+	       ((flags & O_WRONLY) || (flags & O_RDWR)) ? "for writing " : "",
 	       (result < 0) ? "failed: " : "",
 	       (result < 0) ? strerror(errno) : "");
 
@@ -305,7 +309,7 @@ static struct vfs_fn_pointers vfs_audit_fns = {
 	.connect_fn = audit_connect,
 	.disconnect_fn = audit_disconnect,
 	.mkdirat_fn = audit_mkdirat,
-	.open_fn = audit_open,
+	.openat_fn = audit_openat,
 	.close_fn = audit_close,
 	.renameat_fn = audit_renameat,
 	.unlinkat_fn = audit_unlinkat,
diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c
index ab84c3143cc..c713d30301e 100644
--- a/source3/modules/vfs_cap.c
+++ b/source3/modules/vfs_cap.c
@@ -147,29 +147,48 @@ static int cap_mkdirat(vfs_handle_struct *handle,
 			mode);
 }
 
-static int cap_open(vfs_handle_struct *handle, struct smb_filename *smb_fname,
-		    files_struct *fsp, int flags, mode_t mode)
+static int cap_openat(vfs_handle_struct *handle,
+		      const struct files_struct *dirfsp,
+		      const struct smb_filename *smb_fname_in,
+		      files_struct *fsp,
+		      int flags,
+		      mode_t mode)
 {
-	char *cappath;
-	char *tmp_base_name = NULL;
+	char *cappath = NULL;
+	struct smb_filename *smb_fname = NULL;
 	int ret;
+	int saved_errno = 0;
 
 	cappath = capencode(talloc_tos(), smb_fname->base_name);
-
-	if (!cappath) {
+	if (cappath == NULL) {
 		errno = ENOMEM;
 		return -1;
 	}
 
-	tmp_base_name = smb_fname->base_name;
+	smb_fname = cp_smb_filename(talloc_tos(), smb_fname_in);
+	if (smb_fname == NULL) {
+		TALLOC_FREE(cappath);
+		errno = ENOMEM;
+		return -1;
+	}
 	smb_fname->base_name = cappath;
 
-	DEBUG(3,("cap: cap_open for %s\n", smb_fname_str_dbg(smb_fname)));
-	ret = SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+	DBG_DEBUG("cap_open for %s\n", smb_fname_str_dbg(smb_fname));
+	ret = SMB_VFS_NEXT_OPENAT(handle,
+				  dirfsp,
+				  smb_fname,
+				  fsp,
+				  flags,
+				  mode);
 
-	smb_fname->base_name = tmp_base_name;
+	if (ret == -1) {
+		saved_errno = errno;
+	}
 	TALLOC_FREE(cappath);
-
+	TALLOC_FREE(smb_fname);
+	if (saved_errno != 0) {
+		errno = saved_errno;
+	}
 	return ret;
 }
 
@@ -1061,7 +1080,7 @@ static struct vfs_fn_pointers vfs_cap_fns = {
 	.get_quota_fn = cap_get_quota,
 	.readdir_fn = cap_readdir,
 	.mkdirat_fn = cap_mkdirat,
-	.open_fn = cap_open,
+	.openat_fn = cap_openat,
 	.renameat_fn = cap_renameat,
 	.stat_fn = cap_stat,
 	.lstat_fn = cap_lstat,
diff --git a/source3/modules/vfs_catia.c b/source3/modules/vfs_catia.c
index 6b89974a7ae..6fc14de076b 100644
--- a/source3/modules/vfs_catia.c
+++ b/source3/modules/vfs_catia.c
@@ -438,9 +438,9 @@ static int catia_fetch_fsp_pre_next(TALLOC_CTX *mem_ctx,
 }
 
 #define CATIA_FETCH_FSP_POST_NEXT(_cc, fsp) do { \
-	int saved_errno = errno; \
+	int catia_saved_errno = errno; \
 	catia_fetch_fsp_post_next((_cc), (fsp), __func__); \
-	errno = saved_errno; \
+	errno = catia_saved_errno; \
 } while(0)
 
 static void catia_fetch_fsp_post_next(struct catia_cache **_cc,
@@ -485,21 +485,23 @@ static void catia_fetch_fsp_post_next(struct catia_cache **_cc,
 	return;
 }
 
-static int catia_open(vfs_handle_struct *handle,
-		      struct smb_filename *smb_fname,
-		      files_struct *fsp,
-		      int flags,
-		      mode_t mode)
+static int catia_openat(vfs_handle_struct *handle,
+			const struct files_struct *dirfsp,
+			const struct smb_filename *smb_fname_in,
+			files_struct *fsp,
+			int flags,
+			mode_t mode)
 {


-- 
Samba Shared Repository



More information about the samba-cvs mailing list