Skip to content

Commit 20c2763

Browse files
committed
modify:Do not allow deletion of non-empty directories
1 parent 44d5b5f commit 20c2763

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

XEngine_Source/XEngine_StorageApp/StorageApp_Webdav.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,32 @@ bool XEngine_Task_HttpWebdav(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int
263263
_tcsxcpy(tszFileName, pSt_HTTPParam->tszHttpUri + 1);
264264
BaseLib_String_Replace(tszFileName, &nFLen, st_StorageBucket.tszBuckKey, st_StorageBucket.tszFilePath);
265265

266-
_xtremove(tszFileName);
266+
SYSTEMAPI_FILE_ATTR st_FileAttr = {};
267+
if (SystemApi_File_GetFileAttr(tszFileName, &st_FileAttr))
268+
{
269+
if (st_FileAttr.bFile)
270+
{
271+
_xtremove(tszFileName);
272+
}
273+
else
274+
{
275+
//如果是文件夹
276+
int nFileCount = 0;
277+
XCHAR** pptszListFile;
278+
SystemApi_File_EnumFile(tszFileName, &pptszListFile, &nFileCount);
279+
BaseLib_Memory_Free((XPPPMEM)&pptszListFile, nFileCount);
280+
if (nFileCount > 0)
281+
{
282+
st_HDRParam.bIsClose = true;
283+
st_HDRParam.nHttpCode = 400;
284+
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
285+
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
286+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBDAV客户端:%s,处理WEBDAV协议DELETE方法失败,删除的文件夹不为空,URL:%s"), lpszClientAddr, tszFileName);
287+
return false;
288+
}
289+
SystemApi_File_DeleteMutilFolder(tszFileName, true);
290+
}
291+
}
267292
HttpProtocol_Server_SendMsgEx(xhWebdavHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
268293
XEngine_Net_SendMsg(lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPWEBDAV);
269294
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBDAV客户端:%s,处理WEBDAV协议DELETE方法成功,删除的文件:%s"), lpszClientAddr, tszFileName);

0 commit comments

Comments
 (0)