]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: VFS: Add vfs_stat_smb_basename() - to be called when we *know* stream name...
authorJeremy Allison <jra@samba.org>
Fri, 1 May 2015 19:50:51 +0000 (12:50 -0700)
committerKarolin Seeger <kseeger@samba.org>
Wed, 20 May 2015 14:34:30 +0000 (16:34 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=11249

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit 044dabfd92d09de4f168a36a07ac3232f5647a1d)

source3/smbd/proto.h
source3/smbd/vfs.c

index 327b25d370ed8a6c15930faaae6c0cf4f510bc69..2ff0f889edcd940e0d53c160af01e823991612e9 100644 (file)
@@ -1158,6 +1158,8 @@ int vfs_stat_smb_fname(struct connection_struct *conn, const char *fname,
                       SMB_STRUCT_STAT *psbuf);
 int vfs_lstat_smb_fname(struct connection_struct *conn, const char *fname,
                        SMB_STRUCT_STAT *psbuf);
+int vfs_stat_smb_basename(struct connection_struct *conn, const char *fname,
+                       SMB_STRUCT_STAT *psbuf);
 NTSTATUS vfs_stat_fsp(files_struct *fsp);
 NTSTATUS vfs_chown_fsp(files_struct *fsp, uid_t uid, gid_t gid);
 NTSTATUS vfs_streaminfo(connection_struct *conn,
index cdd5042d1f4d71f39fa43d938fab1b3440bc0675..118f6c90b2b126e5aeb0d793fcc7e1ec5585c181 100644 (file)
@@ -1324,6 +1324,32 @@ int vfs_lstat_smb_fname(struct connection_struct *conn, const char *fname,
        return ret;
 }
 
+/**
+ * XXX: This is temporary and there should be no callers of this once
+ * smb_filename is plumbed through all path based operations.
+ *
+ * Called when we know stream name parsing has already been done.
+ */
+int vfs_stat_smb_basename(struct connection_struct *conn, const char *fname,
+                      SMB_STRUCT_STAT *psbuf)
+{
+       struct smb_filename smb_fname = {
+                       .base_name = discard_const_p(char, fname)
+       };
+       int ret;
+
+       if (lp_posix_pathnames()) {
+               ret = SMB_VFS_LSTAT(conn, &smb_fname);
+       } else {
+               ret = SMB_VFS_STAT(conn, &smb_fname);
+       }
+
+       if (ret != -1) {
+               *psbuf = smb_fname.st;
+       }
+       return ret;
+}
+
 /**
  * Ensure LSTAT is called for POSIX paths.
  */