[SCM] Samba Shared Repository - branch master updated

David Disseldorp ddiss at samba.org
Thu Oct 24 08:16:02 MDT 2013


The branch, master has been updated
       via  2d51424 torture: Add smb2.oplock.levelII501 test
       via  e689b7d smbd: Move oplock handling together
       via  7b70fa1 smbd: Move oplock/sharemode ops into one place
       via  184cc13 smbd: Remove separate oplock_type parameter from set_file_oplock
       via  bd54228 smbd: Unify parameters to set_oplock_type
       via  670da42 smbd: Make release_file_oplock static
       via  31ab49f smbd: Use remove_oplock() in close_normal_file
       via  dfd65f9 Fix comment showing how to print an ACL to allow debug.
       via  a1bc1c3 Fix bug 10196 - RW Deny for a specific user is not overriding RW Allow for a group.
       via  14813e7 Fix bug 10196 - RW Deny for a specific user is not overriding RW Allow for a group.
      from  cdd232c torture: Extend the raw.oplock.level_ii_1 test

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 2d51424569a9fbb60215957bf5c17a1f0a9bb9ca
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Oct 22 09:18:01 2013 +0000

    torture: Add smb2.oplock.levelII501 test
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>
    
    Autobuild-User(master): David Disseldorp <ddiss at samba.org>
    Autobuild-Date(master): Thu Oct 24 16:15:50 CEST 2013 on sn-devel-104

commit e689b7d51e6ffd848ab10e160dca2c3a03fc750b
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Sep 26 14:18:28 2013 -0700

    smbd: Move oplock handling together
    
    Later on we will have all the oplock/sharemode operations in one routine.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit 7b70fa18734d9ceb020fe3e5d4cc0c26cd27a484
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Sep 3 14:02:09 2013 +0000

    smbd: Move oplock/sharemode ops into one place
    
    This makes the is_stat_open special case in grant_fsp_oplock_type
    redundant because in open_file_ntcreate further up we have already set
    oplock_request to NO_OPLOCK for stat opens.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit 184cc138b6fcd832fd084a919d65ad2f273bf5eb
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Sep 3 13:57:11 2013 +0000

    smbd: Remove separate oplock_type parameter from set_file_oplock
    
    This avoids the question where it could happen that something else but
    fsp->oplock_type might be useful as an argument here.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit bd542281bc424e4feae255df16b04f598d692304
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Sep 3 13:27:49 2013 +0000

    smbd: Unify parameters to set_oplock_type
    
    Some lines above we set fsp->oplock_type = e->op_type. I don't see
    how this might have changed. This change will unify both callers of
    set_file_oplock. In the next step the second parameter to set_file_oplock
    will be removed.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit 670da42bfb2de69031f98d02ed09ca7b6680c927
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Sep 13 13:55:05 2013 +0200

    smbd: Make release_file_oplock static
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit 31ab49f173ddab8b431e3980e78468ab31e3c9bf
Author: Volker Lendecke <vl at samba.org>
Date:   Fri Sep 13 13:49:20 2013 +0200

    smbd: Use remove_oplock() in close_normal_file
    
    remove_oplock is a wrapper around release_file_oplock. This streamlines
    the exports of oplock.c a bit.
    
    Reason for this patch: In a later patch I will add functionality to
    remove_oplock that is required in close_normal_file as well.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit dfd65f93975716f3398f2b75094267648bd9dd31
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Oct 23 15:07:31 2013 -0700

    Fix comment showing how to print an ACL to allow debug.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit a1bc1c32e33508c45e614646d69a5f5d67ba22be
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Oct 23 15:06:40 2013 -0700

    Fix bug 10196 - RW Deny for a specific user is not overriding RW Allow for a group.
    
    Fix posix_acl tests to match the change in writing ACLs
    with ID_TYPE_BOTH.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

commit 14813e74431816cd894fb242ff5633c2cd14ddca
Author: Jeremy Allison <jra at samba.org>
Date:   Mon Oct 21 16:59:11 2013 -0700

    Fix bug 10196 - RW Deny for a specific user is not overriding RW Allow for a group.
    
    When the ID returned is ID_TYPE_BOTH we must *always* add it as both
    a user and a group, not just in the owning case. Otherwise DENY
    entries are not correctly processed.
    
    Confirmed by the reporter as fixing the problem.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=10196
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: David Disseldorp <ddiss at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 python/samba/tests/posixacl.py |  166 +++++++++++++++++++-------
 selftest/skip                  |    2 +
 source3/smbd/close.c           |    2 +-
 source3/smbd/durable.c         |    2 +-
 source3/smbd/open.c            |   27 ++---
 source3/smbd/oplock.c          |    9 +-
 source3/smbd/posix_acls.c      |   81 +++++++------
 source3/smbd/proto.h           |    3 +-
 source4/torture/smb2/oplock.c  |  257 +++++++++++++++++++++++++++++++++++++++-
 9 files changed, 437 insertions(+), 112 deletions(-)


Changeset truncated at 500 lines:

diff --git a/python/samba/tests/posixacl.py b/python/samba/tests/posixacl.py
index f3a4772..a6b5118 100644
--- a/python/samba/tests/posixacl.py
+++ b/python/samba/tests/posixacl.py
@@ -32,8 +32,10 @@ from samba.samba3 import param as s3param
 #        for entry in posix_acl.acl:
 #            print "a_type: %d" % entry.a_type
 #            print "a_perm: %o" % entry.a_perm
-#            print "uid: %d" % entry.uid
-#            print "gid: %d" % entry.gid
+#            if entry.a_type == smb_acl.SMB_ACL_USER:
+#                print "uid: %d" % entry.uid
+#            if entry.a_type == smb_acl.SMB_ACL_GROUP:
+#                print "gid: %d" % entry.gid
 
 class PosixAclMappingTests(TestCaseInTempDir):
 
@@ -336,7 +338,7 @@ class PosixAclMappingTests(TestCaseInTempDir):
         (AU_gid,AU_type) = s4_passdb.sid_to_id(AU_sid)
         self.assertEquals(AU_type, idmap.ID_TYPE_BOTH)
 
-        self.assertEquals(posix_acl.count, 9)
+        self.assertEquals(posix_acl.count, 13)
 
         self.assertEquals(posix_acl.acl[0].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[0].a_perm, 7)
@@ -352,23 +354,39 @@ class PosixAclMappingTests(TestCaseInTempDir):
         self.assertEquals(posix_acl.acl[3].a_type, smb_acl.SMB_ACL_USER_OBJ)
         self.assertEquals(posix_acl.acl[3].a_perm, 6)
 
-        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[4].a_perm, 7)
+        self.assertEquals(posix_acl.acl[4].info.uid, BA_gid)
 
-        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[5].a_perm, 5)
-        self.assertEquals(posix_acl.acl[5].info.gid, SO_gid)
+        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[5].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[6].a_perm, 7)
-        self.assertEquals(posix_acl.acl[6].info.gid, SY_gid)
+        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[6].a_perm, 5)
+        self.assertEquals(posix_acl.acl[6].info.uid, SO_gid)
 
         self.assertEquals(posix_acl.acl[7].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[7].a_perm, 5)
-        self.assertEquals(posix_acl.acl[7].info.gid, AU_gid)
+        self.assertEquals(posix_acl.acl[7].info.gid, SO_gid)
 
-        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[8].a_perm, 7)
+        self.assertEquals(posix_acl.acl[8].info.uid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[9].a_perm, 7)
+        self.assertEquals(posix_acl.acl[9].info.gid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[10].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[10].a_perm, 5)
+        self.assertEquals(posix_acl.acl[10].info.uid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[11].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[11].a_perm, 5)
+        self.assertEquals(posix_acl.acl[11].info.gid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[12].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[12].a_perm, 7)
 
 
 # check that it matches:
@@ -454,7 +472,7 @@ class PosixAclMappingTests(TestCaseInTempDir):
         (AU_gid,AU_type) = s4_passdb.sid_to_id(AU_sid)
         self.assertEquals(AU_type, idmap.ID_TYPE_BOTH)
 
-        self.assertEquals(posix_acl.count, 9)
+        self.assertEquals(posix_acl.count, 13)
 
         self.assertEquals(posix_acl.acl[0].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[0].a_perm, 7)
@@ -470,23 +488,39 @@ class PosixAclMappingTests(TestCaseInTempDir):
         self.assertEquals(posix_acl.acl[3].a_type, smb_acl.SMB_ACL_USER_OBJ)
         self.assertEquals(posix_acl.acl[3].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[4].a_perm, 7)
+        self.assertEquals(posix_acl.acl[4].info.uid, BA_gid)
 
-        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[5].a_perm, 5)
-        self.assertEquals(posix_acl.acl[5].info.gid, SO_gid)
+        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[5].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[6].a_perm, 7)
-        self.assertEquals(posix_acl.acl[6].info.gid, SY_gid)
+        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[6].a_perm, 5)
+        self.assertEquals(posix_acl.acl[6].info.uid, SO_gid)
 
         self.assertEquals(posix_acl.acl[7].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[7].a_perm, 5)
-        self.assertEquals(posix_acl.acl[7].info.gid, AU_gid)
+        self.assertEquals(posix_acl.acl[7].info.gid, SO_gid)
 
-        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[8].a_perm, 7)
+        self.assertEquals(posix_acl.acl[8].info.uid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[9].a_perm, 7)
+        self.assertEquals(posix_acl.acl[9].info.gid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[10].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[10].a_perm, 5)
+        self.assertEquals(posix_acl.acl[10].info.uid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[11].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[11].a_perm, 5)
+        self.assertEquals(posix_acl.acl[11].info.gid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[12].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[12].a_perm, 7)
 
 
 # check that it matches:
@@ -534,7 +568,7 @@ class PosixAclMappingTests(TestCaseInTempDir):
         (PA_gid,PA_type) = s4_passdb.sid_to_id(PA_sid)
         self.assertEquals(PA_type, idmap.ID_TYPE_BOTH)
 
-        self.assertEquals(posix_acl.count, 10)
+        self.assertEquals(posix_acl.count, 15)
 
         self.assertEquals(posix_acl.acl[0].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[0].a_perm, 7)
@@ -550,27 +584,47 @@ class PosixAclMappingTests(TestCaseInTempDir):
         self.assertEquals(posix_acl.acl[3].a_type, smb_acl.SMB_ACL_USER_OBJ)
         self.assertEquals(posix_acl.acl[3].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[4].a_perm, 7)
+        self.assertEquals(posix_acl.acl[4].info.uid, BA_gid)
 
-        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[5].a_perm, 5)
-        self.assertEquals(posix_acl.acl[5].info.gid, SO_gid)
+        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[5].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[6].a_perm, 7)
-        self.assertEquals(posix_acl.acl[6].info.gid, SY_gid)
+        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[6].a_perm, 5)
+        self.assertEquals(posix_acl.acl[6].info.uid, SO_gid)
 
         self.assertEquals(posix_acl.acl[7].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[7].a_perm, 5)
-        self.assertEquals(posix_acl.acl[7].info.gid, AU_gid)
+        self.assertEquals(posix_acl.acl[7].info.gid, SO_gid)
 
-        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[8].a_perm, 7)
-        self.assertEquals(posix_acl.acl[8].info.gid, PA_gid)
+        self.assertEquals(posix_acl.acl[8].info.uid, SY_gid)
 
-        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[9].a_perm, 7)
+        self.assertEquals(posix_acl.acl[9].info.gid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[10].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[10].a_perm, 5)
+        self.assertEquals(posix_acl.acl[10].info.uid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[11].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[11].a_perm, 5)
+        self.assertEquals(posix_acl.acl[11].info.gid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[12].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[12].a_perm, 7)
+        self.assertEquals(posix_acl.acl[12].info.uid, PA_gid)
+
+        self.assertEquals(posix_acl.acl[13].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[13].a_perm, 7)
+        self.assertEquals(posix_acl.acl[13].info.gid, PA_gid)
+
+        self.assertEquals(posix_acl.acl[14].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[14].a_perm, 7)
 
 
 # check that it matches:
@@ -621,7 +675,7 @@ class PosixAclMappingTests(TestCaseInTempDir):
         (PA_gid,PA_type) = s4_passdb.sid_to_id(PA_sid)
         self.assertEquals(PA_type, idmap.ID_TYPE_BOTH)
 
-        self.assertEquals(posix_acl.count, 10)
+        self.assertEquals(posix_acl.count, 15)
 
         self.assertEquals(posix_acl.acl[0].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[0].a_perm, 7)
@@ -637,27 +691,47 @@ class PosixAclMappingTests(TestCaseInTempDir):
         self.assertEquals(posix_acl.acl[3].a_type, smb_acl.SMB_ACL_USER_OBJ)
         self.assertEquals(posix_acl.acl[3].a_perm, 6)
 
-        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[4].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[4].a_perm, 7)
+        self.assertEquals(posix_acl.acl[4].info.uid, BA_gid)
 
-        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[5].a_perm, 5)
-        self.assertEquals(posix_acl.acl[5].info.gid, SO_gid)
+        self.assertEquals(posix_acl.acl[5].a_type, smb_acl.SMB_ACL_GROUP_OBJ)
+        self.assertEquals(posix_acl.acl[5].a_perm, 7)
 
-        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_GROUP)
-        self.assertEquals(posix_acl.acl[6].a_perm, 7)
-        self.assertEquals(posix_acl.acl[6].info.gid, SY_gid)
+        self.assertEquals(posix_acl.acl[6].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[6].a_perm, 5)
+        self.assertEquals(posix_acl.acl[6].info.uid, SO_gid)
 
         self.assertEquals(posix_acl.acl[7].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[7].a_perm, 5)
-        self.assertEquals(posix_acl.acl[7].info.gid, AU_gid)
+        self.assertEquals(posix_acl.acl[7].info.gid, SO_gid)
 
-        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[8].a_type, smb_acl.SMB_ACL_USER)
         self.assertEquals(posix_acl.acl[8].a_perm, 7)
-        self.assertEquals(posix_acl.acl[8].info.gid, PA_gid)
+        self.assertEquals(posix_acl.acl[8].info.uid, SY_gid)
 
-        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[9].a_type, smb_acl.SMB_ACL_GROUP)
         self.assertEquals(posix_acl.acl[9].a_perm, 7)
+        self.assertEquals(posix_acl.acl[9].info.gid, SY_gid)
+
+        self.assertEquals(posix_acl.acl[10].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[10].a_perm, 5)
+        self.assertEquals(posix_acl.acl[10].info.uid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[11].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[11].a_perm, 5)
+        self.assertEquals(posix_acl.acl[11].info.gid, AU_gid)
+
+        self.assertEquals(posix_acl.acl[12].a_type, smb_acl.SMB_ACL_USER)
+        self.assertEquals(posix_acl.acl[12].a_perm, 7)
+        self.assertEquals(posix_acl.acl[12].info.uid, PA_gid)
+
+        self.assertEquals(posix_acl.acl[13].a_type, smb_acl.SMB_ACL_GROUP)
+        self.assertEquals(posix_acl.acl[13].a_perm, 7)
+        self.assertEquals(posix_acl.acl[13].info.gid, PA_gid)
+
+        self.assertEquals(posix_acl.acl[14].a_type, smb_acl.SMB_ACL_MASK)
+        self.assertEquals(posix_acl.acl[14].a_perm, 7)
 
 
 # check that it matches:
diff --git a/selftest/skip b/selftest/skip
index 0b8468d..de721f3 100644
--- a/selftest/skip
+++ b/selftest/skip
@@ -43,6 +43,7 @@
 ^samba3.smb2.hold-oplock                # Not a test, but a way to block other clients for a test
 ^samba3.smb2.durable-open-disconnect    # Not a test, but a way to create a disconnected durable
 ^samba3.smb2.scan                       # No tests
+^samba3.smb2.oplock.levelii501		# No test yet
 ^samba4.base.iometer
 ^samba4.base.casetable
 ^samba4.base.nttrans
@@ -62,6 +63,7 @@
 ^samba4.smb2.dir
 ^samba4.smb2.session
 ^samba4.smb2.compound
+^samba4.smb2.oplock.levelii501		# No test yet
 ^samba4.ntvfs.cifs.*.base.charset
 ^samba4.ntvfs.cifs.*.base.iometer
 ^samba4.ntvfs.cifs.*.base.casetable
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index f341c72..6153066 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -735,7 +735,7 @@ static NTSTATUS close_normal_file(struct smb_request *req, files_struct *fsp,
 
 	/* Remove the oplock before potentially deleting the file. */
 	if(fsp->oplock_type) {
-		release_file_oplock(fsp);
+		remove_oplock(fsp);
 	}
 
 	/* If this is an old DOS or FCB open and we have multiple opens on
diff --git a/source3/smbd/durable.c b/source3/smbd/durable.c
index 9b05d48..c5281a8 100644
--- a/source3/smbd/durable.c
+++ b/source3/smbd/durable.c
@@ -864,7 +864,7 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
-	status = set_file_oplock(fsp, e->op_type);
+	status = set_file_oplock(fsp);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(1, ("vfs_default_durable_reconnect failed to set oplock "
 			  "after opening file: %s\n", nt_errstr(status)));
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index c33a4cf..8ae2246 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1435,13 +1435,6 @@ static void grant_fsp_oplock_type(files_struct *fsp,
 		fsp->oplock_type = NO_OPLOCK;
 	}
 
-	if (is_stat_open(fsp->access_mask)) {
-		/* Leave the value already set. */
-		DEBUG(10,("grant_fsp_oplock_type: oplock type 0x%x on file %s\n",
-			fsp->oplock_type, fsp_str_dbg(fsp)));
-		return;
-	}
-
 	got_level2_oplock = false;
 	got_a_none_oplock = false;
 
@@ -2617,8 +2610,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 		return status;
 	}
 
-	grant_fsp_oplock_type(fsp, lck, oplock_request);
-
 	/*
 	 * We have the share entry *locked*.....
 	 */
@@ -2677,13 +2668,6 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 		fsp->access_mask = access_mask | FILE_READ_ATTRIBUTES;
 	}
 
-	if (file_existed) {
-		/* stat opens on existing files don't get oplocks. */
-		if (is_stat_open(open_access_mask)) {
-			fsp->oplock_type = NO_OPLOCK;
-		}
-	}
-
 	if (new_file_created) {
 		info = FILE_WAS_CREATED;
 	} else {
@@ -2703,7 +2687,16 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn,
 	 * file structs.
 	 */
 
-	status = set_file_oplock(fsp, fsp->oplock_type);
+	if (file_existed) {
+		/* stat opens on existing files don't get oplocks. */
+		if (is_stat_open(open_access_mask)) {
+			oplock_request = NO_OPLOCK;
+		}
+	}
+
+	grant_fsp_oplock_type(fsp, lck, oplock_request);
+
+	status = set_file_oplock(fsp);
 	if (!NT_STATUS_IS_OK(status)) {
 		/*
 		 * Could not get the kernel oplock
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index d30aa4b..b5d6b54 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -50,7 +50,7 @@ void break_kernel_oplock(struct messaging_context *msg_ctx, files_struct *fsp)
  disabled (just sets flags).
 ****************************************************************************/
 
-NTSTATUS set_file_oplock(files_struct *fsp, int oplock_type)
+NTSTATUS set_file_oplock(files_struct *fsp)
 {
 	struct smbd_server_connection *sconn = fsp->conn->sconn;
 	struct kernel_oplocks *koplocks = sconn->oplocks.kernel_ops;
@@ -67,14 +67,13 @@ NTSTATUS set_file_oplock(files_struct *fsp, int oplock_type)
 
 	if ((fsp->oplock_type != NO_OPLOCK) &&
 	    use_kernel &&
-	    !koplocks->ops->set_oplock(koplocks, fsp, oplock_type))
+	    !koplocks->ops->set_oplock(koplocks, fsp, fsp->oplock_type))
 	{
 		return map_nt_error_from_unix(errno);
 	}
 
-	fsp->oplock_type = oplock_type;
 	fsp->sent_oplock_break = NO_BREAK_SENT;
-	if (oplock_type == LEVEL_II_OPLOCK) {
+	if (fsp->oplock_type == LEVEL_II_OPLOCK) {
 		sconn->oplocks.level_II_open++;
 	} else if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
 		sconn->oplocks.exclusive_open++;
@@ -93,7 +92,7 @@ NTSTATUS set_file_oplock(files_struct *fsp, int oplock_type)
  Attempt to release an oplock on a file. Decrements oplock count.
 ****************************************************************************/
 
-void release_file_oplock(files_struct *fsp)
+static void release_file_oplock(files_struct *fsp)
 {
 	struct smbd_server_connection *sconn = fsp->conn->sconn;
 	struct kernel_oplocks *koplocks = sconn->oplocks.kernel_ops;
diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c
index ad1431d..621457e 100644
--- a/source3/smbd/posix_acls.c
+++ b/source3/smbd/posix_acls.c
@@ -1981,47 +1981,50 @@ static bool create_canon_ace_lists(files_struct *fsp,
 			}
 
 			if (unixid.type == ID_TYPE_BOTH) {
-				/* If it's the owning user, this is a
-				 * user_obj, not a user.  This way, we
-				 * get a valid ACL for groups that own
-				 * files, without putting user ACL
-				 * entries in for groups otherwise */
-				if (unixid.id == pst->st_ex_uid) {
-					current_ace->owner_type = UID_ACE;
-					current_ace->unix_ug.type = ID_TYPE_UID;
-					current_ace->unix_ug.id = unixid.id;
-					current_ace->type = SMB_ACL_USER_OBJ;
-
-					/* Add the user object to the posix ACL,
-					   and proceed to the group mapping
-					   below. This handles the talloc_free
-					   of current_ace if not added for some
-					   reason */
-					if (!add_current_ace_to_acl(fsp,
-							psa,
-							&file_ace,
-							&dir_ace,
-							&got_file_allow,
-							&got_dir_allow,
-							&all_aces_are_inherit_only,
-							current_ace)) {
-						free_canon_ace_list(file_ace);
-						free_canon_ace_list(dir_ace);
-						return false;
-					}
-
-					if ((current_ace = talloc(talloc_tos(),
-							canon_ace)) == NULL) {
-						free_canon_ace_list(file_ace);
-						free_canon_ace_list(dir_ace);
-						DEBUG(0,("create_canon_ace_lists: "
-							"malloc fail.\n"));
-						return False;
-					}
+				/*
+				 * We must add both a user and group
+				 * entry POSIX_ACL.
+				 * This is due to the fact that in POSIX
+				 * user entries are more specific than
+				 * groups.
+				 */
+				current_ace->owner_type = UID_ACE;
+				current_ace->unix_ug.type = ID_TYPE_UID;
+				current_ace->unix_ug.id = unixid.id;
+				current_ace->type =
+					(unixid.id == pst->st_ex_uid) ?
+						SMB_ACL_USER_OBJ :
+						SMB_ACL_USER;
+
+				/* Add the user object to the posix ACL,
+				   and proceed to the group mapping
+				   below. This handles the talloc_free
+				   of current_ace if not added for some
+				   reason */
+				if (!add_current_ace_to_acl(fsp,
+						psa,
+						&file_ace,
+						&dir_ace,
+						&got_file_allow,
+						&got_dir_allow,
+						&all_aces_are_inherit_only,
+						current_ace)) {
+					free_canon_ace_list(file_ace);
+					free_canon_ace_list(dir_ace);
+					return false;
+				}
 
-					ZERO_STRUCTP(current_ace);
+				if ((current_ace = talloc(talloc_tos(),
+						canon_ace)) == NULL) {
+					free_canon_ace_list(file_ace);
+					free_canon_ace_list(dir_ace);
+					DEBUG(0,("create_canon_ace_lists: "
+						"malloc fail.\n"));
+					return False;
 				}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list