summaryrefslogtreecommitdiff
path: root/source4/ntvfs
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-02-27 13:19:07 +0100
committerJelmer Vernooij <jelmer@samba.org>2008-02-27 13:19:07 +0100
commitbc1a369a0ed254ede591b65756d75568c45549ea (patch)
tree9c7fdefdc1d943506752d2d4e15cd4d81f65cc42 /source4/ntvfs
parentb3d2a56df29b163d93c4d20efc22c523441a92e5 (diff)
parente20f1bb6dba342fcc91d3fcf28d64c7d5fd39a38 (diff)
downloadsamba-bc1a369a0ed254ede591b65756d75568c45549ea.tar.gz
samba-bc1a369a0ed254ede591b65756d75568c45549ea.tar.bz2
samba-bc1a369a0ed254ede591b65756d75568c45549ea.zip
Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-gmake3
Conflicts: source/build/smb_build/makefile.pm (This used to be commit c45b97c4714dd0565949732394c9c1e8eedbb99a)
Diffstat (limited to 'source4/ntvfs')
-rw-r--r--source4/ntvfs/common/opendb_tdb.c11
-rw-r--r--source4/ntvfs/posix/pvfs_open.c26
-rw-r--r--source4/ntvfs/posix/pvfs_qfileinfo.c2
3 files changed, 28 insertions, 11 deletions
diff --git a/source4/ntvfs/common/opendb_tdb.c b/source4/ntvfs/common/opendb_tdb.c
index 73c04b7c4f..fe5a0a8864 100644
--- a/source4/ntvfs/common/opendb_tdb.c
+++ b/source4/ntvfs/common/opendb_tdb.c
@@ -288,7 +288,8 @@ static NTSTATUS odb_oplock_break_send(struct odb_context *odb,
}
static bool access_attributes_only(uint32_t access_mask,
- uint32_t open_disposition)
+ uint32_t open_disposition,
+ bool break_to_none)
{
switch (open_disposition) {
case NTCREATEX_DISP_SUPERSEDE:
@@ -298,6 +299,11 @@ static bool access_attributes_only(uint32_t access_mask,
default:
break;
}
+
+ if (break_to_none) {
+ return false;
+ }
+
#define CHECK_MASK(m,g) ((m) && (((m) & ~(g))==0) && (((m) & (g)) != 0))
return CHECK_MASK(access_mask,
SEC_STD_SYNCHRONIZE |
@@ -326,7 +332,8 @@ static NTSTATUS odb_tdb_open_can_internal(struct odb_context *odb,
* but we'll not grant the oplock below
*/
attrs_only = access_attributes_only(access_mask,
- open_disposition);
+ open_disposition,
+ break_to_none);
if (attrs_only) {
break;
}
diff --git a/source4/ntvfs/posix/pvfs_open.c b/source4/ntvfs/posix/pvfs_open.c
index 12b70c00fd..a01352f60c 100644
--- a/source4/ntvfs/posix/pvfs_open.c
+++ b/source4/ntvfs/posix/pvfs_open.c
@@ -1530,7 +1530,7 @@ NTSTATUS pvfs_can_delete(struct pvfs_state *pvfs,
status = odb_can_open(lck, name->stream_id,
share_access, access_mask, delete_on_close,
- 0, false);
+ NTCREATEX_DISP_OPEN, false);
if (NT_STATUS_IS_OK(status)) {
status = pvfs_access_check_simple(pvfs, req, name, access_mask);
@@ -1594,7 +1594,7 @@ NTSTATUS pvfs_can_rename(struct pvfs_state *pvfs,
status = odb_can_open(lck, name->stream_id,
share_access, access_mask, delete_on_close,
- 0, false);
+ NTCREATEX_DISP_OPEN, false);
/*
* if it's a sharing violation or we got no oplock
@@ -1648,15 +1648,25 @@ NTSTATUS pvfs_can_update_file_size(struct pvfs_state *pvfs,
return NT_STATUS_INTERNAL_DB_CORRUPTION;
}
- /* TODO: this may needs some more flags */
- share_access = NTCREATEX_SHARE_ACCESS_WRITE;
- access_mask = 0;
+ share_access = NTCREATEX_SHARE_ACCESS_READ |
+ NTCREATEX_SHARE_ACCESS_WRITE |
+ NTCREATEX_SHARE_ACCESS_DELETE;
+ /*
+ * I would have thought that we would need to pass
+ * SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA here too
+ *
+ * But you only need SEC_FILE_WRITE_ATTRIBUTE permissions
+ * to set the filesize.
+ *
+ * --metze
+ */
+ access_mask = SEC_FILE_WRITE_ATTRIBUTE;
delete_on_close = false;
break_to_none = true;
status = odb_can_open(lck, name->stream_id,
share_access, access_mask, delete_on_close,
- 0, break_to_none);
+ NTCREATEX_DISP_OPEN, break_to_none);
/*
* if it's a sharing violation or we got no oplock
@@ -1710,12 +1720,12 @@ NTSTATUS pvfs_can_stat(struct pvfs_state *pvfs,
share_access = NTCREATEX_SHARE_ACCESS_READ |
NTCREATEX_SHARE_ACCESS_WRITE;
- access_mask = 0;
+ access_mask = SEC_FILE_READ_ATTRIBUTE;
delete_on_close = false;
status = odb_can_open(lck, name->stream_id,
share_access, access_mask, delete_on_close,
- 0, false);
+ NTCREATEX_DISP_OPEN, false);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(lck);
diff --git a/source4/ntvfs/posix/pvfs_qfileinfo.c b/source4/ntvfs/posix/pvfs_qfileinfo.c
index 2f01c08fb0..8d23d707a4 100644
--- a/source4/ntvfs/posix/pvfs_qfileinfo.c
+++ b/source4/ntvfs/posix/pvfs_qfileinfo.c
@@ -330,7 +330,7 @@ NTSTATUS pvfs_qpathinfo(struct ntvfs_module_context *ntvfs,
status = pvfs_can_stat(pvfs, req, name);
if (!NT_STATUS_IS_OK(status)) {
- return NT_STATUS_DELETE_PENDING;
+ return status;
}
status = pvfs_access_check_simple(pvfs, req, name,