[vlc-devel] [PATCH] dsm: add "smb-force-v1" option

Thomas Guillem thomas at gllm.fr
Thu Oct 17 14:32:03 CEST 2019


If this option is enabled, libdsm will be probed before libsmb2. Use at your
own risk, this option should be always disabled by default and specifically
requested by the user.
---
 modules/access/dsm/access.c | 38 ++++++++++++++++++++++++++++++++++---
 modules/access/samba.c      |  1 +
 modules/access/smb2.c       |  1 +
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/modules/access/dsm/access.c b/modules/access/dsm/access.c
index 776925c9eeb..7cf46cf5937 100644
--- a/modules/access/dsm/access.c
+++ b/modules/access/dsm/access.c
@@ -58,7 +58,15 @@ int bdsm_SdOpen( vlc_object_t * );
 void bdsm_SdClose( vlc_object_t * );
 int bdsm_sd_probe_Open( vlc_object_t * );
 
-static int Open( vlc_object_t * );
+#define SMB_FORCE_V1_TEXT N_("Force the SMBv1 protocol (At your own risk)")
+#define SMB_FORCE_V1_LONGTEXT \
+    N_("Enable it, at your own risk, if you can't connect to Windows shares. " \
+    "If this option is needed, you should consider updating your Windows / " \
+    "Samba server and disabling the SMBv1 protocol as using this protocol " \
+    "has security implications.")
+
+static int OpenNotForced( vlc_object_t * );
+static int OpenForced( vlc_object_t * );
 static void Close( vlc_object_t * );
 
 VLC_SD_PROBE_HELPER( "dsm", N_("Windows networks"), SD_CAT_LAN )
@@ -69,14 +77,21 @@ vlc_module_begin ()
     set_shortname( "dsm" )
     set_description( N_("libdsm SMB input") )
     set_help(BDSM_HELP)
-    set_capability( "access", 20 )
     set_category( CAT_INPUT )
     set_subcategory( SUBCAT_INPUT_ACCESS )
     add_string( "smb-user", NULL, SMB_USER_TEXT, SMB_USER_LONGTEXT, false )
     add_password("smb-pwd", NULL, SMB_PASS_TEXT, SMB_PASS_LONGTEXT)
     add_string( "smb-domain", NULL, SMB_DOMAIN_TEXT, SMB_DOMAIN_LONGTEXT, false )
+    add_bool( "smb-force-v1", false, SMB_FORCE_V1_TEXT, SMB_FORCE_V1_LONGTEXT, false )
     add_shortcut( "smb", "cifs" )
-    set_callbacks( Open, Close )
+
+    set_capability( "access", 22 )
+    set_callbacks( OpenForced, Close )
+
+    add_submodule()
+        set_capability( "access", 20 )
+        set_callbacks( OpenNotForced, Close )
+        add_shortcut( "smb", "cifs" )
 
     add_submodule()
         add_shortcut( "dsm-sd" )
@@ -196,6 +211,23 @@ static int Open( vlc_object_t *p_this )
         return VLC_EGENERIC;
 }
 
+static int OpenForced( vlc_object_t *p_this )
+{
+    if( !var_InheritBool( p_this , "smb-force-v1" ) )
+        return VLC_EGENERIC;
+
+    msg_Warn( p_this, "SMB 2/3 disabled by the user, using *unsafe* SMB 1" );
+    return Open( p_this );
+}
+
+static int OpenNotForced( vlc_object_t *p_this )
+{
+    if( var_InheritBool( p_this , "smb-force-v1" ) )
+        return VLC_EGENERIC; /* OpenForced should have breen probed first */
+
+    return Open( p_this );
+}
+
 /*****************************************************************************
  * Close: free unused data structures
  *****************************************************************************/
diff --git a/modules/access/samba.c b/modules/access/samba.c
index 9f397c44b7d..cd7663c29ca 100644
--- a/modules/access/samba.c
+++ b/modules/access/samba.c
@@ -237,6 +237,7 @@ static void smb_auth(const char *srv, const char *shr, char *wg, int wglen,
 
 static int Open(vlc_object_t *obj)
 {
+return -1;
     stream_t *access = (stream_t *)obj;
     vlc_url_t url;
     vlc_credential credential;
diff --git a/modules/access/smb2.c b/modules/access/smb2.c
index 923e6d57e04..da0f0ca02c5 100644
--- a/modules/access/smb2.c
+++ b/modules/access/smb2.c
@@ -598,6 +598,7 @@ vlc_smb2_resolve(stream_t *access, const char *host, unsigned port)
 static int
 Open(vlc_object_t *p_obj)
 {
+    fprintf(stderr, "Open\n");
     stream_t *access = (stream_t *)p_obj;
     struct access_sys *sys = vlc_obj_calloc(p_obj, 1, sizeof (*sys));
     struct smb2_url *smb2_url = NULL;
-- 
2.20.1



More information about the vlc-devel mailing list