[SCM] Samba Shared Repository - branch master updated
Ralph Böhme
slow at samba.org
Wed Jan 4 09:49:02 UTC 2023
The branch, master has been updated
via 9636b40b05b smbd: Use get_dirent_ea_size() also for BOTH_DIRECTORY_INFO
via dc98e564604 smbd: Factor out get_dirent_ea_size()
via 8000c188374 pylibsmb: Add reparse tag definitions
via ecdb225a7c6 pylibsmb: Get reparse tag when listing directories
via d4f47d4b869 smbd: Modernize a DBG statement
via eb0e911c73c smbd: Shorten a few lines
via 852ce99e2ae smbd: Remove duplicate/unused #defines
via 7a21dc75645 torture: Fix whitespace
via 71610e3633d smbd: Move SMB_QUERY_FILE_UNIX_LINK to smb1_trans2.c
via f48e2489ad7 smbd: Move get_posix_fsp() to smb1_trans2.c
via 6fc64f53a80 smbd: Move SMB_QUERY_POSIX_ACL to smb1_trans2.c
via 01e14e0fe13 smbd: Move SMB_QUERY_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c
via 0cfea607927 smbd: Remove an unnecessary if-statement
via 65fc2b105a3 smbd: Remove an unnecessary if-statement
via 4f69b76fa18 smbd: Move smb_set_posix_acl() to smb1_trans2.c
via 19c41395e55 smbd: Make get_posix_fsp() public
via b0dfee968a4 smbd: smbd_do_qfilepathinfo() does not need lock_data anymore
via e53988cdea2 smbd: Handle SMB_QUERY_POSIX_LOCK() in call_trans2qfileinfo()
via ad453a3827b smbd: Remove two variables never set after initialization
via 2be0e68ec51 smbd: Move SMB_SET_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c
via 483aa414809 smbd: Make map_info2_flags_to_sbuf() public
via 1c21fc72e9a smbd: Make smb_set_file_size() public
via 765f9bcf666 smbd: Move handling smb_set_posix_lock() to smb1_trans2.c
via 2cef6fcd6d1 smbd: Move smb_set_file_unix_hlink() to smb1_trans2.c
via 5273c1da12a smbd: Move smb_set_file_unix_link() to smb1_trans2.c
via cabef724697 smbd: Move smb_posix_unlink() to smb1_trans2.c
via bcc621a69f9 smbd: Make smb_set_file_disposition_info() public
via 38b15fada27 smbd: Move smb_posix_open() to smb1_trans2.c
via 58287995e5b smbd: Make store_file_unix_basic[_info2] public
via bad8aa10cd8 smbd: Factor out handle_trans2qfilepathinfo_result()
via 5f7d16dbefa smbd: Simplify call_trans2qfilepathinfo()
via d66dc816716 smbd: Fix qfileinfo profiling
via 3b76bc9689c smbd: Remove call_trans2setfilepathinfo()
via 5f38f23668b smbd: Factor out handle_trans2setfilepathinfo_result()
via f72572ff6f4 smbd: Simplify call_trans2setfilepathinfo()
via 6619b16fec7 smbd: Fix setfileinfo profiling
from c9a6e242d15 s3: smbd: Strip any leading '\' characters if the SMB2 DFS flag is set.
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9636b40b05b90e5317bb1ef29985ffb91bccf482
Author: Volker Lendecke <vl at samba.org>
Date: Mon Jan 2 16:21:50 2023 +0100
smbd: Use get_dirent_ea_size() also for BOTH_DIRECTORY_INFO
This is a bit more involved as readdir_attr_data needs to be looked
at. The meaning of this if-statements should be the same though,
readdir_attr_data can only be non-NULL if we don't have a reparse
point around. See the beginning of smbd_marshall_dir_entry().
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
Autobuild-User(master): Ralph Böhme <slow at samba.org>
Autobuild-Date(master): Wed Jan 4 09:48:37 UTC 2023 on sn-devel-184
commit dc98e564604f4b61fbc6bd41ba8c05ead30e7aa2
Author: Volker Lendecke <vl at samba.org>
Date: Mon Jan 2 16:19:12 2023 +0100
smbd: Factor out get_dirent_ea_size()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 8000c1883748dcf4a5e2c2ea8f90115dff07254a
Author: Volker Lendecke <vl at samba.org>
Date: Mon Jan 2 16:01:10 2023 +0100
pylibsmb: Add reparse tag definitions
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit ecdb225a7c6688f1d8ad53e6f651e7e985297582
Author: Volker Lendecke <vl at samba.org>
Date: Mon Jan 2 14:29:12 2023 +0100
pylibsmb: Get reparse tag when listing directories
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit d4f47d4b86923741ef8644b6aee8fc2faab79d74
Author: Volker Lendecke <vl at samba.org>
Date: Wed Dec 28 23:18:20 2022 +0100
smbd: Modernize a DBG statement
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit eb0e911c73cfc8d1ec348a17de13f71344901f92
Author: Volker Lendecke <vl at samba.org>
Date: Wed Dec 28 23:14:25 2022 +0100
smbd: Shorten a few lines
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 852ce99e2aeea148c3f0d5301ad4e93be9c94630
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 23 09:21:25 2022 +0100
smbd: Remove duplicate/unused #defines
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 7a21dc75645040e44a8940e6dad3e064124e918e
Author: Volker Lendecke <vl at samba.org>
Date: Sat Dec 24 14:08:40 2022 +0100
torture: Fix whitespace
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 71610e3633d2a0f58d851f17fc847be25a73002c
Author: Volker Lendecke <vl at samba.org>
Date: Mon Jan 2 09:47:05 2023 +0100
smbd: Move SMB_QUERY_FILE_UNIX_LINK to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit f48e2489ad7645a9923fbd97a179c85979651f4c
Author: Volker Lendecke <vl at samba.org>
Date: Sat Dec 31 17:41:16 2022 +0100
smbd: Move get_posix_fsp() to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 6fc64f53a80b192e7309a2c7a3a6b6ba420157d6
Author: Volker Lendecke <vl at samba.org>
Date: Sat Dec 31 17:39:09 2022 +0100
smbd: Move SMB_QUERY_POSIX_ACL to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 01e14e0fe138f13f64067ae3c932e9564cd7dd4e
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 16:26:38 2022 +0100
smbd: Move SMB_QUERY_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 0cfea6079270de7a9b420cb3ad34e31cfdd5d037
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 22:22:31 2022 +0100
smbd: Remove an unnecessary if-statement
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 65fc2b105a30718cf33241e851f66c345ff2e3e5
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 22:21:48 2022 +0100
smbd: Remove an unnecessary if-statement
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 4f69b76fa18c8f335919d4859f93bacaabc544ec
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 20:49:11 2022 +0100
smbd: Move smb_set_posix_acl() to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 19c41395e556199ee823f24111bb8967c64dc390
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 20:39:54 2022 +0100
smbd: Make get_posix_fsp() public
This will go static again soon.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit b0dfee968a4f4e2c277eb89b6001d982b1e96cd1
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 22:15:50 2022 +0100
smbd: smbd_do_qfilepathinfo() does not need lock_data anymore
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit e53988cdea2875719e567d2f792c6bf9da2c8aca
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 22:12:23 2022 +0100
smbd: Handle SMB_QUERY_POSIX_LOCK() in call_trans2qfileinfo()
smbd_do_qfilepathinfo() does not use the lock data anymore, we can
pass NULL/0 now.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit ad453a3827b375c1cad84096e3840ecff0853212
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 21:43:06 2022 +0100
smbd: Remove two variables never set after initialization
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 2be0e68ec512b77f525edba904c25c545d2605dd
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 16:26:38 2022 +0100
smbd: Move SMB_SET_FILE_UNIX_[BASIC|INFO2] to smb1_trans2.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 483aa4148093670b08cf9a1cc358dfd7c5982b54
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 16:23:52 2022 +0100
smbd: Make map_info2_flags_to_sbuf() public
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 1c21fc72e9ab17ee861cbbf4899fe63493ee5d14
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 16:23:27 2022 +0100
smbd: Make smb_set_file_size() public
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 765f9bcf6669b20bd98b146b3a5f39ba160ac9ea
Author: Volker Lendecke <vl at samba.org>
Date: Thu Dec 29 10:59:45 2022 +0100
smbd: Move handling smb_set_posix_lock() to smb1_trans2.c
Most of this is direct cut&paste without reformatting.
Don't pass SMB_SET_POSIX_LOCK through smbd_do_setfilepathinfo(),
directly handle it in call_trans2setfileinfo() where we know we have a
fsp.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 2cef6fcd6d13b68193a04ef64b3d9717a6d1173b
Author: Volker Lendecke <vl at samba.org>
Date: Thu Dec 29 10:47:12 2022 +0100
smbd: Move smb_set_file_unix_hlink() to smb1_trans2.c
Most of this is direct cut&paste without reformatting.
Don't pass SMB_SET_FILE_UNIX_HLINK through smbd_do_setfilepathinfo(),
directly handle it in call_trans2setpathinfo() where we know we have a
path.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 5273c1da12a2e8e1f34abdbe13051c6de7945900
Author: Volker Lendecke <vl at samba.org>
Date: Thu Dec 29 10:44:33 2022 +0100
smbd: Move smb_set_file_unix_link() to smb1_trans2.c
Most of this is direct cut&paste without reformatting.
Don't pass SMB_SET_FILE_UNIX_LINK through smbd_do_setfilepathinfo(),
directly handle it in call_trans2setpathinfo() where we know we have a
path.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit cabef7246977b19398affb0a323e22b0062c8dac
Author: Volker Lendecke <vl at samba.org>
Date: Thu Dec 29 00:07:21 2022 +0100
smbd: Move smb_posix_unlink() to smb1_trans2.c
Most of this is direct cut&paste without reformatting.
Don't pass SMB_POSIX_PATH_UNLINK through smbd_do_setfilepathinfo(),
directly handle it in call_trans2setpathinfo() where we know we have a
path.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit bcc621a69f90bc556b79eb5b0dd79faddb99a5d3
Author: Volker Lendecke <vl at samba.org>
Date: Thu Dec 29 00:06:58 2022 +0100
smbd: Make smb_set_file_disposition_info() public
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 38b15fada27e8bd6555d0902e94e69b603bf2b32
Author: Volker Lendecke <vl at samba.org>
Date: Wed Dec 28 23:50:53 2022 +0100
smbd: Move smb_posix_open() to smb1_trans2.c
Most of this is direct cut&paste without reformatting.
Don't pass SMB_POSIX_PATH_OPEN through smbd_do_setfilepathinfo(),
directly handle it in call_trans2setpathinfo() where we know we have a
path.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 58287995e5b38914c8357d00172a228e97c1f153
Author: Volker Lendecke <vl at samba.org>
Date: Wed Dec 28 23:47:42 2022 +0100
smbd: Make store_file_unix_basic[_info2] public
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit bad8aa10cd80c03f43b6e2e10b01a6a0ed92fddb
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 12:23:58 2022 +0100
smbd: Factor out handle_trans2qfilepathinfo_result()
The error handling will be used in other places.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 5f7d16dbefaf26abe161ed32b7383c0bb1e2e7bb
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 23 18:20:15 2022 +0100
smbd: Simplify call_trans2qfilepathinfo()
Move the file/path specific preparations to the respective callers.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit d66dc816716c63311c4e1faad089c3a3667b91c8
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 23 17:23:36 2022 +0100
smbd: Fix qfileinfo profiling
This ran under qpathinfo profiling
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 3b76bc9689c4a1ac8bed2b9e2d13eb03dedfddc9
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 10:27:11 2022 +0100
smbd: Remove call_trans2setfilepathinfo()
What's left was just a simple wrapper around smbd_do_setfilepathinfo()
and handle_trans2setfilepathinfo_result()
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 5f38f23668b6c3af4515facd37f1f3bea97d32f4
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 30 10:13:08 2022 +0100
smbd: Factor out handle_trans2setfilepathinfo_result()
This will be lifted up in the next patches. We can also remove the
REALLOC of *pparams, for this we only ever send 2 NULL bytes that we
stack-allocate now.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit f72572ff6f4cf5529124f8f7d65048ae21603035
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 23 17:29:45 2022 +0100
smbd: Simplify call_trans2setfilepathinfo()
Move the file/path specific preparations to the respective callers.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
commit 6619b16fec717813df94c26296270eab96bc4dc8
Author: Volker Lendecke <vl at samba.org>
Date: Fri Dec 23 17:18:30 2022 +0100
smbd: Fix setfileinfo profiling
This ran under setpathinfo profiling
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/include/smb.h | 9 -
source3/libsmb/pylibsmb.c | 19 +
source3/smbd/globals.h | 2 -
source3/smbd/proto.h | 25 +
source3/smbd/smb1_trans2.c | 3327 +++++++++++++++++++++++++++++++++-------
source3/smbd/smb1_trans2.h | 5 -
source3/smbd/smb2_getinfo.c | 4 -
source3/smbd/smb2_trans2.c | 2056 +------------------------
source4/torture/basic/delete.c | 534 +++----
9 files changed, 3126 insertions(+), 2855 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 67694cb3bc9..704fe559203 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -32,7 +32,6 @@
/* logged when starting the various Samba daemons */
#define COPYRIGHT_STARTUP_MESSAGE "Copyright Andrew Tridgell and the Samba Team 1992-2023"
-#define SAFETY_MARGIN 1024
#define LARGE_WRITEX_HDR_SIZE 65
#define LARGE_WRITEX_BUFFER_SIZE (128*1024)
@@ -50,14 +49,6 @@
#define SIZEOFWORD 2
-/* string manipulation flags - see clistr.c and srvstr.c */
-#define STR_TERMINATE 1
-#define STR_UPPER 2
-#define STR_ASCII 4
-#define STR_UNICODE 8
-#define STR_NOALIGN 16
-#define STR_TERMINATE_ASCII 128
-
/* how long to wait for secondary SMB packets (milli-seconds) */
#define SMB_SECONDARY_WAIT (60*1000)
diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c
index 0990e2dc995..7952a6ec483 100644
--- a/source3/libsmb/pylibsmb.c
+++ b/source3/libsmb/pylibsmb.c
@@ -1970,6 +1970,18 @@ static NTSTATUS list_helper(struct file_info *finfo,
return NT_STATUS_NO_MEMORY;
}
+ if (finfo->attr & FILE_ATTRIBUTE_REPARSE_POINT) {
+ unsigned long tag = finfo->reparse_tag;
+
+ ret = PyDict_SetItemString(
+ file,
+ "reparse_tag",
+ PyLong_FromUnsignedLong(tag));
+ if (ret == -1) {
+ return NT_STATUS_INTERNAL_ERROR;
+ }
+ }
+
ret = PyList_Append(result, file);
Py_CLEAR(file);
if (ret == -1) {
@@ -2862,6 +2874,13 @@ MODULE_INIT_FUNC(libsmb_samba_cwrapper)
ADD_FLAGS(SYMLINK_TRUST_UNKNOWN);
ADD_FLAGS(SYMLINK_TRUST_MASK);
+ ADD_FLAGS(IO_REPARSE_TAG_SYMLINK);
+ ADD_FLAGS(IO_REPARSE_TAG_MOUNT_POINT);
+ ADD_FLAGS(IO_REPARSE_TAG_HSM);
+ ADD_FLAGS(IO_REPARSE_TAG_SIS);
+ ADD_FLAGS(IO_REPARSE_TAG_DFS);
+ ADD_FLAGS(IO_REPARSE_TAG_NFS);
+
#define ADD_STRING(val) PyModule_AddObject(m, #val, PyBytes_FromString(val))
ADD_STRING(SMB2_CREATE_TAG_EXTA);
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index d1c0d145de7..5fb9f2e647c 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -126,8 +126,6 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn,
bool delete_pending,
struct timespec write_time_ts,
struct ea_list *ea_list,
- int lock_data_count,
- char *lock_data,
uint16_t flags2,
unsigned int max_data_bytes,
size_t *fixed_portion,
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 4a9ffbc0998..32e5c33896b 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -1101,6 +1101,19 @@ int sys_statvfs(const char *path, struct vfs_statvfs_struct *statbuf);
/* The following definitions come from smbd/trans2.c */
+char *store_file_unix_basic(connection_struct *conn,
+ char *pdata,
+ files_struct *fsp,
+ const SMB_STRUCT_STAT *psbuf);
+char *store_file_unix_basic_info2(connection_struct *conn,
+ char *pdata,
+ files_struct *fsp,
+ const SMB_STRUCT_STAT *psbuf);
+NTSTATUS smb_set_file_disposition_info(connection_struct *conn,
+ const char *pdata,
+ int total_data,
+ files_struct *fsp,
+ struct smb_filename *smb_fname);
NTSTATUS refuse_symlink_fsp(const struct files_struct *fsp);
NTSTATUS check_access_fsp(struct files_struct *fsp,
uint32_t access_mask);
@@ -1130,6 +1143,18 @@ NTSTATUS smb_set_file_time(connection_struct *conn,
struct smb_filename *smb_fname,
struct smb_file_time *ft,
bool setting_write_time);
+NTSTATUS smb_set_file_size(connection_struct *conn,
+ struct smb_request *req,
+ files_struct *fsp,
+ struct smb_filename *smb_fname,
+ const SMB_STRUCT_STAT *psbuf,
+ off_t size,
+ bool fail_after_createfile);
+
+bool map_info2_flags_to_sbuf(const SMB_STRUCT_STAT *psbuf,
+ const uint32_t smb_fflags,
+ const uint32_t smb_fmask,
+ int *stat_fflags);
enum perm_type {
PERM_NEW_FILE,
diff --git a/source3/smbd/smb1_trans2.c b/source3/smbd/smb1_trans2.c
index 29232e348de..815e529b231 100644
--- a/source3/smbd/smb1_trans2.c
+++ b/source3/smbd/smb1_trans2.c
@@ -280,11 +280,11 @@ static void send_trans2_replies(connection_struct *conn,
static void smb_set_posix_lock_done(struct tevent_req *subreq);
-NTSTATUS smb_set_posix_lock(connection_struct *conn,
- struct smb_request *req,
- const char *pdata,
- int total_data,
- files_struct *fsp)
+static NTSTATUS smb_set_posix_lock(connection_struct *conn,
+ struct smb_request *req,
+ const char *pdata,
+ int total_data,
+ files_struct *fsp)
{
struct tevent_req *subreq = NULL;
struct smbd_lock_element *lck = NULL;
@@ -296,6 +296,10 @@ NTSTATUS smb_set_posix_lock(connection_struct *conn,
NTSTATUS status = NT_STATUS_OK;
+ if (!CAN_WRITE(conn)) {
+ return NT_STATUS_DOS(ERRSRV, ERRaccess);
+ }
+
if (fsp == NULL ||
fsp->fsp_flags.is_pathref ||
fsp_get_io_fd(fsp) == -1)
@@ -1727,32 +1731,39 @@ static void call_trans2setfsinfo(connection_struct *conn,
xconn->smb1.unix_info.client_minor = SVAL(pdata,2);
xconn->smb1.unix_info.client_cap_low = IVAL(pdata,4);
xconn->smb1.unix_info.client_cap_high = IVAL(pdata,8);
+
/* Just print these values for now. */
- DEBUG(10, ("call_trans2setfsinfo: set unix_info info. "
- "major = %u, minor = %u cap_low = 0x%x, "
- "cap_high = 0x%xn",
- (unsigned int)xconn->
- smb1.unix_info.client_major,
- (unsigned int)xconn->
- smb1.unix_info.client_minor,
- (unsigned int)xconn->
- smb1.unix_info.client_cap_low,
- (unsigned int)xconn->
- smb1.unix_info.client_cap_high));
-
- /* Here is where we must switch to posix pathname processing... */
- if (xconn->smb1.unix_info.client_cap_low & CIFS_UNIX_POSIX_PATHNAMES_CAP) {
+ DBG_DEBUG("set unix_info info. "
+ "major = %"PRIu16", minor = %"PRIu16
+ "cap_low = 0x%"PRIx32", "
+ "cap_high = 0x%"PRIx32"\n",
+ xconn->smb1.unix_info.client_major,
+ xconn->smb1.unix_info.client_minor,
+ xconn->smb1.unix_info.client_cap_low,
+ xconn->smb1.unix_info.client_cap_high);
+
+ /*
+ * Here is where we must switch to posix
+ * pathname processing...
+ */
+ if (xconn->smb1.unix_info.client_cap_low &
+ CIFS_UNIX_POSIX_PATHNAMES_CAP)
+ {
lp_set_posix_pathnames();
mangle_change_to_posix();
}
- if ((xconn->smb1.unix_info.client_cap_low & CIFS_UNIX_FCNTL_LOCKS_CAP) &&
- !(xconn->smb1.unix_info.client_cap_low & CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP)) {
+ if ((xconn->smb1.unix_info.client_cap_low &
+ CIFS_UNIX_FCNTL_LOCKS_CAP) &&
+ !(xconn->smb1.unix_info.client_cap_low &
+ CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP))
+ {
/* Client that knows how to do posix locks,
* but not posix open/mkdir operations. Set a
* default type for read/write checks. */
- lp_set_posix_default_cifsx_readwrite_locktype(POSIX_LOCK);
+ lp_set_posix_default_cifsx_readwrite_locktype(
+ POSIX_LOCK);
}
break;
@@ -1925,6 +1936,68 @@ static void call_trans2qpipeinfo(connection_struct *conn,
return;
}
+static void handle_trans2qfilepathinfo_result(
+ connection_struct *conn,
+ struct smb_request *req,
+ uint16_t info_level,
+ NTSTATUS status,
+ char *pdata,
+ int data_return_size,
+ size_t fixed_portion,
+ unsigned int max_data_bytes)
+{
+ char params[2] = { 0, 0, };
+ int param_size = 2;
+
+ /*
+ * draft-leach-cifs-v1-spec-02.txt
+ * 4.2.14 TRANS2_QUERY_PATH_INFORMATION: Get File Attributes given Path
+ * says:
+ *
+ * The requested information is placed in the Data portion of the
+ * transaction response. For the information levels greater than 0x100,
+ * the transaction response has 1 parameter word which should be
+ * ignored by the client.
+ *
+ * However Windows only follows this rule for the IS_NAME_VALID call.
+ */
+ switch (info_level) {
+ case SMB_INFO_IS_NAME_VALID:
+ param_size = 0;
+ break;
+ }
+
+ if (!NT_STATUS_IS_OK(status)) {
+ if (open_was_deferred(req->xconn, req->mid)) {
+ /* We have re-scheduled this call. */
+ return;
+ }
+ if (NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION)) {
+ bool ok = defer_smb1_sharing_violation(req);
+ if (ok) {
+ return;
+ }
+ }
+ reply_nterror(req, status);
+ return;
+ }
+
+ if (fixed_portion > max_data_bytes) {
+ reply_nterror(req, NT_STATUS_INFO_LENGTH_MISMATCH);
+ return;
+ }
+
+ send_trans2_replies(
+ conn,
+ req,
+ NT_STATUS_OK,
+ params,
+ param_size,
+ pdata,
+ data_return_size,
+ max_data_bytes);
+}
+
/****************************************************************************
Reply to a TRANS2_QFILEPATHINFO or TRANSACT2_QFILEINFO (query file info by
file name or file id).
@@ -1933,287 +2006,21 @@ static void call_trans2qpipeinfo(connection_struct *conn,
static void call_trans2qfilepathinfo(connection_struct *conn,
struct smb_request *req,
unsigned int tran_call,
+ uint16_t info_level,
+ struct smb_filename *smb_fname,
+ struct files_struct *fsp,
+ bool delete_pending,
+ struct timespec write_time_ts,
char **pparams, int total_params,
char **ppdata, int total_data,
unsigned int max_data_bytes)
{
char *params = *pparams;
char *pdata = *ppdata;
- uint16_t info_level;
unsigned int data_size = 0;
- unsigned int param_size = 2;
- struct smb_filename *smb_fname = NULL;
- bool delete_pending = False;
- struct timespec write_time_ts;
- struct files_struct *dirfsp = NULL;
- files_struct *fsp = NULL;
- struct file_id fileid;
struct ea_list *ea_list = NULL;
- int lock_data_count = 0;
- char *lock_data = NULL;
size_t fixed_portion;
NTSTATUS status = NT_STATUS_OK;
- int ret;
-
- if (!params) {
- reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return;
- }
-
- ZERO_STRUCT(write_time_ts);
-
- if (tran_call == TRANSACT2_QFILEINFO) {
- if (total_params < 4) {
- reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return;
- }
-
- fsp = file_fsp(req, SVAL(params,0));
- info_level = SVAL(params,2);
-
- if (IS_IPC(conn)) {
- call_trans2qpipeinfo(
- conn,
- req,
- fsp,
- info_level,
- tran_call,
- pparams,
- total_params,
- ppdata,
- total_data,
- max_data_bytes);
- return;
- }
-
- DEBUG(3,("call_trans2qfilepathinfo: TRANSACT2_QFILEINFO: level = %d\n", info_level));
-
- if (INFO_LEVEL_IS_UNIX(info_level)) {
- if (!lp_smb1_unix_extensions()) {
- reply_nterror(req, NT_STATUS_INVALID_LEVEL);
- return;
- }
- if (!req->posix_pathnames) {
- reply_nterror(req, NT_STATUS_INVALID_LEVEL);
- return;
- }
- }
-
- /* Initial check for valid fsp ptr. */
- if (!check_fsp_open(conn, req, fsp)) {
- return;
- }
-
- smb_fname = fsp->fsp_name;
-
- if(fsp->fake_file_handle) {
- /*
- * This is actually for the QUOTA_FAKE_FILE --metze
- */
-
- /* We know this name is ok, it's already passed the checks. */
-
- } else if(fsp_get_pathref_fd(fsp) == -1) {
- /*
- * This is actually a QFILEINFO on a directory
- * handle (returned from an NT SMB). NT5.0 seems
- * to do this call. JRA.
- */
- ret = vfs_stat(conn, smb_fname);
- if (ret != 0) {
- DBG_NOTICE("vfs_stat of %s failed (%s)\n",
- smb_fname_str_dbg(smb_fname),
- strerror(errno));
- reply_nterror(req,
- map_nt_error_from_unix(errno));
- return;
- }
-
- if (fsp_getinfo_ask_sharemode(fsp)) {
- fileid = vfs_file_id_from_sbuf(
- conn, &smb_fname->st);
- get_file_infos(fileid, fsp->name_hash,
- &delete_pending,
- &write_time_ts);
- }
- } else {
- /*
- * Original code - this is an open file.
- */
- status = vfs_stat_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(3, ("fstat of %s failed (%s)\n",
- fsp_fnum_dbg(fsp), nt_errstr(status)));
- reply_nterror(req, status);
- return;
- }
- if (fsp_getinfo_ask_sharemode(fsp)) {
- fileid = vfs_file_id_from_sbuf(
- conn, &smb_fname->st);
- get_file_infos(fileid, fsp->name_hash,
- &delete_pending,
- &write_time_ts);
- }
- }
-
- } else {
- uint32_t name_hash;
- char *fname = NULL;
- uint32_t ucf_flags = ucf_flags_from_smb_request(req);
- NTTIME twrp = 0;
-
- /* qpathinfo */
- if (total_params < 7) {
- reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return;
- }
-
- info_level = SVAL(params,0);
-
- DEBUG(3,("call_trans2qfilepathinfo: TRANSACT2_QPATHINFO: level = %d\n", info_level));
-
- if (INFO_LEVEL_IS_UNIX(info_level)) {
- if (!lp_smb1_unix_extensions()) {
- reply_nterror(req, NT_STATUS_INVALID_LEVEL);
- return;
- }
- if (!req->posix_pathnames) {
- reply_nterror(req, NT_STATUS_INVALID_LEVEL);
- return;
- }
- }
-
- if (req->posix_pathnames) {
- srvstr_get_path_posix(req,
- params,
- req->flags2,
- &fname,
- ¶ms[6],
- total_params - 6,
- STR_TERMINATE,
- &status);
- } else {
- srvstr_get_path(req,
- params,
- req->flags2,
- &fname,
- ¶ms[6],
- total_params - 6,
- STR_TERMINATE,
- &status);
- }
- if (!NT_STATUS_IS_OK(status)) {
- reply_nterror(req, status);
- return;
- }
-
- if (ucf_flags & UCF_GMT_PATHNAME) {
- extract_snapshot_token(fname, &twrp);
- }
- status = filename_convert_dirfsp(req,
- conn,
- fname,
- ucf_flags,
- twrp,
- &dirfsp,
- &smb_fname);
- if (!NT_STATUS_IS_OK(status)) {
- if (NT_STATUS_EQUAL(status,NT_STATUS_PATH_NOT_COVERED)) {
- reply_botherror(req,
- NT_STATUS_PATH_NOT_COVERED,
- ERRSRV, ERRbadpath);
- return;
- }
- reply_nterror(req, status);
- return;
- }
-
- /*
- * qpathinfo must operate on an existing file, so we
- * can exit early if filename_convert_dirfsp() returned the
- * "new file" NT_STATUS_OK, !VALID_STAT case.
- */
-
- if (!VALID_STAT(smb_fname->st)) {
- reply_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return;
- }
-
- /*
- * smb_fname->fsp may be NULL if smb_fname points at a symlink
- * and we're in POSIX context, so be careful when using fsp
- * below, it can still be NULL.
- */
- fsp = smb_fname->fsp;
-
--
Samba Shared Repository
More information about the samba-cvs
mailing list