fixed cd .. command on command line clients

This commit is contained in:
root
2024-04-07 17:51:30 +02:00
parent c5b7a30d24
commit 1c935c792d
5 changed files with 29 additions and 15 deletions

6
build/compile.sh Executable file
View File

@ -0,0 +1,6 @@
cd ..
make clean
make
cd build
sudo killall uFTP
./uFTP

View File

@ -773,18 +773,18 @@ int parseCommandCwd(ftpDataType *data, int socketId)
thePath = getFtpCommandArg("CWD", data->clients[socketId].theCommandReceived, 0); thePath = getFtpCommandArg("CWD", data->clients[socketId].theCommandReceived, 0);
// printf("\ncdw requested path: %s", thePath); //printf("\ncdw requested path: %s", thePath);
if (strlen(thePath) > 0) if (strlen(thePath) > 0)
{ {
// printf("Memory data address 1st call : %lld", &data->clients[socketId].memoryTable); // printf("Memory data address 1st call : %lld", &data->clients[socketId].memoryTable);
isSafePath = getSafePath(&theSafePath, thePath, &data->clients[socketId].login, &data->clients[socketId].memoryTable); isSafePath = getSafePath(&theSafePath, thePath, &data->clients[socketId].login, &data->clients[socketId].memoryTable);
// printf("\ncdw safe path: %s", theSafePath.text); //printf("\ncdw safe path: %s", theSafePath.text);
} }
if (isSafePath) if (isSafePath)
{ {
// printf("\n The Path requested for CWD IS:%s", theSafePath.text); //printf("\n The Path requested for CWD IS:%s", theSafePath.text);
setDynamicStringDataType(&absolutePathPrevious, data->clients[socketId].login.absolutePath.text, data->clients[socketId].login.absolutePath.textLen, &data->clients[socketId].memoryTable); setDynamicStringDataType(&absolutePathPrevious, data->clients[socketId].login.absolutePath.text, data->clients[socketId].login.absolutePath.textLen, &data->clients[socketId].memoryTable);
setDynamicStringDataType(&ftpPathPrevious, data->clients[socketId].login.ftpPath.text, data->clients[socketId].login.ftpPath.textLen, &data->clients[socketId].memoryTable); setDynamicStringDataType(&ftpPathPrevious, data->clients[socketId].login.ftpPath.text, data->clients[socketId].login.ftpPath.textLen, &data->clients[socketId].memoryTable);

View File

@ -737,8 +737,8 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization)
int compareStringCaseInsensitive(char * stringIn, char * stringRef, int stringLenght) int compareStringCaseInsensitive(char * stringIn, char * stringRef, int stringLenght)
{ {
int i = 0; int i = 0;
char * alfaLowerCase = "qwertyuiopasdfghjklzxcvbnm "; char * alfaLowerCase = "qwertyuiopasdfghjklzxcvbnm .";
char * alfaUpperCase = "QWERTYUIOPASDFGHJKLZXCVBNM "; char * alfaUpperCase = "QWERTYUIOPASDFGHJKLZXCVBNM .";
int stringInIndex; int stringInIndex;
int stringRefIndex; int stringRefIndex;

View File

@ -753,7 +753,7 @@ static int processCommand(int processingElement)
{ {
int toReturn = 0; int toReturn = 0;
//printTimeStamp(); //printTimeStamp();
//printf ("\nCommand received from (%d): %s", processingElement, ftpData.clients[processingElement].theCommandReceived); // printf ("\nCommand received from (%d): %s", processingElement, ftpData.clients[processingElement].theCommandReceived);
cleanDynamicStringDataType(&ftpData.clients[processingElement].ftpCommand.commandArgs, 0, &ftpData.clients[processingElement].memoryTable); cleanDynamicStringDataType(&ftpData.clients[processingElement].ftpCommand.commandArgs, 0, &ftpData.clients[processingElement].memoryTable);
cleanDynamicStringDataType(&ftpData.clients[processingElement].ftpCommand.commandOps, 0, &ftpData.clients[processingElement].memoryTable); cleanDynamicStringDataType(&ftpData.clients[processingElement].ftpCommand.commandOps, 0, &ftpData.clients[processingElement].memoryTable);
@ -859,16 +859,17 @@ static int processCommand(int processingElement)
//printf("\nLIST COMMAND RECEIVED"); //printf("\nLIST COMMAND RECEIVED");
toReturn = parseCommandList(&ftpData, processingElement); toReturn = parseCommandList(&ftpData, processingElement);
} }
else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CDUP", strlen("CDUP")) == 1 ||
compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CWD ..", strlen("CWD ..")) == 1)
{
//printf("\nCDUP COMMAND RECEIVED");
toReturn = parseCommandCdup(&ftpData, processingElement);
}
else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CWD", strlen("CWD")) == 1) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CWD", strlen("CWD")) == 1)
{ {
//printf("\nCWD COMMAND RECEIVED"); //printf("\nCWD COMMAND RECEIVED");
toReturn = parseCommandCwd(&ftpData, processingElement); toReturn = parseCommandCwd(&ftpData, processingElement);
} }
else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CDUP", strlen("CDUP")) == 1)
{
//printf("\nCDUP COMMAND RECEIVED");
toReturn = parseCommandCdup(&ftpData, processingElement);
}
else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "REST", strlen("REST")) == 1) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "REST", strlen("REST")) == 1)
{ {
//printf("\nREST COMMAND RECEIVED"); //printf("\nREST COMMAND RECEIVED");

View File

@ -709,13 +709,14 @@ void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTab
void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable) void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable)
{ {
//printf("\n"); //printf("\n");
size_t theLastSlash = -1; int theLastSlash = -1;
size_t strLen = 0; size_t strLen = 0;
strLen = strlen(*sourceString); strLen = strlen(*sourceString);
//printf("\nstrLen = %d", strLen); //printf("\nThe directory = %s", (*sourceString));
//printf("\ndirectory to parent strLen = %d", strLen);
for (size_t i = 0; i < strLen; i++) for (size_t i = 0; i < strLen; i++)
{ {
@ -723,9 +724,10 @@ void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType **
if ( (*sourceString)[i] == '/') if ( (*sourceString)[i] == '/')
{ {
theLastSlash = i; theLastSlash = i;
//printf("\n theLastSlash = %d", theLastSlash);
} }
} }
//printf("\n theLastSlash = %d", theLastSlash);
if (theLastSlash > -1) if (theLastSlash > -1)
{ {
@ -734,8 +736,13 @@ void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType **
{ {
theNewSize = 1; theNewSize = 1;
} }
//printf("\n theNewSize = %d", theNewSize);
*sourceString = DYNMEM_realloc(*sourceString, theNewSize+1, &*memoryTable); *sourceString = DYNMEM_realloc(*sourceString, theNewSize+1, &*memoryTable);
(*sourceString)[theNewSize] = '\0'; (*sourceString)[theNewSize] = '\0';
//printf("\nThe directory upped is = %s", (*sourceString));
} }
} }