mirror of
https://github.com/kingk85/uFTP.git
synced 2025-07-25 13:16:12 +03:00
fix: CDUP to handle error when the directory is the root directory
This commit is contained in:
@ -457,7 +457,6 @@ int parseCommandCcc(ftpDataType *data, int socketId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
returnCode = socketPrintf(data, socketId, "s", "200 Control connection switched to plaintext\r\n");
|
returnCode = socketPrintf(data, socketId, "s", "200 Control connection switched to plaintext\r\n");
|
||||||
|
|
||||||
if (returnCode <= 0)
|
if (returnCode <= 0)
|
||||||
{
|
{
|
||||||
LOG_ERROR("socketPrintfError");
|
LOG_ERROR("socketPrintfError");
|
||||||
@ -470,7 +469,6 @@ int parseCommandCcc(ftpDataType *data, int socketId)
|
|||||||
|
|
||||||
#ifndef OPENSSL_ENABLED
|
#ifndef OPENSSL_ENABLED
|
||||||
returnCode = socketPrintf(data, socketId, "s", "502 Command not supported\r\n");
|
returnCode = socketPrintf(data, socketId, "s", "502 Command not supported\r\n");
|
||||||
|
|
||||||
if (returnCode <= 0)
|
if (returnCode <= 0)
|
||||||
{
|
{
|
||||||
LOG_ERROR("socketPrintfError");
|
LOG_ERROR("socketPrintfError");
|
||||||
@ -2102,8 +2100,8 @@ int parseCommandCdup(ftpDataType *data, int socketId)
|
|||||||
{
|
{
|
||||||
int returnCode;
|
int returnCode;
|
||||||
|
|
||||||
FILE_DirectoryToParent(&data->clients[socketId].login.absolutePath.text, &data->clients[socketId].memoryTable);
|
returnCode = FILE_DirectoryToParent(&data->clients[socketId].login.absolutePath.text, &data->clients[socketId].memoryTable);
|
||||||
FILE_DirectoryToParent(&data->clients[socketId].login.ftpPath.text, &data->clients[socketId].memoryTable);
|
returnCode = FILE_DirectoryToParent(&data->clients[socketId].login.ftpPath.text, &data->clients[socketId].memoryTable);
|
||||||
data->clients[socketId].login.absolutePath.textLen = strlen(data->clients[socketId].login.absolutePath.text);
|
data->clients[socketId].login.absolutePath.textLen = strlen(data->clients[socketId].login.absolutePath.text);
|
||||||
data->clients[socketId].login.ftpPath.textLen = strlen(data->clients[socketId].login.ftpPath.text);
|
data->clients[socketId].login.ftpPath.textLen = strlen(data->clients[socketId].login.ftpPath.text);
|
||||||
|
|
||||||
@ -2112,6 +2110,18 @@ int parseCommandCdup(ftpDataType *data, int socketId)
|
|||||||
setDynamicStringDataType(&data->clients[socketId].login.absolutePath, data->clients[socketId].login.homePath.text, data->clients[socketId].login.homePath.textLen, &data->clients[socketId].memoryTable);
|
setDynamicStringDataType(&data->clients[socketId].login.absolutePath, data->clients[socketId].login.homePath.text, data->clients[socketId].login.homePath.textLen, &data->clients[socketId].memoryTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!returnCode)
|
||||||
|
{
|
||||||
|
returnCode = socketPrintf(data, socketId, "sss", "550 Already at root directory. ", data->clients[socketId].login.ftpPath.text, "\r\n");
|
||||||
|
|
||||||
|
if (returnCode <= 0)
|
||||||
|
{
|
||||||
|
LOG_ERROR("socketPrintfError");
|
||||||
|
return FTP_COMMAND_PROCESSED_WRITE_ERROR;
|
||||||
|
}
|
||||||
|
return FTP_COMMAND_PROCESSED;
|
||||||
|
}
|
||||||
|
|
||||||
returnCode = socketPrintf(data, socketId, "sss", "250 OK. Current directory is ", data->clients[socketId].login.ftpPath.text, "\r\n");
|
returnCode = socketPrintf(data, socketId, "sss", "250 OK. Current directory is ", data->clients[socketId].login.ftpPath.text, "\r\n");
|
||||||
|
|
||||||
if (returnCode <= 0)
|
if (returnCode <= 0)
|
||||||
|
@ -781,7 +781,7 @@ void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTab
|
|||||||
(*sourceString)[theNewSize] = '\0';
|
(*sourceString)[theNewSize] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable)
|
int FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable)
|
||||||
{
|
{
|
||||||
//my_printf("\n");
|
//my_printf("\n");
|
||||||
|
|
||||||
@ -802,6 +802,10 @@ void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType **
|
|||||||
}
|
}
|
||||||
|
|
||||||
//my_printf("\n theLastSlash = %d", theLastSlash);
|
//my_printf("\n theLastSlash = %d", theLastSlash);
|
||||||
|
if (theLastSlash == 0 && strLen == 1)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (theLastSlash > -1)
|
if (theLastSlash > -1)
|
||||||
{
|
{
|
||||||
@ -818,6 +822,8 @@ void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType **
|
|||||||
|
|
||||||
//my_printf("\nThe directory upped is = %s", (*sourceString));
|
//my_printf("\nThe directory upped is = %s", (*sourceString));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FILE_LockFile(int fd)
|
int FILE_LockFile(int fd)
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
void FILE_AppendStringToFile(char *fileName, char *theString);
|
void FILE_AppendStringToFile(char *fileName, char *theString);
|
||||||
time_t FILE_GetLastModifiedData(char *path);
|
time_t FILE_GetLastModifiedData(char *path);
|
||||||
void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTable_DataType ** memoryTable);
|
void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTable_DataType ** memoryTable);
|
||||||
void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable);
|
int FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable);
|
||||||
int FILE_LockFile(int fd);
|
int FILE_LockFile(int fd);
|
||||||
int FILE_doChownFromUidGidString(const char *file_path, const char *user_name, const char *group_name);
|
int FILE_doChownFromUidGidString(const char *file_path, const char *user_name, const char *group_name);
|
||||||
int FILE_doChownFromUidGid(const char *file_path, uid_t uid, gid_t gid);
|
int FILE_doChownFromUidGid(const char *file_path, uid_t uid, gid_t gid);
|
||||||
|
Reference in New Issue
Block a user