[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Thu May 28 20:36:06 UTC 2020
The branch, master has been updated
via 5c918d40bdc libsmb: Use tevent_req_received() in cli_qfileinfo_recv()
via 0b6debbbb0a pylibsmb: Use async cli_mkdir also for smb2
via 99ced4cc58a libsmb: Remove sync cli_smb2_mkdir()
via 93675b4f96e libsmb: Use async cli_smb2_mkdir in async cli_mkdir
via 9b598a281b0 libsmb: Add async cli_smb2_mkdir_send()/recv()
via e724c51d7f2 pylibsmb: Use async cli_chkpath also for smb2
via 44875bdad71 libsmb: Remove sync cli_smb2_chkpath()
via c4bf5b23811 libsmb: Use async cli_smb2_chkpath in async cli_chkpath
via fafdb5e38c5 libsmb: Add async cli_smb2_chkpath_send/recv()
via 825948c766c pylibsmb: Use async cli_rmdir also for smb2
via 19bb7b00962 libsmb: Remove sync cli_smb2_rmdir()
via 81a491dc800 libsmb: Use tevent_req_simple_finish_ntstatus() in cli_rmdir_done()
via fe1e4dc9d95 libsmb: Use async cli_smb2_rmdir in async cli_rmdir
via ecc25735440 smbcacls: Fix typo "inherated"->"inherited"
via d9027c56a57 smbcacls: Align integer types
via 358ad2800a8 smbcacls: Remove the CREATE_ACCESS_READ #define
via 41ff5579759 smbcacls: Reformat a call to cli_ntcreate()
via eec64f24561 libsmb: Remove the CREATE_ACCESS_READ #define
via 535731a2911 libsmb: Reformat calls to cli_ntcreate()
via e4b7d590608 smbclient: Remove the CREATE_ACCESS_READ #define
via c164c036ab8 smbclient: Reformat a call to cli_ntcreate()
via 1692b8a6518 pylibsmb: Use async cli_unlink also for smb2
via a92a4324c74 libsmb: Remove sync cli_smb2_unlink()
via f8eb7545612 libsmb: Use tevent_req_simple_finish_ntstatus() in cli_unlink_done()
via 5c8312f8e87 libsmb: Use async cli_smb2_unlink in async cli_unlink
via 2c6138f47d7 libsmb: Remove clistr_pull_talloc()
via 3cf84f0e1f9 libsmb: Trim #includes
via 652b733337b libsmb: Remove an outdated comment
from bae35ebcf34 s3:libsmb: remove finally unused credential flags
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 5c918d40bdc701d2eea384bd2890e7e4c5e490ca
Author: Volker Lendecke <vl at samba.org>
Date: Wed May 27 19:09:51 2020 +0200
libsmb: Use tevent_req_received() in cli_qfileinfo_recv()
That takes care of doing the early talloc_free(state)
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Thu May 28 20:35:41 UTC 2020 on sn-devel-184
commit 0b6debbbb0abf3572db52450937ebd4e493ae758
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 09:01:57 2020 +0200
pylibsmb: Use async cli_mkdir also for smb2
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 99ced4cc58a0aebb52f6b78e99eb4b674ab156f6
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:31:10 2020 +0200
libsmb: Remove sync cli_smb2_mkdir()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 93675b4f96e6cf40a159dde975aa1d288a035706
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:23:31 2020 +0200
libsmb: Use async cli_smb2_mkdir in async cli_mkdir
No need to call the sync wrapper in cli_mkdir()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 9b598a281b079ab9ac37f34e9c3cf9f5ede6b3a9
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 22:21:14 2020 +0200
libsmb: Add async cli_smb2_mkdir_send()/recv()
Not converting the sync version to use it, it will go away very soon
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit e724c51d7f2753ee26a7f33ef00bae98b0ae8574
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 09:01:57 2020 +0200
pylibsmb: Use async cli_chkpath also for smb2
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 44875bdad715de833e548482b03c8524089e6df2
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:31:10 2020 +0200
libsmb: Remove sync cli_smb2_chkpath()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit c4bf5b23811f9bc14a8b6cabd3bfcb98778d31e0
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:23:31 2020 +0200
libsmb: Use async cli_smb2_chkpath in async cli_chkpath
No need to call the sync wrapper in cli_chkpath()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit fafdb5e38c59e25af94afa091bacc717ae9a21af
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 22:21:14 2020 +0200
libsmb: Add async cli_smb2_chkpath_send/recv()
Not converting the sync version to use it, it will go away very soon
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 825948c766c4d3b66897b9a8f73754fa430bc96d
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 09:01:57 2020 +0200
pylibsmb: Use async cli_rmdir also for smb2
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 19bb7b0096292a21f2676d238d02cac9b100bc2c
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:31:10 2020 +0200
libsmb: Remove sync cli_smb2_rmdir()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 81a491dc80062dff1767fa5271da365709faba67
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:29:26 2020 +0200
libsmb: Use tevent_req_simple_finish_ntstatus() in cli_rmdir_done()
Save a few lines of code
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit fe1e4dc9d956b2b53946855757543eb205fae5c0
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:23:31 2020 +0200
libsmb: Use async cli_smb2_rmdir in async cli_rmdir
No need to call the sync wrapper in cli_rmdir()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit ecc2573544033a4b0498329d3836405b584161b7
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:17:14 2020 +0200
smbcacls: Fix typo "inherated"->"inherited"
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit d9027c56a5768d49fb372f51b473054b6e16e624
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:16:32 2020 +0200
smbcacls: Align integer types
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 358ad2800a85b130f5fc5a6a57daa6817c6ec001
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:04:52 2020 +0200
smbcacls: Remove the CREATE_ACCESS_READ #define
That only confuses things
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 41ff5579759a577c2dfdfed955c970510375b25f
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:07:41 2020 +0200
smbcacls: Reformat a call to cli_ntcreate()
The next patch will change one of the arguments
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit eec64f24561673933134f3d37c31011c09820b47
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:04:52 2020 +0200
libsmb: Remove the CREATE_ACCESS_READ #define
That only confuses things
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 535731a291170e4706bd2c465f96bcfd3326972f
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:07:41 2020 +0200
libsmb: Reformat calls to cli_ntcreate()
The next patch will change one of the arguments
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit e4b7d590608accdf1ade571c7caa14f4d7de5781
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:04:52 2020 +0200
smbclient: Remove the CREATE_ACCESS_READ #define
That only confuses things
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit c164c036ab86ffaff8668bf1d19aae545c2685ff
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 08:01:33 2020 +0200
smbclient: Reformat a call to cli_ntcreate()
The next patch will change one of the arguments
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 1692b8a65180c3c90d5ae40fc05400228510b3d6
Author: Volker Lendecke <vl at samba.org>
Date: Tue May 26 09:01:57 2020 +0200
pylibsmb: Use async cli_unlink also for smb2
Async cli_smb2_unlink was just added
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit a92a4324c74c30d2bb20ff1432d0622eaf382a64
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:31:10 2020 +0200
libsmb: Remove sync cli_smb2_unlink()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit f8eb7545612377216e8265c7de6544856797bf7d
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:29:26 2020 +0200
libsmb: Use tevent_req_simple_finish_ntstatus() in cli_unlink_done()
Save a few lines of code
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 5c8312f8e8777c4e5d0c3bcddc8ad8f95f8fa60e
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:23:31 2020 +0200
libsmb: Use async cli_smb2_unlink in async cli_unlink
No need to call the sync wrapper in cli_unlink()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 2c6138f47d762bbefaccf924bea192c2b91ed073
Author: Volker Lendecke <vl at samba.org>
Date: Sun May 17 12:57:32 2020 +0200
libsmb: Remove clistr_pull_talloc()
This was just a 1:1 wrapper around pull_string_talloc()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 3cf84f0e1f94bc127090aef4a8704fecd07a3a6a
Author: Volker Lendecke <vl at samba.org>
Date: Sun May 17 12:06:23 2020 +0200
libsmb: Trim #includes
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 652b733337b76096ffd38917b810931404cc1695
Author: Volker Lendecke <vl at samba.org>
Date: Mon May 25 18:21:40 2020 +0200
libsmb: Remove an outdated comment
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/client/client.c | 19 ++-
source3/include/libsmb_internal.h | 2 -
source3/libsmb/cli_smb2_fnum.c | 289 +++++++++++++++++++-------------------
source3/libsmb/cli_smb2_fnum.h | 23 +--
source3/libsmb/cliconnect.c | 28 ++--
source3/libsmb/clidfs.c | 2 +-
source3/libsmb/clifile.c | 118 +++++++++++-----
source3/libsmb/clifsinfo.c | 2 +-
source3/libsmb/clilist.c | 70 ++++-----
source3/libsmb/clirap.c | 2 +-
source3/libsmb/clistr.c | 19 +--
source3/libsmb/libsmb_xattr.c | 33 ++++-
source3/libsmb/proto.h | 7 -
source3/libsmb/pylibsmb.c | 71 ++++------
source3/utils/smbcacls.c | 28 ++--
15 files changed, 373 insertions(+), 340 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/client/client.c b/source3/client/client.c
index 87b27062d15..2a95911f54d 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -66,8 +66,6 @@ static int max_protocol = -1;
static int process_tok(char *tok);
static int cmd_help(void);
-#define CREATE_ACCESS_READ READ_CONTROL_ACCESS
-
/* value for unused fid field in trans2 secondary request */
#define FID_UNUSED (0xFFFF)
@@ -606,10 +604,19 @@ static NTSTATUS display_finfo(struct cli_state *cli_state, struct file_info *fin
d_printf( "MODE:%s\n", attrib_string(talloc_tos(), finfo->mode));
d_printf( "SIZE:%.0f\n", (double)finfo->size);
d_printf( "MTIME:%s", time_to_asc(t));
- status = cli_ntcreate(cli_state, afname, 0,
- CREATE_ACCESS_READ, 0,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
- FILE_OPEN, 0x0, 0x0, &fnum, NULL);
+ status = cli_ntcreate(
+ cli_state, /* cli */
+ afname, /* fname */
+ 0, /* CreatFlags */
+ READ_CONTROL_ACCESS, /* DesiredAccess */
+ 0, /* FileAttributes */
+ FILE_SHARE_READ|
+ FILE_SHARE_WRITE, /* ShareAccess */
+ FILE_OPEN, /* CreateDisposition */
+ 0x0, /* CreateOptions */
+ 0x0, /* SecurityFlags */
+ &fnum, /* pfid */
+ NULL); /* cr */
if (!NT_STATUS_IS_OK(status)) {
DEBUG( 0, ("display_finfo() Failed to open %s: %s\n",
afname, nt_errstr(status)));
diff --git a/source3/include/libsmb_internal.h b/source3/include/libsmb_internal.h
index 13fd46977a0..ba9936a0eba 100644
--- a/source3/include/libsmb_internal.h
+++ b/source3/include/libsmb_internal.h
@@ -65,8 +65,6 @@ struct DOS_ATTR_DESC {
#define SMBC_XATTR_MODE_CHOWN 5
#define SMBC_XATTR_MODE_CHGRP 6
-#define CREATE_ACCESS_READ READ_CONTROL_ACCESS
-
/*We should test for this in configure ... */
#ifndef ENOTSUP
#define ENOTSUP EOPNOTSUPP
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c
index 7fed546d63f..c1c755a97ea 100644
--- a/source3/libsmb/cli_smb2_fnum.c
+++ b/source3/libsmb/cli_smb2_fnum.c
@@ -760,46 +760,84 @@ NTSTATUS cli_smb2_delete_on_close(struct cli_state *cli, uint16_t fnum, bool fla
return status;
}
-/***************************************************************
- Small wrapper that allows SMB2 to create a directory
- Synchronous only.
-***************************************************************/
+struct cli_smb2_mkdir_state {
+ struct tevent_context *ev;
+ struct cli_state *cli;
+};
+
+static void cli_smb2_mkdir_opened(struct tevent_req *subreq);
+static void cli_smb2_mkdir_closed(struct tevent_req *subreq);
-NTSTATUS cli_smb2_mkdir(struct cli_state *cli, const char *dname)
+struct tevent_req *cli_smb2_mkdir_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *dname)
{
+ struct tevent_req *req = NULL, *subreq = NULL;
+ struct cli_smb2_mkdir_state *state = NULL;
+
+ req = tevent_req_create(
+ mem_ctx, &state, struct cli_smb2_mkdir_state);
+ if (req == NULL) {
+ return NULL;
+ }
+ state->ev = ev;
+ state->cli = cli;
+
+ /* Ensure this is a directory. */
+ subreq = cli_smb2_create_fnum_send(
+ state, /* mem_ctx */
+ ev, /* ev */
+ cli, /* cli */
+ dname, /* fname */
+ 0, /* create_flags */
+ SMB2_IMPERSONATION_IMPERSONATION, /* impersonation_level */
+ FILE_READ_ATTRIBUTES, /* desired_access */
+ FILE_ATTRIBUTE_DIRECTORY, /* file_attributes */
+ FILE_SHARE_READ|
+ FILE_SHARE_WRITE, /* share_access */
+ FILE_CREATE, /* create_disposition */
+ FILE_DIRECTORY_FILE, /* create_options */
+ NULL); /* in_cblobs */
+ if (tevent_req_nomem(subreq, req)) {
+ return tevent_req_post(req, ev);
+ }
+ tevent_req_set_callback(subreq, cli_smb2_mkdir_opened, req);
+ return req;
+}
+
+static void cli_smb2_mkdir_opened(struct tevent_req *subreq)
+{
+ struct tevent_req *req = tevent_req_callback_data(
+ subreq, struct tevent_req);
+ struct cli_smb2_mkdir_state *state = tevent_req_data(
+ req, struct cli_smb2_mkdir_state);
NTSTATUS status;
uint16_t fnum;
- if (smbXcli_conn_has_async_calls(cli->conn)) {
- /*
- * Can't use sync call while an async call is in flight
- */
- return NT_STATUS_INVALID_PARAMETER;
+ status = cli_smb2_create_fnum_recv(subreq, &fnum, NULL, NULL, NULL);
+ TALLOC_FREE(subreq);
+ if (tevent_req_nterror(req, status)) {
+ return;
}
- if (smbXcli_conn_protocol(cli->conn) < PROTOCOL_SMB2_02) {
- return NT_STATUS_INVALID_PARAMETER;
+ subreq = cli_smb2_close_fnum_send(state, state->ev, state->cli, fnum);
+ if (tevent_req_nomem(subreq, req)) {
+ return;
}
+ tevent_req_set_callback(subreq, cli_smb2_mkdir_closed, req);
+}
- status = cli_smb2_create_fnum(cli,
- dname,
- 0, /* create_flags */
- SMB2_IMPERSONATION_IMPERSONATION,
- FILE_READ_ATTRIBUTES, /* desired_access */
- FILE_ATTRIBUTE_DIRECTORY, /* file attributes */
- FILE_SHARE_READ|FILE_SHARE_WRITE, /* share_access */
- FILE_CREATE, /* create_disposition */
- FILE_DIRECTORY_FILE, /* create_options */
- NULL,
- &fnum,
- NULL,
- NULL,
- NULL);
+static void cli_smb2_mkdir_closed(struct tevent_req *subreq)
+{
+ NTSTATUS status = cli_smb2_close_fnum_recv(subreq);
+ tevent_req_simple_finish_ntstatus(subreq, status);
+}
- if (!NT_STATUS_IS_OK(status)) {
- return status;
- }
- return cli_smb2_close_fnum(cli, fnum);
+NTSTATUS cli_smb2_mkdir_recv(struct tevent_req *req)
+{
+ return tevent_req_simple_recv_ntstatus(req);
}
struct cli_smb2_rmdir_state {
@@ -976,46 +1014,8 @@ NTSTATUS cli_smb2_rmdir_recv(struct tevent_req *req)
return state->status;
}
-NTSTATUS cli_smb2_rmdir(
- struct cli_state *cli,
- const char *dname,
- const struct smb2_create_blobs *in_cblobs)
-{
- TALLOC_CTX *frame = talloc_stackframe();
- struct tevent_context *ev;
- struct tevent_req *req;
- NTSTATUS status = NT_STATUS_NO_MEMORY;
- bool ok;
-
- if (smbXcli_conn_has_async_calls(cli->conn)) {
- /*
- * Can't use sync call while an async call is in flight
- */
- status = NT_STATUS_INVALID_PARAMETER;
- goto fail;
- }
- ev = samba_tevent_context_init(frame);
- if (ev == NULL) {
- goto fail;
- }
- req = cli_smb2_rmdir_send(frame, ev, cli, dname, in_cblobs);
- if (req == NULL) {
- goto fail;
- }
- ok = tevent_req_poll_ntstatus(req, ev, &status);
- if (!ok) {
- goto fail;
- }
- status = cli_smb2_rmdir_recv(req);
-fail:
- cli->raw_status = status;
- TALLOC_FREE(frame);
- return status;
-}
-
/***************************************************************
Small wrapper that allows SMB2 to unlink a pathname.
- Synchronous only.
***************************************************************/
struct cli_smb2_unlink_state {
@@ -1161,43 +1161,6 @@ NTSTATUS cli_smb2_unlink_recv(struct tevent_req *req)
return tevent_req_simple_recv_ntstatus(req);
}
-NTSTATUS cli_smb2_unlink(
- struct cli_state *cli,
- const char *fname,
- const struct smb2_create_blobs *in_cblobs)
-{
- TALLOC_CTX *frame = talloc_stackframe();
- struct tevent_context *ev;
- struct tevent_req *req;
- NTSTATUS status = NT_STATUS_NO_MEMORY;
- bool ok;
-
- if (smbXcli_conn_has_async_calls(cli->conn)) {
- /*
- * Can't use sync call while an async call is in flight
- */
- status = NT_STATUS_INVALID_PARAMETER;
- goto fail;
- }
- ev = samba_tevent_context_init(frame);
- if (ev == NULL) {
- goto fail;
- }
- req = cli_smb2_unlink_send(frame, ev, cli, fname, in_cblobs);
- if (req == NULL) {
- goto fail;
- }
- ok = tevent_req_poll_ntstatus(req, ev, &status);
- if (!ok) {
- goto fail;
- }
- status = cli_smb2_unlink_recv(req);
-fail:
- cli->raw_status = status;
- TALLOC_FREE(frame);
- return status;
-}
-
/***************************************************************
Utility function to parse a SMB2_FIND_ID_BOTH_DIRECTORY_INFO reply.
***************************************************************/
@@ -1615,49 +1578,85 @@ NTSTATUS cli_smb2_qpathinfo_basic(struct cli_state *cli,
return status;
}
-/***************************************************************
- Wrapper that allows SMB2 to check if a path is a directory.
- Synchronous only.
-***************************************************************/
+struct cli_smb2_chkpath_state {
+ struct tevent_context *ev;
+ struct cli_state *cli;
+};
+
+static void cli_smb2_chkpath_opened(struct tevent_req *subreq);
+static void cli_smb2_chkpath_closed(struct tevent_req *subreq);
-NTSTATUS cli_smb2_chkpath(struct cli_state *cli,
- const char *name)
+struct tevent_req *cli_smb2_chkpath_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *name)
{
- NTSTATUS status;
- uint16_t fnum = 0xffff;
+ struct tevent_req *req = NULL, *subreq = NULL;
+ struct cli_smb2_chkpath_state *state = NULL;
- if (smbXcli_conn_has_async_calls(cli->conn)) {
- /*
- * Can't use sync call while an async call is in flight
- */
- return NT_STATUS_INVALID_PARAMETER;
+ req = tevent_req_create(
+ mem_ctx, &state, struct cli_smb2_chkpath_state);
+ if (req == NULL) {
+ return NULL;
}
+ state->ev = ev;
+ state->cli = cli;
- if (smbXcli_conn_protocol(cli->conn) < PROTOCOL_SMB2_02) {
- return NT_STATUS_INVALID_PARAMETER;
+ /* Ensure this is a directory. */
+ subreq = cli_smb2_create_fnum_send(
+ state, /* mem_ctx */
+ ev, /* ev */
+ cli, /* cli */
+ name, /* fname */
+ 0, /* create_flags */
+ SMB2_IMPERSONATION_IMPERSONATION, /* impersonation_level */
+ FILE_READ_ATTRIBUTES, /* desired_access */
+ FILE_ATTRIBUTE_DIRECTORY, /* file_attributes */
+ FILE_SHARE_READ|
+ FILE_SHARE_WRITE|
+ FILE_SHARE_DELETE, /* share_access */
+ FILE_OPEN, /* create_disposition */
+ FILE_DIRECTORY_FILE, /* create_options */
+ NULL); /* in_cblobs */
+ if (tevent_req_nomem(subreq, req)) {
+ return tevent_req_post(req, ev);
}
+ tevent_req_set_callback(subreq, cli_smb2_chkpath_opened, req);
+ return req;
+}
- /* Ensure this is a directory. */
- status = cli_smb2_create_fnum(cli,
- name,
- 0, /* create_flags */
- SMB2_IMPERSONATION_IMPERSONATION,
- FILE_READ_ATTRIBUTES, /* desired_access */
- FILE_ATTRIBUTE_DIRECTORY, /* file attributes */
- FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, /* share_access */
- FILE_OPEN, /* create_disposition */
- FILE_DIRECTORY_FILE, /* create_options */
- NULL,
- &fnum,
- NULL,
- NULL,
- NULL);
+static void cli_smb2_chkpath_opened(struct tevent_req *subreq)
+{
+ struct tevent_req *req = tevent_req_callback_data(
+ subreq, struct tevent_req);
+ struct cli_smb2_chkpath_state *state = tevent_req_data(
+ req, struct cli_smb2_chkpath_state);
+ NTSTATUS status;
+ uint16_t fnum;
- if (!NT_STATUS_IS_OK(status)) {
- return status;
+ status = cli_smb2_create_fnum_recv(subreq, &fnum, NULL, NULL, NULL);
+ TALLOC_FREE(subreq);
+ if (tevent_req_nterror(req, status)) {
+ return;
+ }
+
+ subreq = cli_smb2_close_fnum_send(state, state->ev, state->cli, fnum);
+ if (tevent_req_nomem(subreq, req)) {
+ return;
}
+ tevent_req_set_callback(subreq, cli_smb2_chkpath_closed, req);
+}
- return cli_smb2_close_fnum(cli, fnum);
+static void cli_smb2_chkpath_closed(struct tevent_req *subreq)
+{
+ NTSTATUS status = cli_smb2_close_fnum_recv(subreq);
+ tevent_req_simple_finish_ntstatus(subreq, status);
+}
+
+NTSTATUS cli_smb2_chkpath_recv(struct tevent_req *req)
+{
+ return tevent_req_simple_recv_ntstatus(req);
}
struct cli_smb2_query_info_fnum_state {
@@ -2902,13 +2901,13 @@ NTSTATUS cli_smb2_get_fs_volume_info(struct cli_state *cli,
goto fail;
}
- clistr_pull_talloc(mem_ctx,
- (const char *)outbuf.data,
- 0,
- &volume_name,
- outbuf.data + 18,
- nlen,
- STR_UNICODE);
+ pull_string_talloc(mem_ctx,
+ (const char *)outbuf.data,
+ 0,
+ &volume_name,
+ outbuf.data + 18,
+ nlen,
+ STR_UNICODE);
if (volume_name == NULL) {
status = map_nt_error_from_unix(errno);
goto fail;
diff --git a/source3/libsmb/cli_smb2_fnum.h b/source3/libsmb/cli_smb2_fnum.h
index 202cf84bc0e..b921d066ed3 100644
--- a/source3/libsmb/cli_smb2_fnum.h
+++ b/source3/libsmb/cli_smb2_fnum.h
@@ -73,7 +73,12 @@ struct tevent_req *cli_smb2_delete_on_close_send(TALLOC_CTX *mem_ctx,
bool flag);
NTSTATUS cli_smb2_delete_on_close_recv(struct tevent_req *req);
NTSTATUS cli_smb2_delete_on_close(struct cli_state *cli, uint16_t fnum, bool flag);
-NTSTATUS cli_smb2_mkdir(struct cli_state *cli, const char *dirname);
+struct tevent_req *cli_smb2_mkdir_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *name);
+NTSTATUS cli_smb2_mkdir_recv(struct tevent_req *req);
struct tevent_req *cli_smb2_rmdir_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
@@ -81,10 +86,6 @@ struct tevent_req *cli_smb2_rmdir_send(
const char *dname,
const struct smb2_create_blobs *in_cblobs);
NTSTATUS cli_smb2_rmdir_recv(struct tevent_req *req);
-NTSTATUS cli_smb2_rmdir(
- struct cli_state *cli,
- const char *dname,
- const struct smb2_create_blobs *in_cblobs);
struct tevent_req *cli_smb2_unlink_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
@@ -92,10 +93,6 @@ struct tevent_req *cli_smb2_unlink_send(
const char *fname,
const struct smb2_create_blobs *in_cblobs);
NTSTATUS cli_smb2_unlink_recv(struct tevent_req *req);
-NTSTATUS cli_smb2_unlink(
- struct cli_state *cli,
- const char *fname,
- const struct smb2_create_blobs *in_cblobs);
NTSTATUS cli_smb2_list(struct cli_state *cli,
const char *pathname,
uint16_t attribute,
@@ -111,8 +108,12 @@ NTSTATUS cli_smb2_qpathinfo_basic(struct cli_state *cli,
NTSTATUS cli_smb2_qpathinfo_alt_name(struct cli_state *cli,
const char *name,
fstring alt_name);
-NTSTATUS cli_smb2_chkpath(struct cli_state *cli,
- const char *name);
+struct tevent_req *cli_smb2_chkpath_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *name);
+NTSTATUS cli_smb2_chkpath_recv(struct tevent_req *req);
struct tevent_req *cli_smb2_query_info_fnum_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 9d0296873ea..1fb1f0127b9 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -412,13 +412,13 @@ static NTSTATUS smb_bytes_talloc_string(TALLOC_CTX *mem_ctx,
size_t srclen,
ssize_t *destlen)
{
- *destlen = clistr_pull_talloc(mem_ctx,
- (const char *)hdr,
- SVAL(hdr, HDR_FLG2),
- dest,
- (char *)src,
- srclen,
- STR_TERMINATE);
+ *destlen = pull_string_talloc(mem_ctx,
+ (const char *)hdr,
+ SVAL(hdr, HDR_FLG2),
+ dest,
+ (char *)src,
+ srclen,
+ STR_TERMINATE);
if (*destlen == -1) {
return NT_STATUS_NO_MEMORY;
}
@@ -2164,13 +2164,13 @@ static void cli_tcon_andx_done(struct tevent_req *subreq)
inhdr = in + NBT_HDR_SIZE;
if (num_bytes) {
- if (clistr_pull_talloc(cli,
- (const char *)inhdr,
- SVAL(inhdr, HDR_FLG2),
- &cli->dev,
- bytes,
- num_bytes,
- STR_TERMINATE|STR_ASCII) == -1) {
+ if (pull_string_talloc(cli,
+ (const char *)inhdr,
+ SVAL(inhdr, HDR_FLG2),
+ &cli->dev,
+ bytes,
+ num_bytes,
+ STR_TERMINATE|STR_ASCII) == -1) {
tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
return;
--
Samba Shared Repository
More information about the samba-cvs
mailing list