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