The branch, master has been updated
       via  778878a selftest: Run libsmbclient tests with NT1 and SMB3
       via  931e64d s4:torture: Set credentials for libsmbclient correctly
       via  0dae4e2 s3:libsmbclient: Add function to set protocol levels
       via  50f89bc s3:libsmbclient: Do not call cli_RNetShareEnum if SMB1 is 
disabled
       via  eddcbfe s3:smbclient: Do not call cli_RNetShareEnum if SMB1 is 
disabled
       via  e0e86e8 smbclient: Fix errors printed if we can connect with SMB1
      from  aa07400 kdc: Improve code clarity with extra brackets

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


- Log -----------------------------------------------------------------
commit 778878a39621d88edaf2167719292bb75b86b2be
Author: Andreas Schneider <[email protected]>
Date:   Mon Sep 3 16:55:02 2018 +0200

    selftest: Run libsmbclient tests with NT1 and SMB3
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Wed Sep  5 21:56:11 CEST 2018 on sn-devel-144

commit 931e64d2e9e42707c53d32a6cc5006ec734ae4ab
Author: Andreas Schneider <[email protected]>
Date:   Mon Sep 3 16:36:54 2018 +0200

    s4:torture: Set credentials for libsmbclient correctly
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 0dae4e2f5c65167fdb2405e232436921a0bb17e6
Author: Andreas Schneider <[email protected]>
Date:   Tue Sep 4 15:48:03 2018 +0200

    s3:libsmbclient: Add function to set protocol levels
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit 50f89bcdc9473abf69da1fee6f9014df63adc3e3
Author: Andreas Schneider <[email protected]>
Date:   Tue Sep 4 16:08:58 2018 +0200

    s3:libsmbclient: Do not call cli_RNetShareEnum if SMB1 is disabled
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit eddcbfea91d012f70a00c3ff2865fb1a23bec023
Author: Andreas Schneider <[email protected]>
Date:   Tue Sep 4 11:11:49 2018 +0200

    s3:smbclient: Do not call cli_RNetShareEnum if SMB1 is disabled
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

commit e0e86e8ae6245341ffd2b32d6abbade1371046e5
Author: Andreas Schneider <[email protected]>
Date:   Mon Sep 3 12:11:39 2018 +0200

    smbclient: Fix errors printed if we can connect with SMB1
    
    smbclient -L //server
    
    before:
    
    Reconnecting with SMB1 for workgroup listing.
    Connection to earth.milkyway.site failed (Error 
NT_STATUS_RESOURCE_NAME_NOT_FOUND)
    Failed to connect with SMB1 -- no workgroup available
    
    after:
    
    Reconnecting with SMB1 for workgroup listing.
    Unable to connect with SMB1 -- no workgroup available
    
    Signed-off-by: Andreas Schneider <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>

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

Summary of changes:
 selftest/knownfail                                 |  2 +-
 source3/client/client.c                            | 10 ++++-
 source3/include/libsmbclient.h                     | 19 ++++++++-
 .../{smbclient-0.4.0.sigs => smbclient-0.5.0.sigs} |  1 +
 source3/libsmb/clidfs.c                            |  6 +--
 source3/libsmb/libsmb_dir.c                        | 35 ++++++++--------
 source3/libsmb/libsmb_setget.c                     | 18 +++++++++
 source3/libsmb/wscript                             |  2 +-
 source4/selftest/tests.py                          |  9 +++--
 source4/torture/libsmbclient/libsmbclient.c        | 46 +++++++++++++++++++++-
 10 files changed, 118 insertions(+), 30 deletions(-)
 copy source3/libsmb/ABI/{smbclient-0.4.0.sigs => smbclient-0.5.0.sigs} (99%)


Changeset truncated at 500 lines:

diff --git a/selftest/knownfail b/selftest/knownfail
index 93c1a35..eef8134 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -125,7 +125,7 @@
 ^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
+^samba4.libsmbclient.opendir.(NT1|SMB3).opendir # This requires netbios 
browsing
 ^samba4.rpc.drsuapi.*.drsuapi.DsGetDomainControllerInfo\(.*\)$
 ^samba4.smb2.oplock.exclusive2\(.*\)$ # samba 4 oplocks are a mess
 ^samba4.smb2.oplock.exclusive5\(.*\)$ # samba 4 oplocks are a mess
diff --git a/source3/client/client.c b/source3/client/client.c
index 25ba01d..fc6d9a3 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -4901,6 +4901,7 @@ static bool browse_host_rpc(bool sort)
 static bool browse_host(bool sort)
 {
        int ret;
+
        if (!grepable) {
                d_printf("\n\tSharename       Type      Comment\n");
                d_printf("\t---------       ----      -------\n");
@@ -4910,7 +4911,12 @@ static bool browse_host(bool sort)
                return true;
        }
 
-       if((ret = cli_RNetShareEnum(cli, browse_fn, NULL)) == -1) {
+       if (lp_client_min_protocol() > PROTOCOL_NT1) {
+               return false;
+       }
+
+       ret = cli_RNetShareEnum(cli, browse_fn, NULL);
+       if (ret == -1) {
                NTSTATUS status = cli_nt_error(cli);
                d_printf("Error returning browse list: %s\n",
                         nt_errstr(status));
@@ -6227,7 +6233,7 @@ static int do_host_query(const char *query_host)
                                     smb_encrypt, max_proto,
                                     NBT_SMB_PORT, name_type, &cli);
                if (!NT_STATUS_IS_OK(status)) {
-                       d_printf("Failed to connect with SMB1 "
+                       d_printf("Unable to connect with SMB1 "
                                 "-- no workgroup available\n");
                        return 0;
                }
diff --git a/source3/include/libsmbclient.h b/source3/include/libsmbclient.h
index ca5c7f8..5e4a171 100644
--- a/source3/include/libsmbclient.h
+++ b/source3/include/libsmbclient.h
@@ -831,7 +831,24 @@ smbc_getOptionUseNTHash(SMBCCTX *c);
 void
 smbc_setOptionUseNTHash(SMBCCTX *c, smbc_bool b);
 
-
+/**
+ * @brief Set the 'client min protocol' and the 'client max protocol'.
+ *
+ * IMPORTANT: This overrrides the values 'client min protocol' and 'client max
+ * protocol' set in the smb.conf file!
+ *
+ * @param[in]  c  The smbc context to use.
+ *
+ * @param[in]  min_proto  The minimal protocol to use or NULL for leaving it
+ *                        untouched.
+ *
+ * @param[in]  max_proto  The maximum protocol to use or NULL for leaving it
+ *                        untouched.
+ *
+ * @returns true for success, false otherwise
+ */
+smbc_bool
+smbc_setOptionProtocols(SMBCCTX *c, const char *min_proto, const char 
*max_proto);
 
 /*************************************
  * Getters and setters for FUNCTIONS *
diff --git a/source3/libsmb/ABI/smbclient-0.4.0.sigs 
b/source3/libsmb/ABI/smbclient-0.5.0.sigs
similarity index 99%
copy from source3/libsmb/ABI/smbclient-0.4.0.sigs
copy to source3/libsmb/ABI/smbclient-0.5.0.sigs
index 170cb52..b424597 100644
--- a/source3/libsmb/ABI/smbclient-0.4.0.sigs
+++ b/source3/libsmb/ABI/smbclient-0.5.0.sigs
@@ -156,6 +156,7 @@ smbc_setOptionFullTimeNames: void (SMBCCTX *, smbc_bool)
 smbc_setOptionNoAutoAnonymousLogin: void (SMBCCTX *, smbc_bool)
 smbc_setOptionOneSharePerServer: void (SMBCCTX *, smbc_bool)
 smbc_setOptionOpenShareMode: void (SMBCCTX *, smbc_share_mode)
+smbc_setOptionProtocols: smbc_bool (SMBCCTX *, const char *, const char *)
 smbc_setOptionSmbEncryptionLevel: void (SMBCCTX *, smbc_smb_encrypt_level)
 smbc_setOptionUrlEncodeReaddirEntries: void (SMBCCTX *, smbc_bool)
 smbc_setOptionUseCCache: void (SMBCCTX *, smbc_bool)
diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c
index 0dfb8b3..6918802 100644
--- a/source3/libsmb/clidfs.c
+++ b/source3/libsmb/clidfs.c
@@ -196,9 +196,9 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
                flags, &c);
 
        if (!NT_STATUS_IS_OK(status)) {
-               d_printf("Connection to %s failed (Error %s)\n",
-                               server,
-                               nt_errstr(status));
+               DBG_WARNING("Connection to %s failed (Error %s)\n",
+                           server,
+                           nt_errstr(status));
                return status;
        }
 
diff --git a/source3/libsmb/libsmb_dir.c b/source3/libsmb/libsmb_dir.c
index ff19ed5..886aa62 100644
--- a/source3/libsmb/libsmb_dir.c
+++ b/source3/libsmb/libsmb_dir.c
@@ -825,6 +825,7 @@ SMBC_opendir_ctx(SMBCCTX *context,
                                }
                        } else if (srv ||
                                    (resolve_name(server, &rem_ss, 0x20, 
false))) {
+                               int rc;
 
                                 /*
                                  * If we hadn't found the server, get one now
@@ -851,24 +852,24 @@ SMBC_opendir_ctx(SMBCCTX *context,
 
                                 /* List the shares ... */
 
-                                if (net_share_enum_rpc(
-                                            srv->cli,
-                                            list_fn,
-                                            (void *) dir) < 0 &&
-                                    cli_RNetShareEnum(
-                                            srv->cli,
-                                            list_fn,
-                                            (void *)dir) < 0) {
-
-                                        errno = cli_errno(srv->cli);
-                                        if (dir) {
-                                                SAFE_FREE(dir->fname);
-                                                SAFE_FREE(dir);
-                                        }
+                               rc = net_share_enum_rpc(srv->cli,
+                                                       list_fn,
+                                                       (void *)dir);
+                               if (rc != 0 &&
+                                   lp_client_min_protocol() <= PROTOCOL_NT1) {
+                                       rc = cli_RNetShareEnum(srv->cli,
+                                                              list_fn,
+                                                              (void *)dir);
+                               }
+                               if (rc != 0) {
+                                       errno = cli_errno(srv->cli);
+                                       if (dir != NULL) {
+                                               SAFE_FREE(dir->fname);
+                                               SAFE_FREE(dir);
+                                       }
                                        TALLOC_FREE(frame);
-                                        return NULL;
-
-                                }
+                                       return NULL;
+                               }
                         } else {
                                 /* Neither the workgroup nor server exists */
                                 errno = ECONNREFUSED;
diff --git a/source3/libsmb/libsmb_setget.c b/source3/libsmb/libsmb_setget.c
index 60b822a..b1c4ff3 100644
--- a/source3/libsmb/libsmb_setget.c
+++ b/source3/libsmb/libsmb_setget.c
@@ -526,6 +526,24 @@ smbc_setOptionUseNTHash(SMBCCTX *c, smbc_bool b)
         }
 }
 
+smbc_bool
+smbc_setOptionProtocols(SMBCCTX *c,
+                       const char *min_proto,
+                       const char *max_proto)
+{
+       bool ok = true;
+
+       if (min_proto != NULL) {
+               ok = lp_set_cmdline("client min protocol", min_proto);
+       }
+
+       if (max_proto != NULL) {
+               ok &= lp_set_cmdline("client min protocol", max_proto);
+       }
+
+       return ok;
+}
+
 /** Get the function for obtaining authentication data */
 smbc_get_auth_data_fn
 smbc_getFunctionAuthData(SMBCCTX *c)
diff --git a/source3/libsmb/wscript b/source3/libsmb/wscript
index a3cf93be..d9e933e 100644
--- a/source3/libsmb/wscript
+++ b/source3/libsmb/wscript
@@ -25,5 +25,5 @@ def build(bld):
                        public_headers='../include/libsmbclient.h',
                        abi_directory='ABI',
                        abi_match='smbc_*',
-                       vnum='0.4.0',
+                       vnum='0.5.0',
                        pc_files='smbclient.pc')
diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py
index 8c3547d..a768631 100755
--- a/source4/selftest/tests.py
+++ b/source4/selftest/tests.py
@@ -332,14 +332,17 @@ for t in base + raw + smb2 + netapi:
     plansmbtorture4testsuite(t, "ad_dc_ntvfs", ['//$SERVER/tmp', 
'-U$USERNAME%$PASSWORD'] + ntvfsargs)
 
 libsmbclient = smbtorture4_testsuites("libsmbclient.")
+protocols = [ 'NT1', 'SMB3' ]
 for t in libsmbclient:
     url = "smb://$USERNAME:$PASSWORD@$SERVER/tmp"
     if t == "libsmbclient.list_shares":
         url = "smb://$USERNAME:$PASSWORD@$SERVER"
 
-    libsmbclient_testargs = ["--option=torture:smburl=" + url,
-                             
"--option=torture:replace_smbconf=%s/testdata/samba3/smb_new.conf" % srcdir()]
-    plansmbtorture4testsuite(t, "ad_dc", ['//$SERVER/tmp', 
'-U$USERNAME%$PASSWORD'] + libsmbclient_testargs)
+    for proto in protocols:
+        libsmbclient_testargs = ["--option=torture:smburl=" + url,
+                                 
"--option=torture:replace_smbconf=%s/testdata/samba3/smb_new.conf" % srcdir(),
+                                 "--option=torture:clientprotocol=%s" % proto]
+        plansmbtorture4testsuite(t, "ad_dc", ['//$SERVER/tmp', 
'-U$USERNAME%$PASSWORD'] + libsmbclient_testargs, "samba4.%s.%s" % (t, proto))
 
 plansmbtorture4testsuite("raw.qfileinfo.ipc", "ad_dc_ntvfs", '//$SERVER/ipc\$ 
-U$USERNAME%$PASSWORD')
 
diff --git a/source4/torture/libsmbclient/libsmbclient.c 
b/source4/torture/libsmbclient/libsmbclient.c
index fb27ddd..f9154e8 100644
--- a/source4/torture/libsmbclient/libsmbclient.c
+++ b/source4/torture/libsmbclient/libsmbclient.c
@@ -40,9 +40,41 @@ static void debug_callback(void *private_ptr, int level, 
const char *msg)
        return;
 }
 
+static void auth_callback(const char *srv,
+                         const char *shr,
+                         char *wg, int wglen,
+                         char *un, int unlen,
+                         char *pw, int pwlen)
+{
+       const char *workgroup =
+               cli_credentials_get_domain(popt_get_cmdline_credentials());
+       const char *username =
+               cli_credentials_get_username(popt_get_cmdline_credentials());
+       const char *password =
+               cli_credentials_get_password(popt_get_cmdline_credentials());
+
+       if (workgroup != NULL) {
+               snprintf(wg, wglen, "%s", workgroup);
+       }
+
+       if (username != NULL) {
+               snprintf(un, unlen, "%s", username);
+       }
+
+       if (password != NULL) {
+               snprintf(pw, pwlen, "%s", password);
+       }
+};
+
 bool torture_libsmbclient_init_context(struct torture_context *tctx,
                                       SMBCCTX **ctx_p)
 {
+       const char *workgroup =
+               cli_credentials_get_domain(popt_get_cmdline_credentials());
+       const char *username =
+               cli_credentials_get_username(popt_get_cmdline_credentials());
+       const char *client_proto =
+               torture_setting_string(tctx, "clientprotocol", NULL);
        SMBCCTX *ctx = NULL;
        SMBCCTX *p = NULL;
        bool ok = true;
@@ -64,8 +96,18 @@ bool torture_libsmbclient_init_context(struct 
torture_context *tctx,
        smbc_setDebug(ctx, DEBUGLEVEL);
        smbc_setOptionDebugToStderr(ctx, 1);
 
-       smbc_setUser(ctx,
-                    
cli_credentials_get_username(popt_get_cmdline_credentials()));
+       if (workgroup != NULL) {
+               smbc_setWorkgroup(ctx, workgroup);
+       }
+       if (username != NULL) {
+               smbc_setUser(ctx, username);
+       }
+
+       smbc_setFunctionAuthData(ctx, auth_callback);
+
+       if (client_proto != NULL) {
+               smbc_setOptionProtocols(ctx, client_proto, client_proto);
+       }
 
        *ctx_p = ctx;
 


-- 
Samba Shared Repository

Reply via email to