[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Tue Aug 22 17:44:02 UTC 2023
The branch, master has been updated
via 81226b5179e vfs_aio_pthread: use SMB_VFS_NEXT_OPENAT() in aio_pthread_openat_fn()
via 2c6a01c8925 libcli: Add required #includes to smbXcli_base.h
via 939aa0e69ef clifuse: Use direct FSCC info level
via dd801b69c60 libsmb: Use tevent_req_nterror() properly
via edc6e69e254 libsmb: Remove a duplicate TALLOC_FREE()
via 107beacfc02 libsmb: Use tevent_req_oom() where appropriate
via a6a5ce7b426 libsmb: Move cli_raw_ioctl() to torture3
via 087cddc90c1 libsmb: Move cli_qpathinfo1() to torture3
via c0db32b457d torture3: Avoid unused variables
via 914e0cf6f81 smbclient: Don't give up in allinfo if getting advanced info fails
via 47509eb7f03 libsmb: Use cli_smb2_qpathinfo_basic() in cli_getatr()
via f2d535dbe31 libsmb: Use cli_smb2_qpathinfo() in cli_qpathinfo2()
via 50edb0266f9 libsmb: Use cli_smb2_qpathinfo() for streams
via 55539629b20 libsmb: Add cli_smb2_qpathinfo_send/recv()
from aba7eb094b9 selftest: Report time at which testsuite starts
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 81226b5179e6ba806a0a690806ca2f9004f7c9f9
Author: MikeLiu <mikeliu at qnap.com>
Date: Tue Aug 22 10:01:14 2023 +0800
vfs_aio_pthread: use SMB_VFS_NEXT_OPENAT() in aio_pthread_openat_fn()
1. Set 'aio_allow_open' to false if fsp->fsp_flags.is_pathref
2. Move !(how->flags & O_CREAT) and !(how->flags & O_EXCL) up and set 'aio_allow_open' to false
3. Use SMB_VFS_NEXT_OPENAT() instead of openat() for disable async opens case.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15453
Signed-off-by: MikeLiu <mikeliu at qnap.com>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Tue Aug 22 17:44:00 UTC 2023 on atb-devel-224
commit 2c6a01c8925d0cf8ee9d700e4e95379285e52f45
Author: Volker Lendecke <vl at samba.org>
Date: Mon Aug 21 21:41:06 2023 +0200
libcli: Add required #includes to smbXcli_base.h
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 939aa0e69ef8f9d6c583703ef74da73a3e125a9b
Author: Volker Lendecke <vl at samba.org>
Date: Mon Aug 21 21:34:31 2023 +0200
clifuse: Use direct FSCC info level
Avoid the magic -1000
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit dd801b69c60dc5d5793b46fbc5181f868a6db02a
Author: Volker Lendecke <vl at samba.org>
Date: Wed Aug 16 11:59:03 2023 +0200
libsmb: Use tevent_req_nterror() properly
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit edc6e69e25449a7162938cf7ddfd4b6b7d787023
Author: Volker Lendecke <vl at samba.org>
Date: Wed Aug 16 15:45:32 2023 +0200
libsmb: Remove a duplicate TALLOC_FREE()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 107beacfc0212a7117c7b9ae2fbcb7d6224d434c
Author: Volker Lendecke <vl at samba.org>
Date: Wed Aug 16 15:39:55 2023 +0200
libsmb: Use tevent_req_oom() where appropriate
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit a6a5ce7b4261480ef79da965b43fcb5caa604e3d
Author: Volker Lendecke <vl at samba.org>
Date: Wed Aug 16 11:04:14 2023 +0200
libsmb: Move cli_raw_ioctl() to torture3
Only used there.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 087cddc90c1b126baabc8088588c07113d919b16
Author: Volker Lendecke <vl at samba.org>
Date: Mon Aug 21 12:59:10 2023 +0200
libsmb: Move cli_qpathinfo1() to torture3
It's only used there, and it clutters general code. Re-adding the
async flavor is trivial should it ever be required.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit c0db32b457d10aa894e0b6aeb6e682ccaff7737a
Author: Volker Lendecke <vl at samba.org>
Date: Mon Aug 21 12:45:52 2023 +0200
torture3: Avoid unused variables
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 914e0cf6f81ffef95354b4f8f8429909eb6c32c5
Author: Volker Lendecke <vl at samba.org>
Date: Mon Aug 21 10:01:24 2023 +0200
smbclient: Don't give up in allinfo if getting advanced info fails
Getting streams might fail, but further down getting reparse info
might succeed.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 47509eb7f033c07f2f0aa13cba0e37b3dc1757bd
Author: Volker Lendecke <vl at samba.org>
Date: Fri Aug 18 16:15:19 2023 +0200
libsmb: Use cli_smb2_qpathinfo_basic() in cli_getatr()
cli_smb2_qpathinfo_basic() uses the smb_create_returns and avoids a
round-trip.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit f2d535dbe3107c5781e3f0b468780aacd17d9785
Author: Volker Lendecke <vl at samba.org>
Date: Fri Aug 18 16:07:56 2023 +0200
libsmb: Use cli_smb2_qpathinfo() in cli_qpathinfo2()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 50edb0266f92cf2f00bbd9f242bb7ee1fd6d9024
Author: Volker Lendecke <vl at samba.org>
Date: Fri Aug 18 15:47:20 2023 +0200
libsmb: Use cli_smb2_qpathinfo() for streams
Remove sync cli_smb2_qpathinfo_streams() wrapper.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 55539629b20a67884d520ad1639ae7ac3c9e736a
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jun 30 22:43:43 2023 +0200
libsmb: Add cli_smb2_qpathinfo_send/recv()
Wrap the create/qfileinfo/close, to be used in next patches
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
examples/fuse/clifuse.c | 20 +--
libcli/smb/smbXcli_base.h | 7 +
source3/client/client.c | 27 ++--
source3/libsmb/cli_smb2_fnum.c | 280 +++++++++-----------------------------
source3/libsmb/cli_smb2_fnum.h | 33 ++---
source3/libsmb/cliconnect.c | 21 +--
source3/libsmb/clifile.c | 46 +++----
source3/libsmb/clifsinfo.c | 6 +-
source3/libsmb/climessage.c | 19 +--
source3/libsmb/clioplock.c | 2 +-
source3/libsmb/clirap.c | 211 ++++++++--------------------
source3/libsmb/clirap.h | 17 ---
source3/libsmb/proto.h | 1 -
source3/libsmb/smbsock_connect.c | 3 +-
source3/modules/vfs_aio_pthread.c | 28 ++--
source3/torture/proto.h | 8 ++
source3/torture/torture.c | 90 +++++++++++-
17 files changed, 309 insertions(+), 510 deletions(-)
Changeset truncated at 500 lines:
diff --git a/examples/fuse/clifuse.c b/examples/fuse/clifuse.c
index 94ec3911ef6..890dae16307 100644
--- a/examples/fuse/clifuse.c
+++ b/examples/fuse/clifuse.c
@@ -284,14 +284,18 @@ static void cli_get_unixattr_opened(struct tevent_req *subreq)
}
subreq = smb2cli_query_info_send(
- state, state->ev, cli->conn, 0,
- cli->smb2.session, cli->smb2.tcon,
- 1, /* in_info_type */
- (SMB_FILE_ALL_INFORMATION - 1000), /* in_file_info_class */
- 0xFFFF, /* in_max_output_length */
- NULL, /* in_input_buffer */
- 0, /* in_additional_info */
- 0, /* in_flags */
+ state,
+ state->ev,
+ cli->conn,
+ 0,
+ cli->smb2.session,
+ cli->smb2.tcon,
+ 1, /* in_info_type */
+ FSCC_FILE_ALL_INFORMATION, /* in_file_info_class */
+ 0xFFFF, /* in_max_output_length */
+ NULL, /* in_input_buffer */
+ 0, /* in_additional_info */
+ 0, /* in_flags */
state->fid_persistent,
state->fid_volatile);
if (tevent_req_nomem(subreq, req)) {
diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h
index bf8638711ba..fef68b6b38d 100644
--- a/libcli/smb/smbXcli_base.h
+++ b/libcli/smb/smbXcli_base.h
@@ -23,6 +23,13 @@
#define SMB_SUICIDE_PACKET 0x74697865
+#include "replace.h"
+#include <tevent.h>
+#include "libcli/smb/smb_constants.h"
+#include "libcli/util/ntstatus.h"
+#include "lib/util/time.h"
+#include "lib/util/data_blob.h"
+
struct smbXcli_conn;
struct smbXcli_session;
struct smbXcli_tcon;
diff --git a/source3/client/client.c b/source3/client/client.c
index 19ff37248c3..1fb3918272b 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -1697,9 +1697,11 @@ static int do_allinfo(const char *name)
status = cli_qpathinfo_streams(cli, name, talloc_tos(), &num_streams,
&streams);
if (!NT_STATUS_IS_OK(status)) {
- d_printf("%s getting streams for %s\n", nt_errstr(status),
- name);
- return false;
+ d_fprintf(stderr,
+ "%s getting streams for %s\n",
+ nt_errstr(status),
+ name);
+ num_streams = 0;
}
for (i=0; i<num_streams; i++) {
@@ -1765,15 +1767,20 @@ static int do_allinfo(const char *name)
status = cli_shadow_copy_data(talloc_tos(), cli, fnum,
false, &snapshots, &num_snapshots);
- if (!NT_STATUS_IS_OK(status)) {
- cli_close(cli, fnum);
- return 0;
+ if (NT_STATUS_IS_OK(status)) {
+ status = cli_shadow_copy_data(talloc_tos(),
+ cli,
+ fnum,
+ true,
+ &snapshots,
+ &num_snapshots);
}
- status = cli_shadow_copy_data(talloc_tos(), cli, fnum,
- true, &snapshots, &num_snapshots);
if (!NT_STATUS_IS_OK(status)) {
- cli_close(cli, fnum);
- return 0;
+ d_fprintf(stderr,
+ "%s getting shadow copy data for %s\n",
+ nt_errstr(status),
+ name);
+ num_snapshots = 0;
}
for (j=0; j<num_snapshots; j++) {
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c
index 59fdcccc98e..35593312283 100644
--- a/source3/libsmb/cli_smb2_fnum.c
+++ b/source3/libsmb/cli_smb2_fnum.c
@@ -1462,7 +1462,7 @@ struct tevent_req *cli_smb2_list_send(
status = smb2_create_blob_add(in_cblobs, in_cblobs,
SMB2_CREATE_TAG_POSIX, blob);
- if (!NT_STATUS_IS_OK(status)) {
+ if (tevent_req_nterror(req, status)) {
tevent_req_nterror(req, status);
return tevent_req_post(req, ev);
}
@@ -2243,105 +2243,47 @@ NTSTATUS cli_smb2_qpathinfo_alt_name(struct cli_state *cli,
return status;
}
-/***************************************************************
- Wrapper that allows SMB2 to get pathname attributes.
- Synchronous only.
-***************************************************************/
-
-NTSTATUS cli_smb2_getatr(struct cli_state *cli,
- const char *name,
- uint32_t *pattr,
- off_t *size,
- time_t *write_time)
-{
- NTSTATUS status;
- uint16_t fnum = 0xffff;
- struct timespec write_time_ts;
- TALLOC_CTX *frame = talloc_stackframe();
-
- 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;
- }
-
- status = get_fnum_from_path(cli,
- name,
- FILE_READ_ATTRIBUTES,
- &fnum);
-
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
-
- status = cli_qfileinfo_basic(
- cli,
- fnum,
- pattr,
- size,
- NULL, /* create_time */
- NULL, /* access_time */
- &write_time_ts,
- NULL, /* change_time */
- NULL); /* ino */
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
- if (write_time != NULL) {
- *write_time = write_time_ts.tv_sec;
- }
-
- fail:
-
- if (fnum != 0xffff) {
- cli_smb2_close_fnum(cli, fnum);
- }
-
- cli->raw_status = status;
-
- TALLOC_FREE(frame);
- return status;
-}
-
-struct cli_smb2_qpathinfo2_state {
+struct cli_smb2_qpathinfo_state {
struct tevent_context *ev;
struct cli_state *cli;
+ const char *fname;
uint16_t fnum;
+ uint16_t level;
+ uint32_t min_rdata;
+ uint32_t max_rdata;
- NTSTATUS queryinfo_status;
- struct timespec create_time;
- struct timespec access_time;
- struct timespec write_time;
- struct timespec change_time;
- off_t size;
- uint32_t attr;
- SMB_INO_T ino;
+ NTSTATUS status;
+ DATA_BLOB out;
};
-static void cli_smb2_qpathinfo2_opened(struct tevent_req *subreq);
-static void cli_smb2_qpathinfo2_done(struct tevent_req *subreq);
-static void cli_smb2_qpathinfo2_closed(struct tevent_req *subreq);
-
-struct tevent_req *cli_smb2_qpathinfo2_send(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
- struct cli_state *cli,
- const char *fname)
+static void cli_smb2_qpathinfo_opened(struct tevent_req *subreq);
+static void cli_smb2_qpathinfo_done(struct tevent_req *subreq);
+static void cli_smb2_qpathinfo_closed(struct tevent_req *subreq);
+
+struct tevent_req *cli_smb2_qpathinfo_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *fname,
+ uint16_t level,
+ uint32_t min_rdata,
+ uint32_t max_rdata)
{
struct tevent_req *req = NULL, *subreq = NULL;
- struct cli_smb2_qpathinfo2_state *state = NULL;
+ struct cli_smb2_qpathinfo_state *state = NULL;
req = tevent_req_create(mem_ctx,
&state,
- struct cli_smb2_qpathinfo2_state);
+ struct cli_smb2_qpathinfo_state);
if (req == NULL) {
return NULL;
}
state->ev = ev;
state->cli = cli;
+ state->level = level;
+ state->min_rdata = min_rdata;
+ state->max_rdata = max_rdata;
- subreq = get_fnum_from_path_send(mem_ctx,
+ subreq = get_fnum_from_path_send(state,
ev,
cli,
fname,
@@ -2349,16 +2291,16 @@ struct tevent_req *cli_smb2_qpathinfo2_send(TALLOC_CTX *mem_ctx,
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}
- tevent_req_set_callback(subreq, cli_smb2_qpathinfo2_opened, req);
+ tevent_req_set_callback(subreq, cli_smb2_qpathinfo_opened, req);
return req;
}
-static void cli_smb2_qpathinfo2_opened(struct tevent_req *subreq)
+static void cli_smb2_qpathinfo_opened(struct tevent_req *subreq)
{
struct tevent_req *req =
tevent_req_callback_data(subreq, struct tevent_req);
- struct cli_smb2_qpathinfo2_state *state =
- tevent_req_data(req, struct cli_smb2_qpathinfo2_state);
+ struct cli_smb2_qpathinfo_state *state =
+ tevent_req_data(req, struct cli_smb2_qpathinfo_state);
NTSTATUS status;
status = get_fnum_from_path_recv(subreq, &state->fnum);
@@ -2367,33 +2309,38 @@ static void cli_smb2_qpathinfo2_opened(struct tevent_req *subreq)
return;
}
- subreq = cli_qfileinfo_basic_send(state,
- state->ev,
- state->cli,
- state->fnum);
+ subreq = cli_smb2_query_info_fnum_send(state,
+ state->ev,
+ state->cli,
+ state->fnum,
+ 1, /* in_info_type */
+ state->level,
+ state->max_rdata,
+ NULL, /* in_input_buffer */
+ 0, /* in_additional_info */
+ 0); /* in_flags */
if (tevent_req_nomem(subreq, req)) {
return;
}
- tevent_req_set_callback(subreq, cli_smb2_qpathinfo2_done, req);
+ tevent_req_set_callback(subreq, cli_smb2_qpathinfo_done, req);
}
-static void cli_smb2_qpathinfo2_done(struct tevent_req *subreq)
+static void cli_smb2_qpathinfo_done(struct tevent_req *subreq)
{
struct tevent_req *req =
tevent_req_callback_data(subreq, struct tevent_req);
- struct cli_smb2_qpathinfo2_state *state =
- tevent_req_data(req, struct cli_smb2_qpathinfo2_state);
-
- state->queryinfo_status = cli_qfileinfo_basic_recv(subreq,
- &state->attr,
- &state->size,
- &state->create_time,
- &state->access_time,
- &state->write_time,
- &state->change_time,
- &state->ino);
+ struct cli_smb2_qpathinfo_state *state =
+ tevent_req_data(req, struct cli_smb2_qpathinfo_state);
+
+ state->status =
+ cli_smb2_query_info_fnum_recv(subreq, state, &state->out);
TALLOC_FREE(subreq);
+ if (NT_STATUS_IS_OK(state->status) &&
+ (state->out.length < state->min_rdata)) {
+ state->status = NT_STATUS_INVALID_NETWORK_RESPONSE;
+ }
+
subreq = cli_smb2_close_fnum_send(state,
state->ev,
state->cli,
@@ -2401,15 +2348,15 @@ static void cli_smb2_qpathinfo2_done(struct tevent_req *subreq)
if (tevent_req_nomem(subreq, req)) {
return;
}
- tevent_req_set_callback(subreq, cli_smb2_qpathinfo2_closed, req);
+ tevent_req_set_callback(subreq, cli_smb2_qpathinfo_closed, req);
}
-static void cli_smb2_qpathinfo2_closed(struct tevent_req *subreq)
+static void cli_smb2_qpathinfo_closed(struct tevent_req *subreq)
{
struct tevent_req *req =
tevent_req_callback_data(subreq, struct tevent_req);
- struct cli_smb2_qpathinfo2_state *state =
- tevent_req_data(req, struct cli_smb2_qpathinfo2_state);
+ struct cli_smb2_qpathinfo_state *state =
+ tevent_req_data(req, struct cli_smb2_qpathinfo_state);
NTSTATUS status;
status = cli_smb2_close_fnum_recv(subreq);
@@ -2417,128 +2364,31 @@ static void cli_smb2_qpathinfo2_closed(struct tevent_req *subreq)
if (tevent_req_nterror(req, status)) {
return;
}
- if (tevent_req_nterror(req, state->queryinfo_status)) {
+ if (tevent_req_nterror(req, state->status)) {
return;
}
tevent_req_done(req);
}
-NTSTATUS cli_smb2_qpathinfo2_recv(struct tevent_req *req,
- struct timespec *create_time,
- struct timespec *access_time,
- struct timespec *write_time,
- struct timespec *change_time,
- off_t *size,
- uint32_t *attr,
- SMB_INO_T *ino)
+NTSTATUS cli_smb2_qpathinfo_recv(struct tevent_req *req,
+ TALLOC_CTX *mem_ctx,
+ uint8_t **rdata,
+ uint32_t *num_rdata)
{
- struct cli_smb2_qpathinfo2_state *state =
- tevent_req_data(req, struct cli_smb2_qpathinfo2_state);
+ struct cli_smb2_qpathinfo_state *state =
+ tevent_req_data(req, struct cli_smb2_qpathinfo_state);
NTSTATUS status;
if (tevent_req_is_nterror(req, &status)) {
return status;
}
- if (create_time != NULL) {
- *create_time = state->create_time;
- }
- if (access_time != NULL) {
- *access_time = state->access_time;
- }
- if (write_time != NULL) {
- *write_time = state->write_time;
- }
- if (change_time != NULL) {
- *change_time = state->change_time;
- }
- if (attr != NULL) {
- *attr = state->attr;
- }
- if (size != NULL) {
- *size = state->size;
- }
- if (ino) {
- *ino = state->ino;
- }
-
+ *rdata = talloc_move(mem_ctx, &state->out.data);
+ *num_rdata = state->out.length;
+ tevent_req_received(req);
return NT_STATUS_OK;
}
-/***************************************************************
- Wrapper that allows SMB2 to query pathname streams.
- Synchronous only.
-***************************************************************/
-
-NTSTATUS cli_smb2_qpathinfo_streams(struct cli_state *cli,
- const char *name,
- TALLOC_CTX *mem_ctx,
- unsigned int *pnum_streams,
- struct stream_struct **pstreams)
-{
- NTSTATUS status;
- uint16_t fnum = 0xffff;
- DATA_BLOB outbuf = data_blob_null;
- TALLOC_CTX *frame = talloc_stackframe();
-
- 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;
- }
-
- status = get_fnum_from_path(cli,
- name,
- FILE_READ_ATTRIBUTES,
- &fnum);
-
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
-
- /* getinfo on the handle with info_type SMB2_GETINFO_FILE (1),
- level 22 (SMB2_FILE_STREAM_INFORMATION). */
-
- status = cli_smb2_query_info_fnum(
- cli,
- fnum,
- 1, /* in_info_type */
- (SMB_FILE_STREAM_INFORMATION - 1000), /* in_file_info_class */
- 0xFFFF, /* in_max_output_length */
- NULL, /* in_input_buffer */
- 0, /* in_additional_info */
- 0, /* in_flags */
- frame,
- &outbuf);
-
- if (!NT_STATUS_IS_OK(status)) {
- goto fail;
- }
-
- /* Parse the reply. */
- if (!parse_streams_blob(mem_ctx,
- outbuf.data,
- outbuf.length,
- pnum_streams,
- pstreams)) {
- status = NT_STATUS_INVALID_NETWORK_RESPONSE;
- goto fail;
- }
-
- fail:
-
- if (fnum != 0xffff) {
- cli_smb2_close_fnum(cli, fnum);
- }
-
- cli->raw_status = status;
-
- TALLOC_FREE(frame);
- return status;
-}
-
/***************************************************************
Wrapper that allows SMB2 to set SMB_FILE_BASIC_INFORMATION on
a pathname.
diff --git a/source3/libsmb/cli_smb2_fnum.h b/source3/libsmb/cli_smb2_fnum.h
index 986db2c1b0f..0eb2a026527 100644
--- a/source3/libsmb/cli_smb2_fnum.h
+++ b/source3/libsmb/cli_smb2_fnum.h
@@ -118,6 +118,17 @@ 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);
+struct tevent_req *cli_smb2_qpathinfo_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct cli_state *cli,
+ const char *fname,
+ uint16_t level,
+ uint32_t min_rdata,
+ uint32_t max_rdata);
+NTSTATUS cli_smb2_qpathinfo_recv(struct tevent_req *req,
+ TALLOC_CTX *mem_ctx,
+ uint8_t **rdata,
+ uint32_t *num_rdata);
struct tevent_req *cli_smb2_query_info_fnum_send(
TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
@@ -159,28 +170,6 @@ NTSTATUS cli_smb2_query_info_fnum(
uint32_t in_flags,
TALLOC_CTX *mem_ctx,
--
Samba Shared Repository
More information about the samba-cvs
mailing list