[vlc-commits] ftp: split Login into Login and LoginUserPwd
Thomas Guillem
git at videolan.org
Thu Jan 7 20:12:44 CET 2016
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Jan 7 18:49:50 2016 +0100| [3ab2b1e08fd5d4e4a149d4015b2966b3df71fac7] | committer: Thomas Guillem
ftp: split Login into Login and LoginUserPwd
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3ab2b1e08fd5d4e4a149d4015b2966b3df71fac7
---
modules/access/ftp.c | 74 ++++++++++++++++++++++++++++++--------------------
1 file changed, 44 insertions(+), 30 deletions(-)
diff --git a/modules/access/ftp.c b/modules/access/ftp.c
index e8f4bea..3f3e9d8 100644
--- a/modules/access/ftp.c
+++ b/modules/access/ftp.c
@@ -114,6 +114,8 @@ static int OutSeek( sout_access_out_t *, off_t );
static ssize_t Write( sout_access_out_t *, block_t * );
#endif
+static int LoginUserPwd( vlc_object_t *, access_sys_t *,
+ const char *, const char * );
static void FeaturesCheck( void *, const char * );
typedef struct ftp_features_t
@@ -403,23 +405,46 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
}
}
- /* Send credentials over channel */
- char *psz;
-
+ char *psz_user, *psz_pwd;
if( p_sys->url.psz_username && *p_sys->url.psz_username )
- psz = strdup( p_sys->url.psz_username );
+ psz_user = strdup( p_sys->url.psz_username );
else
- psz = var_InheritString( p_access, "ftp-user" );
- if( !psz )
+ psz_user = var_InheritString( p_access, "ftp-user" );
+ if( !psz_user )
goto error;
- if( ftp_SendCommand( p_access, p_sys, "USER %s", psz ) < 0 ||
- ftp_RecvCommand( p_access, p_sys, &i_answer, NULL ) < 0 )
+ if( p_sys->url.psz_password && *p_sys->url.psz_password )
+ psz_pwd = strdup( p_sys->url.psz_password );
+ else
+ psz_pwd = var_InheritString( p_access, "ftp-pwd" );
+ if( !psz_pwd )
{
- free( psz );
+ free( psz_user );
goto error;
}
- free( psz );
+
+ if( LoginUserPwd( p_access, p_sys, psz_user, psz_pwd ) == 0 )
+ {
+ free( psz_user );
+ free( psz_pwd );
+ return 0;
+ }
+ free( psz_user );
+ free( psz_pwd );
+error:
+ clearCmdTLS( p_sys );
+ return -1;
+}
+
+static int LoginUserPwd( vlc_object_t *p_access, access_sys_t *p_sys,
+ const char *psz_user, const char *psz_pwd)
+{
+ int i_answer;
+
+ /* Send credentials over channel */
+ if( ftp_SendCommand( p_access, p_sys, "USER %s", psz_user ) < 0 ||
+ ftp_RecvCommand( p_access, p_sys, &i_answer, NULL ) < 0 )
+ return -1;
switch( i_answer / 100 )
{
@@ -432,20 +457,10 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
break;
case 3:
msg_Dbg( p_access, "password needed" );
- if( p_sys->url.psz_password && *p_sys->url.psz_password )
- psz = strdup( p_sys->url.psz_password );
- else
- psz = var_InheritString( p_access, "ftp-pwd" );
- if( !psz )
- goto error;
- if( ftp_SendCommand( p_access, p_sys, "PASS %s", psz ) < 0 ||
+ if( ftp_SendCommand( p_access, p_sys, "PASS %s", psz_pwd ) < 0 ||
ftp_RecvCommand( p_access, p_sys, &i_answer, NULL ) < 0 )
- {
- free( psz );
- goto error;
- }
- free( psz );
+ return -1;
switch( i_answer / 100 )
{
@@ -453,6 +468,8 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
msg_Dbg( p_access, "password accepted" );
break;
case 3:
+ {
+ char *psz;
msg_Dbg( p_access, "account needed" );
psz = var_InheritString( p_access, "ftp-account" );
if( ftp_SendCommand( p_access, p_sys, "ACCT %s",
@@ -460,7 +477,7 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
ftp_RecvCommand( p_access, p_sys, &i_answer, NULL ) < 0 )
{
free( psz );
- goto error;
+ return -1;
}
free( psz );
@@ -470,30 +487,27 @@ static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
dialog_Fatal( p_access,
_("Network interaction failed"),
"%s", _("Your account was rejected.") );
- goto error;
+ return -1;
}
msg_Dbg( p_access, "account accepted" );
break;
+ }
default:
msg_Err( p_access, "password rejected" );
dialog_Fatal( p_access, _("Network interaction failed"),
"%s", _("Your password was rejected.") );
- goto error;
+ return -1;
}
break;
default:
msg_Err( p_access, "user rejected" );
dialog_Fatal( p_access, _("Network interaction failed"), "%s",
_("Your connection attempt to the server was rejected.") );
- goto error;
+ return -1;
}
return 0;
-
-error:
- clearCmdTLS( p_sys );
- return -1;
}
static void FeaturesCheck( void *opaque, const char *feature )
More information about the vlc-commits
mailing list