[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Thu Aug 15 02:54:03 MDT 2013


The branch, master has been updated
       via  b706ca6 s3:libsmb: call smb2cli_logoff() from cli_ulogoff()
       via  1d7bdfc s3:libsmb: make cli_ulogoff_send/recv static
       via  e6be68f s3:libsmb: call smb2cli_tdis() from cli_tdis()
       via  d732e9a s3:libsmb: only set tcon to invalid in smb2cli_tdis*
       via  80d4f64 s3:libsmb: make cli_tdis_send/recv static
       via  ccf7b37 s3:libsmb: add support for SMB2 in cli_writeall()
       via  a85d451 s3:libsmb: add SMB2 support to cli_pull*
       via  6896bf0 s3:libsmb: add SMB2 support to cli_push*
       via  80758e4 s3:libsmb: Plumb cli_smb2_set_security_descriptor() inside cli_set_security_descriptor().
       via  1db7e90 s3:libsmb: Plumb cli_smb2_query_security_descriptor() inside cli_query_security_descriptor().
       via  de895bf s3:libsmb: Plumb cli_smb2_qpathinfo_alt_name() inside cli_qpathinfo_alt_name().
       via  cba3ed0 s3:libsmb: Plumb cli_smb2_qpathinfo_basic() inside cli_qpathinfo_basic().
       via  2bb3e25 s3:libsmb: Plumb cli_smb2_qfileinfo_basic() inside cli_qfileinfo_basic().
       via  e96309c s3:libsmb: Plumb cli_smb2_qpathinfo_streams() inside cli_qpathinfo_streams().
       via  f2f566b s3:libsmb: Plumb cli_smb2_qpathinfo2() inside cli_qpathinfo2().
       via  73255d3 s3:libsmb: Plumb cli_smb2_list() inside cli_list().
       via  7e2d969 s3:libsmb: Plumb cli_smb2_get_ea_list_path() inside cli_get_ea_list_path().
       via  f8dfc50 s3:libsmb: Plumb cli_smb2_set_ea_fnum() inside cli_set_ea_fnum().
       via  3276853 s3:libsmb: Plumb cli_smb2_set_ea_path() inside cli_set_ea_path().
       via  c1aeada s3:libsmb: Fix cli_set_ea_path() to use frame instead of talloc_tos().
       via  c6ed0b8 s3:libsmb: Plumb cli_smb2_dskattr() inside cli_dskattr().
       via  75d2e18 s3:libsmb: Plumb cli_smb2_getatr() inside cli_getatr().
       via  ea267a7 s3:libsmb: Plumb cli_smb2_setatr() inside cli_setatr().
       via  83c410c s3:libsmb: Plumb cli_smb2_setattrE() inside cli_setattrE().
       via  0bbc044 s3:libsmb: Plumb cli_smb2_getattrE() inside cli_getattrE().
       via  85f60cc s3:libsmb: Plumb cli_smb2_close_fnum() inside cli_close().
       via  c1c4491 s3:libsmb: Plumb cli_smb2_create_fnum() inside cli_ntcreate().
       via  04d3965 s3:libsmb: Plumb cli_smb2_rmdir() inside cli_rmdir().
       via  46da267 s3:libsmb: Plumb cli_smb2_mkdir() inside cli_mkdir().
       via  179c27d s3:libsmb: Plumb cli_smb2_unlink() inside cli_unlink().
       via  c748a95 s3:libsmb: Plumb cli_smb2_rename() inside cli_rename().
       via  28591df s3:libsmb: Add in the core of the libsmb client SMB2 functions.
       via  c80349e s3:lib: Factor read_ea_list_entry() and read_nttrans_ea_list() out so they can be used by the SMB2 client code.
       via  2394f87 s3:client: fix compiler warning
       via  9b4692f s3:client: use the default io size
       via  9193a58 s3:libsmb: remove unused cli_readall*
       via  8062aef s3:libsmb: rewrite cli_pull* to use smb1cli_conn_req_possible()
       via  b846b3a s3:libsmb: rewrite cli_push* to use smb1cli_conn_req_possible()
       via  7efdc32 libcli/smb: add smb2cli_conn_req_possible()
       via  111f529 libcli/smb: add smb1cli_conn_req_possible()
       via  44b5393 libcli/smb: pass max_dyn_len to smb2cli_req_send()
       via  4a33520 libcli/smb: pass max_dyn_len to smb2cli_req_create()
       via  318735f libcli/smb: calculate the credit charge on the input and output dyn_len
       via  1229881 libcli/smb: Change smb2cli_create() and smb2cli_create_recv() to return a parameter blob of the newly opened/created file.
       via  00f784e libcli/smb: Fix smb2cli_write_recv() and smb2cli_write() to return the bytes written.
       via  97288b7 libcli/smb: fix the credit handling on a SMB1 => SMB2 negotiate
       via  f6ce50a s3:smbcacls: Add -m<MAX PROTOCOL> option to smbcacls.
       via  daeb0bd s3:libsmb: make use of lp_cli_{min,max}protocol() in SMBC_server_internal()
       via  42a493d s3:libsmb: use lp_cli_minprotocol() in do_connect()
       via  dd9155a s3:winbindd: make use of lp_cli_{min,max}protocol()
       via  7e455e9 s3:lib/netapi: make use of lp_cli_maxprotocol()
       via  1442132 s3:libsmb: Ensure we ask for DEFAULT_SMB2_MAX_CREDITS on successful negprot.
       via  42f510c s3:libsmb: Modify cli_start_connection_connected() to use lp_cli_minprotocol()/lp_cli_maxprotocol() instead of hard coding PROTOCOL_CORE, PROTOCOL_NT1.
       via  9188ee4 s3:lib: remove unused interpret_protocol()
       via  2c3c8ca s3:torture: avoid interpret_protocol()
       via  861ee93 s3:client: avoid interpret_protocol()
       via  f2fb829 s3:param: Correctly set up cli_maxprotocol, cli_minprotocol in our parameter block.
      from  7080917 Followup patch for BUG: https://bugzilla.samba.org/show_bug.cgi?id=10082

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


- Log -----------------------------------------------------------------
commit b706ca6e55aa76d4da901c69d991969602facc3b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 15:18:47 2013 -0700

    s3:libsmb: call smb2cli_logoff() from cli_ulogoff()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Thu Aug 15 10:53:21 CEST 2013 on sn-devel-104

commit 1d7bdfc4feac35d92b003c3c78f502897ecc5d4e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 11:48:40 2013 +0200

    s3:libsmb: make cli_ulogoff_send/recv static
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit e6be68fb5e4dc528f7365f3413b9b66090992f42
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 11:44:58 2013 +0200

    s3:libsmb: call smb2cli_tdis() from cli_tdis()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit d732e9aab3bbad3ea97f8b120e57b41152aaee3b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 11:44:10 2013 +0200

    s3:libsmb: only set tcon to invalid in smb2cli_tdis*
    
    This matches the behavior of cli_tdis*.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 80d4f64352c0ddacb9ee15d2b48a42a0b7929501
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 11:38:22 2013 +0200

    s3:libsmb: make cli_tdis_send/recv static
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ccf7b3719121e03ed06d15b9af5373eecba3e828
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 18:38:57 2013 +0200

    s3:libsmb: add support for SMB2 in cli_writeall()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a85d4511e6bc84938d60f090b44a5b1468ee4136
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 18:20:08 2013 +0200

    s3:libsmb: add SMB2 support to cli_pull*
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 6896bf0b28a07eb8ead5b3bd2bc50229aa59d439
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 16:33:30 2013 +0200

    s3:libsmb: add SMB2 support to cli_push*
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 80758e4b07c87280e778ba161c2c9c4a2ee47853
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Aug 8 11:00:49 2013 -0700

    s3:libsmb: Plumb cli_smb2_set_security_descriptor() inside cli_set_security_descriptor().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 1db7e90451f31d75298508c19a859d98d56d7e7c
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Aug 8 11:00:08 2013 -0700

    s3:libsmb: Plumb cli_smb2_query_security_descriptor() inside cli_query_security_descriptor().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit de895bf228432f2a42bcdcadcf12ffd1be64022f
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:50:03 2013 -0700

    s3:libsmb: Plumb cli_smb2_qpathinfo_alt_name() inside cli_qpathinfo_alt_name().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit cba3ed0466b8598e28a44809778b99e97b1bf1a1
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Aug 8 10:52:02 2013 -0700

    s3:libsmb: Plumb cli_smb2_qpathinfo_basic() inside cli_qpathinfo_basic().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 2bb3e251d59910d9bf527a73271094702bceefe2
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:47:21 2013 -0700

    s3:libsmb: Plumb cli_smb2_qfileinfo_basic() inside cli_qfileinfo_basic().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit e96309ca1b057d430444531523bb2c9f59fcd624
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:46:05 2013 -0700

    s3:libsmb: Plumb cli_smb2_qpathinfo_streams() inside cli_qpathinfo_streams().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit f2f566b1cc8d55bd1cf93478b877a3e7f455855c
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:45:05 2013 -0700

    s3:libsmb: Plumb cli_smb2_qpathinfo2() inside cli_qpathinfo2().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 73255d3ba912b3a112f9d766deae895f51e16cd9
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:43:33 2013 -0700

    s3:libsmb: Plumb cli_smb2_list() inside cli_list().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 7e2d969deb1d4bcf3add422d80852b2d386cfaac
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:42:02 2013 -0700

    s3:libsmb: Plumb cli_smb2_get_ea_list_path() inside cli_get_ea_list_path().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit f8dfc50124e5b5083aa801d9658389dd3fa6698a
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:32:55 2013 -0700

    s3:libsmb: Plumb cli_smb2_set_ea_fnum() inside cli_set_ea_fnum().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 3276853e59c2686873baad7c6f9d2665ed6fdd56
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:21:48 2013 -0700

    s3:libsmb: Plumb cli_smb2_set_ea_path() inside cli_set_ea_path().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit c1aeada4dd1f165eb33354c5a4323ed1ebf453a9
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:19:06 2013 -0700

    s3:libsmb: Fix cli_set_ea_path() to use frame instead of talloc_tos().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit c6ed0b88312d7e231749a09a87944caea4c9808e
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:17:12 2013 -0700

    s3:libsmb: Plumb cli_smb2_dskattr() inside cli_dskattr().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 75d2e18502ccb811c018535f3c5c7325bdf5e613
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 14 14:37:11 2013 -0700

    s3:libsmb: Plumb cli_smb2_getatr() inside cli_getatr().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit ea267a7e4b4c413336b2bf54eb53ffc8d1524b44
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:16:03 2013 -0700

    s3:libsmb: Plumb cli_smb2_setatr() inside cli_setatr().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 83c410c99e3ef8db00dd002c1a1a93b0035cd2e7
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:14:47 2013 -0700

    s3:libsmb: Plumb cli_smb2_setattrE() inside cli_setattrE().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 0bbc0446210fa504f9834de948c4d066df752666
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:11:59 2013 -0700

    s3:libsmb: Plumb cli_smb2_getattrE() inside cli_getattrE().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 85f60cc3d8f68ce5eb687cc6e367bb66bdef8b99
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:10:34 2013 -0700

    s3:libsmb: Plumb cli_smb2_close_fnum() inside cli_close().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit c1c4491d5e5bb16c274fe4fe162156a7ec910b93
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:06:19 2013 -0700

    s3:libsmb: Plumb cli_smb2_create_fnum() inside cli_ntcreate().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 04d396566b90f32dc239450596ab50502f9cbb02
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:03:00 2013 -0700

    s3:libsmb: Plumb cli_smb2_rmdir() inside cli_rmdir().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 46da267afd540fe2d31f1395cda9e2853cf6432a
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:01:49 2013 -0700

    s3:libsmb: Plumb cli_smb2_mkdir() inside cli_mkdir().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 179c27dd0235c4949045eef2ffb7a87175a4483b
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 16:00:40 2013 -0700

    s3:libsmb: Plumb cli_smb2_unlink() inside cli_unlink().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit c748a959b40f184190cd537f0ad5f0772b484841
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 15:59:13 2013 -0700

    s3:libsmb: Plumb cli_smb2_rename() inside cli_rename().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 28591dfd5d2163d9181d45d64a4a750e335b7c56
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 15:54:05 2013 -0700

    s3:libsmb: Add in the core of the libsmb client SMB2 functions.
    
    These create a synchronous cli_smb2_XXX() style interface
    designed to plug directly into the libsmb/cliXXXX.c code.
    
    https://bugzilla.samba.org/show_bug.cgi?id=9974
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>

commit c80349e0fad7c182b0bddefed99a78d95323faca
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 13:48:55 2013 -0700

    s3:lib: Factor read_ea_list_entry() and read_nttrans_ea_list() out so they can be used by the SMB2 client code.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 2394f8788d2f6e21064db0b6099a0dbe3a33e1d6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 10:47:11 2013 +0200

    s3:client: fix compiler warning
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9b4692f2d057f31f76db0bdf7c4a515db057e2dd
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 10:46:28 2013 +0200

    s3:client: use the default io size
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 9193a58375691bfca9e3cce1ff61b2b6dd65a982
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 18:23:55 2013 +0200

    s3:libsmb: remove unused cli_readall*
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8062aefbe3c2fcc73e3d19af6663c8736c570f7c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 18:03:50 2013 +0200

    s3:libsmb: rewrite cli_pull* to use smb1cli_conn_req_possible()
    
    This works out if it's possible to ship the next request dynamically
    instead of relying on fixed values.
    
    The default window size is 16 MByte.
    
    We limit the number of outstanding chunks/requests to 256.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit b846b3acd2b217a0d67c1e8fcb039e03498c4e47
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 14:10:59 2013 +0200

    s3:libsmb: rewrite cli_push* to use smb1cli_conn_req_possible()
    
    This works out if it's possible to ship the next request dynamically
    instead of relying on fixed values.
    
    The default window size is 16 MByte.
    
    We limit the number of outstanding chunks/requests to 256.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7efdc323d1a1abdae70bcafefe07b3cffcdb2521
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 15:49:19 2013 +0200

    libcli/smb: add smb2cli_conn_req_possible()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 111f529a2a5832b822445bb4f63b142d8ccb2cb7
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 14:05:05 2013 +0200

    libcli/smb: add smb1cli_conn_req_possible()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 44b53937d59842a63e2cbfa92219f4f519530b0a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 10:25:52 2013 +0200

    libcli/smb: pass max_dyn_len to smb2cli_req_send()
    
    This way we can calculate the correct credit charge
    for requests with large output buffers.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4a3352020db962ef40728d8a754da8a9418ca8a7
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 09:54:42 2013 +0200

    libcli/smb: pass max_dyn_len to smb2cli_req_create()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 318735fd5e15c5fd7010c0f657c86d27b45279ac
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 13 09:50:29 2013 +0200

    libcli/smb: calculate the credit charge on the input and output dyn_len
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1229881df6bd22d4b5055ad283061332ba1c9bc8
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 15:01:50 2013 -0700

    libcli/smb: Change smb2cli_create() and smb2cli_create_recv() to return a parameter blob of the newly opened/created file.
    
    Will use in the smb2 client code.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 00f784ec91d2cfa95b20327ac20f5bc3fa1f400e
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 14:41:24 2013 -0700

    libcli/smb: Fix smb2cli_write_recv() and smb2cli_write() to return the bytes written.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 97288b7f1048c1bf712463293a1e62737738292c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Aug 14 08:12:08 2013 +0200

    libcli/smb: fix the credit handling on a SMB1 => SMB2 negotiate
    
    Our cur_credit value had 1 credit too many in the case of
    an SMB1 => SMB2 upgrade. When we max out the credits the server
    disconnected the connection.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f6ce50a8aca9eb024af4eb5e3dd620fe5e04e913
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Aug 8 11:43:16 2013 -0700

    s3:smbcacls: Add -m<MAX PROTOCOL> option to smbcacls.
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit daeb0bdfc49ace6151bbca34cbbf55486d66abb6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 14:01:36 2013 +0200

    s3:libsmb: make use of lp_cli_{min,max}protocol() in SMBC_server_internal()
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 42a493dff0e4ade04b6e94caf0b7ae14b6cf60eb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 14:00:45 2013 +0200

    s3:libsmb: use lp_cli_minprotocol() in do_connect()
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit dd9155a7ec7f1989cb18e79907d0fa1c9ee845a4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 13:48:31 2013 +0200

    s3:winbindd: make use of lp_cli_{min,max}protocol()
    
    This changes winbindd back to use NT1 as defeault.
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 7e455e9ed2b298df6b735a89abdd75564375ef34
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 13:46:34 2013 +0200

    s3:lib/netapi: make use of lp_cli_maxprotocol()
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 14421323d1dd3744cb8553f0e6a5a7436554bf2d
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Aug 9 11:15:48 2013 -0700

    s3:libsmb: Ensure we ask for DEFAULT_SMB2_MAX_CREDITS on successful negprot.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 42f510c155b98f3df5106aebd1de54d1749b9b1c
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Aug 8 11:35:44 2013 -0700

    s3:libsmb: Modify cli_start_connection_connected() to use lp_cli_minprotocol()/lp_cli_maxprotocol() instead of hard coding PROTOCOL_CORE, PROTOCOL_NT1.
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 9188ee4ab195a18b1bd697bced8613f98a6a91d9
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 13:11:41 2013 +0200

    s3:lib: remove unused interpret_protocol()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 2c3c8caa0cc7b085231b2edc100ce2332e1e0085
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 13:10:13 2013 +0200

    s3:torture: avoid interpret_protocol()
    
    lp_set_cmdline("client max protocol",...) and
    lp_cli_maxprotocol() are the more generic solution.
    
    https://bugzilla.samba.org/show_bug.cgi?id=9514
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 861ee9319f3cce8f104fd30c7139323ac3d3319d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Aug 11 13:08:49 2013 +0200

    s3:client: avoid interpret_protocol()
    
    lp_set_cmdline("client max protocol",...) and
    lp_cli_maxprotocol() are the more generic solution.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f2fb829cee81996c62ff91cb8d1e9997008ffb42
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Aug 7 15:17:01 2013 -0700

    s3:param: Correctly set up cli_maxprotocol, cli_minprotocol in our parameter block.
    
    Set to PROTOCOL_NT1, PROTOCOL_CORE by default.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=9829
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

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

Summary of changes:
 libcli/smb/smb2_create_blob.h                      |   12 +
 libcli/smb/smb2cli_close.c                         |    3 +-
 libcli/smb/smb2cli_create.c                        |   52 +-
 libcli/smb/smb2cli_echo.c                          |    3 +-
 libcli/smb/smb2cli_flush.c                         |    3 +-
 libcli/smb/smb2cli_ioctl.c                         |   13 +-
 libcli/smb/smb2cli_query_directory.c               |    3 +-
 libcli/smb/smb2cli_query_info.c                    |    3 +-
 libcli/smb/smb2cli_read.c                          |    3 +-
 libcli/smb/smb2cli_session.c                       |    6 +-
 libcli/smb/smb2cli_set_info.c                      |    3 +-
 libcli/smb/smb2cli_write.c                         |   33 +-
 libcli/smb/smbXcli_base.c                          |   74 +-
 libcli/smb/smbXcli_base.h                          |   21 +-
 source3/client/client.c                            |   11 +-
 source3/include/client.h                           |    1 +
 source3/include/proto.h                            |    3 +-
 source3/lib/netapi/cm.c                            |    2 +-
 source3/lib/util.c                                 |   25 -
 source3/lib/util_ea.c                              |  126 ++
 .../libcli/raw/rawlpq.c => source3/lib/util_ea.h   |   44 +-
 source3/libsmb/cli_np_tstream.c                    |   10 +-
 source3/libsmb/cli_smb2_fnum.c                     | 2373 ++++++++++++++++++++
 source3/libsmb/cli_smb2_fnum.h                     |  161 ++
 source3/libsmb/cliconnect.c                        |   37 +-
 source3/libsmb/clidfs.c                            |    8 +-
 source3/libsmb/clifile.c                           |  158 ++-
 source3/libsmb/clilist.c                           |    8 +-
 source3/libsmb/clirap.c                            |   64 +-
 source3/libsmb/clirap.h                            |    4 +
 source3/libsmb/clireadwrite.c                      |  908 +++++----
 source3/libsmb/clisecdesc.c                        |   16 +
 source3/libsmb/libsmb.h                            |    1 +
 source3/libsmb/libsmb_server.c                     |    6 +-
 source3/libsmb/proto.h                             |    8 -
 source3/libsmb/smb2cli_tcon.c                      |    9 +-
 source3/param/loadparm.c                           |    2 +
 source3/smbd/nttrans.c                             |   44 +-
 source3/smbd/trans2.c                              |   62 +-
 source3/torture/masktest.c                         |    5 +-
 source3/torture/test_smb2.c                        |   62 +-
 source3/torture/torture.c                          |    3 +-
 source3/utils/smbcacls.c                           |    4 +
 source3/winbindd/winbindd_cm.c                     |    5 +-
 source3/wscript_build                              |    6 +-
 source4/libcli/smb2/transport.c                    |    9 +-
 46 files changed, 3725 insertions(+), 692 deletions(-)
 create mode 100644 source3/lib/util_ea.c
 copy source4/libcli/raw/rawlpq.c => source3/lib/util_ea.h (61%)
 create mode 100644 source3/libsmb/cli_smb2_fnum.c
 create mode 100644 source3/libsmb/cli_smb2_fnum.h


Changeset truncated at 500 lines:

diff --git a/libcli/smb/smb2_create_blob.h b/libcli/smb/smb2_create_blob.h
index 008befe..2f915b3 100644
--- a/libcli/smb/smb2_create_blob.h
+++ b/libcli/smb/smb2_create_blob.h
@@ -33,6 +33,18 @@ struct smb2_create_blobs {
 	struct smb2_create_blob *blobs;
 };
 
+struct smb2_create_returns {
+	uint8_t oplock_level;
+	uint32_t create_action;
+	NTTIME creation_time;
+	NTTIME last_access_time;
+	NTTIME last_write_time;
+	NTTIME change_time;
+	uint64_t allocation_size;
+	uint64_t end_of_file;
+	uint32_t file_attributes;
+};
+
 /*
   parse a set of SMB2 create blobs
 */
diff --git a/libcli/smb/smb2cli_close.c b/libcli/smb/smb2cli_close.c
index ed15a20..5e31056 100644
--- a/libcli/smb/smb2cli_close.c
+++ b/libcli/smb/smb2cli_close.c
@@ -60,7 +60,8 @@ struct tevent_req *smb2cli_close_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  NULL, 0);
+				  NULL, 0, /* dyn* */
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_create.c b/libcli/smb/smb2cli_create.c
index 627bdcb..3f8d672 100644
--- a/libcli/smb/smb2cli_create.c
+++ b/libcli/smb/smb2cli_create.c
@@ -27,17 +27,9 @@
 struct smb2cli_create_state {
 	uint8_t fixed[56];
 
-	uint8_t oplock_level;
-	uint32_t create_action;
-	NTTIME creation_time;
-	NTTIME last_access_time;
-	NTTIME last_write_time;
-	NTTIME change_time;
-	uint64_t allocation_size;
-	uint64_t end_of_file;
-	uint32_t file_attributes;
 	uint64_t fid_persistent;
 	uint64_t fid_volatile;
+	struct smb2_create_returns cr;
 	struct smb2_create_blobs blobs;
 };
 
@@ -70,6 +62,7 @@ struct tevent_req *smb2cli_create_send(
 	size_t blobs_offset;
 	uint8_t *dyn;
 	size_t dyn_len;
+	size_t max_dyn_len;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct smb2cli_create_state);
@@ -137,13 +130,23 @@ struct tevent_req *smb2cli_create_send(
 		data_blob_free(&blob);
 	}
 
+	/*
+	 * We use max_dyn_len = 0
+	 * as we don't explicitly ask for any output length.
+	 *
+	 * But it's still possible for the server to return
+	 * large create blobs.
+	 */
+	max_dyn_len = 0;
+
 	subreq = smb2cli_req_send(state, ev, conn, SMB2_OP_CREATE,
 				  0, 0, /* flags */
 				  timeout_msec,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  max_dyn_len);
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
@@ -179,15 +182,15 @@ static void smb2cli_create_done(struct tevent_req *subreq)
 
 	body = (uint8_t *)iov[1].iov_base;
 
-	state->oplock_level	= CVAL(body, 2);
-	state->create_action	= IVAL(body, 4);
-	state->creation_time	= BVAL(body, 8);
-	state->last_access_time	= BVAL(body, 16);
-	state->last_write_time	= BVAL(body, 24);
-	state->change_time	= BVAL(body, 32);
-	state->allocation_size	= BVAL(body, 40);
-	state->end_of_file	= BVAL(body, 48);
-	state->file_attributes	= IVAL(body, 56);
+	state->cr.oplock_level  = CVAL(body, 2);
+	state->cr.create_action = IVAL(body, 4);
+	state->cr.creation_time = BVAL(body, 8);
+	state->cr.last_access_time = BVAL(body, 16);
+	state->cr.last_write_time = BVAL(body, 24);
+	state->cr.change_time   = BVAL(body, 32);
+	state->cr.allocation_size = BVAL(body, 40);
+	state->cr.end_of_file   = BVAL(body, 48);
+	state->cr.file_attributes = IVAL(body, 56);
 	state->fid_persistent	= BVAL(body, 64);
 	state->fid_volatile	= BVAL(body, 72);
 
@@ -213,7 +216,8 @@ static void smb2cli_create_done(struct tevent_req *subreq)
 
 NTSTATUS smb2cli_create_recv(struct tevent_req *req,
 			     uint64_t *fid_persistent,
-			     uint64_t *fid_volatile)
+			     uint64_t *fid_volatile,
+			     struct smb2_create_returns *cr)
 {
 	struct smb2cli_create_state *state =
 		tevent_req_data(req,
@@ -225,6 +229,9 @@ NTSTATUS smb2cli_create_recv(struct tevent_req *req,
 	}
 	*fid_persistent = state->fid_persistent;
 	*fid_volatile = state->fid_volatile;
+	if (cr) {
+		*cr = state->cr;
+	}
 	return NT_STATUS_OK;
 }
 
@@ -242,7 +249,8 @@ NTSTATUS smb2cli_create(struct smbXcli_conn *conn,
 			uint32_t create_options,
 			struct smb2_create_blobs *blobs,
 			uint64_t *fid_persistent,
-			uint64_t *fid_volatile)
+			uint64_t *fid_volatile,
+			struct smb2_create_returns *cr)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct tevent_context *ev;
@@ -273,7 +281,7 @@ NTSTATUS smb2cli_create(struct smbXcli_conn *conn,
 	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
 		goto fail;
 	}
-	status = smb2cli_create_recv(req, fid_persistent, fid_volatile);
+	status = smb2cli_create_recv(req, fid_persistent, fid_volatile, cr);
  fail:
 	TALLOC_FREE(frame);
 	return status;
diff --git a/libcli/smb/smb2cli_echo.c b/libcli/smb/smb2cli_echo.c
index 29cbf26..39c592c 100644
--- a/libcli/smb/smb2cli_echo.c
+++ b/libcli/smb/smb2cli_echo.c
@@ -53,7 +53,8 @@ struct tevent_req *smb2cli_echo_send(TALLOC_CTX *mem_ctx,
 				  NULL, /* tcon */
 				  NULL, /* session */
 				  state->fixed, sizeof(state->fixed),
-				  NULL, 0);
+				  NULL, 0, /* dyn* */
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_flush.c b/libcli/smb/smb2cli_flush.c
index 0ca2699..f014720 100644
--- a/libcli/smb/smb2cli_flush.c
+++ b/libcli/smb/smb2cli_flush.c
@@ -58,7 +58,8 @@ struct tevent_req *smb2cli_flush_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  NULL, 0);
+				  NULL, 0, /* dyn* */
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_ioctl.c b/libcli/smb/smb2cli_ioctl.c
index 15a990c..8de7635 100644
--- a/libcli/smb/smb2cli_ioctl.c
+++ b/libcli/smb/smb2cli_ioctl.c
@@ -61,6 +61,8 @@ struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
 	uint32_t output_buffer_offset = 0;
 	uint32_t output_buffer_length = 0;
 	uint32_t pad_length = 0;
+	uint64_t tmp64;
+	uint32_t max_dyn_len = 0;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct smb2cli_ioctl_state);
@@ -70,6 +72,14 @@ struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
 	state->max_input_length = in_max_input_length;
 	state->max_output_length = in_max_output_length;
 
+	tmp64 = in_max_input_length;
+	tmp64 += in_max_output_length;
+	if (tmp64 > UINT32_MAX) {
+		max_dyn_len = UINT32_MAX;
+	} else {
+		max_dyn_len = tmp64;
+	}
+
 	if (in_input_buffer) {
 		input_buffer_offset = SMB2_HDR_BODY+0x38;
 		input_buffer_length = in_input_buffer->length;
@@ -139,7 +149,8 @@ struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  max_dyn_len);
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_query_directory.c b/libcli/smb/smb2cli_query_directory.c
index 32f5bee..bccc529 100644
--- a/libcli/smb/smb2cli_query_directory.c
+++ b/libcli/smb/smb2cli_query_directory.c
@@ -93,7 +93,8 @@ struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  outbuf_len); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_query_info.c b/libcli/smb/smb2cli_query_info.c
index 9ec16b5..454f25a 100644
--- a/libcli/smb/smb2cli_query_info.c
+++ b/libcli/smb/smb2cli_query_info.c
@@ -96,7 +96,8 @@ struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  in_max_output_length); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_read.c b/libcli/smb/smb2cli_read.c
index 0adb403..4a31622 100644
--- a/libcli/smb/smb2cli_read.c
+++ b/libcli/smb/smb2cli_read.c
@@ -72,7 +72,8 @@ struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  state->dyn_pad, sizeof(state->dyn_pad));
+				  state->dyn_pad, sizeof(state->dyn_pad),
+				  length); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_session.c b/libcli/smb/smb2cli_session.c
index 537c171..4418a0d 100644
--- a/libcli/smb/smb2cli_session.c
+++ b/libcli/smb/smb2cli_session.c
@@ -102,7 +102,8 @@ struct tevent_req *smb2cli_session_setup_send(TALLOC_CTX *mem_ctx,
 				  NULL, /* tcon */
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  UINT16_MAX); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
@@ -258,7 +259,8 @@ struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
 				  NULL, /* tcon */
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  NULL, 0);
+				  NULL, 0, /* dyn* */
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_set_info.c b/libcli/smb/smb2cli_set_info.c
index d5c7e58..6871370 100644
--- a/libcli/smb/smb2cli_set_info.c
+++ b/libcli/smb/smb2cli_set_info.c
@@ -88,7 +88,8 @@ struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/libcli/smb/smb2cli_write.c b/libcli/smb/smb2cli_write.c
index 8e65460..6d0a0aa 100644
--- a/libcli/smb/smb2cli_write.c
+++ b/libcli/smb/smb2cli_write.c
@@ -26,6 +26,7 @@
 struct smb2cli_write_state {
 	uint8_t fixed[48];
 	uint8_t dyn_pad[1];
+	uint32_t written;
 };
 
 static void smb2cli_write_done(struct tevent_req *subreq);
@@ -81,7 +82,8 @@ struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
 				  tcon,
 				  session,
 				  state->fixed, sizeof(state->fixed),
-				  dyn, dyn_len);
+				  dyn, dyn_len,
+				  0); /* max_dyn_len */
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
@@ -94,7 +96,11 @@ static void smb2cli_write_done(struct tevent_req *subreq)
 	struct tevent_req *req =
 		tevent_req_callback_data(subreq,
 		struct tevent_req);
+	struct smb2cli_write_state *state =
+		tevent_req_data(req,
+		struct smb2cli_write_state);
 	NTSTATUS status;
+	struct iovec *iov;
 	static const struct smb2cli_req_expected_response expected[] = {
 	{
 		.status = NT_STATUS_OK,
@@ -102,18 +108,32 @@ static void smb2cli_write_done(struct tevent_req *subreq)
 	}
 	};
 
-	status = smb2cli_req_recv(subreq, NULL, NULL,
+	status = smb2cli_req_recv(subreq, state, &iov,
 				  expected, ARRAY_SIZE(expected));
 	TALLOC_FREE(subreq);
 	if (tevent_req_nterror(req, status)) {
 		return;
 	}
+	state->written = IVAL(iov[1].iov_base, 4);
 	tevent_req_done(req);
 }
 
-NTSTATUS smb2cli_write_recv(struct tevent_req *req)
+NTSTATUS smb2cli_write_recv(struct tevent_req *req, uint32_t *written)
 {
-	return tevent_req_simple_recv_ntstatus(req);
+	struct smb2cli_write_state *state =
+		tevent_req_data(req,
+		struct smb2cli_write_state);
+	NTSTATUS status;
+
+	if (tevent_req_is_nterror(req, &status)) {
+		tevent_req_received(req);
+		return status;
+	}
+	if (written) {
+		*written = state->written;
+	}
+	tevent_req_received(req);
+	return NT_STATUS_OK;
 }
 
 NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
@@ -126,7 +146,8 @@ NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
 		       uint64_t fid_volatile,
 		       uint32_t remaining_bytes,
 		       uint32_t flags,
-		       const uint8_t *data)
+		       const uint8_t *data,
+		       uint32_t *written)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct tevent_context *ev;
@@ -155,7 +176,7 @@ NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
 	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
 		goto fail;
 	}
-	status = smb2cli_write_recv(req);
+	status = smb2cli_write_recv(req, written);
  fail:
 	TALLOC_FREE(frame);
 	return status;
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index 7397f83..1176bb8 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -246,6 +246,11 @@ struct smbXcli_req_state {
 		 */
 		struct iovec *recv_iov;
 
+		/*
+		 * the expected max for the response dyn_len
+		 */
+		uint32_t max_dyn_len;
+
 		uint16_t credit_charge;
 
 		bool should_sign;
@@ -590,6 +595,23 @@ uint32_t smb1cli_conn_max_xmit(struct smbXcli_conn *conn)
 	return conn->smb1.max_xmit;
 }
 
+bool smb1cli_conn_req_possible(struct smbXcli_conn *conn)
+{
+	size_t pending;
+	uint16_t possible = conn->smb1.server.max_mux;
+
+	pending = tevent_queue_length(conn->outgoing);
+	if (pending >= possible) {
+		return false;
+	}
+	pending += talloc_array_length(conn->pending);
+	if (pending >= possible) {
+		return false;
+	}
+
+	return true;
+}
+
 uint32_t smb1cli_conn_server_session_key(struct smbXcli_conn *conn)
 {
 	return conn->smb1.server.session_key;
@@ -2431,6 +2453,28 @@ bool smbXcli_conn_has_async_calls(struct smbXcli_conn *conn)
 		|| (talloc_array_length(conn->pending) != 0));
 }
 
+bool smb2cli_conn_req_possible(struct smbXcli_conn *conn, uint32_t *max_dyn_len)
+{
+	uint16_t credits = 1;
+
+	if (conn->smb2.cur_credits == 0) {
+		if (max_dyn_len != NULL) {
+			*max_dyn_len = 0;
+		}
+		return false;
+	}
+
+	if (conn->smb2.server.capabilities & SMB2_CAP_LARGE_MTU) {
+		credits = conn->smb2.cur_credits;
+	}
+
+	if (max_dyn_len != NULL) {
+		*max_dyn_len = credits * 65536;
+	}
+
+	return true;
+}
+
 uint32_t smb2cli_conn_server_capabilities(struct smbXcli_conn *conn)
 {
 	return conn->smb2.server.capabilities;
@@ -2490,7 +2534,7 @@ static bool smb2cli_req_cancel(struct tevent_req *req)
 				    0, /* timeout */
 				    tcon, session,
 				    fixed, fixed_len,
-				    NULL, 0);
+				    NULL, 0, 0);
 	if (subreq == NULL) {
 		return false;
 	}
@@ -2539,7 +2583,8 @@ struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
 				      const uint8_t *fixed,
 				      uint16_t fixed_len,
 				      const uint8_t *dyn,
-				      uint32_t dyn_len)
+				      uint32_t dyn_len,
+				      uint32_t max_dyn_len)
 {
 	struct tevent_req *req;
 	struct smbXcli_req_state *state;
@@ -2612,6 +2657,7 @@ struct tevent_req *smb2cli_req_create(TALLOC_CTX *mem_ctx,
 	state->smb2.fixed_len = fixed_len;
 	state->smb2.dyn = dyn;
 	state->smb2.dyn_len = dyn_len;
+	state->smb2.max_dyn_len = max_dyn_len;
 
 	if (state->smb2.should_encrypt) {
 		SIVAL(state->smb2.transform, SMB2_TF_PROTOCOL_ID, SMB2_TF_MAGIC);
@@ -2788,7 +2834,12 @@ NTSTATUS smb2cli_req_compound_submit(struct tevent_req **reqs,
 		}
 
 		if (state->conn->smb2.server.capabilities & SMB2_CAP_LARGE_MTU) {
-			charge = (MAX(state->smb2.dyn_len, 1) - 1)/ 65536 + 1;
+			uint32_t max_dyn_len = 1;
+
+			max_dyn_len = MAX(max_dyn_len, state->smb2.dyn_len);
+			max_dyn_len = MAX(max_dyn_len, state->smb2.max_dyn_len);
+
+			charge = (max_dyn_len - 1)/ 65536 + 1;
 		} else {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list