[vlc-commits] contrib: smb2: backport patches from master
Thomas Guillem
git at videolan.org
Tue Feb 12 12:49:18 CET 2019
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Feb 12 12:48:43 2019 +0100| [2f3f44804e673a4b49d12faf21915964cef80baa] | committer: Thomas Guillem
contrib: smb2: backport patches from master
Waiting for a future release.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2f3f44804e673a4b49d12faf21915964cef80baa
---
contrib/src/smb2/0001-master-backport.patch | 330 ++++++++++++++++++++++++++++
contrib/src/smb2/rules.mak | 1 +
2 files changed, 331 insertions(+)
diff --git a/contrib/src/smb2/0001-master-backport.patch b/contrib/src/smb2/0001-master-backport.patch
new file mode 100644
index 0000000000..0f9cf7cf62
--- /dev/null
+++ b/contrib/src/smb2/0001-master-backport.patch
@@ -0,0 +1,330 @@
+From 49525025f8c91ae14e5fe3cfea0dc7948b7f5480 Mon Sep 17 00:00:00 2001
+From: Thomas Guillem <thomas at gllm.fr>
+Date: Tue, 12 Feb 2019 12:42:37 +0100
+Subject: [PATCH] master-backport
+
+Waiting for a new release, including the following patches:
+
+libsmb_error patch
+Delete libsmb2_error.latest.patch
+Allow passing NULL to smb2_set_password
+Add more error status
+Map more EACCESS error status
+---
+ include/smb2/smb2-errors.h | 50 +++++++++++
+ lib/errors.c | 178 +++++++++++++++++++++++++++++++++++--
+ lib/init.c | 4 +
+ 3 files changed, 223 insertions(+), 9 deletions(-)
+
+diff --git a/include/smb2/smb2-errors.h b/include/smb2/smb2-errors.h
+index 49c5d5c..3b741e7 100644
+--- a/include/smb2/smb2-errors.h
++++ b/include/smb2/smb2-errors.h
+@@ -35,13 +35,63 @@
+ /* Error codes */
+ #define SMB2_STATUS_SUCCESS 0x00000000
+ #define SMB2_STATUS_PENDING 0x00000103
++#define SMB2_STATUS_SMB_BAD_FID 0x00060001
+ #define SMB2_STATUS_NO_MORE_FILES 0x80000006
++#define SMB2_STATUS_NOT_IMPLEMENTED 0xC0000002
++#define SMB2_STATUS_INVALID_HANDLE 0xC0000008
+ #define SMB2_STATUS_INVALID_PARAMETER 0xC000000d
++#define SMB2_STATUS_NO_SUCH_DEVICE 0xC000000E
++#define SMB2_STATUS_NO_SUCH_FILE 0xC000000F
++#define SMB2_STATUS_INVALID_DEVICE_REQUEST 0xC0000010
+ #define SMB2_STATUS_END_OF_FILE 0xC0000011
++#define SMB2_STATUS_NO_MEDIA_IN_DEVICE 0xC0000013
+ #define SMB2_STATUS_MORE_PROCESSING_REQUIRED 0xC0000016
++#define SMB2_STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
++#define SMB2_STATUS_INVALID_VIEW_SIZE 0xC000001F
++#define SMB2_STATUS_ALREADY_COMMITTED 0xC0000021
+ #define SMB2_STATUS_ACCESS_DENIED 0xC0000022
++#define SMB2_STATUS_OBJECT_TYPE_MISMATCH 0xC0000024
+ #define SMB2_STATUS_OBJECT_NAME_NOT_FOUND 0xC0000034
++#define SMB2_STATUS_OBJECT_NAME_COLLISION 0xC0000035
++#define SMB2_STATUS_PORT_DISCONNECTED 0xC0000037
++#define SMB2_STATUS_OBJECT_PATH_INVALID 0xC0000039
++#define SMB2_STATUS_OBJECT_PATH_NOT_FOUND 0xC000003A
++#define SMB2_STATUS_OBJECT_PATH_SYNTAX_BAD 0xC000003B
++#define SMB2_STATUS_DATA_ERROR 0xC000003E
++#define SMB2_STATUS_CRC_ERROR 0xC000003F
++#define SMB2_STATUS_SECTION_TOO_BIG 0xC0000040
++#define SMB2_STATUS_PORT_CONNECTION_REFUSED 0xC0000041
++#define SMB2_STATUS_INVALID_PORT_HANDLE 0xC0000042
++#define SMB2_STATUS_SHARING_VIOLATION 0xC0000043
++#define SMB2_STATUS_THREAD_IS_TERMINATING 0xC000004B
++#define SMB2_STATUS_FILE_LOCK_CONFLICT 0xC0000054
++#define SMB2_STATUS_LOCK_NOT_GRANTED 0xC0000055
++#define SMB2_STATUS_DELETE_PENDING 0xC0000056
++#define SMB2_STATUS_PRIVILEGE_NOT_HELD 0xC0000061
+ #define SMB2_STATUS_LOGON_FAILURE 0xC000006d
++#define SMB2_STATUS_ACCOUNT_RESTRICTION 0xC000006E
++#define SMB2_STATUS_INVALID_LOGON_HOURS 0xC000006F
++#define SMB2_STATUS_PASSWORD_EXPIRED 0xC0000071
++#define SMB2_STATUS_ACCOUNT_DISABLED 0xC0000072
++#define SMB2_STATUS_DISK_FULL 0xC000007F
++#define SMB2_STATUS_TOO_MANY_PAGING_FILES 0xC0000097
++#define SMB2_STATUS_DFS_EXIT_PATH_FOUND 0xC000009B
++#define SMB2_STATUS_DEVICE_DATA_ERROR 0xC000009C
++#define SMB2_STATUS_MEDIA_WRITE_PROTECTED 0xC00000A2
++#define SMB2_STATUS_ILLEGAL_FUNCTION 0xC00000AF
++#define SMB2_STATUS_PIPE_DISCONNECTED 0xC00000B0
++#define SMB2_STATUS_FILE_IS_A_DIRECTORY 0xC00000BA
++#define SMB2_STATUS_NETWORK_ACCESS_DENIED 0xC00000CA
+ #define SMB2_STATUS_BAD_NETWORK_NAME 0xC00000CC
++#define SMB2_STATUS_NOT_SAME_DEVICE 0xC00000D4
++#define SMB2_STATUS_FILE_RENAMED 0xC00000D5
++#define SMB2_STATUS_REDIRECTOR_NOT_STARTED 0xC00000FB
++#define SMB2_STATUS_DIRECTORY_NOT_EMPTY 0xC0000101
+ #define SMB2_STATUS_NOT_A_DIRECTORY 0xC0000103
++#define SMB2_STATUS_PROCESS_IS_TERMINATING 0xC000010A
++#define SMB2_STATUS_TOO_MANY_OPENED_FILES 0xC000011F
++#define SMB2_STATUS_CANNOT_DELETE 0xC0000121
++#define SMB2_STATUS_FILE_DELETED 0xC0000123
+ #define SMB2_STATUS_FILE_CLOSED 0xC0000128
++#define SMB2_STATUS_INSUFF_SERVER_RESOURCES 0xC0000205
++#define SMB2_STATUS_HANDLE_NOT_CLOSABLE 0xC0000235
+diff --git a/lib/errors.c b/lib/errors.c
+index 68150a0..2e1648d 100644
+--- a/lib/errors.c
++++ b/lib/errors.c
+@@ -30,26 +30,124 @@ const char *nterror_to_str(uint32_t status) {
+ return "STATUS_PENDING";
+ case SMB2_STATUS_NO_MORE_FILES:
+ return "STATUS_NO_MORE_FILES";
++ case SMB2_STATUS_NOT_IMPLEMENTED:
++ return "STATUS_NOT_IMPLEMENTED";
++ case SMB2_STATUS_INVALID_HANDLE:
++ return "STATUS_INVALID_HANDLE";
++ case SMB2_STATUS_INVALID_PARAMETER:
++ return "STATUS_INVALID_PARAMETER";
++ case SMB2_STATUS_NO_SUCH_DEVICE:
++ return "STATUS_NO_SUCH_DEVICE";
++ case SMB2_STATUS_NO_SUCH_FILE:
++ return "STATUS_NO_SUCH_FILE";
++ case SMB2_STATUS_INVALID_DEVICE_REQUEST:
++ return "STATUS_INVALID_DEVICE_REQUEST";
++ case SMB2_STATUS_END_OF_FILE:
++ return "STATUS_END_OF_FILE";
++ case SMB2_STATUS_NO_MEDIA_IN_DEVICE:
++ return "STATUS_NO_MEDIA_IN_DEVICE";
+ case SMB2_STATUS_MORE_PROCESSING_REQUIRED:
+ return "STATUS_MORE_PROCESSING_REQUIRED";
++ case SMB2_STATUS_INVALID_LOCK_SEQUENCE:
++ return "STATUS_INVALID_LOCK_SEQUENCE";
++ case SMB2_STATUS_INVALID_VIEW_SIZE:
++ return "STATUS_INVALID_VIEW_SIZE";
++ case SMB2_STATUS_ALREADY_COMMITTED:
++ return "STATUS_ALREADY_COMMITTED";
+ case SMB2_STATUS_ACCESS_DENIED:
+ return "STATUS_ACCESS_DENIED";
++ case SMB2_STATUS_OBJECT_TYPE_MISMATCH:
++ return "STATUS_OBJECT_TYPE_MISMATCH";
++ case SMB2_STATUS_OBJECT_NAME_NOT_FOUND:
++ return "STATUS_OBJECT_NAME_NOT_FOUND";
++ case SMB2_STATUS_OBJECT_NAME_COLLISION:
++ return "STATUS_OBJECT_NAME_COLLISION";
++ case SMB2_STATUS_PORT_DISCONNECTED:
++ return "STATUS_PORT_DISCONNECTED";
++ case SMB2_STATUS_OBJECT_PATH_INVALID:
++ return "STATUS_OBJECT_PATH_INVALID";
++ case SMB2_STATUS_OBJECT_PATH_NOT_FOUND:
++ return "STATUS_OBJECT_PATH_NOT_FOUND";
++ case SMB2_STATUS_OBJECT_PATH_SYNTAX_BAD:
++ return "STATUS_OBJECT_PATH_SYNTAX_BAD";
++ case SMB2_STATUS_DATA_ERROR:
++ return "STATUS_DATA_ERROR";
++ case SMB2_STATUS_CRC_ERROR:
++ return "STATUS_CRC_ERROR";
++ case SMB2_STATUS_SECTION_TOO_BIG:
++ return "STATUS_SECTION_TOO_BIG";
++ case SMB2_STATUS_PORT_CONNECTION_REFUSED:
++ return "STATUS_PORT_CONNECTION_REFUSED";
++ case SMB2_STATUS_INVALID_PORT_HANDLE:
++ return "STATUS_INVALID_PORT_HANDLE";
++ case SMB2_STATUS_SHARING_VIOLATION:
++ return "STATUS_SHARING_VIOLATION";
++ case SMB2_STATUS_THREAD_IS_TERMINATING:
++ return "STATUS_THREAD_IS_TERMINATING";
++ case SMB2_STATUS_FILE_LOCK_CONFLICT:
++ return "STATUS_FILE_LOCK_CONFLICT";
++ case SMB2_STATUS_LOCK_NOT_GRANTED:
++ return "STATUS_LOCK_NOT_GRANTED";
++ case SMB2_STATUS_DELETE_PENDING:
++ return "STATUS_DELETE_PENDING";
++ case SMB2_STATUS_PRIVILEGE_NOT_HELD:
++ return "STATUS_PRIVILEGE_NOT_HELD";
+ case SMB2_STATUS_LOGON_FAILURE:
+ return "STATUS_LOGON_FAILURE";
++ case SMB2_STATUS_ACCOUNT_RESTRICTION:
++ return "STATUS_ACCOUNT_RESTRICTION";
++ case SMB2_STATUS_INVALID_LOGON_HOURS:
++ return "STATUS_INVALID_LOGON_HOURS";
++ case SMB2_STATUS_PASSWORD_EXPIRED:
++ return "STATUS_PASSWORD_EXPIRED";
++ case SMB2_STATUS_ACCOUNT_DISABLED:
++ return "STATUS_ACCOUNT_DISABLED";
++ case SMB2_STATUS_DISK_FULL:
++ return "STATUS_DISK_FULL";
++ case SMB2_STATUS_TOO_MANY_PAGING_FILES:
++ return "STATUS_TOO_MANY_PAGING_FILES";
++ case SMB2_STATUS_DFS_EXIT_PATH_FOUND:
++ return "STATUS_DFS_EXIT_PATH_FOUND";
++ case SMB2_STATUS_DEVICE_DATA_ERROR:
++ return "STATUS_DEVICE_DATA_ERROR";
++ case SMB2_STATUS_MEDIA_WRITE_PROTECTED:
++ return "STATUS_MEDIA_WRITE_PROTECTED";
++ case SMB2_STATUS_ILLEGAL_FUNCTION:
++ return "STATUS_ILLEGAL_FUNCTION";
++ case SMB2_STATUS_PIPE_DISCONNECTED:
++ return "STATUS_PIPE_DISCONNECTED";
++ case SMB2_STATUS_FILE_IS_A_DIRECTORY:
++ return "STATUS_FILE_IS_A_DIRECTORY";
++ case SMB2_STATUS_NETWORK_ACCESS_DENIED:
++ return "STATUS_NETWORK_ACCESS_DENIED";
+ case SMB2_STATUS_BAD_NETWORK_NAME:
+ return "STATUS_BAD_NETWORK_NAME";
++ case SMB2_STATUS_NOT_SAME_DEVICE:
++ return "STATUS_NOT_SAME_DEVICE";
++ case SMB2_STATUS_FILE_RENAMED:
++ return "STATUS_FILE_RENAMED";
++ case SMB2_STATUS_REDIRECTOR_NOT_STARTED:
++ return "STATUS_REDIRECTOR_NOT_STARTED";
++ case SMB2_STATUS_DIRECTORY_NOT_EMPTY:
++ return "STATUS_DIRECTORY_NOT_EMPTY";
+ case SMB2_STATUS_NOT_A_DIRECTORY:
+ return "STATUS_NOT_A_DIRECTORY";
+- case SMB2_STATUS_INVALID_PARAMETER:
+- return "STATUS_INVALID_PARAMETER";
+- case SMB2_STATUS_END_OF_FILE:
+- return "STATUS_END_OF_FILE";
++ case SMB2_STATUS_PROCESS_IS_TERMINATING:
++ return "STATUS_PROCESS_IS_TERMINATING";
++ case SMB2_STATUS_TOO_MANY_OPENED_FILES:
++ return "STATUS_TOO_MANY_OPENED_FILES";
++ case SMB2_STATUS_CANNOT_DELETE:
++ return "STATUS_CANNOT_DELETE";
++ case SMB2_STATUS_FILE_DELETED:
++ return "STATUS_FILE_DELETED";
+ case SMB2_STATUS_FILE_CLOSED:
+ return "STATUS_FILE_CLOSED";
+- case SMB2_STATUS_OBJECT_NAME_NOT_FOUND:
+- return "STATUS_OBJECT_NAME_NOT_FOUND";
++ case SMB2_STATUS_INSUFF_SERVER_RESOURCES:
++ return "STATUS_INSUFF_SERVER_RESOURCES";
++ case SMB2_STATUS_HANDLE_NOT_CLOSABLE:
++ return "STATUS_HANDLE_NOT_CLOSABLE";
+ default:
+- return "Unknown";
++ return "Unknown";
+ }
+ }
+
+@@ -58,25 +156,87 @@ int nterror_to_errno(uint32_t status) {
+ case SMB2_STATUS_SUCCESS:
+ case SMB2_STATUS_END_OF_FILE:
+ return 0;
++ case SMB2_STATUS_PENDING:
++ return EAGAIN;
++ case SMB2_STATUS_NO_SUCH_FILE:
++ case SMB2_STATUS_NO_SUCH_DEVICE:
+ case SMB2_STATUS_BAD_NETWORK_NAME:
+ case SMB2_STATUS_OBJECT_NAME_NOT_FOUND:
++ case SMB2_STATUS_OBJECT_PATH_INVALID:
++ case SMB2_STATUS_OBJECT_PATH_NOT_FOUND:
++ case SMB2_STATUS_OBJECT_PATH_SYNTAX_BAD:
++ case SMB2_STATUS_DFS_EXIT_PATH_FOUND:
++ case SMB2_STATUS_REDIRECTOR_NOT_STARTED:
+ return ENOENT;
+ case SMB2_STATUS_FILE_CLOSED:
++ case SMB2_STATUS_SMB_BAD_FID:
++ case SMB2_STATUS_INVALID_HANDLE:
++ case SMB2_STATUS_OBJECT_TYPE_MISMATCH:
++ case SMB2_STATUS_PORT_DISCONNECTED:
++ case SMB2_STATUS_INVALID_PORT_HANDLE:
++ case SMB2_STATUS_HANDLE_NOT_CLOSABLE:
+ return EBADF;
+ case SMB2_STATUS_MORE_PROCESSING_REQUIRED:
+ return EAGAIN;
+ case SMB2_STATUS_ACCESS_DENIED:
++ case SMB2_STATUS_NETWORK_ACCESS_DENIED:
++ case SMB2_STATUS_ACCOUNT_RESTRICTION:
++ case SMB2_STATUS_INVALID_LOGON_HOURS:
++ case SMB2_STATUS_PASSWORD_EXPIRED:
++ case SMB2_STATUS_ACCOUNT_DISABLED:
+ return EACCES;
+- case SMB2_STATUS_PENDING:
+- return EAGAIN;
++ case SMB2_STATUS_INVALID_LOCK_SEQUENCE:
++ case SMB2_STATUS_INVALID_VIEW_SIZE:
++ case SMB2_STATUS_ALREADY_COMMITTED:
++ case SMB2_STATUS_PORT_CONNECTION_REFUSED:
++ case SMB2_STATUS_THREAD_IS_TERMINATING:
++ case SMB2_STATUS_DELETE_PENDING:
++ case SMB2_STATUS_PRIVILEGE_NOT_HELD:
++ case SMB2_STATUS_FILE_IS_A_DIRECTORY:
++ case SMB2_STATUS_FILE_RENAMED:
++ case SMB2_STATUS_PROCESS_IS_TERMINATING:
++ case SMB2_STATUS_DIRECTORY_NOT_EMPTY:
++ case SMB2_STATUS_CANNOT_DELETE:
++ case SMB2_STATUS_FILE_DELETED:
++ return EPERM;
+ case SMB2_STATUS_NO_MORE_FILES:
+ return ENODATA;
+ case SMB2_STATUS_LOGON_FAILURE:
+ return ECONNREFUSED;
+ case SMB2_STATUS_NOT_A_DIRECTORY:
+ return ENOTDIR;
++ case SMB2_STATUS_NOT_IMPLEMENTED:
++ case SMB2_STATUS_INVALID_DEVICE_REQUEST:
++ case SMB2_STATUS_ILLEGAL_FUNCTION:
+ case SMB2_STATUS_INVALID_PARAMETER:
+ return EINVAL;
++ case SMB2_STATUS_TOO_MANY_OPENED_FILES:
++ return EMFILE;
++ case SMB2_STATUS_SECTION_TOO_BIG:
++ case SMB2_STATUS_TOO_MANY_PAGING_FILES:
++ case SMB2_STATUS_INSUFF_SERVER_RESOURCES:
++ return ENOMEM;
++ case SMB2_STATUS_NOT_SAME_DEVICE:
++ return EXDEV;
++ case SMB2_STATUS_SHARING_VIOLATION:
++ return ETXTBSY;
++ case SMB2_STATUS_FILE_LOCK_CONFLICT:
++ case SMB2_STATUS_LOCK_NOT_GRANTED:
++ return EDEADLK;
++ case SMB2_STATUS_OBJECT_NAME_COLLISION:
++ return EEXIST;
++ case SMB2_STATUS_PIPE_DISCONNECTED:
++ return EPIPE;
++ case SMB2_STATUS_MEDIA_WRITE_PROTECTED:
++ return EROFS;
++ case SMB2_STATUS_NO_MEDIA_IN_DEVICE:
++ return ENOMEDIUM;
++ case SMB2_STATUS_DATA_ERROR:
++ case SMB2_STATUS_CRC_ERROR:
++ case SMB2_STATUS_DEVICE_DATA_ERROR:
++ return EIO;
++ case SMB2_STATUS_DISK_FULL:
++ return ENOSPC;
+ default:
+ return EIO;
+ }
+diff --git a/lib/init.c b/lib/init.c
+index 3720a1c..6c95cd2 100644
+--- a/lib/init.c
++++ b/lib/init.c
+@@ -412,6 +412,10 @@ void smb2_set_password(struct smb2_context *smb2, const char *password)
+ {
+ if (smb2->password) {
+ free(discard_const(smb2->password));
++ smb2->password = NULL;
++ }
++ if (password == NULL) {
++ return;
+ }
+ smb2->password = strdup(password);
+ }
+--
+2.20.1
+
diff --git a/contrib/src/smb2/rules.mak b/contrib/src/smb2/rules.mak
index 81937b95a7..62c000a1d7 100644
--- a/contrib/src/smb2/rules.mak
+++ b/contrib/src/smb2/rules.mak
@@ -18,6 +18,7 @@ $(TARBALLS)/libsmb2-$(SMB2_VERSION).tar.gz:
smb2: libsmb2-$(SMB2_VERSION).tar.gz .sum-smb2
$(UNPACK)
+ $(APPLY) $(SRC)/smb2/0001-master-backport.patch
$(MOVE)
.smb2: smb2
More information about the vlc-commits
mailing list