From c1e646df43f963282c0ecedaaa557758ed93e343 Mon Sep 17 00:00:00 2001 From: kingk85 Date: Tue, 20 Jun 2023 13:06:57 -0700 Subject: [PATCH] Some refactoring --- Makefile | 0 MakefileNetBeans | 0 README.md | 0 build/modules/auth.o | Bin 1072 -> 0 bytes build/modules/configRead.o | Bin 14600 -> 0 bytes build/modules/connection.o | Bin 20776 -> 0 bytes build/modules/connection.o.orig | Bin build/modules/daemon.o | Bin 6376 -> 0 bytes build/modules/dynamicMemory.o | Bin 5512 -> 0 bytes build/modules/dynamicVectors.o | Bin 7728 -> 0 bytes build/modules/errorHandling.o | Bin 2200 -> 0 bytes build/modules/fileManagement.o | Bin 15264 -> 0 bytes build/modules/fileManagement.o.orig | Bin build/modules/ftpCommandElaborate.o | Bin 41896 -> 0 bytes build/modules/ftpCommandElaborate.o.orig | Bin build/modules/ftpData.o | Bin 18848 -> 0 bytes build/modules/ftpData.o.orig | Bin build/modules/ftpServer.o | Bin 32968 -> 0 bytes build/modules/ftpServer.o.orig | Bin build/modules/logFunctions.o | Bin 1840 -> 0 bytes build/modules/openSsl.o | Bin 1080 -> 0 bytes build/modules/signals.o | Bin 3432 -> 0 bytes build/uFTP | Bin 119224 -> 0 bytes ftpCommandElaborate.c | 24 +++--- ftpCommandsElaborate.h | 0 ftpData.c | 87 +++++++++---------- ftpData.h | 0 ftpServer.c | 2 +- ftpServer.h | 0 ftpSpecs.h | 0 library/auth.c | 0 library/auth.h | 0 library/configRead.c | 11 ++- library/configRead.h | 0 library/connection.c | 4 +- library/connection.h | 0 library/daemon.c | 8 +- library/daemon.h | 0 library/dynamicMemory.c | 8 ++ library/dynamicMemory.h | 0 library/dynamicVectors.c | 31 ++++--- library/dynamicVectors.h | 0 library/errorHandling.c | 0 library/errorHandling.h | 0 library/fileManagement.c | 104 ++++++++--------------- library/fileManagement.h | 0 library/logFunctions.c | 4 +- library/logFunctions.h | 0 library/openSsl.c | 0 library/openSsl.h | 0 library/signals.c | 3 +- library/signals.h | 0 testNotes.txt | 0 todo.txt | 0 uFTP.c | 2 +- uftpd.cfg | 2 +- 56 files changed, 134 insertions(+), 156 deletions(-) mode change 100644 => 100755 Makefile mode change 100644 => 100755 MakefileNetBeans mode change 100644 => 100755 README.md delete mode 100644 build/modules/auth.o delete mode 100644 build/modules/configRead.o delete mode 100644 build/modules/connection.o mode change 100644 => 100755 build/modules/connection.o.orig delete mode 100644 build/modules/daemon.o delete mode 100644 build/modules/dynamicMemory.o delete mode 100644 build/modules/dynamicVectors.o delete mode 100644 build/modules/errorHandling.o delete mode 100644 build/modules/fileManagement.o mode change 100644 => 100755 build/modules/fileManagement.o.orig delete mode 100644 build/modules/ftpCommandElaborate.o mode change 100644 => 100755 build/modules/ftpCommandElaborate.o.orig delete mode 100644 build/modules/ftpData.o mode change 100644 => 100755 build/modules/ftpData.o.orig delete mode 100644 build/modules/ftpServer.o mode change 100644 => 100755 build/modules/ftpServer.o.orig delete mode 100644 build/modules/logFunctions.o delete mode 100644 build/modules/openSsl.o delete mode 100644 build/modules/signals.o delete mode 100755 build/uFTP mode change 100644 => 100755 ftpCommandElaborate.c mode change 100644 => 100755 ftpCommandsElaborate.h mode change 100644 => 100755 ftpData.c mode change 100644 => 100755 ftpData.h mode change 100644 => 100755 ftpServer.c mode change 100644 => 100755 ftpServer.h mode change 100644 => 100755 ftpSpecs.h mode change 100644 => 100755 library/auth.c mode change 100644 => 100755 library/auth.h mode change 100644 => 100755 library/configRead.c mode change 100644 => 100755 library/configRead.h mode change 100644 => 100755 library/connection.c mode change 100644 => 100755 library/connection.h mode change 100644 => 100755 library/daemon.c mode change 100644 => 100755 library/daemon.h mode change 100644 => 100755 library/dynamicMemory.c mode change 100644 => 100755 library/dynamicMemory.h mode change 100644 => 100755 library/dynamicVectors.c mode change 100644 => 100755 library/dynamicVectors.h mode change 100644 => 100755 library/errorHandling.c mode change 100644 => 100755 library/errorHandling.h mode change 100644 => 100755 library/fileManagement.c mode change 100644 => 100755 library/fileManagement.h mode change 100644 => 100755 library/logFunctions.c mode change 100644 => 100755 library/logFunctions.h mode change 100644 => 100755 library/openSsl.c mode change 100644 => 100755 library/openSsl.h mode change 100644 => 100755 library/signals.c mode change 100644 => 100755 library/signals.h mode change 100644 => 100755 testNotes.txt mode change 100644 => 100755 todo.txt mode change 100644 => 100755 uFTP.c mode change 100644 => 100755 uftpd.cfg diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/MakefileNetBeans b/MakefileNetBeans old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/build/modules/auth.o b/build/modules/auth.o deleted file mode 100644 index 5bcf467656c4d2910bf5436b3fbe6303b7790ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1072 zcmb7?%}T>S6opTc`cqfB6Wqj=3igsnUFbpzrDh|=O`zK(1`C=Wk_p(2zJia^N9Zg0 z1jGa;d^usD;m3>EJ zaz<_?X71;WL(Z7ot6CSX0f1uwdjPz-4-?pM&1zC<;pqqX`PD62+KTy}rY;=TmTZ=& zs*i>Jz9{zRm3Ig#wxkH4a+RG!VwYni`(O%2M= z*W0N2)p#rYUEaHbMEMjm00%(tW#ux!R)G?J);4@U-K+eTK^r-8pZYkbQXgvWj`J)F S)#Yn*vcknqyx$#{KXIIPtm$}A( z%iet7z9&7c_vMn3-aq#ySi7J1dEcM!z5TwGctGv#uJL$)HxKNF%3Y18`K z!CE-ibnUxgl7Ee4-%v>Y{)M8tjJ=B!06@&}0x{JEVz$?reaj^FGI{Rbyu|YoF#$1> z|0T&67m$BpDqJkHA~35idr-I8-rS}xH$60FS=RLQ%V(VSl6+>qs4iQUWfj#WG=+VX z{*svLJT*PML}EW9&;7fXc+OJOo2ge7Wx2V`DpOr5U71yvQ0qL^x^#HfRF_4SFHDg9 z{YObYGciQW+LoKp@w~d!I#*O5rco%UC(02i+=&p4PIk$Y*+B|41q?q`?j&Y-!XEe{ zA2V44kXIirb#eg7C}jI32-#%|$=?64Cv!U~gijDtJ<6PZyB>h*WHzxZP7_mI8X~vZ zt{K}(TS(z5+c9_BpT((0t)qX$SlQFbPT>Z$y-{?=#y26pg$~WD%h~&vJ(-Ow;`3}d zQZDJQbe1QgxdVh2?|v1>H|IZonpO9L1T+t2(z^H|Usoqw9!+)OG$x>8v^z@eFsIQKQ(dn3?0Mc) zm-Bnt%WI9sq)lBu{HPe}$v3`GhZBAF)OpJy`6o}(kD15MTb6Sf?I(r8 ztH?HU_SkZC^OQ*nxwp<+mP>pJxwqbP>nP@4Vj7CMSISp&<*OIUS7+JP^kV%gfb1;x z)HZ!(xfZ~rG*Vcfqox*Ukj>f}a-2^C&)MD9JTYg`c$11J$BE}`(+^;mVtm@YV~w%h zy`#an+P$MbQ=g^6J*75x#`T$x6sfVbxB=MQ#kN`i8^z==-du|l#obhiMQh|1HF7Qg zL8rQ#*oI6SBUQ2?&7^H8#(8nlD>L-Y%pFW(c9!P%NRvIT2FLlmm_Ld)<#u_w^B9uF ztzLjh+GlwI9`HE>QE03&>69r1J^2}w(e#6LrA?$vJ0LzI!!Y7W@qUFInro{(hC5k zeGJS5r3t&lrN^Pu6HngFlwQDH$xd~4 z&Qn>*l`V(lbMtgBVpLQwr!Lsr79CNT!O0@j3&gbh3o~eURmTjDu;W0FRdkJ4zG*t>l)}ih3?B@?n9!vcvDv3 zYA!N@X9N!=LyEbH5<7hsa`Pp(<0E#wDeE{V>yRB$=UtDeJpI`@g(u3KLCcs``Jb{= z<}>(OfaHZmmCqe5SyqMprgbUobC<-%ZR6rCIe!uCERDa1m@{;e+c{v>&>9qwdkCXY z>3*|ZJOAe&uzR|?`&_yEC$#%mb$6vCKS{ffS9ezm^RLqGhiS2b7FbPF#ab+NQJ>W` zh0nL_EK0YUroMwYDdt|{GpU%H%EBT^g61ew_GKsdO=nriH2&(;@`cMKv8mg^ObzVGdMs;-bzOTw*@5!b%s7 zD~BvhYO0wR-fB$JUQX$_LJD-Doxa^Jc&wi;e)Ap6;%CeS=NXeszHoFsz-K>q237iQ z%?ul3L%!JX2;M@&fEFE!Cr6Z6Dmfe<$>>odo=PgidTLZ@P`2(?TGC1b+^QL|>VX$A z4o`B>pz3-`->Jk>nZ%HiOc{!o=GO-$q}CqIumg%X>>)6C}3A7^^f}O*7`a=Fe)O!O$}r4Eh5-y=ufC7z}j;I#o~u9eaA!NU)}2sz*mPL(^#eN7&ZH3bgHPCfAtq2dQ1Cf>?2zCq(?(HAw!fVpsr{ZVNKz}$G33T+Sk^a2_n@9Q8 zP$sSEbdKRg|Gh~~PalYnQ3QHAJ9jEKh4*KYMn-A#?eJ~e+M1zvtw*+R^KIMVYu#ew zfF&Tlivj!&q9+iB8h|;(@U;Q9_3YDg-vD^Vn>`yFSJzE@0Pv7a58425691@co4;Js zx#o(R#~N4H*?qg%*mPC@J>~wpSwFt`E06bH??D2}KFs>RP&IyUc|85j695iYjo)7$ z|1=x_dHi;a+vg3h=JJ2T`rYi?3;^_-XaIO;jW9lx^?HA^hT3qUh9=d*+jP5iHm~b9 z3$T9PD}s zt0P}bC?HsY)E!S~Fc#I*nq60ja9WG%u>(Q=u!JEkZRn{(Rm8irn32-egf^-r4T$vg z_V4NFjr4bS52~R^h?WA-wJ*@8_CsJ8Y0Y4s`IEh=k$AE@ z8c(Ec7u-xmclO4O1A{ce-I-(zi&fCIv}Wv0=?B@PnBEKJ9}Pf{W(*p7JUP;>r$%Wk zFpy)1AZn!I5KE1YMRm<)bVk#fKbh8&>9`U9k_M4TJe`WQwMEkDSTs2d>ExImPa4B0 zA)zI0`6HUq~1e;UuqYivKlk+V>j%d$6 zNcc}Va68HXX9PK-J-=}9xn2+3hw%f;3T}Tr!!e#85%B8-z8KFf4xG#1=D-uo-<^Vd z(atUb|EQqXFW~rP4!1Mukk4zZw7|bc;7)|G2={1suQI;c+;@@S6ePF9iJC0{=Pz|FM8yFW~b6 zPHRrKPSa=zTc<4o|7!v++VgD*z6zZb*M)rx>m>NySJ(s;C(2*LN8DGyW&=pd{#hfZ?|>9QERFIQe?i9Q-N9 zf6Re%Ip3AY`JID*jLEqHljLHLkKs;xVh;W{nVd%jzL=M%9sDO5|3*Cg3wrtUYzM

bD&#vc**qCJ1@;D4R*j|qHH{;Y%l1mhPa{ND?>xDR-- z2xIXS@l6u^lM*~2!J`6>mwa8^%WyOsA1U?hd6pOW_>AQIzjyH0G5!xF{C{!qKgRg4 zN%$W2!iw9|!uVG*9P=yMbE|{j#`ql){%0|HEY6=0{2FFB*W1hFd{N+w&#&(YxG3k8 zM9vw3FUqk5T$Iy*MWnEUkW&i3NXk1-tg z9FfnP{r~z@vijSFP$>v$-|_sr~`H|{_G>|x`b?O8V7+4wl#_5#qi z>`wpZ*m%A^dE@r;mXgG8o{x7ZbdJAA62H0~wg$dVF@AVt;p2JyP`uN2+Hf-mfFMpz q_Ra*SqH{bR;~XibEr^G00O0RAcyqWz&pdA9Ut;zj;saT8j{hG}ZbR|_ diff --git a/build/modules/connection.o b/build/modules/connection.o deleted file mode 100644 index b3904dc913f25a20f2097db9bebf04c5e2359a91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20776 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 diff --git a/build/modules/connection.o.orig b/build/modules/connection.o.orig old mode 100644 new mode 100755 diff --git a/build/modules/daemon.o b/build/modules/daemon.o deleted file mode 100644 index b145dfdeab5587ead16fce6d26bf6c555b55f3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6376 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 N=mIa5S_k&{ZvlyYW(@!U diff --git a/build/modules/dynamicVectors.o b/build/modules/dynamicVectors.o deleted file mode 100644 index 96f8fcedf204f0c6ed261ef27b60629022b92559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7728 zcmd^EZ){sv6+h4JS_5utI_NSsp&&LE26Yo!q@;AnP5Y8NDe0_c-UJ01*KwNA#EzV2 zsX<8xayIgG3Cf3#MIs+2F{Dn)ho}=!km%B~H7!&SRbq;uAIdbCr36&|e27q_pmXoJ z&&SVx)1Z9Yk=pm}@1B46o^#K+&w0-7=?YmE7_#8YP#sli@e|eegnCWDF4zhG-2KUa zr-b`w;ZAM{X>TkiVmOPhVmT3E?@iTrC9ha!KCVzVDQbu9wZoR$VRP*;Q9Ep%{rayw zx611=<(gZ%tGL|disy$+-4$*!IeWun?-S+q7U51-gj>4frfv&qSAC#N@Z>#E472$S9)(&V5sfs)iD_^xl_Li85{$5F$rC$^7@5m=D zL`Iu}j6TndHq{$#TEp$BRQ12U4FI@>CLwz((!MR`^pc7Ze999sbnnXBVKMXYUQfKb zCO3>S*%j@dP=3lpOw5TZcf!KDE+h!qd#A=D+?iw(N*KVX(S55LCdEVv%(=KR+uN+MFT-~V+OsN&TIpc#wEvb~8%b?tMea$wA5@21G!5Lf;AOrt+%#6DGnifSEYSZ zcUg2*w2uEb^ zg1@>hvV&c=7qGg{sp`5gaZy#yIb+6~Iggcd!K<9tWu380b%rGBVP$;5lJ-)Ey`Ua_%`K@@rMy#W?uZ|Zx9)2zsZraxFSN#6560U* zt8w%b@38n~aUTG5A5TFDUP6EKk=xKfH1XyQd)i#ehD%O!Lv2 z`LH*?MDrzl8XKWuPyZd7f2C&rhu*yTXnUeY|3OcGGvWX+UL!xM^O0FWoV=_A@xm3si-68_Z>Yh2|l0Q`vX;}lA>55FXQfKo!8 z6Qus}d}d@Q`%EtD6pCZN;oO5zV0_Mh?Vqv_I zSh6sxN@xR1UU_XW*H;*DjsG#l#Yj}3Z8SKktirK-gQaGab_I(zIiTJN=c)5Tn7c(|ap1cxJfG?E+1j;e(rI8e;xAe|m_GTAff?BJR7 zKxSx|yWi&&hw`WE_K@I4Tj)*I?I6uGSf-gV?dgb43+yw1sk6DIDar6C!_y4k$?!bG zcQJgD;kz0BJ%(eyGj?Ai9FISytiktCO-1~Eh94#z{l}wj_`4ZD_Dq9+m*HH`yiX66 z4S1FDb3K3b@f-br3E+Q_>K6KszXclppEGYr@8(@0RBP%{tm-=UhShgiu!rp78uU+^A`-~ z{I?j+^ZZ?gKfvM}r}~Ovevsi$FdTo1HhI#+@P`)9uL5O5P<(W z0RLM6-bsBJ?c&c#`MP258_=pcT_n%`v+}v9R zeYm;jO#5(iFS_8v%{>a@W8))E<`l%ooT7dXnzv$ZI1_hrXB~+5XPgYgPmPU1yjakK zY++<1mvkN$Bo^5)q|@_zd9`&|DC0QFVo_x}RPoAYeQ?7yLJ z2CV-&$uAj4iTv`Ig^l8`niYWe{e|(z(re_^Pw@e^k*2X}0>C9&7`lTc)Gv=Z{jo<% bd{jMP)#tx&2*}n*zMcNQ>u5C|`Q`ru?tdD9 diff --git a/build/modules/errorHandling.o b/build/modules/errorHandling.o deleted file mode 100644 index a53a37eaf0d61a2de1071a8626dcda0ced83891d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2200 zcmbtUT}xC!7=Cuw(o8ptE(FW=X2U2CZWyRVsLQ&CSQXR*M%1#pN8NNknllR;SQkRD z90D)B3NO3p2Xt4^h4c^l1HnRjVRT~=81FeVI?e96sRz!PnP=vCKjxj8m#NHDI23|J z2={S1Iz{i9)Bd>E9Y+-1_;I2Cmu1$znmdh{S=&A`Yt_S=)u>I^P1lpS(+$(L4$aqh zNM+Uz-cwtr-_CX&JZieBBeQnkG2gBUmFZeXtt7jjKLvYqr|YiOFx~2*YV!l7<5_QJ7rD};+W245fF*KN{dZWaP+e60Cu#vdo^Au|vfF1ypQ+mci z82CtBgeC!87H#PH973Btp}wy6j@=M&1^!21^h-s1UWJq0XTycA_6~pUp3sh|^MVTk zCDn%S$F1fgEh|W|%4q*a#LKQ35ii?jM9|($diFa4_;Ue#bCwqYTvFoq_6$J3*nb`I z0RCCEipL?$~s zH8r1F$SzDwW>Q(KR9K19u*qa3o;HpS84B$L~-^V^~DmWRKY!IfL7q97aCJb1;@12L>zqgXMCuXqPyQQkmOEdd3=bcy4)Jj8{ul zqr%D+oAE99mh83c3d^bVgO^{zrx0dwdoA6n%l zJqLKNoF4yxSSZi2gxr6Lrvdq!Lcb^%3g~(|g>={S`d5eqPWFZBPp_-g%leZWJ$Ayr o@V_V8F2K9Dx}I$6wI_@SQoa)s!rTey9dD)I7xB{@r$X2N0ifOc^#A|> diff --git a/build/modules/fileManagement.o b/build/modules/fileManagement.o deleted file mode 100644 index e2375fb6b4e054f5feefe934fe3c89f7549b31ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15264 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 diff --git a/build/modules/fileManagement.o.orig b/build/modules/fileManagement.o.orig old mode 100644 new mode 100755 diff --git a/build/modules/ftpCommandElaborate.o b/build/modules/ftpCommandElaborate.o deleted file mode 100644 index 4d32a5d41dba17613b58b6decbe1cb676263302b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41896 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 diff --git a/build/modules/ftpData.o.orig b/build/modules/ftpData.o.orig old mode 100644 new mode 100755 diff --git a/build/modules/ftpServer.o b/build/modules/ftpServer.o deleted file mode 100644 index c660dc24e4e5a758232f11f0218742961ec04390..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32968 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 diff --git a/build/modules/ftpServer.o.orig b/build/modules/ftpServer.o.orig old mode 100644 new mode 100755 diff --git a/build/modules/logFunctions.o b/build/modules/logFunctions.o deleted file mode 100644 index e0169811d0601723bb2476d9f459552eab196604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1840 zcmbu9&ubGw6vw}t^p~1y6c2@p=Au-zOQOA4Mf!tH1_^Dk4R|TbCfT;3*-c1hp%tt` zL0E#&zetKbNN+v%*o)AE2StP;LS<&>HR&|D)DLWC<~#G=n|bpl@2z|`W*8t0yhMA{ z=108UpOW1v3?qSGH}3u^u<+Z?@*Z{B_V+Xk-yO0rI4HAL-~BNFEVNECyX=#7^jTQ5 z@awT`TZJRmvJP38WG(BMRSu5hK%^`T$+jhC4w&&pt=nNO>!i${Mt*s}^s~Q*-0bXR zYOGKUd>*8pnGax-oA#h zku*jVgF`z8a0k&RxF&wA>&cI?+2Mhi#Nd#cd!cN%I_G0Sw4etf=Y9Bj+HE@C^+v>A zX}9Nz%hO#Xj)9A!^fTB)7bm(%TxRV&BA2&1_9=4%;GWWHEOP?jk;=c$bPs*5hmLA( zH5>RPUa9#_vxIu1;`617=Pq)`tHX2FT`{T!9Cj{0KQo=T=d;;GYsp@kp2=G_R$b1; zf|atf3EOURr?hUD*4FJ6r&0x;s|||UNC5bI8nNA>4|nJ(rN;pI5z(88G%-i{fZ5#i zxKo7Ll`Rd0{h6Dd{7@^J#Vs^U-uj;MtXl&)9) zJ~`6R<39$Z&&%3pRD9YeLGgwEPAERLlgeJ_w=O8ij(7#g*D7kLlM^+d`XeZRL{Y`p z?MGCgH?&Zp+b{RHzlARMCv3@{?oWi#V+-mk{(@@7`?%7@UTFH=33ioJTaMZ&cW2z} PVgErnt)8un(Cz;LZ%(xt diff --git a/build/modules/openSsl.o b/build/modules/openSsl.o deleted file mode 100644 index cf0ee712819ea3ba551b1486f3e2c5b2482369dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmbV~&q~8U5XQeY^-uMpH^EChsbGgz>Ol`uC^Z);f&>IlX$=atNk}$eFZC6C9FKh^ zpFr8oED4(}6n_vl`|W%?vpf4ay1#2S8qhRwi*i=-T@eRL9$*h`z#9&4+%tcYMYJXX|L7arqV>Y8HK-pq0f(a-SX)(U(KM{Ti&`Tf!&?L)1(|A4)BLRwH z5t29dJDCWk?>v8va!S%T2~)8!^8J%zK;4>ovZA+jD(zRCu;1+4rv6g^yOzFh>c8Op z#j7gOez{&n*RRJb_M6O1fzdwA2*3_ddtnI&xH^!LXRRXlv%StQ4qEXjefpCevEH`a Zo#cTF-RC%sS^wc0|1$?ZX(MC${{Z0FIc@*| diff --git a/build/modules/signals.o b/build/modules/signals.o deleted file mode 100644 index c53769fc631d6aefb34ad1821304b474f54d6fdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3432 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 lH1E!E&DUf}AJrEPRnX<@K<8=m<$pclients[socketId].login.absolutePath.text, data->clients[socketId].login.absolutePath.textLen, &data->clients[socketId].memoryTable); @@ -1436,7 +1434,7 @@ long long int writeRetrFile(ftpDataType * data, int theSocketId, long long int s if (writtenSize <= 0) { - printf("\nError %d while writing retr file.", writtenSize); + printf("\nError %lld while writing retr file.", writtenSize); fclose(retrFP); retrFP = NULL; return -1; @@ -1547,14 +1545,17 @@ int getFtpCommandArgWithOptions(char * theCommand, char *theCommandString, ftpCo } } break; + + default: + break; } } if (argMainIndex > 0) - setDynamicStringDataType(&ftpCommand->commandArgs, argMain, argMainIndex, &*memoryTable); + setDynamicStringDataType(&ftpCommand->commandArgs, argMain, argMainIndex, memoryTable); if (argSecondaryIndex > 0) - setDynamicStringDataType(&ftpCommand->commandOps, argSecondary, argSecondaryIndex, &*memoryTable); + setDynamicStringDataType(&ftpCommand->commandOps, argSecondary, argSecondaryIndex, memoryTable); return 1; } @@ -1573,7 +1574,7 @@ int setPermissions(char * permissionsCommand, char * basePath, ownerShip_DataTyp char thePermissionString[MAXIMUM_FILENAME_LEN]; char theLocalPath[MAXIMUM_FILENAME_LEN]; char theFinalFilename[MAXIMUM_FILENAME_LEN]; - int returnCodeSetPermissions, returnCodeSetOwnership; + int returnCodeSetPermissions, returnCodeSetOwnership = 0; memset(theLocalPath, 0, MAXIMUM_FILENAME_LEN); memset(thePermissionString, 0, MAXIMUM_FILENAME_LEN); @@ -1611,6 +1612,9 @@ int setPermissions(char * permissionsCommand, char * basePath, ownerShip_DataTyp else return FTP_CHMODE_COMMAND_RETURN_NAME_TOO_LONG; break; + + default: + break; } permissionsCommandCursor++; diff --git a/ftpCommandsElaborate.h b/ftpCommandsElaborate.h old mode 100644 new mode 100755 diff --git a/ftpData.c b/ftpData.c old mode 100644 new mode 100755 index eaa63a0..9306094 --- a/ftpData.c +++ b/ftpData.c @@ -48,11 +48,9 @@ void cleanDynamicStringDataType(dynamicStringDataType *dynamicString, int init, } else { - if (dynamicString->textLen != 0) + if (dynamicString->textLen != 0 && dynamicString->text != 0) { - if (dynamicString->text != 0) { - DYNMEM_free(dynamicString->text, &*memoryTable); - } + DYNMEM_free(dynamicString->text, memoryTable); } dynamicString->textLen = 0; @@ -62,11 +60,11 @@ void cleanDynamicStringDataType(dynamicStringDataType *dynamicString, int init, void cleanLoginData(loginDataType *loginData, int init, DYNMEM_MemoryTable_DataType **memoryTable) { loginData->userLoggedIn = 0; - cleanDynamicStringDataType(&loginData->homePath, init, &*memoryTable); - cleanDynamicStringDataType(&loginData->ftpPath, init, &*memoryTable); - cleanDynamicStringDataType(&loginData->name, init, &*memoryTable); - cleanDynamicStringDataType(&loginData->password, init, &*memoryTable); - cleanDynamicStringDataType(&loginData->absolutePath, init, &*memoryTable); + cleanDynamicStringDataType(&loginData->homePath, init, memoryTable); + cleanDynamicStringDataType(&loginData->ftpPath, init, memoryTable); + cleanDynamicStringDataType(&loginData->name, init, memoryTable); + cleanDynamicStringDataType(&loginData->password, init, memoryTable); + cleanDynamicStringDataType(&loginData->absolutePath, init, memoryTable); } void setDynamicStringDataType(dynamicStringDataType *dynamicString, char *theString, int stringLen, DYNMEM_MemoryTable_DataType **memoryTable) @@ -74,7 +72,7 @@ void setDynamicStringDataType(dynamicStringDataType *dynamicString, char *theStr if (dynamicString->textLen == 0) { //printf("\nMemory data address before memset call : %lld", memoryTable); - dynamicString->text = (char *) DYNMEM_malloc (((sizeof(char) * stringLen) + 1), &*memoryTable, "setDynamicString"); + dynamicString->text = (char *) DYNMEM_malloc (((sizeof(char) * stringLen) + 1), memoryTable, "setDynamicString"); //printf("\nMemory data address after memset call : %lld", memoryTable); memset(dynamicString->text, 0, stringLen + 1); memcpy(dynamicString->text, theString, stringLen); @@ -84,7 +82,7 @@ void setDynamicStringDataType(dynamicStringDataType *dynamicString, char *theStr { if(stringLen != dynamicString->textLen) { - dynamicString->text = (char *) DYNMEM_realloc (dynamicString->text, ((sizeof(char) * stringLen) + 1), &*memoryTable); + dynamicString->text = (char *) DYNMEM_realloc (dynamicString->text, ((sizeof(char) * stringLen) + 1), memoryTable); } memset(dynamicString->text, 0, stringLen + 1); @@ -96,7 +94,7 @@ void setDynamicStringDataType(dynamicStringDataType *dynamicString, char *theStr int getSafePath(dynamicStringDataType *safePath, char *theDirectoryName, loginDataType *loginData, DYNMEM_MemoryTable_DataType **memoryTable) { #define STRING_SIZE 4096 - int theLen, i; + size_t theLen, i; char * theDirectoryNamePointer; theDirectoryNamePointer = theDirectoryName; @@ -163,20 +161,20 @@ int getSafePath(dynamicStringDataType *safePath, char *theDirectoryName, loginDa theDirectoryNamePointer++; //printf("\nMemory data address 2nd call : %lld", memoryTable); - setDynamicStringDataType(safePath, loginData->homePath.text, loginData->homePath.textLen, &*memoryTable); + setDynamicStringDataType(safePath, loginData->homePath.text, loginData->homePath.textLen, memoryTable); //printf("\nMemory data address 3rd call : %lld", memoryTable); - appendToDynamicStringDataType(safePath, theDirectoryNamePointer, strlen(theDirectoryNamePointer), &*memoryTable); + appendToDynamicStringDataType(safePath, theDirectoryNamePointer, strlen(theDirectoryNamePointer), memoryTable); } else { - setDynamicStringDataType(safePath, loginData->absolutePath.text, loginData->absolutePath.textLen, &*memoryTable); + setDynamicStringDataType(safePath, loginData->absolutePath.text, loginData->absolutePath.textLen, memoryTable); if (loginData->absolutePath.text[loginData->absolutePath.textLen-1] != '/') { - appendToDynamicStringDataType(safePath, "/", 1, &*memoryTable); + appendToDynamicStringDataType(safePath, "/", 1, memoryTable); } - appendToDynamicStringDataType(safePath, theDirectoryName, strlen(theDirectoryName), &*memoryTable); + appendToDynamicStringDataType(safePath, theDirectoryName, strlen(theDirectoryName), memoryTable); } return 1; @@ -187,7 +185,7 @@ void appendToDynamicStringDataType(dynamicStringDataType *dynamicString, char *t //printf("\nRealloc dynamicString->text = %lld", dynamicString->text); int theNewSize = dynamicString->textLen + stringLen; - dynamicString->text = DYNMEM_realloc(dynamicString->text, theNewSize + 1, &*memoryTable); + dynamicString->text = DYNMEM_realloc(dynamicString->text, theNewSize + 1, memoryTable); memset(dynamicString->text+dynamicString->textLen, 0, stringLen+1); memcpy(dynamicString->text+dynamicString->textLen, theString, stringLen); @@ -227,7 +225,7 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb int i, x, returnCode; int fileAndFoldersCount = 0; char **fileList = NULL; - FILE_GetDirectoryInodeList(ftpData->clients[clientId].listPath.text, &fileList, &fileAndFoldersCount, 0, &*memoryTable); + FILE_GetDirectoryInodeList(ftpData->clients[clientId].listPath.text, &fileList, &fileAndFoldersCount, 0, memoryTable); *filesNumber = fileAndFoldersCount; returnCode = socketWorkerPrintf(ftpData, clientId, "sds", "total ", fileAndFoldersCount ,"\r\n"); @@ -279,16 +277,16 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb //printf("\nFILE SIZE : %lld", data.fileSize); - data.owner = FILE_GetOwner(fileList[i], &*memoryTable); - data.groupOwner = FILE_GetGroupOwner(fileList[i], &*memoryTable); + data.owner = FILE_GetOwner(fileList[i], memoryTable); + data.groupOwner = FILE_GetGroupOwner(fileList[i], memoryTable); data.fileNameWithPath = fileList[i]; data.fileNameNoPath = FILE_GetFilenameFromPath(fileList[i]); - data.inodePermissionString = FILE_GetListPermissionsString(fileList[i], &*memoryTable); + data.inodePermissionString = FILE_GetListPermissionsString(fileList[i], memoryTable); data.lastModifiedData = FILE_GetLastModifiedData(fileList[i]); if (strlen(data.fileNameNoPath) > 0) { - data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable, "dataFinalPath"); + data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, memoryTable, "dataFinalPath"); strcpy(data.finalStringPath, data.fileNameNoPath); } @@ -298,12 +296,12 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb { int len = 0; data.isLink = 1; - data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable, "dataLinkPath"); + data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), memoryTable, "dataLinkPath"); if ((len = readlink (fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0) { data.linkPath[len] = 0; - FILE_AppendToString(&data.finalStringPath, " -> ", &*memoryTable); - FILE_AppendToString(&data.finalStringPath, data.linkPath, &*memoryTable); + FILE_AppendToString(&data.finalStringPath, " -> ", memoryTable); + FILE_AppendToString(&data.finalStringPath, data.linkPath, memoryTable); } } @@ -359,28 +357,28 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb if (data.fileNameWithPath != NULL) - DYNMEM_free(data.fileNameWithPath, &*memoryTable); + DYNMEM_free(data.fileNameWithPath, memoryTable); if (data.linkPath != NULL) - DYNMEM_free(data.linkPath, &*memoryTable); + DYNMEM_free(data.linkPath, memoryTable); if (data.finalStringPath != NULL) - DYNMEM_free(data.finalStringPath, &*memoryTable); + DYNMEM_free(data.finalStringPath, memoryTable); if (data.owner != NULL) - DYNMEM_free(data.owner, &*memoryTable); + DYNMEM_free(data.owner, memoryTable); if (data.groupOwner != NULL) - DYNMEM_free(data.groupOwner, &*memoryTable); + DYNMEM_free(data.groupOwner, memoryTable); if (data.inodePermissionString != NULL) - DYNMEM_free(data.inodePermissionString, &*memoryTable); + DYNMEM_free(data.inodePermissionString, memoryTable); if (returnCode <= 0) { for (x = i+1; x < fileAndFoldersCount; x++) - DYNMEM_free (fileList[x], &*memoryTable); - DYNMEM_free (fileList, &*memoryTable); + DYNMEM_free (fileList[x], memoryTable); + DYNMEM_free (fileList, memoryTable); return -1; } @@ -388,7 +386,7 @@ int writeListDataInfoToSocket(ftpDataType *ftpData, int clientId, int *filesNumb if (fileList != NULL) { - DYNMEM_free (fileList, &*memoryTable); + DYNMEM_free (fileList, memoryTable); } return 1; @@ -421,7 +419,7 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo, int i; int fileAndFoldersCount = 0; ftpListDataType data; - FILE_GetDirectoryInodeList(thePath, &data.fileList, &fileAndFoldersCount, 0, &*memoryTable); + FILE_GetDirectoryInodeList(thePath, &data.fileList, &fileAndFoldersCount, 0, memoryTable); //printf("\nNUMBER OF FILES: %d", fileAndFoldersCount); //fflush(0); @@ -469,16 +467,16 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo, // printf("\nFILE SIZE : %lld", data.fileSize); - data.owner = FILE_GetOwner(data.fileList[i], &*memoryTable); - data.groupOwner = FILE_GetGroupOwner(data.fileList[i], &*memoryTable); + data.owner = FILE_GetOwner(data.fileList[i], memoryTable); + data.groupOwner = FILE_GetGroupOwner(data.fileList[i], memoryTable); data.fileNameWithPath = data.fileList[i]; data.fileNameNoPath = FILE_GetFilenameFromPath(data.fileList[i]); - data.inodePermissionString = FILE_GetListPermissionsString(data.fileList[i], &*memoryTable); + data.inodePermissionString = FILE_GetListPermissionsString(data.fileList[i], memoryTable); data.lastModifiedData = FILE_GetLastModifiedData(data.fileList[i]); if (strlen(data.fileNameNoPath) > 0) { - data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, &*memoryTable, "FinalStringPath"); + data.finalStringPath = (char *) DYNMEM_malloc (strlen(data.fileNameNoPath)+1, memoryTable, "FinalStringPath"); strcpy(data.finalStringPath, data.fileNameNoPath); } @@ -488,12 +486,12 @@ void getListDataInfo(char * thePath, DYNV_VectorGenericDataType *directoryInfo, { int len = 0; data.isLink = 1; - data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), &*memoryTable, "data.linkPath"); + data.linkPath = (char *) DYNMEM_malloc (CLIENT_COMMAND_STRING_SIZE*sizeof(char), memoryTable, "data.linkPath"); if ((len = readlink (data.fileList[i], data.linkPath, CLIENT_COMMAND_STRING_SIZE)) > 0) { data.linkPath[len] = 0; - FILE_AppendToString(&data.finalStringPath, " -> ", &*memoryTable); - FILE_AppendToString(&data.finalStringPath, data.linkPath, &*memoryTable); + FILE_AppendToString(&data.finalStringPath, " -> ", memoryTable); + FILE_AppendToString(&data.finalStringPath, data.linkPath, memoryTable); } } @@ -663,10 +661,7 @@ void resetClientData(ftpDataType *data, int clientId, int isInitialization) } #endif } - else - { - } if (pthread_mutex_init(&data->clients[clientId].writeMutex, NULL) != 0) { diff --git a/ftpData.h b/ftpData.h old mode 100644 new mode 100755 diff --git a/ftpServer.c b/ftpServer.c old mode 100644 new mode 100755 index 418cc80..45409f7 --- a/ftpServer.c +++ b/ftpServer.c @@ -404,7 +404,7 @@ void *connectionWorkerHandle(void * socketId) || (compareStringCaseInsensitive(ftpData.clients[theSocketId].workerData.theCommandReceived, "NLST", strlen("NLST")) == 1)) ) { - int theFiles = 0, theCommandType; + int theFiles = 0, theCommandType = 0; if (compareStringCaseInsensitive(ftpData.clients[theSocketId].workerData.theCommandReceived, "LIST", strlen("LIST")) == 1) theCommandType = COMMAND_TYPE_LIST; diff --git a/ftpServer.h b/ftpServer.h old mode 100644 new mode 100755 diff --git a/ftpSpecs.h b/ftpSpecs.h old mode 100644 new mode 100755 diff --git a/library/auth.c b/library/auth.c old mode 100644 new mode 100755 diff --git a/library/auth.h b/library/auth.h old mode 100644 new mode 100755 diff --git a/library/configRead.c b/library/configRead.c old mode 100644 new mode 100755 index 851c0c3..62ad370 --- a/library/configRead.c +++ b/library/configRead.c @@ -85,12 +85,12 @@ void configurationRead(ftpParameters_DataType *ftpParameters, DYNMEM_MemoryTable if (FILE_IsFile(LOCAL_CONFIGURATION_FILENAME) == 1) { printf("\nReading configuration from \n -> %s \n", LOCAL_CONFIGURATION_FILENAME); - returnCode = readConfigurationFile(LOCAL_CONFIGURATION_FILENAME, &configParameters, &*memoryTable); + returnCode = readConfigurationFile(LOCAL_CONFIGURATION_FILENAME, &configParameters, memoryTable); } else if (FILE_IsFile(DEFAULT_CONFIGURATION_FILENAME) == 1) { printf("\nReading configuration from \n -> %s\n", DEFAULT_CONFIGURATION_FILENAME); - returnCode = readConfigurationFile(DEFAULT_CONFIGURATION_FILENAME, &configParameters, &*memoryTable); + returnCode = readConfigurationFile(DEFAULT_CONFIGURATION_FILENAME, &configParameters, memoryTable); } if (returnCode == 1) @@ -190,7 +190,7 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet int i, state, nameIndex, valueIndex, allowSpacesInValue; char * theFileContent; - theFileSize = FILE_GetStringFromFile(path, &theFileContent, &*memoryTable); + theFileSize = FILE_GetStringFromFile(path, &theFileContent, memoryTable); char name[PARAMETER_SIZE_LIMIT]; char value[PARAMETER_SIZE_LIMIT]; @@ -343,6 +343,9 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet parametersVector->PushBack(parametersVector, ¶meter, sizeof(parameter_DataType)); } break; + + default: + break; } } @@ -367,7 +370,7 @@ static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *paramet if (theFileSize > 0) { - DYNMEM_free(theFileContent, &*memoryTable); + DYNMEM_free(theFileContent, memoryTable); } return 1; diff --git a/library/configRead.h b/library/configRead.h old mode 100644 new mode 100755 diff --git a/library/connection.c b/library/connection.c old mode 100644 new mode 100755 index a299f0e..2aba7f0 --- a/library/connection.c +++ b/library/connection.c @@ -44,7 +44,7 @@ int socketPrintf(ftpDataType * ftpData, int clientId, const char *__restrict __f { #define COMMAND_BUFFER 9600 #define SOCKET_PRINTF_BUFFER 2048 - int bytesWritten = 0; + ssize_t bytesWritten = 0; char theBuffer[SOCKET_PRINTF_BUFFER]; char commandBuffer[COMMAND_BUFFER]; int theStringSize = 0, theCommandSize = 0; @@ -235,7 +235,7 @@ int socketWorkerPrintf(ftpDataType * ftpData, int clientId, const char *__restri if (theStringToWriteSize >= COMMAND_BUFFER) { - int theReturnCode = 0; + ssize_t theReturnCode = 0; if (ftpData->clients[clientId].dataChannelIsTls != 1) { theReturnCode = write(ftpData->clients[clientId].workerData.socketConnection, writeBuffer, theStringToWriteSize); diff --git a/library/connection.h b/library/connection.h old mode 100644 new mode 100755 diff --git a/library/daemon.c b/library/daemon.c old mode 100644 new mode 100755 index 7b65708..cc9c7e1 --- a/library/daemon.c +++ b/library/daemon.c @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include "fileManagement.h" @@ -46,8 +48,8 @@ int isProcessAlreadyRunning(void) { int fd; int returnCode; - char buf[30]; - memset(buf, 0,30); + char buf[101]; + memset(buf, 0,101); fd = open(LOCKFILE, O_RDWR|O_CREAT, LOCKMODE); if (fd < 0) { @@ -71,7 +73,7 @@ int isProcessAlreadyRunning(void) ftruncate(fd, 0); returnCode = snprintf(buf, 100, "%ld", (long)getpid()); returnCode = write(fd, buf, strlen(buf)+1); - return(0); + return 0; } void daemonize(const char *cmd) diff --git a/library/daemon.h b/library/daemon.h old mode 100644 new mode 100755 diff --git a/library/dynamicMemory.c b/library/dynamicMemory.c old mode 100644 new mode 100755 index 806fb74..00c6275 --- a/library/dynamicMemory.c +++ b/library/dynamicMemory.c @@ -67,6 +67,8 @@ void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead, if(newItem == NULL) { report_error_q("Memory allocation error, no room for memory list item.",__FILE__,__LINE__, 0); + free(memory); + return NULL; } DYNMEM_IncreaseMemoryCounter(bytes + sizeof(DYNMEM_MemoryTable_DataType)); @@ -99,6 +101,8 @@ void *DYNMEM_malloc(size_t bytes, DYNMEM_MemoryTable_DataType **memoryListHead, } else { + if(newItem) + free(newItem); report_error_q("Memory allocation error, out of memory.", __FILE__,__LINE__,0); return NULL; } @@ -134,7 +138,9 @@ void *DYNMEM_realloc(void *theMemoryAddress, size_t bytes, DYNMEM_MemoryTable_Da //strcpy(theData, "NOOOOOOOOOOOOOOOO"); report_error_q("Unable to reallocate memory not previously allocated",__FILE__,__LINE__, 0); + free(newMemory); // Report this as an error + return NULL; } if (found->size > bytes) @@ -187,6 +193,8 @@ void DYNMEM_free(void *f_address, DYNMEM_MemoryTable_DataType ** memoryListHead) //strcpy(theData, "ciaociaociao"); report_error_q("Unable to free memory not previously allocated",__FILE__,__LINE__, 1); // Report this as an error + + return; } DYNMEM_DecreaseMemoryCounter(found->size + sizeof(DYNMEM_MemoryTable_DataType)); diff --git a/library/dynamicMemory.h b/library/dynamicMemory.h old mode 100644 new mode 100755 diff --git a/library/dynamicVectors.c b/library/dynamicVectors.c old mode 100644 new mode 100755 index d54bfa5..0d6a0bb --- a/library/dynamicVectors.c +++ b/library/dynamicVectors.c @@ -38,12 +38,12 @@ void DYNV_VectorGeneric_Init(DYNV_VectorGenericDataType *TheVectorGeneric) TheVectorGeneric->memoryTable = NULL; //Functions Pointers - TheVectorGeneric->DeleteAt = (void *)DYNV_VectorGeneric_DeleteAt; - TheVectorGeneric->Destroy = (void *)DYNV_VectorGeneric_Destroy; - TheVectorGeneric->PopBack = (void *)DYNV_VectorGeneric_PopBack; - TheVectorGeneric->PushBack = (void *)DYNV_VectorGeneric_PushBack; - TheVectorGeneric->SoftDestroy = (void *)DYNV_VectorGeneric_SoftDestroy; - TheVectorGeneric->SoftPopBack = (void *)DYNV_VectorGeneric_SoftPopBack; + TheVectorGeneric->DeleteAt = &DYNV_VectorGeneric_DeleteAt; + TheVectorGeneric->Destroy = &DYNV_VectorGeneric_Destroy; + TheVectorGeneric->PopBack = &DYNV_VectorGeneric_PopBack; + TheVectorGeneric->PushBack = &DYNV_VectorGeneric_PushBack; + TheVectorGeneric->SoftDestroy = &DYNV_VectorGeneric_SoftDestroy; + TheVectorGeneric->SoftPopBack = &DYNV_VectorGeneric_SoftPopBack; } void DYNV_VectorGeneric_InitWithSearchFunction(DYNV_VectorGenericDataType *TheVectorGeneric, int (*SearchFunction)(void *TheVectorGeneric, void * TheElementData)) @@ -72,7 +72,7 @@ void DYNV_VectorGeneric_PushBack(DYNV_VectorGenericDataType *TheVectorGeneric, v TheVectorGeneric->ElementSize = (int *) DYNMEM_malloc (sizeof(int), &TheVectorGeneric->memoryTable, "PushBack"); } - TheVectorGeneric->Data[TheVectorGeneric->Size] = (void *) DYNMEM_malloc(TheElementSize, &TheVectorGeneric->memoryTable, "pushback"); + TheVectorGeneric->Data[TheVectorGeneric->Size] = DYNMEM_malloc(TheElementSize, &TheVectorGeneric->memoryTable, "pushback"); memcpy(TheVectorGeneric->Data[TheVectorGeneric->Size], TheElementData, TheElementSize); TheVectorGeneric->ElementSize[TheVectorGeneric->Size] = TheElementSize; TheVectorGeneric->Size++; @@ -80,7 +80,7 @@ void DYNV_VectorGeneric_PushBack(DYNV_VectorGenericDataType *TheVectorGeneric, v void DYNV_VectorGeneric_PopBack(DYNV_VectorGenericDataType *TheVector, void (*DeleteElementFunction)(void *TheElementToDelete)) { - DeleteElementFunction((void *) TheVector->Data[TheVector->Size-1]); + DeleteElementFunction( TheVector->Data[TheVector->Size-1]); DYNMEM_free(TheVector->Data[TheVector->Size-1], &TheVector->memoryTable); if (TheVector->Size > 1) { @@ -159,7 +159,7 @@ void DYNV_VectorGeneric_DeleteAt(DYNV_VectorGenericDataType *TheVector, int inde } //Permanent delete of the item At on the Heap - DeleteElementFunction((void *) TheVector->Data[index]); + DeleteElementFunction(TheVector->Data[index]); while (TheVector->Size > index) { @@ -182,10 +182,10 @@ void DYNV_VectorString_Init(DYNV_VectorString_DataType *TheVector) TheVector->memoryTable = NULL; //Functions Pointers - TheVector->DeleteAt = (void *)DYNV_VectorString_DeleteAt; - TheVector->Destroy = (void *)DYNV_VectorString_Destroy; - TheVector->PopBack = (void *)DYNV_VectorString_PopBack; - TheVector->PushBack = (void *)DYNV_VectorString_PushBack; + TheVector->DeleteAt = &DYNV_VectorString_DeleteAt; + TheVector->Destroy = &DYNV_VectorString_Destroy; + TheVector->PopBack = &DYNV_VectorString_PopBack; + TheVector->PushBack = &DYNV_VectorString_PushBack; } void DYNV_VectorString_PushBack(DYNV_VectorString_DataType *TheVector, char * TheString, int StringLenght) @@ -264,11 +264,10 @@ void DYNV_VectorString_Destroy(DYNV_VectorString_DataType *TheVector) void DYNV_VectorString_DeleteAt(DYNV_VectorString_DataType *TheVector, int index) { - int i; DYNV_VectorString_DataType TempVector; DYNV_VectorString_Init(&TempVector); - for (i = index + 1; i < TheVector->Size; i++) + for (int i = index + 1; i < TheVector->Size; i++) { DYNV_VectorString_PushBack(&TempVector, TheVector->Data[i], TheVector->ElementSize[i]); } @@ -278,7 +277,7 @@ void DYNV_VectorString_DeleteAt(DYNV_VectorString_DataType *TheVector, int index DYNV_VectorString_PopBack(TheVector); } - for (i = 0; i < TempVector.Size; i++) + for (int i = 0; i < TempVector.Size; i++) { DYNV_VectorString_PushBack(TheVector, TempVector.Data[i], TempVector.ElementSize[i]); } diff --git a/library/dynamicVectors.h b/library/dynamicVectors.h old mode 100644 new mode 100755 diff --git a/library/errorHandling.c b/library/errorHandling.c old mode 100644 new mode 100755 diff --git a/library/errorHandling.h b/library/errorHandling.h old mode 100644 new mode 100755 diff --git a/library/fileManagement.c b/library/fileManagement.c old mode 100644 new mode 100755 index c557d7e..41cac09 --- a/library/fileManagement.c +++ b/library/fileManagement.c @@ -192,7 +192,7 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i //Allocate the array for the 1st time if (*InodeList == NULL) { - (*InodeList) = (char **) DYNMEM_malloc(sizeof(char *) * (1), &*memoryTable, "InodeList"); + (*InodeList) = (char **) DYNMEM_malloc(sizeof(char *), memoryTable, "InodeList"); } @@ -217,10 +217,10 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i //Set the row to needed size int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1; - (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, &*memoryTable); - int nsize = strlen(dir->d_name) * sizeof(char) + strlen(DirectoryInodeName) * sizeof(char) + 2; + (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, memoryTable); + size_t nsize = strlen(dir->d_name) * sizeof(char) + strlen(DirectoryInodeName) * sizeof(char) + 2; //Allocate the path string size - (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize , &*memoryTable, "InodeList"); + (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize , memoryTable, "InodeList"); strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName ); strcat((*InodeList)[FileAndFolderIndex], "/" ); strcat((*InodeList)[FileAndFolderIndex], dir->d_name ); @@ -244,10 +244,10 @@ void FILE_GetDirectoryInodeList(char * DirectoryInodeName, char *** InodeList, i { //printf("\nAdding single file to inode list: %s", DirectoryInodeName); int ReallocSize = sizeof(char *) * (FileAndFolderIndex+1)+1; - (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, &*memoryTable); + (*InodeList) = (char ** ) DYNMEM_realloc((*InodeList), ReallocSize, memoryTable); int nsize = strlen(DirectoryInodeName) * sizeof(char) + 2; - (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize, &*memoryTable, "InodeList"); + (*InodeList)[FileAndFolderIndex] = (char *) DYNMEM_malloc (nsize, memoryTable, "InodeList"); strcpy((*InodeList)[FileAndFolderIndex], DirectoryInodeName ); (*InodeList)[FileAndFolderIndex][strlen(DirectoryInodeName)] = '\0'; (*FilesandFolders)++; @@ -319,7 +319,7 @@ int FILE_GetStringFromFile(char * filename, char **file_content, DYNMEM_MemoryTa file_size = FILE_GetFileSize(file); count = 0; - *file_content = (char *) DYNMEM_malloc((file_size * sizeof(char) + 100), &*memoryTable, "getstringfromfile"); + *file_content = (char *) DYNMEM_malloc((file_size * sizeof(char) + 100), memoryTable, "getstringfromfile"); while ((c = fgetc(file)) != EOF) { @@ -422,12 +422,10 @@ void FILE_ReadStringParameters(char * filename, DYNV_VectorGenericDataType *Para //Get the parameter name if ( FirstChar != '#' && FirstChar != 0 && SeparatorChar == 0 && BufferNameCursor < FILE_MAX_PAR_VAR_SIZE ) - if(BufferNameCursor < FILE_MAX_PAR_VAR_SIZE) TheParameter.Name[BufferNameCursor++] = (char) c; //Get the parameter value if ( FirstChar != '#' && FirstChar != 0 && SeparatorChar != 0 && ParameterChar != 0 && BufferValueCursor < FILE_MAX_PAR_VAR_SIZE ) - if(BufferValueCursor < FILE_MAX_PAR_VAR_SIZE) TheParameter.Value[BufferValueCursor++] = (char) c; } } @@ -455,8 +453,8 @@ void FILE_ReadStringParameters(char * filename, DYNV_VectorGenericDataType *Para int FILE_StringParametersLinearySearch(DYNV_VectorGenericDataType *TheVectorGeneric, void * name) { - int i; - for(i=0; iSize; i++) + + for(int i = 0; i < TheVectorGeneric->Size; i++) { if(strcmp(((FILE_StringParameter_DataType *)TheVectorGeneric->Data[i])->Name, (char *) name) == 0) { @@ -504,21 +502,15 @@ int FILE_StringParametersBinarySearch(DYNV_VectorGenericDataType *TheVectorGener middle = (littler + last)/2; } - if (littler > last) - { - //printf("Not found! %d is not present in the list.\n", Needle); - return -1; - } - return -1; + return -1; } char * FILE_GetFilenameFromPath(char * FileName) { - int i = 0; char * TheStr = FileName; - for (i = 0; i< strlen(FileName); i++) + for (int i = 0; i< strlen(FileName); i++) { if (FileName[i] == '/' || FileName[i] == '\\') { @@ -531,7 +523,7 @@ char * FILE_GetFilenameFromPath(char * FileName) char * FILE_GetListPermissionsString(char *file, DYNMEM_MemoryTable_DataType ** memoryTable) { struct stat st, stl; - char *modeval = DYNMEM_malloc(sizeof(char) * 10 + 1, &*memoryTable, "getperm"); + char *modeval = DYNMEM_malloc(sizeof(char) * 10 + 1, memoryTable, "getperm"); if(stat(file, &st) == 0) { mode_t perm = st.st_mode; @@ -547,9 +539,9 @@ char * FILE_GetListPermissionsString(char *file, DYNMEM_MemoryTable_DataType ** modeval[9] = (perm & S_IXOTH) ? 'x' : '-'; modeval[10] = '\0'; - if(lstat(file, &stl) == 0) + if(lstat(file, &stl) == 0 && + S_ISLNK(stl.st_mode)) { - if (S_ISLNK(stl.st_mode)) modeval[0] = 'l'; // is a link } @@ -566,12 +558,11 @@ int checkParentDirectoryPermissions(char *fileName, int uid, int gid) char theFileName[4096]; memset(theFileName, 0, 4096); - int i; - int theFileNameLen = 0; - int theLen = strlen(fileName); - int theParentLen = 0; + size_t theFileNameLen = 0; + size_t theLen = strlen(fileName); + size_t theParentLen = 0; - for (i = 0; i < theLen; i++) + for (size_t i = 0; i < theLen; i++) { if (fileName[i] == '/') { @@ -579,7 +570,7 @@ int checkParentDirectoryPermissions(char *fileName, int uid, int gid) } } - for (i = 0; i < theParentLen; i++) + for (size_t i = 0; i < theParentLen; i++) { if (i < 4096) theFileName[theFileNameLen++] = fileName[i]; @@ -599,14 +590,6 @@ int checkUserFilePermissions(char *fileName, int uid, int gid) return FILE_PERMISSION_RW; } - static int init = 0; - if (init == 0) - { - - } - - init = 1; - int filePermissions = FILE_PERMISSION_NO_RW; int returnCode = 0; char *toReturn; @@ -626,12 +609,12 @@ int checkUserFilePermissions(char *fileName, int uid, int gid) else { mode_t perm = info.st_mode; - if ((perm & S_IROTH)){ + if (perm & S_IROTH){ //printf("\nfile can be readen"); filePermissions |= FILE_PERMISSION_R; } - if ((perm & S_IWOTH)){ + if (perm & S_IWOTH){ //printf("\nfile can be written"); filePermissions |= FILE_PERMISSION_W; } @@ -653,7 +636,7 @@ char * FILE_GetOwner(char *fileName, DYNMEM_MemoryTable_DataType **memoryTable) if ( (pw = getpwuid(info.st_uid)) == NULL) return NULL; - toReturn = (char *) DYNMEM_malloc (strlen(pw->pw_name) + 1, &*memoryTable, "getowner"); + toReturn = (char *) DYNMEM_malloc (strlen(pw->pw_name) + 1, memoryTable, "getowner"); strcpy(toReturn, pw->pw_name); return toReturn; @@ -670,7 +653,7 @@ char * FILE_GetGroupOwner(char *fileName, DYNMEM_MemoryTable_DataType **memoryTa if ((gr = getgrgid(info.st_gid)) == NULL) return NULL; - toReturn = (char *) DYNMEM_malloc (strlen(gr->gr_name) + 1, &*memoryTable, "getowner"); + toReturn = (char *) DYNMEM_malloc (strlen(gr->gr_name) + 1, memoryTable, "getowner"); strcpy(toReturn, gr->gr_name); return toReturn; @@ -689,8 +672,8 @@ time_t FILE_GetLastModifiedData(char *path) void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTable_DataType ** memoryTable) { - int theNewSize = strlen(*sourceString) + strlen(theString); - *sourceString = DYNMEM_realloc(*sourceString, theNewSize + 10, &*memoryTable); + size_t theNewSize = strlen(*sourceString) + strlen(theString); + *sourceString = DYNMEM_realloc(*sourceString, theNewSize + 10, memoryTable); strcat(*sourceString, theString); (*sourceString)[theNewSize] = '\0'; } @@ -698,12 +681,14 @@ void FILE_AppendToString(char ** sourceString, char *theString, DYNMEM_MemoryTab void FILE_DirectoryToParent(char ** sourceString, DYNMEM_MemoryTable_DataType ** memoryTable) { //printf("\n"); - int i = 0, theLastSlash = -1, strLen = 0; + + size_t theLastSlash = -1; + size_t strLen = 0; strLen = strlen(*sourceString); //printf("\nstrLen = %d", strLen); - for (i = 0; i < strLen; i++) + for (size_t i = 0; i < strLen; i++) { //printf("%c", (*sourceString)[i]); if ( (*sourceString)[i] == '/') @@ -751,8 +736,8 @@ int FILE_doChownFromUidGidString ( const char *file_path, { uid_t uid; gid_t gid; - struct passwd *pwd; - struct group *grp; + const struct passwd *pwd; + const struct group *grp; pwd = getpwnam(user_name); if (pwd == NULL) @@ -772,13 +757,13 @@ int FILE_doChownFromUidGidString ( const char *file_path, { return 0; } - + return 1; } uid_t FILE_getUID(const char *user_name) { - struct passwd *pwd; + const struct passwd *pwd; pwd = getpwnam(user_name); if (pwd == NULL) @@ -804,7 +789,8 @@ gid_t FILE_getGID(const char *group_name) void FILE_checkAllOpenedFD(void) { - int openedFd = 0, i,ret; + int openedFd = 0; + int ret; struct rlimit rl; if (getrlimit(RLIMIT_NOFILE, &rl) < 0) @@ -813,7 +799,7 @@ void FILE_checkAllOpenedFD(void) if (rl.rlim_max == RLIM_INFINITY) rl.rlim_max = 1024; - for (i = 0; i < rl.rlim_max; i++) + for (int i = 0; i < rl.rlim_max; i++) { ret = FILE_fdIsValid(i); //printf("\nret = %d", ret); @@ -830,24 +816,6 @@ void FILE_checkAllOpenedFD(void) //printf("\n fd %d is dir", i); } - /* - else if (S_ISSOCK(statbuf.st_mode)) - { - printf("\n fd %d is socket", fd); - } - else if (S_ISSOCK(statbuf.st_mode)) - { - printf("\n fd %d is socket", fd); - } - else if (S_ISSOCK(statbuf.st_mode)) - { - printf("\n fd %d is socket", fd); - } - else if (S_ISSOCK(statbuf.st_mode)) - { - printf("\n fd %d is socket", fd); - } - */ openedFd++; } diff --git a/library/fileManagement.h b/library/fileManagement.h old mode 100644 new mode 100755 diff --git a/library/logFunctions.c b/library/logFunctions.c old mode 100644 new mode 100755 index db521f0..54e755e --- a/library/logFunctions.c +++ b/library/logFunctions.c @@ -31,8 +31,8 @@ void printTimeStamp(void) { - // time_t ltime; /* calendar time */ - // ltime=time(NULL); /* get current cal time */ + // time_t ltime; calendar time + // ltime=time(NULL); get current cal time // printf("\n\n %s -->",asctime( localtime(<ime) ) ); } diff --git a/library/logFunctions.h b/library/logFunctions.h old mode 100644 new mode 100755 diff --git a/library/openSsl.c b/library/openSsl.c old mode 100644 new mode 100755 diff --git a/library/openSsl.h b/library/openSsl.h old mode 100644 new mode 100755 diff --git a/library/signals.c b/library/signals.c old mode 100644 new mode 100755 index 62b35ca..c37df03 --- a/library/signals.c +++ b/library/signals.c @@ -58,14 +58,13 @@ static void ignore_sigpipe(void) void onUftpClose(int sig) { - printf("\nuFTP exit()\n"); + printf("\nuFTP exit() sig %d\n", sig); deallocateMemory(); exit(0); } void signalHandlerInstall(void) { - //signal(SIGPIPE, signal_callback_handler); signal(SIGINT,onUftpClose); signal(SIGUSR2,SIG_IGN); signal(SIGPIPE,SIG_IGN); diff --git a/library/signals.h b/library/signals.h old mode 100644 new mode 100755 diff --git a/testNotes.txt b/testNotes.txt old mode 100644 new mode 100755 diff --git a/todo.txt b/todo.txt old mode 100644 new mode 100755 diff --git a/uFTP.c b/uFTP.c old mode 100644 new mode 100755 index bcaa03a..2551fe3 --- a/uFTP.c +++ b/uFTP.c @@ -32,5 +32,5 @@ int main(int argc, char** argv) { runFtpServer(); - return (EXIT_SUCCESS); + return EXIT_SUCCESS; } diff --git a/uftpd.cfg b/uftpd.cfg old mode 100644 new mode 100755 index 71881a4..b9c0413 --- a/uftpd.cfg +++ b/uftpd.cfg @@ -13,7 +13,7 @@ FTP_PORT = 21 SINGLE_INSTANCE = true #Allow only one server instance (true or false) -DAEMON_MODE = false +DAEMON_MODE = true #Run in background, daemon mode ok IDLE_MAX_TIMEOUT = 3600