summaryrefslogtreecommitdiffstats
path: root/source4/ntvfs
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-08-14 12:37:31 +0200
committerStefan Metzmacher <metze@samba.org>2008-08-14 13:13:51 +0200
commitcc60d5a0320f824f7dc7b8abbe9cb0ccd668dda2 (patch)
treec7ad0c7bdd80e7c67d7c828bee98a62e1fbe11ae /source4/ntvfs
parentdbcdbb33485b034b48b32e4801a538bbc239d1c2 (diff)
downloadsamba-cc60d5a0320f824f7dc7b8abbe9cb0ccd668dda2.tar.gz
samba-cc60d5a0320f824f7dc7b8abbe9cb0ccd668dda2.tar.xz
samba-cc60d5a0320f824f7dc7b8abbe9cb0ccd668dda2.zip
pvfs: fix handling of create_option flags
metze (This used to be commit 3c6cadf76861d6522c5ec41953df1ba2fac4910d)
Diffstat (limited to 'source4/ntvfs')
-rw-r--r--source4/ntvfs/posix/pvfs_open.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/source4/ntvfs/posix/pvfs_open.c b/source4/ntvfs/posix/pvfs_open.c
index 6114b2052c1..c127885a68f 100644
--- a/source4/ntvfs/posix/pvfs_open.c
+++ b/source4/ntvfs/posix/pvfs_open.c
@@ -1181,6 +1181,7 @@ NTSTATUS pvfs_open(struct ntvfs_module_context *ntvfs,
int fd;
struct odb_lock *lck;
uint32_t create_options;
+ uint32_t create_options_must_ignore_mask;
uint32_t share_access;
uint32_t access_mask;
uint32_t create_action = NTCREATEX_ACTION_EXISTED;
@@ -1206,13 +1207,22 @@ NTSTATUS pvfs_open(struct ntvfs_module_context *ntvfs,
return NT_STATUS_INVALID_PARAMETER;
}
- /* These options are ignored */
- create_options &= ~NTCREATEX_OPTIONS_MUST_IGNORE_MASK;
+ /*
+ * These options are ignored,
+ * but we reuse some of them as private values for the generic mapping
+ */
+ create_options_must_ignore_mask = NTCREATEX_OPTIONS_MUST_IGNORE_MASK;
+ create_options_must_ignore_mask &= ~NTCREATEX_OPTIONS_PRIVATE_MASK;
+ create_options &= ~create_options_must_ignore_mask;
if (create_options & NTCREATEX_OPTIONS_NOT_SUPPORTED_MASK) {
return NT_STATUS_NOT_SUPPORTED;
}
+ if (create_options & NTCREATEX_OPTIONS_INVALID_PARAM_MASK) {
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
/* TODO: When we implement HSM, add a hook here not to pull
* the actual file off tape, when this option is passed from
* the client */