From 7509a4d4a540ea73c185ad80a0f5f09f111b08e9 Mon Sep 17 00:00:00 2001 From: Ugo Cirmignani Date: Sat, 24 Feb 2018 20:00:53 +0100 Subject: [PATCH] Some refactoring --- MakeFileGeneric | 7 +- build/Debug/GNU-Linux/ftpCommandElaborate.o | Bin 60640 -> 60640 bytes build/Debug/GNU-Linux/ftpData.o | Bin 28128 -> 28128 bytes build/Debug/GNU-Linux/ftpServer.o | Bin 78224 -> 77672 bytes build/Debug/GNU-Linux/ftpServer.o.d | 4 +- build/Debug/GNU-Linux/library/configRead.o | Bin 18032 -> 20288 bytes build/Debug/GNU-Linux/library/signals.o | Bin 0 -> 6792 bytes build/Debug/GNU-Linux/library/signals.o.d | 11 + build/Debug/GNU-Linux/uFTP.o | Bin 6448 -> 6168 bytes build/modules/configRead.o | Bin 9256 -> 9256 bytes build/modules/daemon.o | Bin 4736 -> 4744 bytes build/modules/dynamicVectors.o | Bin 7096 -> 7104 bytes build/modules/fileManagement.o | Bin 11688 -> 11752 bytes build/modules/ftpCommandElaborate.o | Bin 34128 -> 34280 bytes build/modules/ftpData.o | Bin 9376 -> 10520 bytes build/modules/ftpServer.o | Bin 52848 -> 53368 bytes build/modules/logFunctions.o | Bin 2152 -> 2152 bytes build/modules/signals.o | Bin 0 -> 1792 bytes build/uFTP | Bin 0 -> 91416 bytes dist/Debug/GNU-Linux/config.cfg | 1 - dist/Debug/GNU-Linux/uftp | Bin 145640 -> 147464 bytes dist/Debug/GNU-Linux/uftpd.cfg | 1 + ftpServer.c | 19 +- library/configRead.c | 217 ++++++++++++-------- library/configRead.h | 18 +- library/signals.c | 38 ++++ library/signals.h | 47 +++++ nbproject/Makefile-Debug.mk | 6 + nbproject/Makefile-Release.mk | 6 + nbproject/configurations.xml | 20 +- nbproject/private/private.xml | 7 + uFTP.c | 3 - config.cfg => uftpd.cfg | 0 33 files changed, 296 insertions(+), 109 deletions(-) create mode 100644 build/Debug/GNU-Linux/library/signals.o create mode 100644 build/Debug/GNU-Linux/library/signals.o.d create mode 100644 build/modules/signals.o create mode 100755 build/uFTP delete mode 120000 dist/Debug/GNU-Linux/config.cfg create mode 120000 dist/Debug/GNU-Linux/uftpd.cfg create mode 100644 library/signals.c create mode 100644 library/signals.h rename config.cfg => uftpd.cfg (100%) diff --git a/MakeFileGeneric b/MakeFileGeneric index 586392c..4db0455 100644 --- a/MakeFileGeneric +++ b/MakeFileGeneric @@ -36,8 +36,8 @@ start: end: @echo Build process end -uFTP: uFTP.c fileManagement.o configRead.o logFunctions.o ftpCommandElaborate.o ftpData.o ftpServer.o daemon.o - @$(CC) uFTP.c $(LIBPATH)dynamicVectors.o $(LIBPATH)fileManagement.o $(LIBPATH)configRead.o $(LIBPATH)logFunctions.o $(LIBPATH)ftpCommandElaborate.o $(LIBPATH)ftpData.o $(LIBPATH)ftpServer.o $(LIBPATH)daemon.o -o $(OUTPATH)uFTP -lpthread +uFTP: uFTP.c fileManagement.o configRead.o logFunctions.o ftpCommandElaborate.o ftpData.o ftpServer.o daemon.o signals.o + @$(CC) uFTP.c $(LIBPATH)dynamicVectors.o $(LIBPATH)fileManagement.o $(LIBPATH)configRead.o $(LIBPATH)logFunctions.o $(LIBPATH)ftpCommandElaborate.o $(LIBPATH)ftpData.o $(LIBPATH)ftpServer.o $(LIBPATH)daemon.o $(LIBPATH)signals.o -o $(OUTPATH)uFTP -lpthread daemon.o: @$(CC) $(CFLAGS) $(SOURCE_MODULES_PATH)daemon.c -o $(LIBPATH)daemon.o @@ -51,6 +51,9 @@ configRead.o: dynamicVectors.o fileManagement.o fileManagement.o: @$(CC) $(CFLAGS) $(SOURCE_MODULES_PATH)fileManagement.c -o $(LIBPATH)fileManagement.o +signals.o: + @$(CC) $(CFLAGS) $(SOURCE_MODULES_PATH)signals.c -o $(LIBPATH)signals.o + logFunctions.o: @$(CC) $(CFLAGS) $(SOURCE_MODULES_PATH)logFunctions.c -o $(LIBPATH)logFunctions.o diff --git a/build/Debug/GNU-Linux/ftpCommandElaborate.o b/build/Debug/GNU-Linux/ftpCommandElaborate.o index a28cfcf66d07b519d7610ff6fb077ce06a14f25f..6b0ef6397e6c701c77004aaa14221807ed691cf5 100644 GIT binary patch delta 189 zcmaEGllj3-<_(v<>a}w@7#O%17#J7?b&Ww3gslf+b3oYoAhrMl4_J|b4F>}QCx}@g zXmk^<*963b>NRx*sfXw_1F=OQY;zD>0>ZWcv1Paz^gtF{hA}cQC_p5vKoSKEyddf& V2Ll6N4kH5tGt_eH%?;iO3jt~E6r=zE delta 189 zcmaEGllj3-<_(v<>NRpX7#O%17#J7?wTwX&gslx?b3oWSAhrMl4_J||4F>}QCx}@g zsDBf#*AT>n>NRo&sfXw_2C+pTY!eV$0>U;0v1Paz^gtGyg)uTPC_p64K@tTFyddf& V2Ll6N4kH5tGt_d6%?;iO3jtYn6nX#v diff --git a/build/Debug/GNU-Linux/ftpData.o b/build/Debug/GNU-Linux/ftpData.o index 3252171e351d411ad840a1005486468b1c729cfe..fc6344498f745c5fe18e2eaa8815d25e718dbbfe 100644 GIT binary patch delta 159 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
{9dAj>!XI-!AL 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 bcr<^G4lO%!zCo(^%SI{Y7K(_69{>LVI7()7 literal 78224 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 diff --git a/build/Debug/GNU-Linux/ftpServer.o.d b/build/Debug/GNU-Linux/ftpServer.o.d index 2b7db03..7917d92 100644 --- a/build/Debug/GNU-Linux/ftpServer.o.d +++ b/build/Debug/GNU-Linux/ftpServer.o.d @@ -2,7 +2,7 @@ build/Debug/GNU-Linux/ftpServer.o: ftpServer.c library/dynamicVectors.h \ library/fileManagement.h library/dynamicVectors.h ftpServer.h ftpData.h \ library/dynamicVectors.h library/configRead.h library/dynamicVectors.h \ ftpCommandsElaborate.h library/fileManagement.h library/logFunctions.h \ - library/daemon.h + library/daemon.h library/signals.h library/dynamicVectors.h: @@ -27,3 +27,5 @@ library/fileManagement.h: library/logFunctions.h: library/daemon.h: + +library/signals.h: diff --git a/build/Debug/GNU-Linux/library/configRead.o b/build/Debug/GNU-Linux/library/configRead.o index b5bc42299749163f4c05d2c9c65a340a21e0924b..d2268de2ec4373802c8fef0a8c1e50e5ed983c43 100644 GIT binary patch literal 20288 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 AMgRZ+ literal 0 HcmV?d00001 diff --git a/build/Debug/GNU-Linux/library/signals.o.d b/build/Debug/GNU-Linux/library/signals.o.d new file mode 100644 index 0000000..ff9cc4d --- /dev/null +++ b/build/Debug/GNU-Linux/library/signals.o.d @@ -0,0 +1,11 @@ +build/Debug/GNU-Linux/library/signals.o: library/signals.c \ + library/dynamicVectors.h library/fileManagement.h \ + library/dynamicVectors.h library/../ftpServer.h + +library/dynamicVectors.h: + +library/fileManagement.h: + +library/dynamicVectors.h: + +library/../ftpServer.h: diff --git a/build/Debug/GNU-Linux/uFTP.o b/build/Debug/GNU-Linux/uFTP.o index dd15473484dc3934d7a7d83955dff0b63b40529f..56750037ccbe10f779bdf775bfa34aad3abc92de 100644 GIT binary patch literal 6168 zcmbtYeQaCR6+ibqCvkD&CUM7-m4U0#LN{zTX_jWRrD?jP^^`T;+H7>7J)Z4r`%(Kn z^FBgSX`)aG8nz<%V})wK3eu)Z(*{BU4T()?ADYG=`;sPg(%`>pE7~6vZCwW)ozA`I zI`&PhN!yWnK3!YwWiS}=Hg~R2Cl)@mZ0Kf?;q*w$1k4Rwyvkicg zQW#RyGR&&q(3ZLO3Ud&j{hX6z&kh%Tma)gV+aB$cfnAl)?ym z&;a-aBt#L;h&>pJJ&Q@o8a;GUU|{}U`Q`!LxDjEPf{0kB*Y__>->$W@BP+~UNzH9nT9 zIc~I=skl*YN6vAJwW!2F=#j8mui%71n+iZQbL3FAh>-+gsl?0KD*6kT8a&8WG5VTQ zaJ+04Org&LA>X^77sDWj)db6{l`z?WhoHu0Oqf#L_K$HN3+}kk7W^9NWr8D&~a{2BGce(Er)0w*M z7puD$C&n}5W9dvKohb*QT|Aa)_+H41q336U(D&Sm2s*GAxGcO?^NPnn7HJf$x>w?u zixAm#%VA6o zp9L#&qkxx2F@M|$+pjDLBL%y7ENV!jwqGe?Tgve2*zo8_7Dl**{rmRanZA9#5V>I_ zH!Cv{32A$FbgM*Q1DzM__?Lk#_Op$>J@F?Qz)c|kki^llH`)KFv9GWDE4@AK2TwcU z4JihfueYO;%r$Rh04AOTYmiCTE}cvex1m*J%3IMYGPR>pkqP2mzKYD%S3E(cd0KSWbf4Mv;}_T z&V-G_++W~+(>7jY@#1jpx+HN!1rU``Jd(QPVukQR6VYXQfZ|g)zKD@NMx(;tB6*lb zT;4pv0bpy3errGNYQfR(BeZBv!?8b+?xj)r-Ar+cw-4ooc6O4T`!)Rn=|7<1LxeAC z_`@VWq~Uq8|EPw)Nb)x|T+tZ~KTURC(C|LOf2iRGw3Mx;;(y z-`4OxdNeO-_%zk$9~%C5!qrbPW&iV}*GKaTe}(X24S$2=EgJqV#kpO>zeo6_hK~~d zMGaT|`ZWzdP4QGT{C6aW8vZWnKdj+DCHx5uKTPp_N5k?B5pK16j zWdFAs{yO1**6=q8zog;6BK(Sm|AugrMzxO@NUvYR|48!98g7uhS;KqC&WMKN4<4l5 z8h$V7tLIO}vx)RhY5F@zUp;3^|03aMHGPL<)n7_~jOzb}rawq_RQ;6xJB0s1(|?EL zw>A7Q>0j0GEhMMtxm5PA6MnOX-$?jY4X;xCV;Wu{{XH7KMEDmp{3EjSRSgda|GI{M ziSVL^$4Rc!i0P9{K_@i*4`}iU4ZldZdY55+T5k*L9jn_{?<*ZoQ@m)lH6F+YOZCt$ zKsE?{IaU?t^O~Iv@k*F2*`W>DLJ)vNOS}+OEXOT-K)hWj_;FrbKh{LmQ<403Mt8#&Lfuxv`wiYX zl)j?0_;3P%KWUNhUV&@XdrRS42&Zjs(mhSCopk^Ba~W;^uj|LjzfQ{kbDCk@|44`Y z@q+@=1u87&kA14=Kh?qiRq}gT3rzPv-(meF`9%}9{g?HJI>g^EzS*p-$M`XJJ$|Qy z|6zJ4)qO*e9)GEW|4H(%`UL&sv#$Hc?}TVm&+`iTzp2CisW?t_SU)Jf@`32jR#NNK zxZELs`6YEVsdb8;r}b@TPxDJGz=TpHQu!-7+o67UuTekzU7*&hx?()KZ=?q0e}V!= kbNCxZUyo{9i3Pofo3+Ni==tNmuC=~F@t>DwnxwD)55J9gI{*Lx literal 6448 zcmbuDU2Ggz6@bs3S=*bey>YUE#!V?3H4RDV?#7Pmy3J3WM0RXs;;4KLIG618#Lpj1GhP)b?}l$SuH3REZp#80Zy2PjBY9tbZ`O4UA)NR<8riq5^~ zuGh!e7dVnV=Y02`d(J)g&dl9;aCCCa5CXIa*a-{Pf^1p6ppQs(1Xe=^rpM=B8$b3| z@BA08j?c&c7=Nq-8^`A_{JaMM{*H$H_dIGZ{px}VkdW?48Kqn5EmCOFjpSAUFp{?e zfGIk$C4qWJqNDCb(3$K)WL!Lm?aDAk5}9epCNrTf%GWexZe~(mRLkSX07yNFs`S2? zxcm_VV3`bfWfU(;{}<+yRQfxp_bUBe)YmBeJ=C*Ge;@UYO23Nw7N!3i^v&vW{ssQki zGBP3tfG;UywXh9b^`RvEWQngIbIpU znjb`2d}N39Ime2?@++0liNLa=InQo5vik!;J#ws>C;+SC+SO3P0ju8%qp}}I7FZ2C zIP3(Wj1tzXn6Aup&i5QB+eh7cwHD#bF$354s#*CD16vkONp`eczjPQZtLd=NsT2oR z$#>(1*Baaj0!!LBMQg^5L$GFim7hwwXon8iLG=h&VKJ_N<-27)$JoOXI^}GsW(U}* z1g&5p&1OfL@5Gdzd)>1Z2GMP*6ky5H%8(ONR^ZrWS#Vv|*o#A_JRp;ojk3D9NVmFF1GmABwvCIAHGN3M7)n!m!Zl#r7l)0SHB0`%IL#cA%p4hu@I=iR8 zKYLq#AipJ>Yeccp=L%E^BY_6KkRl>+F9nQ@Je&m!QKgfkq z;CofDu*^e)xTh+0*YSL?N;RB9q2@Q7LR|F=`ZAT)z=sJ3_(NAuB+1PSh;kbUR!r}h2B7nVn z_S})(I9-grC{}gI4ad^jnjhGt2> z4|R7fem*T0Jar}D@&}8l67!lTKL8US7uOJzj&fW~kSDAqVyctY5;55mRf`Goe6U2! zrN>4orh2b05mUYMmWT;>MqMmeyHzc9&`)>lDc{6QZfe7~wc)$laDA7k`)}{$)b3rA z*3{V8-J=Jr1G{!lj#~1uVY^nzc3s@DR?YUxt`iW4Aoj+hnY*3fh!fx(lx(Jh&eac; ze3UpI!f`&DuW#WiTev)R1IU%oI*LBH;|k#+Z7aPQ&=*DX8;O62@vji?BaZvB`Emh( zO)dRf_w)7^j&U#0kCiFLwf|=s@1`K~CE1ea4K&Un*8g4N_cLx2pJlv2{6WTb-5+NB zXJkLd_;Zx!X~yS>Kf}0|bByb{{Fw1Gl;>|4KSul&#^0j2ml%JW>^B(SMfN`#znR9- zKRNY2d4+fn#n=2NWcM+?j2=lF7=MAr*~+-SA4V9jP=23e{BauRUdE3TuQL8;;t}J$ zWPg$I7b)(S8Gnz)`4;0x$v(@tUhf|=zJ{X51lk^Lve|4Q~7jK4|t+l*f! z+oXBub^IIIy^MdI`s?R}?!TGVSML|iJ?h`j#`!(*9gHt0KEe29s?Q0=|3dsE<9E?G zPcr@~>i=EF|496&jK56wi;Uky^Zf(kCuy8ZjLRR!0Pqgu*U>l`y6UOOW{v7d5 zj6X|!ka0YFpxnv$aq9mG#y?N|(~N(W_~#hkM&r*ievbHY#(f&+6yq;b|8EjUlS(D! z9P7WC`oF+<2XX!G!+N%!ZuFUekN+y=#d(%E=F*xEZM;0~Pf$deD#V&5$bF@ns1&}ZKjfUezkoWw^ z$?x4aos&my8px?xl>mRK{l9|q$C~JRYEj=5=`7nKRQ{%{mFHJz_SbSzemnvgCxGV= z^wnnv`~{D)fjBL5Q}jOK!sFvt037pw^&g`6Ty*^3vVnR0{xLv~d6ZZSvnJzb`@4AM?lDdH(e_@$aShZ|cA# zJbt-N{CgJ)oemakb+W61W10DBgt7t!coo_S$Gx~+V zMEhxZn*0|%djOjL`aPjV&tJ=vZR$63jr!r2M(wZbiuv%^C>JUJ^OP{2*YGzN_s4Fm b#8OVs{jblvTKN2NU9ag+`JdH}B;5bM3(~KW diff --git a/build/modules/configRead.o b/build/modules/configRead.o index 937108c1613fa30789f0d8911ca33b7f098e4193..18d7799069eaab729f991d9b34d9be4cfdea3fbb 100644 GIT binary patch delta 39 vcmZ4CvBG1+Z$VByBTWT!JtIAX%`8GK0*q>tHwp<)o};9~$h!HUQaU35_(%(? delta 39 vcmZ4CvBG1+Z$VB?1#>+kJp%@Y%`8GK0*oq?Hwp<)o};9~$h`TWQaU35?pRDYpa%DIhm4GA=N)?*#D*0cf+~4+jAOB$H7E6O;T9BmwA? kArU_T=#ya)KLMzdp%Fg;K$GDSKLK!)Are0U*pp!rC%%vvhX4Qo diff --git a/build/modules/dynamicVectors.o b/build/modules/dynamicVectors.o index c91634e8f7a3bdd9fc32c7b24a6a89f105070980..52948360ad9634f4945fb6f484e926392a1884a2 100644 GIT binary patch delta 81 zcmdmCe!zT!2IGN^ntt5;dPbTG=6XhY1`J@ZxsLl1FXN8Mfs)4=)h0_ynKL#{4wSNI j?3g@J%AQeU@%uDEC-*@->_nrIQyYaSc+fbN| zKaN~0F%C0;E0048wWqxD;X)~L%tO4^y z&a&h+8l~HcrL*6iHeclMSm~DCDyVOUX~?oFuc&}-=X5UsEEP;w13)rulFmWaiBjKD zg7Q|aecvifX*|20F@H_vR;qR53n)I|`WIigX3XC>-npi7Y#d)i@k1_O2c6#Ncdy-D z@k@Z@;O%y6{jK&?rp*hMWmUp&fCd-^=<$;IC3G%1r{waNoCIa&T@UlH*ZbM1sf$#^ zYwBuhGi~Jy%yq~C08ORt>yGA^ypWoZY}NA7>-#`T;KZIGa@0 z&tw(P0iX;R%rQ9*U_v+ef-%8aRw;ieONKX zt9nRQafIo)w+eLHPu<|OV!MdFT&UqNscx!-VO8(o_bpsZld@=&R(_(KFX-9I#WJxc zOEj#O1pr>TA0Zt23>lYZ=gAvVY%Q@Vw}#&m+br3R7GhgG8g3=_1mUBE_Y;1R@Nk(1 zCJ7%Re39_ugpVNe4`$GRj}>&D>+a~rU4fy@Okj^Qc8X4$4*>G-v|{PcBO5M{yo&!o zPml`--Gy}RvavC23Ubk4W4GGac03d0;*yQECr{#7kc)RVHfHm#sN^ErgPdzmjv@d;@%wAEYy delta 1447 zcmZ`%T}YEr7=F+EUAUk8>3m0*&d_Z-x3tt@pvyv-*p1>`Dt^rpZF@=g*V@hS_xI6vlx{J>>j! z(G3eO*t2ooVyS4>bv-mR(#A_P65?g>b7*jW6#yU-w?!5SKs3^$>-u1%N!NA$jArY> zN}e3BM+I33KLM)Y5kNRC6pe7n_8iudUYr7eP;^9iP27v6*6b`Xv_DS%#d`q&m#i69 zrI@6Gy;iMUQ3>1T{_oC6Je)Gy1psSFvpz9Fj12Y16IJkoRclefq@7@@2=@Fhn7rdk z+`D~>YF}g1>QwvGogmq}y?MZ{_7duk?|a9WB94rd6vVb{LkT#Lv1~4K2K-0-r2w%D znM=f0V*-F$tNo_wq$N3_D%NnI!i4uVja)vM!vP!nviKGkhEXd{Z?G#~39JfdvA+0*?wjCa_juy};8PSu>Gy z?&cS#DA%y)a8KX^+{mWvjdG@@N#_^UX9e?fXxWxh&siibRs{f> zNlu@zN&cfsxv)>8?66Y1?2>-3)Dv87Z%}IWen~eewL|fD6hEN&9>ueCNz5pISn-RB z?@;_hJ_V0Et|WGc+rzPEj!}YVa)(V&h-G>7X`VBMjjCfO0suebA61Kap}YdjsY;p9}zPSnmyxF!p(aB#d+3 zAn8F;5;Rw4O1%K{X$GDxDIhJ_R}v&`I9C!RP9(mdIh9I}9qWAov*wV$#&OUWAb@i| F_g_8LvatXF diff --git a/build/modules/ftpCommandElaborate.o b/build/modules/ftpCommandElaborate.o index 6aeda00d589fb1537e57a7db790a3c8b9e7a34ff..114aa2e5af186eb3807ff9986fde1eb82e81d960 100644 GIT binary patch delta 6849 zcmZ`;3viUx6~1>9frU+A32?XsG^v0IXviW$pg>4K$O2(Ns8}R~h46?Z!6du`Y?h=j zJd}iEl}haprXmzN)d8g1?Wn_y)O61OpPxPaoy|;cvfp>k zx#x8s|G$^Fd2Vj^G-T)l&6yLux(w4zD!%ONh-JRcn4HoZU-o(NgtwpPi)^OoV-jvl zNp1PoJJX}fFxth@C?F~OV=o-&Gc6zZCJsn31>1je`MdV^f~{w7Dy7u1_V$*{p-VbG zL?2Yk&XGqtd9#LQrj5uNnw8yBn7>75zoL~=dCA>2d&VbqNZ6@;9XqMMN~xa{u9Wg6 zNWNo2OX7s-p6=gEt%ACQglNm+i3_yekLM>{)t6eD3YKgA3i>B6?;Ppu7{YCn2kMuw zc{21_+sy`lL)Mj2-8@QlS6bx^!yA+Ln~WYdyvJkzeT(VS*feE`zK5+-z%wcpZ%^6p zDNM&*Qzz;jcx~zs({-RNzuNwzY7=a;n=!p`NT5rG4d*j^kl8{Pew^{07%2pgKNDXs z%<>cs!V862X8Pl{@&QiI!-@6`chNs>h`xw<(}r|D5U^#w*DdR&eV%O2dF{`MN~!)z zseA4A&yO%v1ZDx}hgfpoVQa9l2+aG;QX;5|UvWk*;He@A`nuSb9rkNx4dY~!f^%#R zcFA|(^go5^^T6zLvAvl+j5Fqe`N+lgXZBM|*Xw)Glex^MpuZSQh*|RIQQ=P`w#@^x z+ok(wj$$9_>JKfMP?BwbkWy-Zuuy?{#Sq-WEZI*L?3mL$h?V> z5a=t`*iNH)zI!Y`Pl(xnifthXCZxnzN~9CZV1Z`|yhz|i;0G~p0R+DhY_?$g@s2_f z(eiX=DPi1MLEmr&O0j7HnAe3CEqq7oTWnnbCc9_MbIJY!^+GUb1S|c&i-Cn;CiIHw z4iT0cFtiZNF~Lf2+p%#W1QWs5byxo>#wkYWPouzP{?B4`Aq4LVR{A-pcg#bX=T!oi zp8pYNltA#dV5R3dWJ0O?dA6KXN{tb??Boh;E&+3aS&B${-i~c05PZDPgEoC6rj#1a zIDM4eyHwyZqTgfQA_!Q^Oxcdf&dH$V$GD7W0X8iHU2To^*0>v67lC<$<=xe}fO;{Q z&jd>=ZW#Og6$TbVFojNDo=dKU5pnPc<4*U^=2K}aHZBJ9UL5vM#Ohnt*a0I;AQ0#m zn^$&DK^%M$&R7DvfyPi&$jF^7>EW2o5u(G>1fC=Cv5Y&h%;n4!VBS*Di?D48m|CGL zEBGP$mxB4yWnnj4xJwqoJs*krBXc`64*s;jWn9k*e5CNdTHw;Ri#Co|m-@q5X|@ke zjEC66;f&MA9}1iK0+&9_5x6`xiUm%Gs*jNhY)i~@SJXH$j zNF4SIMoU3owZ@w?hQAh)qlG8F^jH;Sr}c}2XT`xM30$6!bvBMiU+|mPgp91z32b`- z%m;KK5Ia&2`;x3aM*lJ}H<+c0j1~TWhk45&=%q`8&~@tQXWU)KG=b*|YvV9l24ObzOpbg2>Wi&=`1#pT67$>%+Jc>NTEa z5c(@Y=VRN8VCK4HK4+OSOQznEX>!Tv4t8prEtwl6gU2enrFUh#Ak*gEE2{`YRg?i5 zcVJT`n74!^P2A(Y<oQCC6I$AayOZ&U$}uJY+bj8=i}X^l@<<5(Ka zYZtd6ikW$IYaRORIf&uga(IV0tx-=|pISedy;>2X2yQX$WnA#i!8AI~`T7$wo^i&=5-wKk5h+Hc+#HfgOnxjl+`tHE3l z7Gx%GVC8BEcBRJ@uFNzsZwBK|K4-E2*+O1+Xg&tkKyY##cCO3X9=28zM}7@iGqrKp zJs4U8=CEL8#@@%qH4wfdSb4u0O^+`e?{pFGv^aQ3;PTL_jf1~yFz)I!*K z&!5Kc@<@n&o%j6XT=-7DACtbu{K0vR#@Qaui z0pomK(4WdGrrD2`5imJ)o++hDTOi9y>``Q z@P9b2E<@kN(z;x41Ap}~5S!~pc;3mk1nV>OG0d#bC7JqMPtGL#RsC4qfVb*%z2i37 LmO~ib^vM4JsV`)- delta 6814 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 JVAQ7Ye*xmgA(j9D diff --git a/build/modules/ftpData.o b/build/modules/ftpData.o index ec4b77c928a372bf9d8ff865c0d55173733a4bc6..db499c06da74dbd59933358b378562321394423f 100644 GIT binary patch literal 10520 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 delta 2570 zcmZ`(eQXp}5TCbqh5P9Bt}X4}wLN+T?yG9;HS`05&7mGFO2|QiDVi8jBA*fZ2L>du zN1CFSrRK^&(io!Uul_~AR4|Z8jt^Zl5sQYPK@&8fD5yx(tOi{(Z+Gt=O|D7j&HR2d z^JeB|-}st|6@`TKLfd=o{SrHgo258=3&*4`_8eZ2US&7%xFd$^9jn-OJnq=a9N6Ma zvaPtxxmmis4c~XRPdTc-lwO_&044unpJ5nE{zRu?7#kGT8BK6Fqo<16h+-H9kga73 z{2V<*kTN=w<;RY+qK;64Q=H9fx9HSHR$6gCt&wnvE5=shU01MbSZ6!Km~%DwGdTzV z+nP zx}v5NGwi+xZJ2tcdXizT+COBNo#|RG;G)X;)O0P)4a%mat4nBZj_8vMvlI{;v5 zO<@iowg#(3DbN zWGsyChPb3Vv8!QO?VTz!%^v!00N@(3Mj0m>`f4}MHW7Y50CQA zt39S0F9QJnw(v;{KV&6#<6c>2tz0hTayiMmb&{E93EwM#=^Bt+4?y1h;QHHGP z@YJcM4;VX$gDrAs(rI2t4N~d%X=4q;IEF`BWOfFZw#e*j(nI$wPdXX}&lY51ITW+{ zCRP^MET+P;Z=b*h@UgIr+rrhUYZhwXO>y*hQ}7mZIq_^*W;I+ka5)cu56hvBS!NvF z9TM*D#vJLV1g|Yk1g91&Cu|IrP~K_DPGq%Gqx!Wd4n3K5zZrR8?5G z*N?TWawuzk>cqAR?3=i>RbElFSi7oi*1ew!QQ~BN74SA8+Z;U7Du)K#<@wAP*w^uL zt2}f>V50(iPQdBmu{Yz2fX4*<7Yny*e%q?~AHhE^_&;qf^bj9`xKM-ErqgI>iS3K` zR=~$9;1d<_o!;^|0)Uqy9yW$&BQiTma_A$AramZxef_r;@IQrg^gP-Av#k%1+IUF7 z=L$G&o9*9i;&nXW5rOdGcWp9T$YqwxEnMy+8G6TOc0=WoYNtDiwew_liOV0j{Ey_? z#+tIf*j`5kd|3tjc@f8*3-+XR>J$Kq=D{nXs_ZB6`V4#{wngPG`@M@;?;1tWzy02& zXW&b!aZB`)G+cv=V?CaW)|-)b;cKxT>3j{Q>KpN5EFoQ}!F#cO_eHDBNn8}~b#M2Z zH7vm0@m>l2rguCcjr;LlykBxfuq)B;zDxTK0Gn`kqSrmpU|O5;RHE0TM@(xy;NsZa F{{dO2|JDEi diff --git a/build/modules/ftpServer.o b/build/modules/ftpServer.o index f51fa1edb75041465609a96b69c8f8ab6d8fe418..381764c0b5d82c5804f919e76a92bf35954156eb 100644 GIT binary patch literal 53368 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 D6z=Pm literal 52848 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 delta 39 vcmaDM@IqjN3nQndg1MfNo&f{HW?#l?Rz{V{8ySTs-(gc>^x4eFp3VpW+29H^ diff --git a/build/modules/signals.o b/build/modules/signals.o new file mode 100644 index 0000000000000000000000000000000000000000..d4bb9ca5389c25773577c19ac76c4b55a182238f GIT binary patch literal 1792 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%0D6MSqHr5XGHvCm-liU@pZr>KO^Gs`GYSIJ+KbA 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 literal 0 HcmV?d00001 diff --git a/dist/Debug/GNU-Linux/config.cfg b/dist/Debug/GNU-Linux/config.cfg deleted file mode 120000 index 9a53664..0000000 --- a/dist/Debug/GNU-Linux/config.cfg +++ /dev/null @@ -1 +0,0 @@ -../../../config.cfg \ No newline at end of file diff --git a/dist/Debug/GNU-Linux/uftp b/dist/Debug/GNU-Linux/uftp index debe05f04e63106146af627ccab43e6c637bc1c6..10d8a3d90f35bfcfc83a5a137b71cc45ba343488 100755 GIT binary patch delta 35277 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 J8|q77!GAJ8;sgKy diff --git a/dist/Debug/GNU-Linux/uftpd.cfg b/dist/Debug/GNU-Linux/uftpd.cfg new file mode 120000 index 0000000..630971a --- /dev/null +++ b/dist/Debug/GNU-Linux/uftpd.cfg @@ -0,0 +1 @@ +../../../uftpd.cfg \ No newline at end of file diff --git a/ftpServer.c b/ftpServer.c index 8f8fdc7..952d5ed 100644 --- a/ftpServer.c +++ b/ftpServer.c @@ -29,6 +29,7 @@ #include #include + #include #include #include @@ -47,12 +48,8 @@ #include "library/logFunctions.h" #include "library/configRead.h" #include "library/daemon.h" +#include "library/signals.h" -/* Catch Signal Handler functio */ -void signal_callback_handler(int signum){ - - printf("Caught signal SIGPIPE %d\n",signum); -} static ftpDataType ftpData; @@ -366,15 +363,13 @@ void *connectionWorkerHandle(void * socketId) void runFtpServer(void) { - DYNV_VectorGenericDataType configParameters; fd_set rset, wset, eset, rsetAll, wsetAll, esetAll; static int processingSock = 0; static int maxSocketFD = 0; - DYNV_VectorGeneric_Init(&configParameters); - readConfigurationFile("./config.cfg", &configParameters); - parseConfigurationFile(&ftpData.ftpParameters, &configParameters); - + /*Read the configuration file */ + configurationRead(&ftpData.ftpParameters); + if (ftpData.ftpParameters.singleInstanceModeOn == 1) { int returnCode = isProcessAlreadyRunning(); @@ -385,15 +380,15 @@ void runFtpServer(void) exit(0); } } - /* Fork the process daemon mode */ if (ftpData.ftpParameters.daemonModeOn == 1) { daemonize("uFTP"); } + signalHandlerInstall(); initFtpData(); - + //Socket main creator ftpData.theSocket = createSocket(ftpData.ftpParameters.port); printTimeStamp(); diff --git a/library/configRead.c b/library/configRead.c index a4eb0b2..4b2dc3f 100644 --- a/library/configRead.c +++ b/library/configRead.c @@ -22,8 +22,6 @@ * THE SOFTWARE. */ - - #include #include #include @@ -34,9 +32,58 @@ #define PARAMETER_SIZE_LIMIT 1024 -int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector) -{ +/* Public Functions */ +int searchUser(char *name, DYNV_VectorGenericDataType *usersVector) +{ + int returnCode = -1; + int i = 0; + + for (i = 0; i Size; i++) + { + if (strcmp(name, ((usersParameters_DataType *) usersVector->Data[i])->name) == 0) + { + return i; + } + } + + return returnCode; +} + +void configurationRead(ftpParameters_DataType *ftpParameters) +{ + int returnCode = 0; + DYNV_VectorGenericDataType configParameters; + DYNV_VectorGeneric_Init(&configParameters); + + if (FILE_IsFile(LOCAL_CONFIGURATION_FILENAME) == 1) + { + printf("\nReading configuration from \n -> %s", LOCAL_CONFIGURATION_FILENAME); + returnCode = readConfigurationFile(LOCAL_CONFIGURATION_FILENAME, &configParameters); + } + else if (FILE_IsFile(DEFAULT_CONFIGURATION_FILENAME) == 1) + { + printf("\nReading configuration from \n -> %s", DEFAULT_CONFIGURATION_FILENAME); + returnCode = readConfigurationFile(DEFAULT_CONFIGURATION_FILENAME, &configParameters); + } + + if (returnCode == 1) + { + parseConfigurationFile(ftpParameters, &configParameters); + } + else + { + printf("\nError: could not read the configuration file located at: \n -> %s or at \n -> %s", DEFAULT_CONFIGURATION_FILENAME, LOCAL_CONFIGURATION_FILENAME); + exit(1); + } + + return; +} + + +/*Private functions*/ +static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector) +{ #define STATE_START 0 #define STATE_NAME 1 #define STATE_VALUE 2 @@ -76,17 +123,17 @@ int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVect /* 1st char is a sharp comment case */ else if (theFileContent[i] == '#') { - state = STATE_TO_NEW_LINE; - i++; + state = STATE_TO_NEW_LINE; + i++; } /* Name Start */ else { - state = STATE_NAME; + state = STATE_NAME; } } break; - + case STATE_NAME: { /* Not allowed chars in the name */ @@ -122,7 +169,7 @@ int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVect } } break; - + case STATE_VALUE: { /* Skip not allowed values */ @@ -136,17 +183,19 @@ int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVect else if (theFileContent[i] == '"') { i++; - + if (allowSpacesInValue == 0) allowSpacesInValue = 1; else allowSpacesInValue = 0; - } + } else if (theFileContent[i] == '\n') { /* Value stored proceed to save */ - if (valueIndex > 0) + if (valueIndex > 0) + { state = STATE_STORE; + } else if (valueIndex == 0) /* No void value allowed*/ { memset(name, 0, PARAMETER_SIZE_LIMIT); @@ -171,7 +220,7 @@ int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVect /* Wait until a new line is found */ if (theFileContent[i] == '\n') { - state = STATE_START; + state = STATE_START; } i++; } @@ -179,33 +228,48 @@ int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVect case STATE_STORE: { - parameter_DataType parameter; - parameter.name = malloc(nameIndex+1); - parameter.value = malloc(valueIndex+1); - strcpy(parameter.name, name); - strcpy(parameter.value, value); - parameter.name[nameIndex] = '\0'; - parameter.value[valueIndex] = '\0'; - memset(name, 0, PARAMETER_SIZE_LIMIT); - memset(value, 0, PARAMETER_SIZE_LIMIT); - nameIndex = 0; - valueIndex = 0; - state = STATE_START; - printf("\nParameter read: %s = %s", parameter.name, parameter.value); - parametersVector->PushBack(parametersVector, ¶meter, sizeof(parameter_DataType)); + parameter_DataType parameter; + parameter.name = malloc(nameIndex+1); + parameter.value = malloc(valueIndex+1); + strcpy(parameter.name, name); + strcpy(parameter.value, value); + parameter.name[nameIndex] = '\0'; + parameter.value[valueIndex] = '\0'; + memset(name, 0, PARAMETER_SIZE_LIMIT); + memset(value, 0, PARAMETER_SIZE_LIMIT); + nameIndex = 0; + valueIndex = 0; + state = STATE_START; + //printf("\nParameter read: %s = %s", parameter.name, parameter.value); + parametersVector->PushBack(parametersVector, ¶meter, sizeof(parameter_DataType)); } break; - } - - } - return 1; + /* che if there is a value to store */ + if (state == STATE_VALUE && + valueIndex > 0) + { + parameter_DataType parameter; + parameter.name = malloc(nameIndex+1); + parameter.value = malloc(valueIndex+1); + strcpy(parameter.name, name); + strcpy(parameter.value, value); + parameter.name[nameIndex] = '\0'; + parameter.value[valueIndex] = '\0'; + memset(name, 0, PARAMETER_SIZE_LIMIT); + memset(value, 0, PARAMETER_SIZE_LIMIT); + nameIndex = 0; + valueIndex = 0; + //printf("\nParameter read: %s = %s", parameter.name, parameter.value); + parametersVector->PushBack(parametersVector, ¶meter, sizeof(parameter_DataType)); + } + return 1; } -int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector) +static int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector) { int returnCode = -1; int i = 0; @@ -221,48 +285,39 @@ int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector) return returnCode; } -int searchUser(char *name, DYNV_VectorGenericDataType *usersVector) +static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector) { - int returnCode = -1; - int i = 0; + int searchIndex, userIndex; - for (i = 0; i Size; i++) - { - if (strcmp(name, ((usersParameters_DataType *) usersVector->Data[i])->name) == 0) - { - return i; - } - } - - return returnCode; -} - -int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector) -{ - int searchIndex; - int userIndex; - char userX[PARAMETER_SIZE_LIMIT], passwordX[PARAMETER_SIZE_LIMIT], homeX[PARAMETER_SIZE_LIMIT]; + char userX[PARAMETER_SIZE_LIMIT], + passwordX[PARAMETER_SIZE_LIMIT], + homeX[PARAMETER_SIZE_LIMIT]; + + printf("\nReading configuration settings.."); searchIndex = searchParameter("MAXIMUM_ALLOWED_FTP_CONNECTION", parametersVector); if (searchIndex != -1) { ftpParameters->maxClients = atoi(((parameter_DataType *) parametersVector->Data[searchIndex])->value); - printf("\nFtp maximum allowed clients: %d", ftpParameters->maxClients); + printf("\nMAXIMUM_ALLOWED_FTP_CONNECTION: %d", ftpParameters->maxClients); } else { ftpParameters->maxClients = 10; + printf("\nMAXIMUM_ALLOWED_FTP_CONNECTION parameter not found in the configuration file, using the default value: %d", ftpParameters->maxClients); } searchIndex = searchParameter("FTP_PORT", parametersVector); if (searchIndex != -1) { ftpParameters->port = atoi(((parameter_DataType *) parametersVector->Data[searchIndex])->value); - printf("\nFtp port: %d", ftpParameters->port); + printf("\nFTP_PORT: %d", ftpParameters->port); + } else { ftpParameters->port = 21; + printf("\nFTP_PORT parameter not found in the configuration file, using the default value: %d", ftpParameters->maxClients); } @@ -275,6 +330,12 @@ int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGen if(strcmp(((parameter_DataType *) parametersVector->Data[searchIndex])->value, "TRUE") == 0) ftpParameters->daemonModeOn = 1; + + printf("\nDAEMON_MODE value: %d", ftpParameters->daemonModeOn); + } + else + { + printf("\nDAEMON_MODE parameter not found in the configuration file, using the default value: %d", ftpParameters->daemonModeOn); } ftpParameters->singleInstanceModeOn = 0; @@ -287,21 +348,22 @@ int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGen if(strcmp(((parameter_DataType *) parametersVector->Data[searchIndex])->value, "TRUE") == 0) ftpParameters->singleInstanceModeOn = 1; } - - - - ftpParameters->maximumIdleInactivity = 0; + else + { + printf("\nSINGLE_INSTANCE parameter not found in the configuration file, using the default value: %d", ftpParameters->singleInstanceModeOn); + } + + ftpParameters->maximumIdleInactivity = 3600; searchIndex = searchParameter("IDLE_MAX_TIMEOUT", parametersVector); if (searchIndex != -1) { ftpParameters->maximumIdleInactivity = atoi(((parameter_DataType *) parametersVector->Data[searchIndex])->value); - } - printf("\nftpParameters->maximumIdleInactivity: %d", ftpParameters->maximumIdleInactivity); - - - printf("\nFtp singleInstanceModeOn: %d", ftpParameters->singleInstanceModeOn); - printf("\nFtp daemonModeOn: %d", ftpParameters->daemonModeOn); - + printf("\nIDLE_MAX_TIMEOUT value: %d", ftpParameters->maximumIdleInactivity); + } + else + { + printf("\nIDLE_MAX_TIMEOUT parameter not found in the configuration file, using the default value: %d", ftpParameters->maximumIdleInactivity); + } searchIndex = searchParameter("FTP_SERVER_IP", parametersVector); if (searchIndex != -1) @@ -310,32 +372,29 @@ int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGen &ftpParameters->ftpIpAddress[1], &ftpParameters->ftpIpAddress[2], &ftpParameters->ftpIpAddress[3]); - printf("\nFtp ip address: %d.%d.%d.%d", ftpParameters->ftpIpAddress[0], - ftpParameters->ftpIpAddress[1], - ftpParameters->ftpIpAddress[2], - ftpParameters->ftpIpAddress[3]); + printf("\nFTP_SERVER_IP value: %d.%d.%d.%d", ftpParameters->ftpIpAddress[0], + ftpParameters->ftpIpAddress[1], + ftpParameters->ftpIpAddress[2], + ftpParameters->ftpIpAddress[3]); } else { ftpParameters->ftpIpAddress[0] = 127; ftpParameters->ftpIpAddress[1] = 0; ftpParameters->ftpIpAddress[2] = 0; - ftpParameters->ftpIpAddress[3] = 1; + ftpParameters->ftpIpAddress[3] = 1; + printf("\nFTP_SERVER_IP parameter not found in the configuration file, listening on all available networks"); } - printf("\nFtp port wait start: %d", ftpParameters->port); /* USER SETTINGS */ userIndex = 0; - memset(userX, 0, PARAMETER_SIZE_LIMIT); memset(passwordX, 0, PARAMETER_SIZE_LIMIT); memset(homeX, 0, PARAMETER_SIZE_LIMIT); DYNV_VectorGeneric_Init(&ftpParameters->usersVector); - printf("\nFtp port xxx: %d", ftpParameters->port); while(1) { - printf("\nFtp port start: %d", ftpParameters->port); int searchUserIndex, searchPasswordIndex, searchHomeIndex; usersParameters_DataType userData; @@ -368,17 +427,13 @@ int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGen userData.password[strlen(((parameter_DataType *) parametersVector->Data[searchPasswordIndex])->value)] = '\0'; userData.homePath[strlen(((parameter_DataType *) parametersVector->Data[searchHomeIndex])->value)] = '\0'; - printf("\n\nAdding user"); + printf("\nUser parameter found"); printf("\nName: %s", userData.name); printf("\nPassword: %s", userData.password); printf("\nHomePath: %s", userData.homePath); - - ftpParameters->usersVector.PushBack(&ftpParameters->usersVector, &userData, sizeof(usersParameters_DataType)); - printf("\nFtp port end: %d", ftpParameters->port); - } - - - + ftpParameters->usersVector.PushBack(&ftpParameters->usersVector, &userData, sizeof(usersParameters_DataType)); + } + return 1; } \ No newline at end of file diff --git a/library/configRead.h b/library/configRead.h index a2eb4bd..b76072d 100644 --- a/library/configRead.h +++ b/library/configRead.h @@ -28,9 +28,14 @@ #ifdef __cplusplus extern "C" { #endif - + #include "dynamicVectors.h" +#define DEFAULT_CONFIGURATION_FILENAME "/etc/uftpd.cfg" +#define LOCAL_CONFIGURATION_FILENAME "./uftpd.cfg" + + +/* Data structures */ struct parameter { char* name; @@ -55,10 +60,15 @@ struct ftpParameters int maximumIdleInactivity; } typedef ftpParameters_DataType; -int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector); -int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector); + +/*Public functions */ int searchUser(char *name, DYNV_VectorGenericDataType *usersVector); -int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector); +void configurationRead(ftpParameters_DataType *ftpParameters); + +/* Private Functions */ +static int parseConfigurationFile(ftpParameters_DataType *ftpParameters, DYNV_VectorGenericDataType *parametersVector); +static int searchParameter(char *name, DYNV_VectorGenericDataType *parametersVector); +static int readConfigurationFile(char *path, DYNV_VectorGenericDataType *parametersVector); #ifdef __cplusplus } diff --git a/library/signals.c b/library/signals.c new file mode 100644 index 0000000..552fb9f --- /dev/null +++ b/library/signals.c @@ -0,0 +1,38 @@ +/* + * The MIT License + * + * Copyright 2018 Ugo Cirmignani + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include +#include "../ftpServer.h" + + +/* Catch Signal Handler functio */ +void signal_callback_handler(int signum){ + + printf("Caught signal SIGPIPE %d\n",signum); +} + +void signalHandlerInstall(void) +{ + signal(SIGPIPE, signal_callback_handler); +} \ No newline at end of file diff --git a/library/signals.h b/library/signals.h new file mode 100644 index 0000000..7b1ebb3 --- /dev/null +++ b/library/signals.h @@ -0,0 +1,47 @@ +/* + * The MIT License + * + * Copyright 2018 Ugo Cirmignani + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* + * File: signals.h + * Author: ugo + * + * Created on 24 febbraio 2018, 19.15 + */ + +#ifndef SIGNALS_H +#define SIGNALS_H + +#ifdef __cplusplus +extern "C" { +#endif + +void signalHandlerInstall(void); +void signal_callback_handler(int signum); + +#ifdef __cplusplus +} +#endif + +#endif /* SIGNALS_H */ + diff --git a/nbproject/Makefile-Debug.mk b/nbproject/Makefile-Debug.mk index 4325091..900d6f4 100644 --- a/nbproject/Makefile-Debug.mk +++ b/nbproject/Makefile-Debug.mk @@ -43,6 +43,7 @@ OBJECTFILES= \ ${OBJECTDIR}/library/dynamicVectors.o \ ${OBJECTDIR}/library/fileManagement.o \ ${OBJECTDIR}/library/logFunctions.o \ + ${OBJECTDIR}/library/signals.o \ ${OBJECTDIR}/uFTP.o @@ -110,6 +111,11 @@ ${OBJECTDIR}/library/logFunctions.o: library/logFunctions.c ${RM} "$@.d" $(COMPILE.c) -g -Ilibrary -include library/dynamicVectors.h -include library/fileManagement.h -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/library/logFunctions.o library/logFunctions.c +${OBJECTDIR}/library/signals.o: library/signals.c + ${MKDIR} -p ${OBJECTDIR}/library + ${RM} "$@.d" + $(COMPILE.c) -g -Ilibrary -include library/dynamicVectors.h -include library/fileManagement.h -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/library/signals.o library/signals.c + ${OBJECTDIR}/uFTP.o: uFTP.c ${MKDIR} -p ${OBJECTDIR} ${RM} "$@.d" diff --git a/nbproject/Makefile-Release.mk b/nbproject/Makefile-Release.mk index b553a0c..f6f23c7 100644 --- a/nbproject/Makefile-Release.mk +++ b/nbproject/Makefile-Release.mk @@ -43,6 +43,7 @@ OBJECTFILES= \ ${OBJECTDIR}/library/dynamicVectors.o \ ${OBJECTDIR}/library/fileManagement.o \ ${OBJECTDIR}/library/logFunctions.o \ + ${OBJECTDIR}/library/signals.o \ ${OBJECTDIR}/uFTP.o @@ -110,6 +111,11 @@ ${OBJECTDIR}/library/logFunctions.o: library/logFunctions.c ${RM} "$@.d" $(COMPILE.c) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/library/logFunctions.o library/logFunctions.c +${OBJECTDIR}/library/signals.o: library/signals.c + ${MKDIR} -p ${OBJECTDIR}/library + ${RM} "$@.d" + $(COMPILE.c) -O2 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/library/signals.o library/signals.c + ${OBJECTDIR}/uFTP.o: uFTP.c ${MKDIR} -p ${OBJECTDIR} ${RM} "$@.d" diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index 55ac939..2c5fccb 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -9,6 +9,7 @@ library/dynamicVectors.h library/fileManagement.h library/logFunctions.h + library/signals.h library/daemon.h ftpCommandsElaborate.h @@ -29,14 +30,15 @@ library/dynamicVectors.c library/fileManagement.c library/logFunctions.c + library/signals.c MakeFileGeneric - config.cfg ftpCommandElaborate.c ftpData.c ftpServer.c todo.txt uFTP.c + uftpd.cfg - - @@ -112,10 +112,16 @@ + + + + + + @@ -139,8 +145,6 @@ - - @@ -175,10 +179,16 @@ + + + + + + diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 3fb12a8..168c334 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -7,7 +7,14 @@ + file:/home/ugo/NetBeansProjects/uFTP/library/configRead.h + file:/home/ugo/NetBeansProjects/uFTP/ftpData.c + file:/home/ugo/NetBeansProjects/uFTP/library/signals.c + file:/home/ugo/NetBeansProjects/uFTP/library/signals.h file:/home/ugo/NetBeansProjects/uFTP/ftpServer.c + file:/home/ugo/NetBeansProjects/uFTP/uFTP.c + file:/home/ugo/NetBeansProjects/uFTP/MakeFileGeneric + file:/home/ugo/NetBeansProjects/uFTP/ftpData.h file:/home/ugo/NetBeansProjects/uFTP/library/configRead.c diff --git a/uFTP.c b/uFTP.c index 457080a..614feca 100644 --- a/uFTP.c +++ b/uFTP.c @@ -26,13 +26,10 @@ #include #include #include "ftpServer.h" -#include int main(int argc, char** argv) { - signal(SIGPIPE, signal_callback_handler); - runFtpServer(); return (EXIT_SUCCESS); } diff --git a/config.cfg b/uftpd.cfg similarity index 100% rename from config.cfg rename to uftpd.cfg