summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Cooper <samba@ira.wakeful.net>2010-05-20 11:13:37 -0400
committerJeremy Allison <jra@samba.org>2010-05-21 09:57:33 -0700
commit28b8d421364a1d55bf28a2552f58b5e4325d2bbb (patch)
tree9ea5b78f102479eb69d3e19185e1861a807c84ac
parentdd3c367153353407f41642b6da4549057cc4c1e7 (diff)
downloadsamba-28b8d421364a1d55bf28a2552f58b5e4325d2bbb.tar.gz
samba-28b8d421364a1d55bf28a2552f58b5e4325d2bbb.tar.bz2
samba-28b8d421364a1d55bf28a2552f58b5e4325d2bbb.zip
s3: added support for fake oplocks in SMB2.
-rw-r--r--source3/smbd/smb2_create.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index cc65df235c..31813cc82e 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -421,9 +421,17 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
int info;
struct timespec write_time_ts;
struct smb2_create_blobs out_context_blobs;
+ int requested_oplock_level;
ZERO_STRUCT(out_context_blobs);
+ if(lp_fake_oplocks(SNUM(smb2req->tcon->compat_conn))) {
+ requested_oplock_level = NO_OPLOCK;
+ } else {
+ requested_oplock_level = in_oplock_level;
+ }
+
+
if (!smb2req->async) {
/* New create call. */
req = tevent_req_create(mem_ctx, &state,
@@ -695,7 +703,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
in_create_disposition,
in_create_options,
in_file_attributes,
- map_smb2_oplock_levels_to_samba(in_oplock_level),
+ map_smb2_oplock_levels_to_samba(requested_oplock_level),
allocation_size,
0, /* private_flags */
sec_desc,
@@ -766,7 +774,11 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
smb2req->compat_chain_fsp = smb1req->chain_fsp;
- state->out_oplock_level = map_samba_oplock_levels_to_smb2(result->oplock_type);
+ if(lp_fake_oplocks(SNUM(smb2req->tcon->compat_conn))) {
+ state->out_oplock_level = in_oplock_level;
+ } else {
+ state->out_oplock_level = map_samba_oplock_levels_to_smb2(result->oplock_type);
+ }
if ((in_create_disposition == FILE_SUPERSEDE)
&& (info == FILE_WAS_OVERWRITTEN)) {