Some bug fix

This commit is contained in:
Ugo Cirmignani
2018-12-13 00:40:55 +01:00
parent c382c4f1e8
commit cd589876b0
11 changed files with 37 additions and 38 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -463,12 +463,17 @@ int parseCommandPasv(ftpDataType * data, int socketId)
//if (data->clients[socketId].workerData.threadIsAlive == 1) //if (data->clients[socketId].workerData.threadIsAlive == 1)
// { // {
if (data->clients[socketId].workerData.threadIsAlive == 1)
returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread); {
returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread);
}
printf("\npasv pthread_cancel = %d", returnCode); printf("\npasv pthread_cancel = %d", returnCode);
//} //}
printf("\npasv join "); printf("\npasv join ");
returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn);
if (data->clients[socketId].workerData.threadHasBeenCreated == 1)
returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn);
printf("\npasv join ok"); printf("\npasv join ok");
data->clients[socketId].workerData.passiveModeOn = 1; data->clients[socketId].workerData.passiveModeOn = 1;
data->clients[socketId].workerData.activeModeOn = 0; data->clients[socketId].workerData.activeModeOn = 0;
@ -495,11 +500,12 @@ int parseCommandPort(ftpDataType * data, int socketId)
returnCode = snprintf(data->clients[socketId].workerData.activeIpAddress, CLIENT_BUFFER_STRING_SIZE, "%d.%d.%d.%d", ipAddressBytes[0],ipAddressBytes[1],ipAddressBytes[2],ipAddressBytes[3]); returnCode = snprintf(data->clients[socketId].workerData.activeIpAddress, CLIENT_BUFFER_STRING_SIZE, "%d.%d.%d.%d", ipAddressBytes[0],ipAddressBytes[1],ipAddressBytes[2],ipAddressBytes[3]);
void *pReturn; void *pReturn;
//if (data->clients[socketId].workerData.threadIsAlive == 1) if (data->clients[socketId].workerData.threadIsAlive == 1)
//{ {
returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread); returnCode = pthread_cancel(data->clients[socketId].workerData.workerThread);
//} }
returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn); if (data->clients[socketId].workerData.threadHasBeenCreated == 1)
returnCode = pthread_join(data->clients[socketId].workerData.workerThread, &pReturn);
data->clients[socketId].workerData.passiveModeOn = 0; data->clients[socketId].workerData.passiveModeOn = 0;
data->clients[socketId].workerData.activeModeOn = 1; data->clients[socketId].workerData.activeModeOn = 1;
returnCode = pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber); returnCode = pthread_create(&data->clients[socketId].workerData.workerThread, NULL, connectionWorkerHandle, (void *) &data->clients[socketId].clientProgressiveNumber);
@ -526,11 +532,10 @@ int parseCommandAbor(ftpDataType * data, int socketId)
if (data->clients[socketId].workerData.threadIsAlive == 1) if (data->clients[socketId].workerData.threadIsAlive == 1)
{ {
void *pReturn; void *pReturn;
//if (data->clients[socketId].workerData.threadIsAlive == 1) if (data->clients[socketId].workerData.threadIsAlive == 1)
//{ {
pthread_cancel(data->clients[socketId].workerData.workerThread); pthread_cancel(data->clients[socketId].workerData.workerThread);
//} }
pthread_join(data->clients[socketId].workerData.workerThread, &pReturn);
returnCode = socketPrintf(data, socketId, "s", "426 ABORT\r\n"); returnCode = socketPrintf(data, socketId, "s", "426 ABORT\r\n");
if (returnCode <= 0) if (returnCode <= 0)

View File

@ -602,7 +602,8 @@ void resetWorkerData(ftpDataType *data, int clientId, int isInitialization)
{ {
DYNV_VectorGeneric_Init(&data->clients[clientId].workerData.directoryInfo); DYNV_VectorGeneric_Init(&data->clients[clientId].workerData.directoryInfo);
data->clients[clientId].workerData.theStorFile = NULL; data->clients[clientId].workerData.theStorFile = NULL;
data->clients[clientId].workerData.workerThread = 0; data->clients[clientId].workerData.threadHasBeenCreated = 0;
} }
if (pthread_mutex_init(&data->clients[clientId].workerData.conditionMutex, NULL) != 0) if (pthread_mutex_init(&data->clients[clientId].workerData.conditionMutex, NULL) != 0)
@ -639,25 +640,16 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization)
if (isInitialization != 1) if (isInitialization != 1)
{ {
if (data->clients[clientId].workerData.threadIsAlive == 1) void *pReturn;
{ if (data->clients[clientId].workerData.threadIsAlive == 1)
void *pReturn; pthread_cancel(data->clients[clientId].workerData.workerThread);
pthread_cancel(data->clients[clientId].workerData.workerThread);
pthread_join(data->clients[clientId].workerData.workerThread, &pReturn);
}
else
{
void *pReturn = NULL;
pthread_cancel(data->clients[clientId].workerData.workerThread);
pthread_join(data->clients[clientId].workerData.workerThread, &pReturn);
}
pthread_mutex_destroy(&data->clients[clientId].writeMutex); pthread_mutex_destroy(&data->clients[clientId].writeMutex);
#ifdef OPENSSL_ENABLED #ifdef OPENSSL_ENABLED
SSL_free(data->clients[clientId].ssl); SSL_free(data->clients[clientId].ssl);
//SSL_free(data->clients[clientId].workerData.ssl); //SSL_free(data->clients[clientId].workerData.ssl);
#endif #endif
} }
if (pthread_mutex_init(&data->clients[clientId].writeMutex, NULL) != 0) if (pthread_mutex_init(&data->clients[clientId].writeMutex, NULL) != 0)
@ -665,6 +657,7 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization)
printf("\nclientData->writeMutex init failed\n"); printf("\nclientData->writeMutex init failed\n");
exit(0); exit(0);
} }
data->clients[clientId].tlsIsNegotiating = 0; data->clients[clientId].tlsIsNegotiating = 0;
data->clients[clientId].tlsIsEnabled = 0; data->clients[clientId].tlsIsEnabled = 0;
data->clients[clientId].dataChannelIsTls = 0; data->clients[clientId].dataChannelIsTls = 0;

View File

@ -125,6 +125,7 @@ struct workerData
#endif #endif
int threadIsAlive; int threadIsAlive;
int threadHasBeenCreated;
int connectionPort; int connectionPort;
int passiveModeOn; int passiveModeOn;
int activeModeOn; int activeModeOn;

View File

@ -570,7 +570,7 @@ void runFtpServer(void)
//Debug print errors //Debug print errors
if (ftpData.clients[processingSock].bufferIndex < 0) if (ftpData.clients[processingSock].bufferIndex < 0)
{ {
//ftpData.clients[processingSock].closeTheClient = 1; ftpData.clients[processingSock].closeTheClient = 1;
printf("\n1 Errno = %d", errno); printf("\n1 Errno = %d", errno);
perror("1 Error: "); perror("1 Error: ");
continue; continue;

View File

@ -460,13 +460,13 @@ void closeClient(ftpDataType * ftpData, int processingSocket)
{ {
printf("\nQUIT FLAG SET!\n"); printf("\nQUIT FLAG SET!\n");
// if (ftpData->clients[processingSocket].workerData.threadIsAlive == 1) if (ftpData->clients[processingSocket].workerData.threadIsAlive == 1)
// { {
void *pReturn; void *pReturn;
pthread_cancel(ftpData->clients[processingSocket].workerData.workerThread); pthread_cancel(ftpData->clients[processingSocket].workerData.workerThread);
pthread_join(ftpData->clients[processingSocket].workerData.workerThread, &pReturn); //pthread_join(ftpData->clients[processingSocket].workerData.workerThread, &pReturn);
printf("\nQuit command received the Pasv Thread has been cancelled."); printf("\nQuit command received the Pasv Thread has been cancelled.");
// } }
FD_CLR(ftpData->clients[processingSocket].socketDescriptor, &ftpData->connectionData.rsetAll); FD_CLR(ftpData->clients[processingSocket].socketDescriptor, &ftpData->connectionData.rsetAll);
FD_CLR(ftpData->clients[processingSocket].socketDescriptor, &ftpData->connectionData.wsetAll); FD_CLR(ftpData->clients[processingSocket].socketDescriptor, &ftpData->connectionData.wsetAll);
@ -630,7 +630,7 @@ int evaluateClientSocketConnection(ftpDataType * ftpData)
//Errors while accepting, socket will be closed //Errors while accepting, socket will be closed
ftpData->clients[availableSocketIndex].closeTheClient = 1; ftpData->clients[availableSocketIndex].closeTheClient = 1;
printf("\n2 Errno = %d", errno); printf("\n2 Errno = %d", errno);
return 1; return 0;
} }
} }
else else