s3/vfs: add vfs_at_fspcwd()
authorRalph Boehme <slow@samba.org>
Wed, 20 May 2020 15:01:48 +0000 (17:01 +0200)
committerJeremy Allison <jra@samba.org>
Thu, 21 May 2020 20:38:31 +0000 (20:38 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/include/proto.h
source3/smbd/vfs.c

index 0e96fcccc6593aaeda4995d42379e0546d67cc1c..12aa392abae55a21862da51b5934fc8838d03198 100644 (file)
@@ -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);
index dbb2c05493b3c3d52e51d53407b00bdcc849869c..454f88e5652eb02f989e70f4beea8d2585869488 100644 (file)
@@ -1555,6 +1555,37 @@ struct file_id vfs_file_id_from_sbuf(connection_struct *conn, const SMB_STRUCT_S
        return SMB_VFS_FILE_ID_CREATE(conn, sbuf);
 }
 
+NTSTATUS vfs_at_fspcwd(TALLOC_CTX *mem_ctx,
+                      struct connection_struct *conn,
+                      struct files_struct **_fsp)
+{
+       struct files_struct *fsp = NULL;
+
+       fsp = talloc_zero(mem_ctx, struct files_struct);
+       if (fsp == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       fsp->fsp_name = synthetic_smb_fname(fsp, ".", NULL, NULL, 0, 0);
+       if (fsp->fsp_name == NULL) {
+               TALLOC_FREE(fsp);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       fsp->fh = talloc_zero(fsp, struct fd_handle);
+       if (fsp->fh == NULL) {
+               TALLOC_FREE(fsp);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       fsp->fh->fd = AT_FDCWD;
+       fsp->fnum = FNUM_FIELD_INVALID;
+       fsp->conn = conn;
+
+       *_fsp = fsp;
+       return NT_STATUS_OK;
+}
+
 int smb_vfs_call_connect(struct vfs_handle_struct *handle,
                         const char *service, const char *user)
 {