[vlc-commits] contrib: smb2: backport getlogin fix

Thomas Guillem git at videolan.org
Thu Aug 8 08:16:54 CEST 2019


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Aug  8 08:15:14 2019 +0200| [e2f163e89023680e6e9f34f8aeebbd5cfb405cf4] | committer: Thomas Guillem

contrib: smb2: backport getlogin fix

cf. https://github.com/sahlberg/libsmb2/pull/94

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e2f163e89023680e6e9f34f8aeebbd5cfb405cf4
---

 ...-ntlmssp-add-support-for-Anonymous-logins.patch |  2 +-
 .../smb2/0002-Fix-indent-and-white-spaces.patch    | 97 ++++++++++++++++++++++
 contrib/src/smb2/0003-Fix-getlogin-usage.patch     | 58 +++++++++++++
 contrib/src/smb2/rules.mak                         |  2 +
 4 files changed, 158 insertions(+), 1 deletion(-)

diff --git a/contrib/src/smb2/0001-ntlmssp-add-support-for-Anonymous-logins.patch b/contrib/src/smb2/0001-ntlmssp-add-support-for-Anonymous-logins.patch
index 433472086f..11584ed6ac 100644
--- a/contrib/src/smb2/0001-ntlmssp-add-support-for-Anonymous-logins.patch
+++ b/contrib/src/smb2/0001-ntlmssp-add-support-for-Anonymous-logins.patch
@@ -1,7 +1,7 @@
 From 91e4b27ec265d2c08890fcee9043a15382d8a54f Mon Sep 17 00:00:00 2001
 From: Ronnie Sahlberg <ronniesahlberg at gmail.com>
 Date: Tue, 6 Aug 2019 13:30:51 +1000
-Subject: [PATCH] ntlmssp: add support for Anonymous logins
+Subject: [PATCH 1/3] ntlmssp: add support for Anonymous logins
 
 Signed-off-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
 ---
diff --git a/contrib/src/smb2/0002-Fix-indent-and-white-spaces.patch b/contrib/src/smb2/0002-Fix-indent-and-white-spaces.patch
new file mode 100644
index 0000000000..bf3c7e33fa
--- /dev/null
+++ b/contrib/src/smb2/0002-Fix-indent-and-white-spaces.patch
@@ -0,0 +1,97 @@
+From ea434501d1987ac309f7e9a4070be2f7af6ca01d Mon Sep 17 00:00:00 2001
+From: Thomas Guillem <thomas at gllm.fr>
+Date: Tue, 30 Jul 2019 17:46:49 +0200
+Subject: [PATCH 2/3] Fix indent and white spaces
+
+No functional changes.
+---
+ lib/init.c | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/lib/init.c b/lib/init.c
+index e6cf1e5..eab69a5 100644
+--- a/lib/init.c
++++ b/lib/init.c
+@@ -69,12 +69,12 @@ smb2_parse_args(struct smb2_context *smb2, const char *args)
+         while (args && *args != 0) {
+                 char *next, *value;
+ 
+-		next = strchr(args, '&');
++                next = strchr(args, '&');
+                 if (next) {
+                         *(next++) = '\0';
+                 }
+ 
+-		value = strchr(args, '=');
++                value = strchr(args, '=');
+                 if (value) {
+                         *(value++) = '\0';
+                 }
+@@ -135,7 +135,7 @@ struct smb2_url *smb2_parse_url(struct smb2_context *smb2, const char *url)
+                 smb2_set_error(smb2, "URL is too long");
+                 return NULL;
+         }
+-	strncpy(str, url + 6, MAX_URL_SIZE);
++        strncpy(str, url + 6, MAX_URL_SIZE);
+ 
+         args = strchr(str, '?');
+         if (args) {
+@@ -165,7 +165,7 @@ struct smb2_url *smb2_parse_url(struct smb2_context *smb2, const char *url)
+                 *(tmp++) = '\0';
+                 u->user = strdup(ptr);
+                 ptr = tmp;
+-	}
++        }
+         /* server */
+         if ((tmp = strchr(ptr, '/')) != NULL) {
+                 *(tmp++) = '\0';
+@@ -287,7 +287,7 @@ void smb2_destroy_context(struct smb2_context *smb2)
+ void smb2_free_iovector(struct smb2_context *smb2, struct smb2_io_vectors *v)
+ {
+         int i;
+-        
++
+         for (i = 0; i < v->niov; i++) {
+                 if (v->iov[i].free) {
+                         v->iov[i].free(v->iov[i].buf);
+@@ -316,25 +316,25 @@ struct smb2_iovec *smb2_add_iovector(struct smb2_context *smb2,
+ 
+ void smb2_set_error(struct smb2_context *smb2, const char *error_string, ...)
+ {
+-	va_list ap;
+-	char errstr[MAX_ERROR_SIZE] = {0};
++        va_list ap;
++        char errstr[MAX_ERROR_SIZE] = {0};
+ 
+-	va_start(ap, error_string);
+-	if (vsnprintf(errstr, MAX_ERROR_SIZE, error_string, ap) < 0) {
+-		strncpy(errstr, "could not format error string!",
++        va_start(ap, error_string);
++        if (vsnprintf(errstr, MAX_ERROR_SIZE, error_string, ap) < 0) {
++                strncpy(errstr, "could not format error string!",
+                         MAX_ERROR_SIZE);
+-	}
+-	va_end(ap);
+-	if (smb2 != NULL) {
+-		strncpy(smb2->error_string, errstr, MAX_ERROR_SIZE);
+-	}
++        }
++        va_end(ap);
++        if (smb2 != NULL) {
++                strncpy(smb2->error_string, errstr, MAX_ERROR_SIZE);
++        }
+ }
+ 
+ const char *smb2_get_error(struct smb2_context *smb2)
+ {
+-	return smb2 ? smb2->error_string : "";
++        return smb2 ? smb2->error_string : "";
+ }
+-        
++
+ const char *smb2_get_client_guid(struct smb2_context *smb2)
+ {
+         return smb2->client_guid;
+-- 
+2.20.1
+
diff --git a/contrib/src/smb2/0003-Fix-getlogin-usage.patch b/contrib/src/smb2/0003-Fix-getlogin-usage.patch
new file mode 100644
index 0000000000..00f3c13f14
--- /dev/null
+++ b/contrib/src/smb2/0003-Fix-getlogin-usage.patch
@@ -0,0 +1,58 @@
+From dd506ff5c5d53c529380b637e809f740a49aece7 Mon Sep 17 00:00:00 2001
+From: Thomas Guillem <thomas at gllm.fr>
+Date: Tue, 30 Jul 2019 18:02:14 +0200
+Subject: [PATCH 3/3] Fix getlogin() usage
+
+Use the reentrant version (the getlogin() string was statically allocated and
+could be overwritten on subsequent calls).
+
+Also check for error and use "Guest" as a fallback.
+---
+ lib/init.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/lib/init.c b/lib/init.c
+index eab69a5..3c01774 100644
+--- a/lib/init.c
++++ b/lib/init.c
+@@ -52,7 +52,7 @@
+ #define MAX_URL_SIZE 256
+ 
+ #ifdef _MSC_VER
+-#define getlogin() "Guest"
++#define getlogin_r() ENXIO
+ #define random rand
+ #define getpid GetCurrentProcessId
+ #endif // _MSC_VER
+@@ -60,7 +60,7 @@
+ #ifdef ESP_PLATFORM
+ #include <esp_system.h>
+ #define random esp_random
+-#define getlogin() "Guest"
++#define getlogin_r() ENXIO
+ #endif
+ 
+ static int
+@@ -206,7 +206,8 @@ void smb2_destroy_url(struct smb2_url *url)
+ struct smb2_context *smb2_init_context(void)
+ {
+         struct smb2_context *smb2;
+-        int i;
++        char buf[1024];
++        int i, ret;
+ 
+         smb2 = malloc(sizeof(struct smb2_context));
+         if (smb2 == NULL) {
+@@ -214,7 +215,8 @@ struct smb2_context *smb2_init_context(void)
+         }
+         memset(smb2, 0, sizeof(struct smb2_context));
+ 
+-        smb2_set_user(smb2, getlogin());
++        ret = getlogin_r(buf, sizeof(buf));
++        smb2_set_user(smb2, ret == 0 ? buf : "Guest");
+         smb2->fd = -1;
+         smb2->sec = SMB2_SEC_UNDEFINED;
+         smb2->version = SMB2_VERSION_ANY;
+-- 
+2.20.1
+
diff --git a/contrib/src/smb2/rules.mak b/contrib/src/smb2/rules.mak
index 52dfdcb15a..5d6132ee05 100644
--- a/contrib/src/smb2/rules.mak
+++ b/contrib/src/smb2/rules.mak
@@ -19,6 +19,8 @@ $(TARBALLS)/libsmb2-$(SMB2_VERSION).tar.gz:
 smb2: libsmb2-$(SMB2_VERSION).tar.gz .sum-smb2
 	$(UNPACK)
 	$(APPLY) $(SRC)/smb2/0001-ntlmssp-add-support-for-Anonymous-logins.patch
+	$(APPLY) $(SRC)/smb2/0002-Fix-indent-and-white-spaces.patch
+	$(APPLY) $(SRC)/smb2/0003-Fix-getlogin-usage.patch
 	$(MOVE)
 
 .smb2: smb2



More information about the vlc-commits mailing list