The branch, master has been updated
       via  4f4151e s3: lib: libsmbclient: If reusing a server struct, check 
every cli->timout miliseconds if it's still valid before use.
      from  00d92f5 s3: libcli: smb1: Ensure we correctly finish a tevent req 
if the writev fails in the SMB1 case.

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


- Log -----------------------------------------------------------------
commit 4f4151ea050a5f34e42d73a4bf9448c673a35787
Author: Jeremy Allison <[email protected]>
Date:   Wed Mar 18 14:15:16 2015 -0700

    s3: lib: libsmbclient: If reusing a server struct, check every cli->timout 
miliseconds if it's still valid before use.
    
    Uses an cli_echo() call to do so.
    
    Based on code from <[email protected]>
    
    Bug 11079 - libsmbclient not checking the cached connection alive status 
before re-using it from connection cache
    
    https://bugzilla.samba.org/show_bug.cgi?id=11079
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: David Disseldorp <[email protected]>
    
    Autobuild-User(master): David Disseldorp <[email protected]>
    Autobuild-Date(master): Fri Mar 20 13:48:26 CET 2015 on sn-devel-104

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

Summary of changes:
 source3/include/libsmb_internal.h |  1 +
 source3/libsmb/libsmb_server.c    | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)


Changeset truncated at 500 lines:

diff --git a/source3/include/libsmb_internal.h 
b/source3/include/libsmb_internal.h
index ce73181..65fad99 100644
--- a/source3/include/libsmb_internal.h
+++ b/source3/include/libsmb_internal.h
@@ -81,6 +81,7 @@ struct _SMBCSRV {
        bool no_pathinfo3;
         bool no_nt_session;
         struct policy_handle pol;
+       time_t last_echo_time;
 
        SMBCSRV *next, *prev;
 };
diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c
index 8f68a40..d6c2588 100644
--- a/source3/libsmb/libsmb_server.c
+++ b/source3/libsmb/libsmb_server.c
@@ -45,10 +45,26 @@ int
 SMBC_check_server(SMBCCTX * context,
                   SMBCSRV * server)
 {
+       time_t now;
+
        if (!cli_state_is_connected(server->cli)) {
                return 1;
        }
 
+       now = time_mono(NULL);
+
+       if (server->last_echo_time == (time_t)0 ||
+                       now > server->last_echo_time +
+                               (server->cli->timeout/1000)) {
+               unsigned char data[16] = {0};
+               NTSTATUS status = cli_echo(server->cli,
+                                       1,
+                                       data_blob_const(data, sizeof(data)));
+               if (!NT_STATUS_IS_OK(status)) {
+                       return 1;
+               }
+               server->last_echo_time = now;
+       }
        return 0;
 }
 


-- 
Samba Shared Repository

Reply via email to