diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-10-17 21:17:29 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-10-18 07:13:47 +1100 |
commit | 0463d698835053af680db4f388c732d2557f7c8a (patch) | |
tree | 49b155b104c4c8c41f42560e8032e666ca37a036 /source4/ntvfs/posix/pvfs_resolve.c | |
parent | d1efaf39f51102835eda9aca12433e926354da77 (diff) | |
download | samba-0463d698835053af680db4f388c732d2557f7c8a.tar.gz samba-0463d698835053af680db4f388c732d2557f7c8a.tar.bz2 samba-0463d698835053af680db4f388c732d2557f7c8a.zip |
s4-pvfs: change the handling of access checking on create
Previously when a file was created, we produces the resulting access
mask based on an ACL check against the parent. This change means we
now calculate the inherited ACL much earlier, and produce the
resulting access mask from that ACL, or the user supplied ACL.
Diffstat (limited to 'source4/ntvfs/posix/pvfs_resolve.c')
-rw-r--r-- | source4/ntvfs/posix/pvfs_resolve.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/source4/ntvfs/posix/pvfs_resolve.c b/source4/ntvfs/posix/pvfs_resolve.c index 8e8da72e1f..8c5806d93f 100644 --- a/source4/ntvfs/posix/pvfs_resolve.c +++ b/source4/ntvfs/posix/pvfs_resolve.c @@ -498,13 +498,14 @@ static NTSTATUS pvfs_reduce_name(TALLOC_CTX *mem_ctx, TODO: ../ collapsing, and outside share checking */ -NTSTATUS pvfs_resolve_name(struct pvfs_state *pvfs, TALLOC_CTX *mem_ctx, +NTSTATUS pvfs_resolve_name(struct pvfs_state *pvfs, + struct ntvfs_request *req, const char *cifs_name, uint_t flags, struct pvfs_filename **name) { NTSTATUS status; - *name = talloc(mem_ctx, struct pvfs_filename); + *name = talloc(req, struct pvfs_filename); if (*name == NULL) { return NT_STATUS_NO_MEMORY; } @@ -516,6 +517,12 @@ NTSTATUS pvfs_resolve_name(struct pvfs_state *pvfs, TALLOC_CTX *mem_ctx, flags &= ~PVFS_RESOLVE_STREAMS; } + /* SMB2 doesn't allow a leading slash */ + if (req->ctx->protocol == PROTOCOL_SMB2 && + *cifs_name == '\\') { + return NT_STATUS_INVALID_PARAMETER; + } + /* do the basic conversion to a unix formatted path, also checking for allowable characters */ status = pvfs_unix_path(pvfs, cifs_name, flags, *name); |