The branch, master has been updated
       via  aca64f6 libcli/smb: move smb2cli_logoff_* from source3 to the top 
level
       via  ce0d6d8 libcli/smb: git mv smb2_session.c smb2cli_session.c
       via  bf6b2fa s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_write.c
       via  2a39c5f s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_session.c
       via  640154c s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_read.c
       via  1395e46 s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_query_directory.c
       via  f88c60b s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_ioctl.c
       via  1355552 s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_flush.c
       via  820160c s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_create.c
       via  b2dcc7a s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_close.c
       via  0cb1fda s3:libsmb: s/\<event_context/tevent_context/gc in 
smb2cli_tcon.c
       via  b2c9fe4 lib/util: move tevent_req_poll_ntstatus() to 
tevent_ntstatus.c
       via  23887fa s3:torture: add #include "lib/util/tevent_ntstatus.h" to 
test_addrchange.c
       via  05e4f24 s3:lib/util: use map_nt_error_from_unix_common() in 
tevent_req_poll_ntstatus()
       via  b4f2184 lib/util: add missing 'errors' dependency to 'tevent-util'
       via  bf8829b5 s4:lib/events: no longer define TEVENT_COMPAT_DEFINES
       via  d41db72 s4:lib/events: remove unused event_context_find() prototype
       via  99a72e9 libcli/nbt: no longer use old 'event_' tevent compat symbols
       via  e05b54e lib/tevent/testsuite: no longer use 'compat' symbols
       via  e7e6796 s3:smb2_close: make the top level code async using
       via  b8d999c s3:smb2_close: add add smbd_smb2_close_send/recv as wrapper
       via  643e648 s3:smb2_close: don't do any marshalling in 
smbd_smb2_close() let the caller to it
       via  302f767 s3:smb2_tcon: make the top level code async using
       via  b19a9db s3:smb2_tcon: add smbd_smb2_tree_connect_send/recv as 
wrapper
      from  46a41d0 s3: Fix Coverity ID 241320 Array compared against 0

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


- Log -----------------------------------------------------------------
commit aca64f642da78e777b113a6b25342f18fc18c502
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:47:05 2012 +0200

    libcli/smb: move smb2cli_logoff_* from source3 to the top level
    
    metze
    
    Autobuild-User: Stefan Metzmacher <me...@samba.org>
    Autobuild-Date: Mon May 14 17:02:46 CEST 2012 on sn-devel-104

commit ce0d6d89eebf7747b1e8e6489400752287f4bec1
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:41:10 2012 +0200

    libcli/smb: git mv smb2_session.c smb2cli_session.c
    
    metze

commit bf6b2fa96bc3668cfaf3d28e8a377c6b7cac950a
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_write.c
    
    metze

commit 2a39c5f51358889d02e7b949ae32598e320b4182
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_session.c
    
    metze

commit 640154c4346400ca50a3268d3fc41a4a23856dd5
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_read.c
    
    metze

commit 1395e46a8c0a6362df13ad552660e80540dcfa3c
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_query_directory.c
    
    metze

commit f88c60bc70af4430cb27167d90d4dadb7346c4d1
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_ioctl.c
    
    metze

commit 13555524528f5fc15340cda89c778a813768fb46
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_flush.c
    
    metze

commit 820160ca0d97446d52499c8a5c5951967476a8ed
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_create.c
    
    metze

commit b2dcc7a061cb7438a51f886d7cd649b4c577ae04
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:56:47 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_close.c
    
    metze

commit 0cb1fdac4ee89eb02a4c5772bec8796d136f3026
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:55:42 2012 +0200

    s3:libsmb: s/\<event_context/tevent_context/gc in smb2cli_tcon.c
    
    metze

commit b2c9fe4ad18fd4ecb04bc2e3c2896e06418efed0
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 10:02:24 2012 +0200

    lib/util: move tevent_req_poll_ntstatus() to tevent_ntstatus.c
    
    metze

commit 23887fa87e403a79c8fd5f28373940bd695a293c
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:47:22 2012 +0200

    s3:torture: add #include "lib/util/tevent_ntstatus.h" to test_addrchange.c
    
    metze

commit 05e4f247297f9a379607b290b41ab905bbfab4de
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 09:58:56 2012 +0200

    s3:lib/util: use map_nt_error_from_unix_common() in 
tevent_req_poll_ntstatus()
    
    metze

commit b4f2184a29d6ca41aacbaff6f499982895b74fd6
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:46:39 2012 +0200

    lib/util: add missing 'errors' dependency to 'tevent-util'
    
    metze

commit bf8829b56f75019036c76be1bd46ad816586e3d9
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:50:52 2012 +0200

    s4:lib/events: no longer define TEVENT_COMPAT_DEFINES
    
    metze

commit d41db7247fb55a0559d4721fdf12dc559045a2f5
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:49:52 2012 +0200

    s4:lib/events: remove unused event_context_find() prototype
    
    metze

commit 99a72e913bc1adc70de14a17bcd61de93a874574
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:48:50 2012 +0200

    libcli/nbt: no longer use old 'event_' tevent compat symbols
    
    metze

commit e05b54ea326f9dd896db1391ba43e050c3d16e32
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 11:48:00 2012 +0200

    lib/tevent/testsuite: no longer use 'compat' symbols
    
    metze

commit e7e67962c724606c1538fe74b88779ed88d80d49
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 13:08:34 2012 +0200

    s3:smb2_close: make the top level code async using
    
    metze

commit b8d999ce84f15a69c469716e88c0c414f7fcc636
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 12:57:15 2012 +0200

    s3:smb2_close: add add smbd_smb2_close_send/recv as wrapper
    
    metze

commit 643e648ed0696ff26cbbc0d07bbadaee450bcb51
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 12:43:52 2012 +0200

    s3:smb2_close: don't do any marshalling in smbd_smb2_close() let the caller 
to it
    
    metze

commit 302f767fb763fb281e4de23b122f84ffa9fe845e
Author: Stefan Metzmacher <me...@samba.org>
Date:   Mon May 14 08:41:03 2012 +0200

    s3:smb2_tcon: make the top level code async using
    
    metze

commit b19a9dbb5b9429c71992bb66af8951a1263e1eb5
Author: Stefan Metzmacher <me...@samba.org>
Date:   Sun May 13 17:47:07 2012 +0200

    s3:smb2_tcon: add smbd_smb2_tree_connect_send/recv as wrapper
    
    metze

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

Summary of changes:
 lib/tevent/testsuite.c                           |   24 +-
 lib/util/tevent_ntstatus.c                       |   12 +
 lib/util/tevent_ntstatus.h                       |    4 +
 lib/util/wscript_build                           |    2 +-
 libcli/nbt/nbtsocket.c                           |   48 ++--
 libcli/smb/{smb2_session.c => smb2cli_session.c} |  100 +++++++++
 libcli/smb/smbXcli_base.h                        |   10 +
 libcli/smb/wscript_build                         |    2 +-
 source3/Makefile.in                              |    3 +-
 source3/include/proto.h                          |    3 -
 source3/lib/util.c                               |   11 -
 source3/libsmb/smb2cli.h                         |   10 -
 source3/libsmb/smb2cli_close.c                   |    4 +-
 source3/libsmb/smb2cli_create.c                  |    4 +-
 source3/libsmb/smb2cli_flush.c                   |    4 +-
 source3/libsmb/smb2cli_ioctl.c                   |    2 +-
 source3/libsmb/smb2cli_query_directory.c         |    4 +-
 source3/libsmb/smb2cli_read.c                    |    4 +-
 source3/libsmb/smb2cli_session.c                 |  130 ------------
 source3/libsmb/smb2cli_tcon.c                    |    8 +-
 source3/libsmb/smb2cli_write.c                   |    4 +-
 source3/smbd/smb2_close.c                        |  244 +++++++++++++++++++---
 source3/smbd/smb2_tcon.c                         |  159 ++++++++++++--
 source3/torture/test_addrchange.c                |    1 +
 source3/wscript_build                            |    1 -
 source4/lib/events/events.h                      |    4 -
 26 files changed, 530 insertions(+), 272 deletions(-)
 rename libcli/smb/{smb2_session.c => smb2cli_session.c} (72%)
 delete mode 100644 source3/libsmb/smb2cli_session.c


Changeset truncated at 500 lines:

diff --git a/lib/tevent/testsuite.c b/lib/tevent/testsuite.c
index 1e2f25a..e32ebf5 100644
--- a/lib/tevent/testsuite.c
+++ b/lib/tevent/testsuite.c
@@ -51,7 +51,7 @@ static void finished_handler(struct tevent_context *ev_ctx, 
struct tevent_timer
        (*finished) = 1;
 }
 
-static void count_handler(struct tevent_context *ev_ctx, struct signal_event 
*te,
+static void count_handler(struct tevent_context *ev_ctx, struct tevent_signal 
*te,
                          int signum, int count, void *info, void *private_data)
 {
        int *countp = (int *)private_data;
@@ -77,7 +77,7 @@ static bool test_event_context(struct torture_context *test,
        struct timeval t;
        char c = 0;
 
-       ev_ctx = event_context_init_byname(test, backend);
+       ev_ctx = tevent_context_init_byname(test, backend);
        if (ev_ctx == NULL) {
                torture_comment(test, "event backend '%s' not supported\n", 
backend);
                return true;
@@ -91,21 +91,21 @@ static bool test_event_context(struct torture_context *test,
        /* create a pipe */
        pipe(fd);
 
-       fde = event_add_fd(ev_ctx, ev_ctx, fd[0], EVENT_FD_READ,
-                          fde_handler, fd);
+       fde = tevent_add_fd(ev_ctx, ev_ctx, fd[0], TEVENT_FD_READ,
+                           fde_handler, fd);
        tevent_fd_set_auto_close(fde);
 
-       event_add_timed(ev_ctx, ev_ctx, timeval_current_ofs(2,0), 
-                       finished_handler, &finished);
+       tevent_add_timer(ev_ctx, ev_ctx, timeval_current_ofs(2,0),
+                        finished_handler, &finished);
 
 #ifdef SA_RESTART
-       se1 = event_add_signal(ev_ctx, ev_ctx, SIGALRM, SA_RESTART, 
count_handler, &alarm_count);
+       se1 = tevent_add_signal(ev_ctx, ev_ctx, SIGALRM, SA_RESTART, 
count_handler, &alarm_count);
 #endif
 #ifdef SA_RESETHAND
-       se2 = event_add_signal(ev_ctx, ev_ctx, SIGALRM, SA_RESETHAND, 
count_handler, &alarm_count);
+       se2 = tevent_add_signal(ev_ctx, ev_ctx, SIGALRM, SA_RESETHAND, 
count_handler, &alarm_count);
 #endif
 #ifdef SA_SIGINFO
-       se3 = event_add_signal(ev_ctx, ev_ctx, SIGUSR1, SA_SIGINFO, 
count_handler, &info_count);
+       se3 = tevent_add_signal(ev_ctx, ev_ctx, SIGUSR1, SA_SIGINFO, 
count_handler, &info_count);
 #endif
 
        write(fd[1], &c, 1);
@@ -113,7 +113,7 @@ static bool test_event_context(struct torture_context *test,
        t = timeval_current();
        while (!finished) {
                errno = 0;
-               if (event_loop_once(ev_ctx) == -1) {
+               if (tevent_loop_once(ev_ctx) == -1) {
                        talloc_free(ev_ctx);
                        torture_fail(test, talloc_asprintf(test, "Failed event 
loop %s\n", strerror(errno)));
                }
@@ -123,7 +123,7 @@ static bool test_event_context(struct torture_context *test,
        close(fd[1]);
 
        while (alarm_count < fde_count+1) {
-               if (event_loop_once(ev_ctx) == -1) {
+               if (tevent_loop_once(ev_ctx) == -1) {
                        break;
                }
        }
@@ -149,7 +149,7 @@ static bool test_event_context(struct torture_context *test,
 struct torture_suite *torture_local_event(TALLOC_CTX *mem_ctx)
 {
        struct torture_suite *suite = torture_suite_create(mem_ctx, "event");
-       const char **list = event_backend_list(suite);
+       const char **list = tevent_backend_list(suite);
        int i;
 
        for (i=0;list && list[i];i++) {
diff --git a/lib/util/tevent_ntstatus.c b/lib/util/tevent_ntstatus.c
index 764d251..cbbc698 100644
--- a/lib/util/tevent_ntstatus.c
+++ b/lib/util/tevent_ntstatus.c
@@ -19,6 +19,7 @@
 
 #include "../replace/replace.h"
 #include "tevent_ntstatus.h"
+#include "libcli/util/error.h"
 
 #define TEVENT_NTERROR_MAGIC (0x917b5acd)
 
@@ -97,3 +98,14 @@ void tevent_req_simple_finish_ntstatus(struct tevent_req 
*subreq,
        }
        tevent_req_done(req);
 }
+
+bool tevent_req_poll_ntstatus(struct tevent_req *req,
+                             struct tevent_context *ev,
+                             NTSTATUS *status)
+{
+       bool ret = tevent_req_poll(req, ev);
+       if (!ret) {
+               *status = map_nt_error_from_unix_common(errno);
+       }
+       return ret;
+}
diff --git a/lib/util/tevent_ntstatus.h b/lib/util/tevent_ntstatus.h
index 4ac9243..570b6f9 100644
--- a/lib/util/tevent_ntstatus.h
+++ b/lib/util/tevent_ntstatus.h
@@ -40,4 +40,8 @@ NTSTATUS tevent_req_simple_recv_ntstatus(struct tevent_req 
*req);
 void tevent_req_simple_finish_ntstatus(struct tevent_req *subreq,
                                       NTSTATUS subreq_status);
 
+bool tevent_req_poll_ntstatus(struct tevent_req *req,
+                             struct tevent_context *ev,
+                             NTSTATUS *status);
+
 #endif
diff --git a/lib/util/wscript_build b/lib/util/wscript_build
index d50592b..2fa4023 100755
--- a/lib/util/wscript_build
+++ b/lib/util/wscript_build
@@ -57,7 +57,7 @@ bld.SAMBA_LIBRARY('util_tdb',
 bld.SAMBA_LIBRARY('tevent-util',
        source='tevent_unix.c tevent_ntstatus.c tevent_werror.c',
        local_include=False,
-       public_deps='tevent',
+       public_deps='tevent errors',
        public_headers='tevent_ntstatus.h tevent_unix.h tevent_werror.h',
        header_path=[ ('*', 'util') ],
        pc_files=[],
diff --git a/libcli/nbt/nbtsocket.c b/libcli/nbt/nbtsocket.c
index 2b792c5..6c62739 100644
--- a/libcli/nbt/nbtsocket.c
+++ b/libcli/nbt/nbtsocket.c
@@ -50,11 +50,11 @@ static int nbt_name_request_destructor(struct 
nbt_name_request *req)
                req->te = NULL;
        }
        if (req->nbtsock->send_queue == NULL) {
-               EVENT_FD_NOT_WRITEABLE(req->nbtsock->fde);
+               TEVENT_FD_NOT_WRITEABLE(req->nbtsock->fde);
        }
        if (req->nbtsock->num_pending == 0 &&
            req->nbtsock->incoming.handler == NULL) {
-               EVENT_FD_NOT_READABLE(req->nbtsock->fde);
+               TEVENT_FD_NOT_READABLE(req->nbtsock->fde);
        }
        return 0;
 }
@@ -87,12 +87,12 @@ static void nbt_name_socket_send(struct nbt_name_socket 
*nbtsock)
                if (req->is_reply) {
                        talloc_free(req);
                } else {
-                       EVENT_FD_READABLE(nbtsock->fde);
+                       TEVENT_FD_READABLE(nbtsock->fde);
                        nbtsock->num_pending++;
                }
        }
 
-       EVENT_FD_NOT_WRITEABLE(nbtsock->fde);
+       TEVENT_FD_NOT_WRITEABLE(nbtsock->fde);
        talloc_free(tmp_ctx);
        return;
 
@@ -122,15 +122,15 @@ static void nbt_name_socket_timeout(struct tevent_context 
*ev, struct tevent_tim
 
        if (req->num_retries != 0) {
                req->num_retries--;
-               req->te = event_add_timed(req->nbtsock->event_ctx, req,
-                                         timeval_add(&t, req->timeout, 0),
-                                         nbt_name_socket_timeout, req);
+               req->te = tevent_add_timer(req->nbtsock->event_ctx, req,
+                                          timeval_add(&t, req->timeout, 0),
+                                          nbt_name_socket_timeout, req);
                if (req->state != NBT_REQUEST_SEND) {
                        req->state = NBT_REQUEST_SEND;
                        DLIST_ADD_END(req->nbtsock->send_queue, req,
                                      struct nbt_name_request *);
                }
-               EVENT_FD_WRITEABLE(req->nbtsock->fde);
+               TEVENT_FD_WRITEABLE(req->nbtsock->fde);
                return;
        }
 
@@ -273,9 +273,9 @@ void nbt_name_socket_handle_response_packet(struct 
nbt_name_request *req,
                        ttl = 5 + 4*25;
                }
                req->timeout = ttl;
-               req->te = event_add_timed(req->nbtsock->event_ctx, req,
-                                         timeval_current_ofs(req->timeout, 0),
-                                         nbt_name_socket_timeout, req);
+               req->te = tevent_add_timer(req->nbtsock->event_ctx, req,
+                                          timeval_current_ofs(req->timeout, 0),
+                                          nbt_name_socket_timeout, req);
                return;
        }
 
@@ -318,10 +318,10 @@ static void nbt_name_socket_handler(struct tevent_context 
*ev, struct tevent_fd
 {
        struct nbt_name_socket *nbtsock = talloc_get_type(private_data,
                                                          struct 
nbt_name_socket);
-       if (flags & EVENT_FD_WRITE) {
+       if (flags & TEVENT_FD_WRITE) {
                nbt_name_socket_send(nbtsock);
        }
-       if (flags & EVENT_FD_READ) {
+       if (flags & TEVENT_FD_READ) {
                nbt_name_socket_recv(nbtsock);
        }
 }
@@ -358,9 +358,9 @@ _PUBLIC_ struct nbt_name_socket 
*nbt_name_socket_init(TALLOC_CTX *mem_ctx,
        nbtsock->incoming.handler = NULL;
        nbtsock->unexpected.handler = NULL;
 
-       nbtsock->fde = event_add_fd(nbtsock->event_ctx, nbtsock,
-                                   socket_get_fd(nbtsock->sock), 0,
-                                   nbt_name_socket_handler, nbtsock);
+       nbtsock->fde = tevent_add_fd(nbtsock->event_ctx, nbtsock,
+                                    socket_get_fd(nbtsock->sock), 0,
+                                    nbt_name_socket_handler, nbtsock);
 
        return nbtsock;
 
@@ -407,9 +407,9 @@ struct nbt_name_request *nbt_name_request_send(struct 
nbt_name_socket *nbtsock,
        request->name_trn_id = id;
        req->name_trn_id     = id;
 
-       req->te = event_add_timed(nbtsock->event_ctx, req,
-                                 timeval_current_ofs(req->timeout, 0),
-                                 nbt_name_socket_timeout, req);
+       req->te = tevent_add_timer(nbtsock->event_ctx, req,
+                                  timeval_current_ofs(req->timeout, 0),
+                                  nbt_name_socket_timeout, req);
 
        talloc_set_destructor(req, nbt_name_request_destructor);
 
@@ -426,7 +426,7 @@ struct nbt_name_request *nbt_name_request_send(struct 
nbt_name_socket *nbtsock,
                NDR_PRINT_DEBUG(nbt_name_packet, request);
        }
 
-       EVENT_FD_WRITEABLE(nbtsock->fde);
+       TEVENT_FD_WRITEABLE(nbtsock->fde);
 
        return req;
 
@@ -471,7 +471,7 @@ _PUBLIC_ NTSTATUS nbt_name_reply_send(struct 
nbt_name_socket *nbtsock,
 
        DLIST_ADD_END(nbtsock->send_queue, req, struct nbt_name_request *);
 
-       EVENT_FD_WRITEABLE(nbtsock->fde);
+       TEVENT_FD_WRITEABLE(nbtsock->fde);
 
        return NT_STATUS_OK;
 
@@ -488,7 +488,7 @@ NTSTATUS nbt_name_request_recv(struct nbt_name_request *req)
        if (!req) return NT_STATUS_NO_MEMORY;
 
        while (req->state < NBT_REQUEST_DONE) {
-               if (event_loop_once(req->nbtsock->event_ctx) != 0) {
+               if (tevent_loop_once(req->nbtsock->event_ctx) != 0) {
                        req->state = NBT_REQUEST_ERROR;
                        req->status = NT_STATUS_UNEXPECTED_NETWORK_ERROR;
                        break;
@@ -508,7 +508,7 @@ _PUBLIC_ NTSTATUS nbt_set_incoming_handler(struct 
nbt_name_socket *nbtsock,
 {
        nbtsock->incoming.handler = handler;
        nbtsock->incoming.private_data = private_data;
-       EVENT_FD_READABLE(nbtsock->fde);
+       TEVENT_FD_READABLE(nbtsock->fde);
        return NT_STATUS_OK;
 }
 
@@ -522,7 +522,7 @@ NTSTATUS nbt_set_unexpected_handler(struct nbt_name_socket 
*nbtsock,
 {
        nbtsock->unexpected.handler = handler;
        nbtsock->unexpected.private_data = private_data;
-       EVENT_FD_READABLE(nbtsock->fde);
+       TEVENT_FD_READABLE(nbtsock->fde);
        return NT_STATUS_OK;
 }
 
diff --git a/libcli/smb/smb2_session.c b/libcli/smb/smb2cli_session.c
similarity index 72%
rename from libcli/smb/smb2_session.c
rename to libcli/smb/smb2cli_session.c
index b69f0a2..640eb95 100644
--- a/libcli/smb/smb2_session.c
+++ b/libcli/smb/smb2cli_session.c
@@ -230,4 +230,104 @@ NTSTATUS smb2cli_session_setup_recv(struct tevent_req 
*req,
        return status;
 }
 
+struct smb2cli_logoff_state {
+       uint8_t fixed[4];
+};
+
+static void smb2cli_logoff_done(struct tevent_req *subreq);
+
+struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
+                                      struct tevent_context *ev,
+                                      struct smbXcli_conn *conn,
+                                      uint32_t timeout_msec,
+                                      struct smbXcli_session *session)
+{
+       struct tevent_req *req, *subreq;
+       struct smb2cli_logoff_state *state;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct smb2cli_logoff_state);
+       if (req == NULL) {
+               return NULL;
+       }
+       SSVAL(state->fixed, 0, 4);
+
+       subreq = smb2cli_req_send(state, ev,
+                                 conn, SMB2_OP_LOGOFF,
+                                 0, 0, /* flags */
+                                 timeout_msec,
+                                 0xFEFF, /* pid */
+                                 0, /* tid */
+                                 session,
+                                 state->fixed, sizeof(state->fixed),
+                                 NULL, 0);
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, smb2cli_logoff_done, req);
+       return req;
+}
+
+static void smb2cli_logoff_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req =
+               tevent_req_callback_data(subreq,
+               struct tevent_req);
+       struct smb2cli_logoff_state *state =
+               tevent_req_data(req,
+               struct smb2cli_logoff_state);
+       NTSTATUS status;
+       struct iovec *iov;
+       static const struct smb2cli_req_expected_response expected[] = {
+       {
+               .status = NT_STATUS_OK,
+               .body_size = 0x04
+       }
+       };
+
+       status = smb2cli_req_recv(subreq, state, &iov,
+                                 expected, ARRAY_SIZE(expected));
+       TALLOC_FREE(subreq);
+       if (tevent_req_nterror(req, status)) {
+               return;
+       }
+       tevent_req_done(req);
+}
 
+NTSTATUS smb2cli_logoff_recv(struct tevent_req *req)
+{
+       return tevent_req_simple_recv_ntstatus(req);
+}
+
+NTSTATUS smb2cli_logoff(struct smbXcli_conn *conn,
+                       uint32_t timeout_msec,
+                       struct smbXcli_session *session)
+{
+       TALLOC_CTX *frame = talloc_stackframe();
+       struct tevent_context *ev;
+       struct tevent_req *req;
+       NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+       if (smbXcli_conn_has_async_calls(conn)) {
+               /*
+                * Can't use sync call while an async call is in flight
+                */
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto fail;
+       }
+       ev = tevent_context_init(frame);
+       if (ev == NULL) {
+               goto fail;
+       }
+       req = smb2cli_logoff_send(frame, ev, conn, timeout_msec, session);
+       if (req == NULL) {
+               goto fail;
+       }
+       if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+               goto fail;
+       }
+       status = smb2cli_logoff_recv(req);
+ fail:
+       TALLOC_FREE(frame);
+       return status;
+}
diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h
index 91dc244..81fb1fd 100644
--- a/libcli/smb/smbXcli_base.h
+++ b/libcli/smb/smbXcli_base.h
@@ -280,4 +280,14 @@ NTSTATUS smb2cli_session_setup_recv(struct tevent_req *req,
                                    struct iovec **recv_iov,
                                    DATA_BLOB *out_security_buffer);
 
+struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
+                                      struct tevent_context *ev,
+                                      struct smbXcli_conn *conn,
+                                      uint32_t timeout_msec,
+                                      struct smbXcli_session *session);
+NTSTATUS smb2cli_logoff_recv(struct tevent_req *req);
+NTSTATUS smb2cli_logoff(struct smbXcli_conn *conn,
+                       uint32_t timeout_msec,
+                       struct smbXcli_session *session);
+
 #endif /* _SMBXCLI_BASE_H_ */
diff --git a/libcli/smb/wscript_build b/libcli/smb/wscript_build
index 4e86029..4447005 100755
--- a/libcli/smb/wscript_build
+++ b/libcli/smb/wscript_build
@@ -5,10 +5,10 @@ bld.SAMBA_LIBRARY('cli_smb_common',
        source='''
                smb_signing.c smb_seal.c
                smb2_create_blob.c smb2_signing.c
-               smb2_session.c
                util.c read_smb.c
                smbXcli_base.c
                smb1cli_trans.c
+               smb2cli_session.c
        ''',
        deps='LIBCRYPTO errors gensec krb5samba LIBASYNC_REQ',
        public_deps='talloc samba-util',
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 9220778..52ed5d3 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -617,8 +617,7 @@ LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o 
libsmb/clifile.o \
             ../libcli/smb/read_smb.o \
             ../libcli/smb/smbXcli_base.o \
             ../libcli/smb/smb1cli_trans.o \
-            ../libcli/smb/smb2_session.o \
-            libsmb/smb2cli_session.o \
+            ../libcli/smb/smb2cli_session.o \
             libsmb/smb2cli_tcon.o \
             libsmb/smb2cli_create.o \
             ../libcli/smb/smb2_create_blob.o \
diff --git a/source3/include/proto.h b/source3/include/proto.h
index d45ec88..f9306b8 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -536,9 +536,6 @@ void split_domain_user(TALLOC_CTX *mem_ctx,
                       char **domain,
                       char **user);
 const char *strip_hostname(const char *s);
-bool tevent_req_poll_ntstatus(struct tevent_req *req,
-                             struct tevent_context *ev,
-                             NTSTATUS *status);
 bool any_nt_status_not_ok(NTSTATUS err1, NTSTATUS err2, NTSTATUS *result);
 int timeval_to_msec(struct timeval t);
 char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname);
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 7913ce9..49cd771 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -2262,17 +2262,6 @@ const char *strip_hostname(const char *s)
        return s;
 }
 
-bool tevent_req_poll_ntstatus(struct tevent_req *req,
-                             struct tevent_context *ev,
-                             NTSTATUS *status)
-{
-       bool ret = tevent_req_poll(req, ev);
-       if (!ret) {
-               *status = map_nt_error_from_unix(errno);
-       }
-       return ret;
-}
-
 bool any_nt_status_not_ok(NTSTATUS err1, NTSTATUS err2, NTSTATUS *result)
 {
        if (!NT_STATUS_IS_OK(err1)) {
diff --git a/source3/libsmb/smb2cli.h b/source3/libsmb/smb2cli.h
index bd6b131..003e0de 100644
--- a/source3/libsmb/smb2cli.h
+++ b/source3/libsmb/smb2cli.h
@@ -24,16 +24,6 @@ struct smbXcli_conn;
 struct smbXcli_session;
 struct cli_state;
 
-struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
-                                      struct tevent_context *ev,
-                                      struct smbXcli_conn *conn,
-                                      uint32_t timeout_msec,
-                                      struct smbXcli_session *session);
-NTSTATUS smb2cli_logoff_recv(struct tevent_req *req);
-NTSTATUS smb2cli_logoff(struct smbXcli_conn *conn,
-                       uint32_t timeout_msec,
-                       struct smbXcli_session *session);
-
 struct tevent_req *smb2cli_tcon_send(TALLOC_CTX *mem_ctx,
                                     struct tevent_context *ev,
                                     struct cli_state *cli,
diff --git a/source3/libsmb/smb2cli_close.c b/source3/libsmb/smb2cli_close.c


-- 
Samba Shared Repository

Reply via email to