Correction, mauvais serveur FTP géré + plus d'erreur 500 au login

This commit is contained in:
xdrm-brackets 2015-12-18 09:26:33 +01:00
parent 4f02237afb
commit 6aee485ea0
6 changed files with 27 additions and 9 deletions

View File

@ -7,6 +7,7 @@ int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
struct addrinfo hints; // contiendra le filtre/format struct addrinfo hints; // contiendra le filtre/format
struct addrinfo* addrinfo; // contiendra les infos struct addrinfo* addrinfo; // contiendra les infos
int CONNECT; // file_desc(s) int CONNECT; // file_desc(s)
int GETADDRINFO; // contiendra l'erreur ou pas de getaddrinfo()
char BUFFER[maxBuffLen]; // BUFFER de communication char BUFFER[maxBuffLen]; // BUFFER de communication
/* [1] On définit le filtre/format /* [1] On définit le filtre/format
@ -28,7 +29,10 @@ int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
/* [2] On récupère les infos /* [2] On récupère les infos
=======================================================*/ =======================================================*/
getaddrinfo(serverHost, serverPort, &hints, &addrinfo); GETADDRINFO = getaddrinfo(serverHost, serverPort, &hints, &addrinfo);
// si erreur
if( GETADDRINFO < 0 ) return -1;
if( DEBUGMOD&SCK ) printf("=============RES============\n"); if( DEBUGMOD&SCK ) printf("=============RES============\n");
if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", addrinfo->ai_flags ); // int if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", addrinfo->ai_flags ); // int

View File

@ -128,7 +128,7 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket){
void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET){ int MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET){
if( DEBUGMOD&HDR ) printf("====== MANAGE_REQUEST(%s, %d, %d, %d, %d) ======\n\n", pRequest, *USER_SOCKET, *FTP_SOCKET, *DUSER_SOCKET, *DFTP_SOCKET); if( DEBUGMOD&HDR ) printf("====== MANAGE_REQUEST(%s, %d, %d, %d, %d) ======\n\n", pRequest, *USER_SOCKET, *FTP_SOCKET, *DUSER_SOCKET, *DFTP_SOCKET);
@ -168,14 +168,19 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
/* 2. On se connecte au serveur FTP (commandes) */ /* 2. On se connecte au serveur FTP (commandes) */
CONNECT_CLIENT(hostName, FTP_PORT, FTP_SOCKET); int error = CONNECT_CLIENT(hostName, FTP_PORT, FTP_SOCKET);
if( *FTP_SOCKET == -1 ) printf("CAN'T CONNECT TO GIVEN SERVER!!\n");
if( error == -1 || *FTP_SOCKET == -1 ){ // si erreur
printf("Impossible de se connecter au serveur (%s:%s)\n", hostName, FTP_PORT);
strcpy(pRequest, "421 ERREUR: impossible de se connecter au serveur!!\r\n");
return -1;
}
if( DEBUGMOD&SCK ) printf("FTP SOCKET CONNECTED AT %s:%s\n", hostName, FTP_PORT); if( DEBUGMOD&SCK ) printf("FTP SOCKET CONNECTED AT %s:%s\n", hostName, FTP_PORT);
/* 3. On envoie la séquence d'initialisation */ /* 3. On envoie la séquence d'initialisation */
CLIENT_SEND(FTP_SOCKET, "\r\n", &ftp_response); CLIENT_SEND(FTP_SOCKET, "", &ftp_response);
if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", "\r\n"); if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", "\r\n");
if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response); if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response);
@ -189,6 +194,9 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
strcpy(response, "USER xdrm\r\n"); strcpy(response, "USER xdrm\r\n");
} }
else if( strcmp(rCommand, "USER") == 0 ) // si oubli serveur
strcpy(response, "421 'username@FTPserver' attendu\n");
/* (2) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif) /* (2) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif)
--------------------------------------------*/ --------------------------------------------*/
else if( strcmp(rCommand, "PORT") == 0 ){ else if( strcmp(rCommand, "PORT") == 0 ){
@ -224,6 +232,10 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
/* [3] Retour de la réponse /* [3] Retour de la réponse
================================================*/ ================================================*/
strcpy(pRequest, response); strcpy(pRequest, response);
printf("RESP: %s\n", pRequest);
return 0;
} }

View File

@ -53,7 +53,7 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket);
* [3] Retour de la réponse * [3] Retour de la réponse
* *
*/ */
void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET); int MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET);

View File

@ -126,6 +126,8 @@ void* manageConnection(void* THREADABLE_SOCKET){
char* ftp_response; // contiendra le BUFFER de réponse du serveur FTP (commandes) char* ftp_response; // contiendra le BUFFER de réponse du serveur FTP (commandes)
int nbReceived, nbSend; // contiendra les nb reçu && envoyé int nbReceived, nbSend; // contiendra les nb reçu && envoyé
BUFFER = malloc( maxBuffLen ); BUFFER = malloc( maxBuffLen );
int error;
/* [2] Envoi de la séquence de bienvenue /* [2] Envoi de la séquence de bienvenue
============================================================================*/ ============================================================================*/
swrite(&USER_SOCKET, WLCM_MSG); swrite(&USER_SOCKET, WLCM_MSG);
@ -141,10 +143,10 @@ void* manageConnection(void* THREADABLE_SOCKET){
/* [4] Traitement de la requête /* [4] Traitement de la requête
============================================================================*/ ============================================================================*/
MANAGE_REQUEST(BUFFER, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET); error = MANAGE_REQUEST(BUFFER, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET);
// si on a pas la connection FTP (commande) initialisée, on quitte // si on a pas la connection FTP (commande) initialisée, on quitte
// if( FTP_SOCKET == -1 ) break; if( error == -1 ) break;
/* [5] Redirection vers le serveur FTP /* [5] Redirection vers le serveur FTP

View File

@ -33,7 +33,7 @@
#define THR 0x40 // FILTRE pour THREADS #define THR 0x40 // FILTRE pour THREADS
// possibilité de cumuler les DEBUGMODES // possibilité de cumuler les DEBUGMODES
#define DEBUGMOD THREADS // REVEALS + HEADER + THREADS #define DEBUGMOD SOCKETS + THREADS // REVEALS + HEADER + THREADS
/* vars */ /* vars */

BIN
test

Binary file not shown.