From c525e2546ef35bffccffb4cf42f1c337a10f9876 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sat, 24 Oct 2015 20:42:38 +0200 Subject: [PATCH] added common injection, caught some possible errors --- saviine/client/main.c | 38 +++++++++++++++++++++- saviine/server/src/saviine_server.v12.suo | Bin 31232 -> 32256 bytes 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/saviine/client/main.c b/saviine/client/main.c index 5514f58..0f3291c 100644 --- a/saviine/client/main.c +++ b/saviine/client/main.c @@ -364,6 +364,36 @@ static void handle_saves(void *pClient, void *pCmd,int error, int client){ log_string(bss.logsock, "dumping common savedata", BYTE_LOG_STR); dump_dir(pClient,client,pCmd,"/vol/save/common/",error,60); log_string(bss.logsock, "done!", BYTE_LOG_STR); + }else{ + log_string(bss.logsock, "common injection", BYTE_LOG_STR); + int buf_size = BUFFER_SIZE; + char * pBuffer; + int failed = 0; + do{ + buf_size -= 0x200; + if(buf_size < 0){ + log_string(bss.logsock, "error on buffer allocation", BYTE_LOG_STR); + failed = 1; + break; + } + pBuffer = (char *)MEMAllocFromDefaultHeapEx(buf_size, 0x40); + }while(!pBuffer); + if(!failed){ + int result = injectFiles(pClient,pCmd,"/vol/save/common/","/",pBuffer,buf_size,-1); + if(result == -1){ + log_string(bss.logsock, "injection failed, trying to restore the data", BYTE_LOG_STR); + //TODO FSRollbackQuota + }else{ + char logbugger[50]; + __os_snprintf(logbugger, sizeof(logbugger), "injected %d files, flushing the data now",result); + log_string(bss.logsock, logbugger, BYTE_LOG_STR); + if(FSFlushQuota(pClient,pCmd,"/vol/save/common/",-1) == 0){ + log_string(bss.logsock, "success", BYTE_LOG_STR); + }else{ + log_string(bss.logsock, "failed", BYTE_LOG_STR); + } + } + } } } } @@ -448,12 +478,18 @@ int injectFiles(void *pClient, void *pCmd, char * path,char * relativepath,char }else{ log_string(bss.logsock, "cafiine_fopen failed", BYTE_LOG_STR); + failed = 1; } } - if((FSCloseFile (pClient, pCmd, handle, -1)) < 0) + if((FSCloseFile (pClient, pCmd, handle, -1)) < 0){ log_string(bss.logsock, "FSCloseFile failed", BYTE_LOG_STR); + failed = 1; + } + }else{ + log_string(bss.logsock, "opening the file failed", BYTE_LOG_STR); + failed = 1; } if(!failed) filesinjected++; }else if( type == BYTE_FOLDER){ diff --git a/saviine/server/src/saviine_server.v12.suo b/saviine/server/src/saviine_server.v12.suo index 4b2cd1e04ce56656785a13f717a723a4b73100bd..819410f9103b05340d422f23635307ef6861cd5c 100644 GIT binary patch delta 2229 zcmah~-%nF_6u;-vVpnc|2<3;M0v$+2e)N_CrHWQSMZ|&;7qe(%DNM`;Na@7_Ixfq$ z7}^$Fd^5c5Vac-WA21nBG;y+XN-uV5vTt+l_j^9y&-Z)J zxu5g>R$T@467$AXu?hthPTt=&%3Mz5-im zI=urI#KSfq_F5(R+~Z1V9ej%!aY&K~D$9qzL8TyU%hGIlxa}G_Oy*XJV5+L+ovh^X z@**-0D8H3*U|Sfq&@9hrQWAJ@2vp1v{LUeuGh!S9Ll3gTwTj>J`9s6{(mExe_d?J3`Z|6w**CW|})UB(Zsv@e5A)JW>adOC`%aLb*>deoj ze^bUrJ4C6o?h-Cfm6MLRJJ_sEhc*$+4Wo%JRHs6E==>_wOss?1=f*!c)AQk`im=h<5OHF{ma?CfR7ay(Hp_^79pglx;m#qQBLD*j5E^> z_LvZ-0x_Ca6Z%n|6EUrn;jLr~_Rl#{>uLJWsvkPr9nX9DFI%AEigWGIQK;VW|bz)C3w1G(aM3Qy`(< z_L8RggMB?TYE(t0hl)ehut>dBiX+-8m0C4OIaNJ0J@ptQkXqE@zPDKi5>=JjbY|bq zd*8g7dEd;NQU2h{8lQDn3d|@)jN!+~-pph&gyv|gl7-Km{6rPPJO`=-r@8+nWpk%# zh1;pW7N+y2`A4uWMCB^9^H6YT23E@V@>xjaM`a5_rfsn48X7VRm3-i$!&Qn}AquU! z6Wbjq1t>HVVP-=oTY@`cv6aS?m5Z$dr2+RCH6km)Rzx8$+E3aM z;*lMd0aITRHYJp(Smx;ZNELRd1obohNpSo&bu+$wZ&*syMBYeh0w%kD~9YUHJ@)hIkS zjN|UZlNQ9>UY4>6 zL=dc%C|k26VY#{^)hMKP3#q+a^5b~gXOLWBc%^;PLq-C@36!^tPQpme8TJgeZ=)np z6cn}QX(nYdUu=r=Tp#vEV9MDGfdj4ZTk-iP`PCJ2m>X$?k<%YQy5VDM_+e%A)71s@ z?bWY8+V*H(j_iZ+h?>}Qh|rsm zMfo(WSM-@!8Dex}ALCPys7&%nSZ_@}Lo#R^)p`HZA*A}vTDoV6!_q()(#NW-58|7t zz!&$dpV`^XZ!MW+j<1;mzVB_(e5Vcy^hz<8Cm8U$+SX)C$g2LiUojU55D!320P-U7dN^uoOtZ`t-1{aEo