The branch, v4-3-test has been updated
       via  9e8a1cb s3:smbstatus: add stream name to share_entry_forall()
       via  60ea0df s3: lsa: lookup_name() logic for unqualified (no DOMAIN\ 
component) names is incorrect.
       via  9f4f2af s3:lib: validate domain name in lookup_wellknown_name()
       via  a83021f s3:locking: initialize lease pointer in 
share_mode_traverse_fn()
       via  46ace5b s4: torture: Add SMB2 access-based enumeration test. Passes 
against Win2k12R2.
       via  fc58a7c lib: cli: Add accessor function smb2cli_tcon_flags() to get 
tcon flags.
       via  52d8aeb s3: smbd: Fix our access-based enumeration on "hide 
unreadable" to match Windows.
       via  617ffc4 smbd: Fix file name buflen and padding in notify repsonse
      from  c84322d vfs_fruit: return value of ad_pack in vfs_fruit.c

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-3-test


- Log -----------------------------------------------------------------
commit 9e8a1cb44e8f63073b6df109fe4800c604132e6d
Author: Ralph Boehme <s...@samba.org>
Date:   Sun Oct 11 09:38:18 2015 +0200

    s3:smbstatus: add stream name to share_entry_forall()
    
    Add stream name argument to share_entry_forall machinery so smbstatus
    can print the stream name of a file.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=11550
    
    Signed-off-by: Ralph Boehme <s...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    (cherry picked from commit cd0c2a5eca43cea76491ae0d820414287c234c1a)
    
    Autobuild-User(v4-3-test): Karolin Seeger <ksee...@samba.org>
    Autobuild-Date(v4-3-test): Tue Oct 20 11:51:16 CEST 2015 on sn-devel-104

commit 60ea0df0887e686653d4ec944e070bc8be3eaa28
Author: Jeremy Allison <j...@samba.org>
Date:   Thu Oct 15 09:20:58 2015 -0700

    s3: lsa: lookup_name() logic for unqualified (no DOMAIN\ component) names 
is incorrect.
    
    Change so we only use unqualified name lookup logic if
    domain component = "" and LOOKUP_NAME_ISOLATED flag is
    passed in.
    
    Remember to search for "NT Authority" *before* going
    into unqualified name lookup logic.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11555
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Uri Simchoni <u...@samba.org>
    (cherry picked from commit 2f6dc260ada6cd178a650ca003c2ad22e12697c1)

commit 9f4f2af72056f7cc96bff45f9baa9f5a0202abf5
Author: Ralph Boehme <s...@samba.org>
Date:   Thu Oct 15 12:35:26 2015 +0200

    s3:lib: validate domain name in lookup_wellknown_name()
    
    If domain argument is not an empty string, only search the matching
    wellknown domain name.
    
    As the only wellknown domain with a name is "NT Authority", passing ""
    to lookup_wellknown_name() will search all domains inlcuding "NT
    Authority".
    
    Passing "NT Authority" otoh will obviously only search that domain.
    
    This change makes lookup_wellknown_name() behave like this:
    
    in domain         | in name       | ok | out sid | out domain
    ========================================================
                        Dialup          +    S-1-5-1   NT Authority
    NT Authority        Dialup          +    S-1-5-1   NT Authority
    Creator Authority   Dialup          -    -         -
                        Creator Owner   +    S-1-3-0   ""
    Creator Authority   Creator Owner   -    -         -
    NT Authority        Creator Owner   -    -         -
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11555
    
    Signed-off-by: Ralph Boehme <s...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Uri Simchoni <u...@samba.org>
    (cherry picked from commit 23f674488a1f62fcc58bb94bed0abed98078b96d)

commit a83021fe900dbda5058f9a5f2f8c3dd8cd9f04db
Author: Ralph Boehme <s...@samba.org>
Date:   Mon Oct 12 12:28:04 2015 +0200

    s3:locking: initialize lease pointer in share_mode_traverse_fn()
    
    Initialize lease pointer to point to the share_mode_data leases array
    entry at index lease_idx.
    
    This fixes a bug in smbstatus where the lease info is not printed.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=11549
    
    Signed-off-by: Ralph Boehme <s...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Tue Oct 13 01:14:09 CEST 2015 on sn-devel-104
    
    (cherry picked from commit 0ef9c67b56a0b493ed06f9a64ac2bc2233041aee)

commit 46ace5b6275d2cb3aabc9f7894e6fe72ceeae4f0
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Oct 13 15:33:47 2015 -0700

    s4: torture: Add SMB2 access-based enumeration test. Passes against 
Win2k12R2.
    
    https://bugzilla.samba.org/show_bug.cgi?id=10252
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    
    Autobuild-User(master): Volker Lendecke <v...@samba.org>
    Autobuild-Date(master): Wed Oct 14 19:00:03 CEST 2015 on sn-devel-104
    
    (cherry picked from commit 808f29cb2f9de47dcf78b380cc8767e9546e1954)

commit fc58a7c25a4ebfcb87476400e7013ce53a4261be
Author: Jeremy Allison <j...@samba.org>
Date:   Fri Oct 9 15:08:05 2015 -0700

    lib: cli: Add accessor function smb2cli_tcon_flags() to get tcon flags.
    
    We need this to see if a share supports access-based enumeration.
    
    https://bugzilla.samba.org/show_bug.cgi?id=10252
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    (cherry picked from commit b1bd84e9c9867092055f29fe39279e1c767f570a)

commit 52d8aeb9e783a17313e81860d58f14ac1f7bb0d5
Author: Jeremy Allison <j...@samba.org>
Date:   Tue Oct 13 16:49:41 2015 -0700

    s3: smbd: Fix our access-based enumeration on "hide unreadable" to match 
Windows.
    
    Torture test to follow.
    
    https://bugzilla.samba.org/show_bug.cgi?id=10252
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    (cherry picked from commit cc05f73872c36cd307da3d6fed200beb16d5c2a8)

commit 617ffc4c88c371bab4a4fb5db4025153e97d79c9
Author: Jeremy Allison <j...@samba.org>
Date:   Fri Oct 16 15:13:47 2015 -0700

    smbd: Fix file name buflen and padding in notify repsonse
    
    The array is uint16, doubling the file name length consumes twice the space
    required.
    
    As we're hand assembling this as a series of concatinated individual 
data_blobs,
    we must take care to ensure the correct 4 byte alignment that was
    being masked by the previous doubling of the filename length.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=10634
    
    Signed-off-by: Jeremy Allison <j...@samba.org>
    Signed-off-by: Volker Lendecke <v...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Sun Oct 18 01:56:41 CEST 2015 on sn-devel-104
    
    (cherry picked from commit 7c483690ac6ed007798aeeb7b8549c9d55877e56)

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

Summary of changes:
 libcli/smb/smbXcli_base.c                 |   5 +
 libcli/smb/smbXcli_base.h                 |   1 +
 librpc/idl/notify.idl                     |   4 +-
 selftest/knownfail                        |   1 +
 source3/lib/util_wellknown.c              |  13 +-
 source3/locking/proto.h                   |   3 +-
 source3/locking/share_mode_lock.c         |  21 ++-
 source3/passdb/lookup_sid.c               |  31 +++-
 source3/rpc_server/srvsvc/srv_srvsvc_nt.c |  21 ++-
 source3/smbd/dir.c                        |  64 ++++++++-
 source3/smbd/notify.c                     |  14 +-
 source3/utils/status.c                    |   6 +-
 source4/torture/smb2/acls.c               | 230 ++++++++++++++++++++++++++++++
 13 files changed, 391 insertions(+), 23 deletions(-)


Changeset truncated at 500 lines:

diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index c1e9e58..6fe4816 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -5991,6 +5991,11 @@ uint32_t smb2cli_tcon_capabilities(struct smbXcli_tcon 
*tcon)
        return tcon->smb2.capabilities;
 }
 
+uint32_t smb2cli_tcon_flags(struct smbXcli_tcon *tcon)
+{
+       return tcon->smb2.flags;
+}
+
 void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             struct smbXcli_session *session,
                             uint32_t tcon_id,
diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h
index cf93135..e4cfb10 100644
--- a/libcli/smb/smbXcli_base.h
+++ b/libcli/smb/smbXcli_base.h
@@ -442,6 +442,7 @@ bool smb1cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             const char *fs_type);
 uint32_t smb2cli_tcon_current_id(struct smbXcli_tcon *tcon);
 uint32_t smb2cli_tcon_capabilities(struct smbXcli_tcon *tcon);
+uint32_t smb2cli_tcon_flags(struct smbXcli_tcon *tcon);
 void smb2cli_tcon_set_values(struct smbXcli_tcon *tcon,
                             struct smbXcli_session *session,
                             uint32_t tcon_id,
diff --git a/librpc/idl/notify.idl b/librpc/idl/notify.idl
index 66422ec..09d06be 100644
--- a/librpc/idl/notify.idl
+++ b/librpc/idl/notify.idl
@@ -93,6 +93,8 @@ interface notify
                uint32 NextEntryOffset;
                FILE_NOTIFY_ACTION Action;
                [value(strlen_m(FileName1)*2)] uint32 FileNameLength;
-               [charset(UTF16),flag(STR_NOTERM)] uint16 
FileName1[FileNameLength];
+               [charset(UTF16),flag(STR_NOTERM)]
+                       uint16 FileName1[strlen_m(FileName1)];
+               DATA_BLOB _pad;
        } FILE_NOTIFY_INFORMATION;
 }
diff --git a/selftest/knownfail b/selftest/knownfail
index bf73176..0d74933 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -147,6 +147,7 @@
 ^samba4.smb2.acls.*.generic
 ^samba4.smb2.acls.*.inheritflags
 ^samba4.smb2.acls.*.owner
+^samba4.smb2.acls.*.ACCESSBASED
 
^samba4.ldap.dirsync.python.ad_dc_ntvfs..__main__.ExtendedDirsyncTests.test_dirsync_deleted_items
 #^samba4.ldap.dirsync.python.ad_dc_ntvfs..__main__.ExtendedDirsyncTests.*
 ^samba4.libsmbclient.opendir.opendir # This requires netbios browsing
diff --git a/source3/lib/util_wellknown.c b/source3/lib/util_wellknown.c
index 0f627d1..a3db9ab 100644
--- a/source3/lib/util_wellknown.c
+++ b/source3/lib/util_wellknown.c
@@ -154,16 +154,23 @@ bool lookup_wellknown_sid(TALLOC_CTX *mem_ctx, const 
struct dom_sid *sid,
 ***************************************************************************/
 
 bool lookup_wellknown_name(TALLOC_CTX *mem_ctx, const char *name,
-                          struct dom_sid *sid, const char **domain)
+                          struct dom_sid *sid, const char **pdomain)
 {
        int i, j;
+       const char *domain = *pdomain;
 
-       DEBUG(10,("map_name_to_wellknown_sid: looking up %s\n", name));
+       DEBUG(10,("map_name_to_wellknown_sid: looking up %s\\%s\n", domain, 
name));
 
        for (i=0; special_domains[i].sid != NULL; i++) {
                const struct rid_name_map *users =
                        special_domains[i].known_users;
 
+               if (domain[0] != '\0') {
+                       if (!strequal(domain, special_domains[i].name)) {
+                               continue;
+                       }
+               }
+
                if (users == NULL)
                        continue;
 
@@ -171,7 +178,7 @@ bool lookup_wellknown_name(TALLOC_CTX *mem_ctx, const char 
*name,
                        if ( strequal(users[j].name, name) ) {
                                sid_compose(sid, special_domains[i].sid,
                                            users[j].rid);
-                               *domain = talloc_strdup(
+                               *pdomain = talloc_strdup(
                                        mem_ctx, special_domains[i].name);
                                return True;
                        }
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 652ec2a..8ff1c7c 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -202,7 +202,8 @@ int share_mode_forall(int (*fn)(struct file_id fid,
                                const struct share_mode_data *data,
                                void *private_data),
                      void *private_data);
-int share_entry_forall(int (*fn)(const struct share_mode_entry *, const char *,
+int share_entry_forall(int (*fn)(const struct share_mode_entry *,
+                                const char *, const char *,
                                 const char *, void *),
                      void *private_data);
 bool share_mode_cleanup_disconnected(struct file_id id,
diff --git a/source3/locking/share_mode_lock.c 
b/source3/locking/share_mode_lock.c
index 5eedcc5..fe105e3 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -687,13 +687,17 @@ static int share_mode_traverse_fn(struct db_record *rec, 
void *_state)
                DEBUG(1, ("ndr_pull_share_mode_lock failed\n"));
                return 0;
        }
+
+       for (i=0; i<d->num_share_modes; i++) {
+               struct share_mode_entry *entry = &d->share_modes[i];
+               entry->stale = false; /* [skip] in idl */
+               entry->lease = &d->leases[entry->lease_idx];
+       }
+
        if (DEBUGLEVEL > 10) {
                DEBUG(11, ("parse_share_modes:\n"));
                NDR_PRINT_DEBUG(share_mode_data, d);
        }
-       for (i=0; i<d->num_share_modes; i++) {
-               d->share_modes[i].stale = false; /* [skip] in idl */
-       }
 
        ret = state->fn(fid, d, state->private_data);
 
@@ -728,7 +732,9 @@ int share_mode_forall(int (*fn)(struct file_id fid,
 
 struct share_entry_forall_state {
        int (*fn)(const struct share_mode_entry *e,
-                 const char *service_path, const char *base_name,
+                 const char *service_path,
+                 const char *base_name,
+                 const char *stream_name,
                  void *private_data);
        void *private_data;
 };
@@ -744,7 +750,9 @@ static int share_entry_traverse_fn(struct file_id fid,
                int ret;
 
                ret = state->fn(&data->share_modes[i],
-                               data->servicepath, data->base_name,
+                               data->servicepath,
+                               data->base_name,
+                               data->stream_name,
                                state->private_data);
                if (ret != 0) {
                        return ret;
@@ -760,7 +768,8 @@ static int share_entry_traverse_fn(struct file_id fid,
 ********************************************************************/
 
 int share_entry_forall(int (*fn)(const struct share_mode_entry *,
-                                const char *, const char *, void *),
+                                const char *, const char *,
+                                const char *, void *),
                       void *private_data)
 {
        struct share_entry_forall_state state = {
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c
index 3f99ee1..1ffd657 100644
--- a/source3/passdb/lookup_sid.c
+++ b/source3/passdb/lookup_sid.c
@@ -140,7 +140,31 @@ bool lookup_name(TALLOC_CTX *mem_ctx,
                return false;
        }
 
-       if ((domain[0] == '\0') && (!(flags & LOOKUP_NAME_ISOLATED))) {
+       /*
+        * Finally check for a well known domain name ("NT Authority"),
+        * this is taken care if in lookup_wellknown_name().
+        */
+       if ((domain[0] != '\0') &&
+           (flags & LOOKUP_NAME_WKN) &&
+           lookup_wellknown_name(tmp_ctx, name, &sid, &domain))
+       {
+               type = SID_NAME_WKN_GRP;
+               goto ok;
+       }
+
+       /*
+        * If we're told not to look up 'isolated' names then we're
+        * done.
+        */
+       if (!(flags & LOOKUP_NAME_ISOLATED)) {
+               TALLOC_FREE(tmp_ctx);
+               return false;
+       }
+
+       /*
+        * No domain names beyond this point
+        */
+       if (domain[0] != '\0') {
                TALLOC_FREE(tmp_ctx);
                return false;
        }
@@ -152,6 +176,11 @@ bool lookup_name(TALLOC_CTX *mem_ctx,
 
        /* 1. well-known names */
 
+       /*
+        * Check for well known names without a domain name.
+        * e.g. \Creator Owner.
+        */
+
        if ((flags & LOOKUP_NAME_WKN) &&
            lookup_wellknown_name(tmp_ctx, name, &sid, &domain))
        {
diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c 
b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
index be79e6a..96c022b 100644
--- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
@@ -80,7 +80,9 @@ struct share_conn_stat {
 ********************************************************************/
 
 static int enum_file_fn(const struct share_mode_entry *e,
-                       const char *sharepath, const char *fname,
+                       const char *sharepath,
+                       const char *fname,
+                       const char *sname,
                        void *private_data)
 {
        struct file_enum_count *fenum =
@@ -129,8 +131,9 @@ static int enum_file_fn(const struct share_mode_entry *e,
        if ( strcmp( fname, "." ) == 0 ) {
                fullpath = talloc_asprintf(fenum->ctx, "C:%s", sharepath );
        } else {
-               fullpath = talloc_asprintf(fenum->ctx, "C:%s/%s",
-                               sharepath, fname );
+               fullpath = talloc_asprintf(fenum->ctx, "C:%s/%s%s",
+                                          sharepath, fname,
+                                          sname ? sname : "");
        }
        if (!fullpath) {
                return 0;
@@ -829,7 +832,9 @@ static WERROR init_srv_sess_info_0(struct pipes_struct *p,
  **********************************************************************/
 
 static int count_sess_files_fn(const struct share_mode_entry *e,
-                              const char *sharepath, const char *fname,
+                              const char *sharepath,
+                              const char *fname,
+                              const char *sname,
                               void *data)
 {
        struct sess_file_info *info = data;
@@ -954,7 +959,9 @@ static WERROR init_srv_sess_info_1(struct pipes_struct *p,
  ********************************************************************/
 
 static int share_file_fn(const struct share_mode_entry *e,
-                        const char *sharepath, const char *fname,
+                        const char *sharepath,
+                        const char *fname,
+                        const char *sname,
                         void *data)
 {
        struct share_file_stat *sfs = data;
@@ -2692,7 +2699,9 @@ struct enum_file_close_state {
 };
 
 static int enum_file_close_fn(const struct share_mode_entry *e,
-                             const char *sharepath, const char *fname,
+                             const char *sharepath,
+                             const char *fname,
+                             const char *sname,
                              void *private_data)
 {
        char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c
index c700cb7..86c5f10 100644
--- a/source3/smbd/dir.c
+++ b/source3/smbd/dir.c
@@ -1343,6 +1343,15 @@ bool get_dir_entry(TALLOC_CTX *ctx,
 static bool user_can_read_file(connection_struct *conn,
                               struct smb_filename *smb_fname)
 {
+       NTSTATUS status;
+       uint32_t rejected_share_access = 0;
+       uint32_t rejected_mask = 0;
+       struct security_descriptor *sd = NULL;
+       uint32_t access_mask = FILE_READ_DATA|
+                               FILE_READ_EA|
+                               FILE_READ_ATTRIBUTES|
+                               SEC_STD_READ_CONTROL;
+
        /*
         * Never hide files from the root user.
         * We use (uid_t)0 here not sec_initial_uid()
@@ -1353,10 +1362,59 @@ static bool user_can_read_file(connection_struct *conn,
                return True;
        }
 
-       return NT_STATUS_IS_OK(smbd_check_access_rights(conn,
-                               smb_fname,
+       /*
+        * We can't directly use smbd_check_access_rights()
+        * here, as this implicitly grants FILE_READ_ATTRIBUTES
+        * which the Windows access-based-enumeration code
+        * explicitly checks for on the file security descriptor.
+        * See bug:
+        *
+        * https://bugzilla.samba.org/show_bug.cgi?id=10252
+        *
+        * and the smb2.acl2.ACCESSBASED test for details.
+        */
+
+       rejected_share_access = access_mask & ~(conn->share_access);
+       if (rejected_share_access) {
+               DEBUG(10, ("rejected share access 0x%x "
+                       "on %s (0x%x)\n",
+                       (unsigned int)access_mask,
+                       smb_fname_str_dbg(smb_fname),
+                       (unsigned int)rejected_share_access ));
+               return false;
+        }
+
+       status = SMB_VFS_GET_NT_ACL(conn,
+                       smb_fname->base_name,
+                       (SECINFO_OWNER |
+                        SECINFO_GROUP |
+                        SECINFO_DACL),
+                       talloc_tos(),
+                       &sd);
+
+       if (!NT_STATUS_IS_OK(status)) {
+                DEBUG(10, ("Could not get acl "
+                       "on %s: %s\n",
+                       smb_fname_str_dbg(smb_fname),
+                       nt_errstr(status)));
+               return false;
+        }
+
+       status = se_file_access_check(sd,
+                               get_current_nttok(conn),
                                false,
-                               FILE_READ_DATA));
+                               access_mask,
+                               &rejected_mask);
+
+        TALLOC_FREE(sd);
+
+       if (NT_STATUS_EQUAL(status, NT_STATUS_ACCESS_DENIED)) {
+               DEBUG(10,("rejected bits 0x%x read access for %s\n",
+                       (unsigned int)rejected_mask,
+                       smb_fname_str_dbg(smb_fname) ));
+               return false;
+        }
+       return true;
 }
 
 /*******************************************************************
diff --git a/source3/smbd/notify.c b/source3/smbd/notify.c
index e776749..6257260 100644
--- a/source3/smbd/notify.c
+++ b/source3/smbd/notify.c
@@ -138,6 +138,7 @@ static bool notify_marshall_changes(int num_changes,
                struct notify_change_event *c;
                struct FILE_NOTIFY_INFORMATION m;
                DATA_BLOB blob;
+               uint16_t pad = 0;
 
                /* Coalesce any identical records. */
                while (i+1 < num_changes &&
@@ -151,12 +152,23 @@ static bool notify_marshall_changes(int num_changes,
                m.FileName1 = c->name;
                m.FileNameLength = strlen_m(c->name)*2;
                m.Action = c->action;
-               m.NextEntryOffset = (i == num_changes-1) ? 0 : 
ndr_size_FILE_NOTIFY_INFORMATION(&m, 0);
+
+               m._pad = data_blob_null;
 
                /*
                 * Offset to next entry, only if there is one
                 */
 
+               if (i == (num_changes-1)) {
+                       m.NextEntryOffset = 0;
+               } else {
+                       if ((m.FileNameLength % 4) == 2) {
+                               m._pad = data_blob_const(&pad, 2);
+                       }
+                       m.NextEntryOffset =
+                               ndr_size_FILE_NOTIFY_INFORMATION(&m, 0);
+               }
+
                ndr_err = ndr_push_struct_blob(&blob, talloc_tos(), &m,
                        (ndr_push_flags_fn_t)ndr_push_FILE_NOTIFY_INFORMATION);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
diff --git a/source3/utils/status.c b/source3/utils/status.c
index a22d05b..f81ab5f 100644
--- a/source3/utils/status.c
+++ b/source3/utils/status.c
@@ -117,6 +117,7 @@ static bool Ucrit_addPid( struct server_id pid )
 static int print_share_mode(const struct share_mode_entry *e,
                            const char *sharepath,
                            const char *fname,
+                           const char *sname,
                            void *dummy)
 {
        static int count;
@@ -190,7 +191,10 @@ static int print_share_mode(const struct share_mode_entry 
*e,
                        d_printf("NONE            ");
                }
 
-               d_printf(" %s   %s   %s",sharepath, fname, 
time_to_asc((time_t)e->time.tv_sec));
+               d_printf(" %s   %s%s   %s",
+                        sharepath, fname,
+                        sname ? sname : "",
+                        time_to_asc((time_t)e->time.tv_sec));
        }
 
        return 0;
diff --git a/source4/torture/smb2/acls.c b/source4/torture/smb2/acls.c
index 37052c6..8066bc9 100644
--- a/source4/torture/smb2/acls.c
+++ b/source4/torture/smb2/acls.c
@@ -20,13 +20,17 @@
 */
 
 #include "includes.h"
+#include "lib/cmdline/popt_common.h"
 #include "libcli/smb2/smb2.h"
 #include "libcli/smb2/smb2_calls.h"
+#include "libcli/smb/smbXcli_base.h"
 #include "torture/torture.h"
+#include "libcli/resolve/resolve.h"
 #include "torture/util.h"
 #include "torture/smb2/proto.h"
 #include "libcli/security/security.h"
 #include "librpc/gen_ndr/ndr_security.h"
+#include "lib/param/param.h"
 
 #define CHECK_STATUS(status, correct) do { \
        if (!NT_STATUS_EQUAL(status, correct)) { \
@@ -1855,6 +1859,231 @@ done:
 }
 #endif
 
+/**
+ * SMB2 connect with explicit share
+ **/
+static bool torture_smb2_con_share(struct torture_context *tctx,
+                           const char *share,
+                           struct smb2_tree **tree)
+{
+        struct smbcli_options options;
+        NTSTATUS status;
+        const char *host = torture_setting_string(tctx, "host", NULL);
+        struct cli_credentials *credentials = cmdline_credentials;
+
+        lpcfg_smbcli_options(tctx->lp_ctx, &options);
+
+        status = smb2_connect_ext(tctx,
+                                  host,
+                                  lpcfg_smb_ports(tctx->lp_ctx),
+                                  share,
+                                  lpcfg_resolve_context(tctx->lp_ctx),
+                                  credentials,
+                                  0,
+                                  tree,
+                                  tctx->ev,
+                                  &options,
+                                  lpcfg_socket_options(tctx->lp_ctx),
+                                  lpcfg_gensec_settings(tctx, tctx->lp_ctx)
+                                  );
+        if (!NT_STATUS_IS_OK(status)) {
+                printf("Failed to connect to SMB2 share \\\\%s\\%s - %s\n",
+                       host, share, nt_errstr(status));
+                return false;
+        }
+        return true;
+}
+
+static bool test_access_based(struct torture_context *tctx,
+                               struct smb2_tree *tree)
+{
+       struct smb2_tree *tree1 = NULL;
+       NTSTATUS status;
+       struct smb2_create io;
+       const char *fname = BASEDIR "\\testfile";
+       bool ret = true;
+       struct smb2_handle fhandle, dhandle;
+       union smb_fileinfo q;
+       union smb_setfileinfo set;
+       struct security_descriptor *sd, *sd_orig=NULL;
+       const char *owner_sid;
+       uint32_t flags = 0;
+       /*
+        * Can't test without SEC_STD_READ_CONTROL as we
+        * own the file and implicitly have SEC_STD_READ_CONTROL.
+       */
+       uint32_t access_masks[] = {
+               /* Full READ access. */
+               SEC_STD_READ_CONTROL|FILE_READ_DATA|
+               FILE_READ_ATTRIBUTES|FILE_READ_EA,


-- 
Samba Shared Repository

Reply via email to