mirror of
https://github.com/kingk85/uFTP.git
synced 2025-07-25 13:16:12 +03:00
fix: RNFR - RNTO accepted only if run from the same WD
This commit is contained in:
@ -436,7 +436,6 @@ int parseCommandFeat(ftpDataType *data, int socketId)
|
||||
return FTP_COMMAND_PROCESSED;
|
||||
}
|
||||
|
||||
|
||||
int parseCommandProt(ftpDataType *data, int socketId)
|
||||
{
|
||||
int returnCode;
|
||||
@ -483,7 +482,6 @@ int parseCommandProt(ftpDataType *data, int socketId)
|
||||
return FTP_COMMAND_PROCESSED;
|
||||
}
|
||||
|
||||
|
||||
int parseCommandCcc(ftpDataType *data, int socketId)
|
||||
{
|
||||
int returnCode;
|
||||
@ -571,7 +569,6 @@ int parseCommandPbsz(ftpDataType *data, int socketId)
|
||||
return FTP_COMMAND_PROCESSED;
|
||||
}
|
||||
|
||||
|
||||
int parseCommandTypeA(ftpDataType *data, int socketId)
|
||||
{
|
||||
int returnCode;
|
||||
@ -1698,7 +1695,6 @@ int parseCommandOpts(ftpDataType *data, int socketId)
|
||||
return FTP_COMMAND_PROCESSED;
|
||||
}
|
||||
|
||||
|
||||
int parseCommandDele(ftpDataType *data, int socketId)
|
||||
{
|
||||
int functionReturnCode = 0;
|
||||
@ -1908,7 +1904,6 @@ int invalidCommandResponse(ftpDataType *data, int socketId)
|
||||
return FTP_COMMAND_PROCESSED;
|
||||
}
|
||||
|
||||
|
||||
int parseCommandQuit(ftpDataType *data, int socketId)
|
||||
{
|
||||
int returnCode;
|
||||
@ -2065,6 +2060,7 @@ int parseCommandRnfr(ftpDataType *data, int socketId)
|
||||
|
||||
theRnfrFileName = getFtpCommandArg("RNFR", data->clients[socketId].theCommandReceived, 0);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFile, 0, &data->clients[socketId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFileWd, 0, &data->clients[socketId].memoryTable);
|
||||
|
||||
isSafePath = getSafePath(&data->clients[socketId].renameFromFile, theRnfrFileName, &data->clients[socketId].login, &data->clients[socketId].memoryTable);
|
||||
|
||||
@ -2078,6 +2074,7 @@ int parseCommandRnfr(ftpDataType *data, int socketId)
|
||||
if ((checkUserFilePermissions(data->clients[socketId].renameFromFile.text, data->clients[socketId].login.ownerShip.uid, data->clients[socketId].login.ownerShip.gid) & FILE_PERMISSION_W) == FILE_PERMISSION_W)
|
||||
{
|
||||
returnCode = socketPrintf(data, socketId, "s", "350 RNFR accepted - file exists, ready for destination\r\n");
|
||||
setDynamicStringDataType(&data->clients[socketId].renameFromFileWd, data->clients[socketId].login.ftpPath.text, data->clients[socketId].login.ftpPath.textLen, &data->clients[socketId].memoryTable);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2123,13 +2120,16 @@ int parseCommandRnto(ftpDataType *data, int socketId)
|
||||
isSafePath = getSafePath(&data->clients[socketId].renameToFile, theRntoFileName, &data->clients[socketId].login, &data->clients[socketId].memoryTable);
|
||||
|
||||
if (isSafePath == 1 &&
|
||||
data->clients[socketId].renameFromFile.textLen > 0)
|
||||
data->clients[socketId].renameFromFile.textLen > 0 &&
|
||||
data->clients[socketId].renameFromFileWd.textLen == data->clients[socketId].login.ftpPath.textLen &&
|
||||
strcmp(data->clients[socketId].renameFromFileWd.text, data->clients[socketId].login.ftpPath.text) == 0)
|
||||
{
|
||||
if(FILE_IsFile(data->clients[socketId].renameToFile.text, 0) == 1)
|
||||
{
|
||||
if ((checkUserFilePermissions(data->clients[socketId].renameToFile.text, data->clients[socketId].login.ownerShip.uid, data->clients[socketId].login.ownerShip.gid) & FILE_PERMISSION_W) != FILE_PERMISSION_W)
|
||||
{
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFile, 0, &data->clients[socketId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFileWd, 0, &data->clients[socketId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameToFile, 0, &data->clients[socketId].memoryTable);
|
||||
returnCode = socketPrintf(data, socketId, "s", "550 Error Renaming the file no permissions\r\n");
|
||||
if (returnCode <= 0)
|
||||
@ -2197,6 +2197,7 @@ int parseCommandRnto(ftpDataType *data, int socketId)
|
||||
}
|
||||
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFile, 0, &data->clients[socketId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameFromFileWd, 0, &data->clients[socketId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[socketId].renameToFile, 0, &data->clients[socketId].memoryTable);
|
||||
|
||||
if (returnCode <= 0)
|
||||
@ -2338,8 +2339,6 @@ long long int writeRetrFile(ftpDataType *data, int theSocketId, long long int st
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *getFtpCommandArg(char *theCommand, char *theCommandString, int skipArgs)
|
||||
{
|
||||
char *toReturn = theCommandString + strlen(theCommand);
|
||||
|
@ -827,6 +827,7 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization)
|
||||
|
||||
//Rename from and to data init
|
||||
cleanDynamicStringDataType(&data->clients[clientId].renameFromFile, isInitialization, &data->clients[clientId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[clientId].renameFromFileWd, isInitialization, &data->clients[clientId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[clientId].renameToFile, isInitialization, &data->clients[clientId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[clientId].fileToStor, isInitialization, &data->clients[clientId].memoryTable);
|
||||
cleanDynamicStringDataType(&data->clients[clientId].fileToRetr, isInitialization, &data->clients[clientId].memoryTable);
|
||||
|
Reference in New Issue
Block a user