From 6a4dd9dc6b7f5080d511b0bdec8e4e500f1c20f3 Mon Sep 17 00:00:00 2001 From: Tomasz Kojm Date: Thu, 6 Aug 2009 22:29:13 +0200 Subject: [PATCH] clamd, clamscan, libclamav: drop support for MailFollowURLs (bb#1677) --- ChangeLog | 4 + clamd/clamd.c | 2 +- clamd/server-th.c | 5 - clamscan/clamscan.c | 1 - clamscan/manager.c | 6 +- docs/clamdoc.pdf | Bin 262825 -> 262136 bytes docs/clamdoc.tex | 7 +- docs/html/clamdoc.html | 4 +- docs/html/footnode.html | 2 +- docs/html/index.html | 4 +- docs/html/node1.html | 2 +- docs/html/node10.html | 4 +- docs/html/node11.html | 2 +- docs/html/node12.html | 2 +- docs/html/node13.html | 2 +- docs/html/node14.html | 2 +- docs/html/node15.html | 2 +- docs/html/node16.html | 2 +- docs/html/node17.html | 2 +- docs/html/node18.html | 2 +- docs/html/node19.html | 2 +- docs/html/node2.html | 2 +- docs/html/node20.html | 2 +- docs/html/node21.html | 2 +- docs/html/node22.html | 2 +- docs/html/node23.html | 2 +- docs/html/node24.html | 2 +- docs/html/node25.html | 2 +- docs/html/node26.html | 2 +- docs/html/node27.html | 2 +- docs/html/node28.html | 2 +- docs/html/node29.html | 2 +- docs/html/node3.html | 2 +- docs/html/node30.html | 2 +- docs/html/node31.html | 2 +- docs/html/node32.html | 2 +- docs/html/node33.html | 2 +- docs/html/node34.html | 2 +- docs/html/node35.html | 2 +- docs/html/node36.html | 2 +- docs/html/node37.html | 2 +- docs/html/node38.html | 2 +- docs/html/node39.html | 2 +- docs/html/node4.html | 2 +- docs/html/node40.html | 2 +- docs/html/node41.html | 2 +- docs/html/node42.html | 2 +- docs/html/node43.html | 2 +- docs/html/node44.html | 2 +- docs/html/node45.html | 2 +- docs/html/node46.html | 2 +- docs/html/node47.html | 2 +- docs/html/node48.html | 2 +- docs/html/node49.html | 9 +- docs/html/node5.html | 2 +- docs/html/node50.html | 2 +- docs/html/node51.html | 2 +- docs/html/node52.html | 2 +- docs/html/node53.html | 2 +- docs/html/node54.html | 2 +- docs/html/node55.html | 2 +- docs/html/node56.html | 2 +- docs/html/node57.html | 2 +- docs/html/node58.html | 2 +- docs/html/node59.html | 2 +- docs/html/node6.html | 2 +- docs/html/node60.html | 4 +- docs/html/node7.html | 2 +- docs/html/node8.html | 2 +- docs/html/node9.html | 2 +- docs/man/clamd.conf.5.in | 5 - docs/man/clamscan.1.in | 3 - etc/clamd.conf | 6 - libclamav/clamav.h | 2 +- libclamav/mbox.c | 694 +-------------------------------------- libclamav/pdf.c | 3 - shared/optparser.c | 3 +- 77 files changed, 78 insertions(+), 804 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1eb83be2..47438b7cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Thu Aug 6 22:26:30 CEST 2009 (tk) +---------------------------------- + * clamd, clamscan, libclamav: drop support for MailFollowURLs (bb#1677) + Wed Aug 5 18:33:11 CEST 2009 (tk) ---------------------------------- * clamd/clamd.c: ignore SIGHUP and SIGUSR2 during initial setup (bb#1671) diff --git a/clamd/clamd.c b/clamd/clamd.c index 0760face1..26e032f0c 100644 --- a/clamd/clamd.c +++ b/clamd/clamd.c @@ -42,8 +42,8 @@ #else #include #include -#include #endif +#include #if defined(USE_SYSLOG) && !defined(C_AIX) #include diff --git a/clamd/server-th.c b/clamd/server-th.c index 5d23552f6..e21c0a9d9 100644 --- a/clamd/server-th.c +++ b/clamd/server-th.c @@ -832,11 +832,6 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi logg("Mail files support enabled.\n"); options |= CL_SCAN_MAIL; - if(optget(opts, "MailFollowURLs")->enabled) { - logg("Mail: URL scanning enabled.\n"); - options |= CL_SCAN_MAILURL; - } - if(optget(opts, "ScanPartialMessages")->enabled) { logg("Mail: RFC1341 handling enabled.\n"); options |= CL_SCAN_PARTIAL_MESSAGE; diff --git a/clamscan/clamscan.c b/clamscan/clamscan.c index a37ee7ebf..c0ede1d9b 100644 --- a/clamscan/clamscan.c +++ b/clamscan/clamscan.c @@ -277,7 +277,6 @@ void help(void) mprintf(" --scan-archive[=yes(*)/no] Scan archive files (supported by libclamav)\n"); mprintf(" --detect-broken[=yes/no(*)] Try to detect broken executable files\n"); mprintf(" --block-encrypted[=yes/no(*)] Block encrypted archives\n"); - mprintf(" --mail-follow-urls[=yes/no(*)] Download and scan URLs\n"); mprintf("\n"); mprintf(" --max-filesize=#n Files larger than this will be skipped and assumed clean\n"); mprintf(" --max-scansize=#n The maximum amount of data to scan for each container file (**)\n"); diff --git a/clamscan/manager.c b/clamscan/manager.c index c8615b231..38aba5a98 100644 --- a/clamscan/manager.c +++ b/clamscan/manager.c @@ -537,13 +537,9 @@ int scanmanager(const struct optstruct *opts) if(optget(opts, "scan-html")->enabled) options |= CL_SCAN_HTML; - if(optget(opts, "scan-mail")->enabled) { + if(optget(opts, "scan-mail")->enabled) options |= CL_SCAN_MAIL; - if(optget(opts, "mail-follow-urls")->enabled) - options |= CL_SCAN_MAILURL; - } - if(optget(opts, "algorithmic-detection")->enabled) options |= CL_SCAN_ALGORITHMIC; diff --git a/docs/clamdoc.pdf b/docs/clamdoc.pdf index 1f1d9b8db3e8ffe4455a8f17baeed209dd061df1..c3b12a551ac89d4dbaffdb3ec77ff833f58fad79 100644 GIT binary patch delta 57643 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
    lbhB{qc_XVtip8H2Z^!k8iPxd+nWZ0!f2Q0*2qO zv{vzkURniV( zzV=iO3``2?_cj|w%NWPCpigYnV;e8$*PI)6`rr^7D+>JlfkwbyT8=aG#k%b*rO@`% z0+Is*+!+s#Ad9sRJYMEOzn z&@z^`=C8yHrAr;u^Oy{6yc0a2QW8%DO+qYz$8#$29gOj>4b@{itRf1Rjlba%rx{Sr zx7S^Ft@Gg$1N{6cL2>J!1UkiZl4<;f7UO9Mn+{Oyp|-v(U3 z@14fratULz41vht?-l5{U+z6U4h)c8AM6h?dR#k_F!QA%(KHqxRXiJ;9;>%#crKC0 z)J;rCFHwJ1<3b=I8miyg>D~02u5`JJK2upDoyjeuU?Ljh#Qjkaqd z%fF8;iAKiI%&4}((FW~z~p+8bQB^r*v zX%2F#e>}AWP9RTs@PP3qpAwpGl!*_^7P0JuD@q#*7;5)Jo`2o^p7urIrAw96^0YLx z$=E93T*L!qN#WZ2nE!0csQ^nc3$Ko3ro(n0Cp2LN9{0gy>MCeg zFw<0(3eUW#0za>aeU`eYKxSU(s_CINM&_%6V7;mr~L{5>Oyr-J4o5hWn_xh%^Q6!8!7!Xug4c{!xzVqBRFr|5W|LHPPc zN|EwS+g2#bCd`zpnpkr>&W}wt|m^5i>jyWqp)LG6S7rtqx=~^$( zQLJL=@`pE8g!X;kb)I)VRHcO@eOlXIDnUdQIHk07l;2NcRUm|oL2Uc9o$i}+tw4rQ zlQHHv^Rt#d!#9&wQz_l*6hTQW5P|IbgWl>EbjX|VfL}5uFAYQ)*dgqCv9P)ITE)dx zY9j7qDgV5vf&;IYDJFvai{5YNoPjV8zU*}H>%h+?m-9>Vk?7N zz7+)jPZOOx$nCY{DEeAW-t#>ZDmUoa!r7!z#0HQ~>~>&~H*}JH9|a%7M@&~DWqUXo z5nQAR#R7EV7wIyippc5kC^(CqLm=&8Kq`1d=cOcA;DB^HeTHf7BTH@%9$UL!4P zp^IzGI0b>yM%~uq-u%ZOd^UZ=ZY}b)fyZ6)3W3?0$Tn2Hp61kw7YtDHwO8@_Ch{g# z-(9jQiR7@y7LB)0q#>pg?Nk^y#l}#_d*nwUqKmhr0U`Tc(;1e4$kgZgVAotzu>g$6 zwyqgsLP*yu6#Vu@;vAv;v8Dj-rrcT@)|u?9hJD&T=ajkI5QU&Y@gK40t9V zZlDiiNf=o7?F<2wowRl7*@27jyIn7jcOuDvAZgOC zc#vxF@O8T5=1BeZ@HMZx(AKiYA3>eI?cQgc)G-UPX}lVM0aHv7U63@Pj=~t624_@) zU5%=dD=6iQHv3j z)Fc~Ylcljfruh%Ysq-tbyRPfuxV{`)|G`-<$w)mT@HLm8Qs-0~iqDu*=+0|Pc^=vSGsKdDn2a2Lhp$eC@w zzt%lYvxg<)0}z3gvYVme*hvHR8zF{~#Gs+?ps8Y|Pa0aEETX78 zQr^`%ML$Ww*BrsfrlEezdIaz4%pi0)(rErAYp`mUN*6%5H^BX#0K3)?xr4j*^n%gt zHj7~Jsrp!bQIfUa0fy4?!8aExe@l3X;xIC{xcq+#yYg_V*6(i)i4;*XWyqAy-e;e) z_coUd4MK)U6Oz;kS0touo(oY&r4p5HXrNFTlIW7ikVJzdZbhajF767uJ68cgM0G9%&o1qql#MRoz#Rf2}yeWnSm`j;&LAJd+C4oN8H# z<3;*m;oe`OuKAkwNZ-3B{KiglJI`#Du-$i^uIFCc8Xhnp@#@Vn{bkuLd+w^Mx!x7$ z8(u(#;{?@;+tkd;+q*KHn=!9>fN5||n z8pa!jwFZK+?9X2JoNK$sedyGJ#d=zlxNgiD_j%zDZ}O`1T^%k?%`%J42(hm2tXN-c z&?4b3u%EgVEihyM_Oz6r;qm$&nYPy>PTDHbTPB-ox+*jIl&#yBJYMZV80aSSXwJE# zb?-`9QBi@&-n6(R5gm+ndQzulo+>A&g$hm-c-L4)m*cY z(yTK^?W0s=@=|-ZcQfC%Yn&~G#s5@~`N@ZeK5Or9cNBi5u@YdTgOVPtVa)P{O*RC%vp^X$j zLX~PKee_ey1z=#@?nx0sX~l(#YReIoQ}|NWHe8G7Z^@2h1Q!4GqFVh$Uc-ewqF zbIkJDM#@LGTi@la%tv?D^3G}tzIp$CZr3Ds8n>=>)YohbvHqqfqU#tHkkYiz;ffgb zVex2VwOvA``?fhW__JuG|PXn3=KYD`~HDSCYABAJ@ZXvam*4Q7kS z7AHoVVCoJ@d>xt#Sa&zQ543Vm_Nx7@;#$C}hKm1N)xLqV zWW3w6@e!$)t?M#RSb3fh>bWH7Qdf{z96=SxMV8)o%%8KQGc{PxCDpv-jnY6=QkT=K zPSG#U>rQstbu5^!SlW8f3H(!$ZR{r7B37TK;JMc?i$IID8-=e3W+u(v`{MH8 zwDQI+S+h4wtw9dh$gp1I3g;@sY(5tdF5l5Isg&aTEdC(g6*S>qZaOh}=G4>0*-mj) zTd0luO)1-ZhGTB04!5LehtHH%HE*&s_KOhfwNTlEDERKO|6rcao1+#eV1ZQe?5xw6 zm9vQ0?zZI_GiJF&=R%Xg26LY~4h{o*6spv{H{ChSml@H`<1LP{q?h^EFO%rHQIwgG zQLWfNOK9qz&&< z-8PdKL%}x!=byW;u2(%6?0UZ78>T~^EWFWI^q(@$wt{&42V4SsqJ2GjVOa)xLM!j3upFp)!&&b;eG6zQm-Z{l%?GZmwY#2} zq_254UEFrF{?00SMucbTxzQ_$Vl_>%PR$}FdqOsB5ng#q#XT>~s_L++@1xJ%uJZCG zC9z7umnpAHtQ>h{R6W2@QFB&uUrs;%*TwL=wO)A(uF935w|v&@=zmeCXxb`k=k-kh zoAJ|Q)#oP#ZudfUU}fg6^H&4sTfx9?j!_ zNjfsJ?FXX;RbOe8Rh#%8DONIkt9{ozEK(yoX&JTLdHD`(u6@MeP1>e;HW$*LhAJgS z(){Nx$SBS5zjrZnjmXjUmUd5@h;B5yE8!oTzvP5CpU2feo65~_WtuhlBmdVKbf#CV~gaatblk*8XJG^M|Je)M>~ zp|g|EYe!YfOMxjWMAQb}Y+1s1{1k7<+@1a1S7l63?{s5L>dKhL@Bd3wk4JL++QQ<( z-ax)vLUFqWBiHXdk}p-mG=T>Vv>Q=$m? zEoK-h(i4sAKWRjiW%>DDFWc|p_f_C)q-{paM$rWI>x-%+f@_tWD$bg3wOqo|9qC6q(Nn`W?j5wb-~VJrOvSpm zfp#&u=|dUy;vq##5;t*GG0XDk_Au2eF*{xrce64=JSa?Y>;4s@)fxL6R_t4rb|8Op z`s#rz%+N{PV58!`fSfVm_H_wyGkJ?!dxnIf=|_7F{2#QM2Ahk)rb+tyzd0>_Erd*MErF^f__C z*jWV$JstnCedwtW-{3yeLzjZn)7)*giSa%8Q_|B}ideR_XGCnVwzD@gzt6l+zpcqU zTqX+i=p6FY>UFm8 z+}1+N_}Iz81p;H%HS zI}cuP4_3KTm!z>xyk+%ows9Y2UIuOSw!T|sBeWp@#_h~$hdA$$xPE;>N^_}ajpDI9 zxhnFxwS)B@&L@11W496Ct8?uGobi*ZA36ls;~UoQ^uMHjb6kfQ?8)BVzQ~oz zu4-s&vT}!4q^D!?(nE5|BkNrhljChK?2aHGs$E)t@!IEr7h&^L0#))p2js{q@wgo@ z$Ot>Yd78@;ucV7^D?Yp@n@_%Je@N*qV%IwsdCW}c#5!zGmEEF(D+ao|H2)3 z#x99fDp9{1b-&l&9NKav*z>Zfl(nsa$%xLK;KW+lD~&b=D@PX9D9%D;1{%qC25E3FR3xgx$w16jb_5<9h4mkT05ou+M@?^326H*mZ z7h-PbWVWeNd$rCtV`;IW9bQkoR?)5(uQHIUds3THAzx%yGIOzVUfnkb7ai%x`%dz9 zGDiKKLQXx4{nP8z3D4S7XRZk8DVZx_lS*5#NNUcxH;)V4SgfN|^CyF@waGD$^P3y8hkaT-ug0vD%V+QC zCnr2N_!vo0OFi~7S>=&ij_$Jz@+ym(C8qXNxCGq7O1Regt9I{(C01YWzoAZU;;k)@ zUGGtHb69N6*(H+}5vf<0O-C4^F8jQ`G#W|mCLr*8fDD=mV82Y97}Q2GMU)4 z{LY!Szea{;pGoUVo8!YiX}eDO`kFSqRDBD)L54b+ly37Os@_8Fvme;`M4rkz)rKJR zgbLP;xx;$%n-3(jt|!FBoGPiQ7c4n+y)!=Kwff_55r3mT*NK0AiH-w5!j`aeT(4xa!ED(Evvp=G?9AAk z2ly9@5Hu!=q70N^hY#>C{LimB1N;dlGz>+QXq=alw~{F5C(2;baptcw1Osn?Ti|hC zKdwXQC`w}Ny@UMf6pR6`$CxB^Jw{{Tv|nW?LXs#0lA#1i=e~}P0T=w2A4Taj6#p)x zei{Wx5J(vq!@wXJieNYj$-sgz{BOX2@cjD=sIS;b`X$%EKC`zD^hfoGapj=i1 zYFLKh7y%i>F^~yI2FOTA28?FXr6FQq4o<_^YD4_0Iv9cdVk>wL!3Z3Z0T`Sl*#SfR zq#Z(n+Zz5{98jPWBolHB0O5`tkTIZW0$`F!WAhI4liD;I7YKt!hhzwyj-UwJgQI|e zZ2Q#`gn_`h0Th7i*>%JGggwHQbtoOsLpGrRg@hacWFVn_Wdq0yBvJ)r( zpK&QLf!}Y9@Dn-=jB|I$U)+c=Fbt9b3Y^Jc%a3w27zniO00#quWI%&Nne6cI8cZ6r z$$$ov4#^NYMk8?c+wU4U0xc3~;BbZj4HP5TtH(H25eT$Opg~}e3}|39l3nm!gM`Zg z&>$IHiHm`9z?S^PNer$UfPkPuQ3Dh>9bpH20&xZ<4Ke_w<8&NyE{ZV0-iL$0MBpj} zkU_~|^Nw@k%$?{=l=Ebr|3;Eim>C4yV;uMgxEnGQ&|)Z8)HvzIuKTXRph3O>8X%dt zIOqhyUN*tuV2}_V(BN_bu!_N;vs1ro;4}yiXy9}x_CNzi2=@5j8r&Jqk05(K;aGbhg6=?dx;6d|C1B6PO$7odP3T)xG@9)~>z8WzEh z<|v?W@kbFH#UOVB1_s#I@4oP>QFH=MBm`s`!~j4*@^P`^a7(0tat|+&MldlZv_yc1 zA>WNs{n<}BLhkaw1f`noI>|qug5pUdKs8Bm(gND_mIIV9X03+DNK6NFRoe_Z&_6b%5m`w@Y`I|7g}xZDr$nD9a<(8`$HBp7$UA}~0S011=$ zcP0NU1mF=c3Fr~r1(aZLc)$Dqhx>uM81MuINC?i+<(DvVnhs<%NEq^eqea5@R%1;GLccrHOe`GSinfF*vW z$-mJjh@ZCqFdfVpe{=j>OgVsD;|R)N!1FmEAz|loWLyyh(+E7_Apj4WQ79UM5@6`~ zb;aN`23j?@4Ch`66Nj$j;K5M^qdEZ(LVyDSy|-%Se+Gf;tipkSO#(*>lzVHDDEB@G zRTk=KUQL05F8|F3@)dkpxwYEpeVvc0vtlQ`Z|!|bQ*gOpMc@ERRjY!U&UO7ku-C2I&Gzy yxjER!B#l@BCMX7drIEq^d&L$}BO}p${;q!h2mCyCf)6XeY)Xo%shL@ui~b)ZN1u5B delta 58355 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 T3_g4Y8W7GUBcp4wi|c;?MzQ;A diff --git a/docs/clamdoc.tex b/docs/clamdoc.tex index dfbe30ac9..853bfe744 100644 --- a/docs/clamdoc.tex +++ b/docs/clamdoc.tex @@ -71,7 +71,7 @@ \vspace{3cm} \begin{flushright} \rule[-1ex]{8cm}{3pt}\\ - \huge Clam AntiVirus 0.95.2\\ + \huge Clam AntiVirus -devel\\ \huge \emph{User Manual}\\ \end{flushright} @@ -985,11 +985,6 @@ const char *cl_engine_get_str(const struct cl_engine *engine, (Encrypted.Zip, Encrypted.RAR). \item \textbf{CL\_SCAN\_MAIL}\\ Enable support for mail files. - \item \textbf{CL\_SCAN\_MAILURL}\\ - The mail scanner will download and scan URLs listed in a mail - body. This flag should not be used on loaded servers. Due to - potential problems please do not enable it by default but make - it optional. \item \textbf{CL\_SCAN\_OLE2}\\ Enables support for OLE2 containers (used by MS Office and .msi files). diff --git a/docs/html/clamdoc.html b/docs/html/clamdoc.html index b33761f15..4d73c9af8 100644 --- a/docs/html/clamdoc.html +++ b/docs/html/clamdoc.html @@ -56,7 +56,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -
    Clam AntiVirus 0.95.2 +
    Clam AntiVirus -devel
    User Manual
    @@ -225,7 +225,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/footnode.html b/docs/html/footnode.html index b1fe4c8c9..0f4f72a9c 100644 --- a/docs/html/footnode.html +++ b/docs/html/footnode.html @@ -98,7 +98,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds . -
    ... framework... framework3
    See section 3.6 on how to run the unit tests diff --git a/docs/html/index.html b/docs/html/index.html index b33761f15..4d73c9af8 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -56,7 +56,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    -
    Clam AntiVirus 0.95.2 +
    Clam AntiVirus -devel
    User Manual
    @@ -225,7 +225,7 @@ original version by: Nikos Drakos, CBLU, University of Leeds

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node1.html b/docs/html/node1.html index 0a04eb32d..723b49dbd 100644 --- a/docs/html/node1.html +++ b/docs/html/node1.html @@ -188,7 +188,7 @@ ClamAV and Clam AntiVirus are trademarks of Sourcefire, Inc.

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node10.html b/docs/html/node10.html index 8e2171b7b..808541fb0 100644 --- a/docs/html/node10.html +++ b/docs/html/node10.html @@ -76,7 +76,7 @@ Requirements
  • bzip2 and bzip2-devel library
  • check unit testing framework 3. + HREF="footnode.html#foot773">3.
@@ -85,7 +85,7 @@ Requirements

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node11.html b/docs/html/node11.html index 57c7bebe6..50388bcae 100644 --- a/docs/html/node11.html +++ b/docs/html/node11.html @@ -75,7 +75,7 @@ Installing on shell account

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node12.html b/docs/html/node12.html index 8760349ed..0c16a39c7 100644 --- a/docs/html/node12.html +++ b/docs/html/node12.html @@ -69,7 +69,7 @@ Adding new system user and group

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node13.html b/docs/html/node13.html index 72d345411..7427d26d3 100644 --- a/docs/html/node13.html +++ b/docs/html/node13.html @@ -75,7 +75,7 @@ Compilation of base package

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node14.html b/docs/html/node14.html index 2abe019ab..131a3aa41 100644 --- a/docs/html/node14.html +++ b/docs/html/node14.html @@ -65,7 +65,7 @@ Compilation with clamav-milter enabled

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node15.html b/docs/html/node15.html index 7a426ec0a..45b689ccd 100644 --- a/docs/html/node15.html +++ b/docs/html/node15.html @@ -142,7 +142,7 @@ All 4 tests passed
Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node16.html b/docs/html/node16.html index 8d0822570..f47551b15 100644 --- a/docs/html/node16.html +++ b/docs/html/node16.html @@ -96,7 +96,7 @@ $ CK_FORK=no ./libtool --mode=execute valgrind unit_tests/check-clamav

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node17.html b/docs/html/node17.html index 2209e2a29..f22e8db35 100644 --- a/docs/html/node17.html +++ b/docs/html/node17.html @@ -87,7 +87,7 @@ Configuration

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node18.html b/docs/html/node18.html index 2ada7706d..12675fc63 100644 --- a/docs/html/node18.html +++ b/docs/html/node18.html @@ -79,7 +79,7 @@ clamd

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node19.html b/docs/html/node19.html index ad5a38eba..1e5eb1bca 100644 --- a/docs/html/node19.html +++ b/docs/html/node19.html @@ -90,7 +90,7 @@ On-access scanning

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node2.html b/docs/html/node2.html index a0d97cdc9..2ad951476 100644 --- a/docs/html/node2.html +++ b/docs/html/node2.html @@ -79,7 +79,7 @@ Introduction

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node20.html b/docs/html/node20.html index 0163413b9..d88e5080b 100644 --- a/docs/html/node20.html +++ b/docs/html/node20.html @@ -67,7 +67,7 @@ clamav-milter

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node21.html b/docs/html/node21.html index d95a79b1a..1d6c2fa16 100644 --- a/docs/html/node21.html +++ b/docs/html/node21.html @@ -75,7 +75,7 @@ Testing

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node22.html b/docs/html/node22.html index b25aa9997..b1848d24b 100644 --- a/docs/html/node22.html +++ b/docs/html/node22.html @@ -140,7 +140,7 @@ N * * * * /usr/local/bin/freshclam --quiet
Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node23.html b/docs/html/node23.html index ec8b81ae5..a9273b9eb 100644 --- a/docs/html/node23.html +++ b/docs/html/node23.html @@ -77,7 +77,7 @@ Closest mirrors

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node24.html b/docs/html/node24.html index b0ba5e456..2b1d70870 100644 --- a/docs/html/node24.html +++ b/docs/html/node24.html @@ -108,7 +108,7 @@ The only private data that is transferred is an IP address, which is used
Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node25.html b/docs/html/node25.html index 00f8a0918..88a1dc971 100644 --- a/docs/html/node25.html +++ b/docs/html/node25.html @@ -80,7 +80,7 @@ Usage

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node26.html b/docs/html/node26.html index e85f20689..4849d086a 100644 --- a/docs/html/node26.html +++ b/docs/html/node26.html @@ -230,7 +230,7 @@ Scan stream: clamd will return a new port number you should
Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node27.html b/docs/html/node27.html index 144a35da4..4967b8d79 100644 --- a/docs/html/node27.html +++ b/docs/html/node27.html @@ -76,7 +76,7 @@ Clamdscan

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node28.html b/docs/html/node28.html index a6b715895..1e4d63c4c 100644 --- a/docs/html/node28.html +++ b/docs/html/node28.html @@ -92,7 +92,7 @@ SIGTERM signal. In other case you can lose access

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node29.html b/docs/html/node29.html index 5d260bf9e..e6c49db00 100644 --- a/docs/html/node29.html +++ b/docs/html/node29.html @@ -70,7 +70,7 @@ Output format

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node3.html b/docs/html/node3.html index b60cae2a2..2fb683ec4 100644 --- a/docs/html/node3.html +++ b/docs/html/node3.html @@ -183,7 +183,7 @@ Features
Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node30.html b/docs/html/node30.html index 158d18f62..8672953d6 100644 --- a/docs/html/node30.html +++ b/docs/html/node30.html @@ -79,7 +79,7 @@ clamscan

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node31.html b/docs/html/node31.html index 8f5fb27f5..87cdb73aa 100644 --- a/docs/html/node31.html +++ b/docs/html/node31.html @@ -83,7 +83,7 @@ Error messages are printed in the following format:

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node32.html b/docs/html/node32.html index 0971d6e2c..923f41f0f 100644 --- a/docs/html/node32.html +++ b/docs/html/node32.html @@ -135,7 +135,7 @@ LibClamAV

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node33.html b/docs/html/node33.html index 81dd1dc08..6cdb6e9d1 100644 --- a/docs/html/node33.html +++ b/docs/html/node33.html @@ -65,7 +65,7 @@ Licence

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node34.html b/docs/html/node34.html index b8b17c62e..8947f6536 100644 --- a/docs/html/node34.html +++ b/docs/html/node34.html @@ -79,7 +79,7 @@ Supported formats

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node35.html b/docs/html/node35.html index f717919ac..ed1daa174 100644 --- a/docs/html/node35.html +++ b/docs/html/node35.html @@ -87,7 +87,7 @@ Executables

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node36.html b/docs/html/node36.html index 9ea29c540..f1511aadf 100644 --- a/docs/html/node36.html +++ b/docs/html/node36.html @@ -62,7 +62,7 @@ Mail files

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node37.html b/docs/html/node37.html index 05d9d7717..7bded1236 100644 --- a/docs/html/node37.html +++ b/docs/html/node37.html @@ -92,7 +92,7 @@ Archives and compressed files

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node38.html b/docs/html/node38.html index 2bee6cee3..d76dfabd9 100644 --- a/docs/html/node38.html +++ b/docs/html/node38.html @@ -73,7 +73,7 @@ Documents

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node39.html b/docs/html/node39.html index 8ee5ac997..6802533eb 100644 --- a/docs/html/node39.html +++ b/docs/html/node39.html @@ -62,7 +62,7 @@ Data Loss Prevention

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node4.html b/docs/html/node4.html index 43b26ed6b..3fef2ef37 100644 --- a/docs/html/node4.html +++ b/docs/html/node4.html @@ -86,7 +86,7 @@ Alternatively you can try asking on the #clamav IRC channel - launc

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node40.html b/docs/html/node40.html index 5d95ee394..65b44138b 100644 --- a/docs/html/node40.html +++ b/docs/html/node40.html @@ -75,7 +75,7 @@ Others

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node41.html b/docs/html/node41.html index 3d83b5f35..368ef7063 100644 --- a/docs/html/node41.html +++ b/docs/html/node41.html @@ -69,7 +69,7 @@ API

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node42.html b/docs/html/node42.html index df4774976..c6004f465 100644 --- a/docs/html/node42.html +++ b/docs/html/node42.html @@ -63,7 +63,7 @@ Header file

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node43.html b/docs/html/node43.html index 7c943c1d9..a93b7cda6 100644 --- a/docs/html/node43.html +++ b/docs/html/node43.html @@ -86,7 +86,7 @@ Initialization

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node44.html b/docs/html/node44.html index a96eef825..c5ebed512 100644 --- a/docs/html/node44.html +++ b/docs/html/node44.html @@ -122,7 +122,7 @@ Load CVD files directly without unpacking them into a temporary

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node45.html b/docs/html/node45.html index f782ad207..b835d2344 100644 --- a/docs/html/node45.html +++ b/docs/html/node45.html @@ -69,7 +69,7 @@ Error handling

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node46.html b/docs/html/node46.html index da913026e..5e5822bbc 100644 --- a/docs/html/node46.html +++ b/docs/html/node46.html @@ -74,7 +74,7 @@ Engine structure

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node47.html b/docs/html/node47.html index f25a031d3..254c2b4f5 100644 --- a/docs/html/node47.html +++ b/docs/html/node47.html @@ -79,7 +79,7 @@ const char *cl_engine_get_str(const struct cl_engine *engine,

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node48.html b/docs/html/node48.html index 6795e3747..e91c6846c 100644 --- a/docs/html/node48.html +++ b/docs/html/node48.html @@ -103,7 +103,7 @@ Database reloading

Tomasz Kojm -2009-06-10 +2009-08-06
diff --git a/docs/html/node49.html b/docs/html/node49.html index c36f08bc6..5da956f54 100644 --- a/docs/html/node49.html +++ b/docs/html/node49.html @@ -97,13 +97,6 @@ With this flag the library will mark encrypted archives as viruses
Enable support for mail files. -
  • CL_SCAN_MAILURL -
    -The mail scanner will download and scan URLs listed in a mail - body. This flag should not be used on loaded servers. Due to - potential problems please do not enable it by default but make - it optional. -
  • CL_SCAN_OLE2
    Enables support for OLE2 containers (used by MS Office and .msi @@ -220,7 +213,7 @@ Allow heuristic match to take precedence. When enabled, if
    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node5.html b/docs/html/node5.html index 3555c082a..98e57c97d 100644 --- a/docs/html/node5.html +++ b/docs/html/node5.html @@ -65,7 +65,7 @@ Virus submitting

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node50.html b/docs/html/node50.html index 3a2b7f812..df400b3a3 100644 --- a/docs/html/node50.html +++ b/docs/html/node50.html @@ -63,7 +63,7 @@ Memory

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node51.html b/docs/html/node51.html index fcbb93632..f23252f8d 100644 --- a/docs/html/node51.html +++ b/docs/html/node51.html @@ -65,7 +65,7 @@ Forking daemons

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node52.html b/docs/html/node52.html index 1b3919897..d6eeba05d 100644 --- a/docs/html/node52.html +++ b/docs/html/node52.html @@ -67,7 +67,7 @@ clamav-config

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node53.html b/docs/html/node53.html index 4f353fa1c..4a1b551de 100644 --- a/docs/html/node53.html +++ b/docs/html/node53.html @@ -65,7 +65,7 @@ Example

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node54.html b/docs/html/node54.html index 6071a78dd..0d21a808d 100644 --- a/docs/html/node54.html +++ b/docs/html/node54.html @@ -82,7 +82,7 @@ Verification OK.

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node55.html b/docs/html/node55.html index 5fc4a94b0..fc3594594 100644 --- a/docs/html/node55.html +++ b/docs/html/node55.html @@ -613,7 +613,7 @@ Contributors
    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node56.html b/docs/html/node56.html index a7cff7eb1..7b31d8ef2 100644 --- a/docs/html/node56.html +++ b/docs/html/node56.html @@ -459,7 +459,7 @@ Donors
    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node57.html b/docs/html/node57.html index 3706a671a..18d79511c 100644 --- a/docs/html/node57.html +++ b/docs/html/node57.html @@ -63,7 +63,7 @@ Graphics

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node58.html b/docs/html/node58.html index 6538b9ce2..1d30f536d 100644 --- a/docs/html/node58.html +++ b/docs/html/node58.html @@ -62,7 +62,7 @@ OpenAntiVirus

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node59.html b/docs/html/node59.html index eb530a900..a186df9aa 100644 --- a/docs/html/node59.html +++ b/docs/html/node59.html @@ -134,7 +134,7 @@ Role: coder

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node6.html b/docs/html/node6.html index a9e8cace1..c6a88ba2d 100644 --- a/docs/html/node6.html +++ b/docs/html/node6.html @@ -71,7 +71,7 @@ Base package

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node60.html b/docs/html/node60.html index 5d03b51d4..0d2391307 100644 --- a/docs/html/node60.html +++ b/docs/html/node60.html @@ -64,11 +64,11 @@ Mathematics Department, Macquarie University, Sydney. The command line arguments were:
    latex2html -local_icons clamdoc.tex

    -The translation was initiated by Tomasz Kojm on 2009-06-10 +The translation was initiated by Tomasz Kojm on 2009-08-06


    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node7.html b/docs/html/node7.html index 85afbce67..a0f5853f8 100644 --- a/docs/html/node7.html +++ b/docs/html/node7.html @@ -80,7 +80,7 @@ Supported platforms

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node8.html b/docs/html/node8.html index 8f38f1e90..ed30323d6 100644 --- a/docs/html/node8.html +++ b/docs/html/node8.html @@ -61,7 +61,7 @@ Binary packages

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/html/node9.html b/docs/html/node9.html index e142fb0a5..464f4c817 100644 --- a/docs/html/node9.html +++ b/docs/html/node9.html @@ -81,7 +81,7 @@ Installation

    Tomasz Kojm -2009-06-10 +2009-08-06
    diff --git a/docs/man/clamd.conf.5.in b/docs/man/clamd.conf.5.in index faa2ba65d..fd8521053 100644 --- a/docs/man/clamd.conf.5.in +++ b/docs/man/clamd.conf.5.in @@ -280,11 +280,6 @@ Default: yes Enable scanning of mail files. .br Default: yes -.TP -\fBMailFollowURLs BOOL\fR -If an email contains URLs ClamAV can download and scan them. \fBWARNING: This option may open your system to a DoS attack. Never use it on loaded servers.\fR -.br -Default: no .TP \fBScanPartialMessages BOOL\fR Scan RFC1341 messages split over many emails. You will need to periodically clean up $TemporaryDirectory/clamav-partial directory. \fBWARNING: This option may open your system to a DoS attack. Never use it on loaded servers.\fR diff --git a/docs/man/clamscan.1.in b/docs/man/clamscan.1.in index e11b07ee8..019079f13 100644 --- a/docs/man/clamscan.1.in +++ b/docs/man/clamscan.1.in @@ -141,9 +141,6 @@ Mark broken executables as viruses (Broken.Executable). \fB\-\-block\-encrypted[=yes/no(*)]\fR Mark encrypted archives as viruses (Encrypted.Zip, Encrypted.RAR). .TP -\fB\-\-mail\-follow\-urls[=yes/no(*)]\fR -If an email contains URLs ClamAV can download and scan them. \fBWARNING: This option may open your system to a DoS attack. Never use it on loaded servers.\fR -.TP \fB\-\-max\-files=#n\fR Extract at most #n files from each scanned file (when this is an archive, a document or another kind of container). This option protects your system against DoS attacks (default: 10000) .TP diff --git a/etc/clamd.conf b/etc/clamd.conf index 5a3264412..ba45de7d3 100644 --- a/etc/clamd.conf +++ b/etc/clamd.conf @@ -262,12 +262,6 @@ LocalSocket /tmp/clamd.socket # Default: yes #ScanMail yes -# If an email contains URLs ClamAV can download and scan them. -# WARNING: This option may open your system to a DoS attack. -# Never use it on loaded servers. -# Default: no -#MailFollowURLs no - # Scan RFC1341 messages split over many emails. # You will need to periodically clean up $TemporaryDirectory/clamav-partial directory. # WARNING: This option may open your system to a DoS attack. diff --git a/libclamav/clamav.h b/libclamav/clamav.h index 98e779cc0..80134f725 100644 --- a/libclamav/clamav.h +++ b/libclamav/clamav.h @@ -93,7 +93,7 @@ typedef enum { #define CL_SCAN_HTML 0x10 #define CL_SCAN_PE 0x20 #define CL_SCAN_BLOCKBROKEN 0x40 -#define CL_SCAN_MAILURL 0x80 +#define CL_SCAN_MAILURL 0x80 /* ignored */ #define CL_SCAN_BLOCKMAX 0x100 /* ignored */ #define CL_SCAN_ALGORITHMIC 0x200 #define CL_SCAN_PHISHING_BLOCKSSL 0x800 /* ssl mismatches, not ssl by itself*/ diff --git a/libclamav/mbox.c b/libclamav/mbox.c index bbb2e928a..5e9ecac02 100644 --- a/libclamav/mbox.c +++ b/libclamav/mbox.c @@ -137,16 +137,6 @@ typedef enum { #define SAVE_TO_DISC /* multipart/message are saved in a temporary file */ -#define FOLLOWURLS 5 /* - * Maximum number of URLs scanned in a message - * part. Helps to prevent Dialer.gen-45 and - * Trojan.WinREG.Zapchast which are often - * dispatched by emails which point to it. If - * not defined, don't check any URLs - * It is also used to indicate the number of - * 301/302 redirects we wish to follow - */ - #include "htmlnorm.h" #include "phishcheck.h" @@ -254,29 +244,6 @@ static bool newline_in_header(const char *line); static blob *getHrefs(message *m, tag_arguments_t *hrefs); static void hrefs_done(blob *b, tag_arguments_t *hrefs); static void checkURLs(message *m, mbox_ctx *mctx, mbox_status *rc, int is_html); -static void do_checkURLs(mbox_ctx *mctx, tag_arguments_t *hrefs); - -#if defined(FOLLOWURLS) && (FOLLOWURLS > 0) -struct arg { - char *url; - const char *dir; - char *filename; - int depth; -}; -#define CONNECT_TIMEOUT 5 /* Allow 5 seconds to connect */ -#ifdef CL_THREAD_SAFE -static void *getURL(void *a); -#else -static void *getURL(struct arg *arg); -#endif -static int nonblock_connect(SOCKET sock, const struct sockaddr_in *sin, const char *hostname); -static int connect_error(SOCKET sock, const char *hostname); -static int my_r_gethostbyname(const char *hostname, struct hostent *hp, char *buf, size_t len); - -#define NONBLOCK_SELECT_MAX_FAILURES 3 -#define NONBLOCK_MAX_ATTEMPTS 10 - -#endif /* Maximum line length according to RFC2821 */ #define RFC2821LENGTH 1000 @@ -2071,7 +2038,7 @@ parseEmailBody(message *messageIn, text *textIn, mbox_ctx *mctx, unsigned int re */ case TEXT: /* text/plain has been preprocessed as no encoding */ - if(((mctx->ctx->options&CL_SCAN_MAILURL) && (subtype == HTML)) || doPhishingScan) { + if(doPhishingScan) { /* * It would be better to save and scan the * file and only checkURLs if it's found to be @@ -4055,14 +4022,12 @@ checkURLs(message *mainMessage, mbox_ctx *mctx, mbox_status *rc, int is_html) hrefs.scanContents = mctx->ctx->engine->dboptions&CL_DB_PHISHING_URLS && (DCONF_PHISHING & PHISHING_CONF_ENGINE); -#if (!defined(FOLLOWURLS)) || (FOLLOWURLS <= 0) if(!hrefs.scanContents) /* * Don't waste time extracting hrefs (parsing html), nobody * will need it */ return; -#endif hrefs.count = 0; hrefs.tag = hrefs.value = NULL; @@ -4082,663 +4047,10 @@ checkURLs(message *mainMessage, mbox_ctx *mctx, mbox_status *rc, int is_html) cli_dbgmsg("PH:Phishing found\n"); } } - if(is_html && (mctx->ctx->options&CL_SCAN_MAILURL) && (*rc != VIRUS)) - do_checkURLs(mctx, &hrefs); } hrefs_done(b,&hrefs); } -#if defined(FOLLOWURLS) && (FOLLOWURLS > 0) -static void -do_checkURLs(mbox_ctx *mctx, tag_arguments_t *hrefs) -{ - table_t *t; - int i, n; - const char *dir; -#ifdef CL_THREAD_SAFE - pthread_t tid[FOLLOWURLS]; - struct arg args[FOLLOWURLS]; -#endif - - t = tableCreate(); - if(t == NULL) - return; - - n = 0; - dir = mctx->dir; - - /* - * Sort .exes higher up so that there's more chance they'll be - * downloaded and scanned - */ - for(i = FOLLOWURLS; (i < hrefs->count) && (n < FOLLOWURLS); i++) { - char *url = (char *)hrefs->value[i]; - char *ptr; - - if(strncasecmp("http://", url, 7) != 0) - continue; - - ptr = strrchr(url, '.'); - if(ptr == NULL) - continue; - if(strcasecmp(ptr, ".exe") == 0) { - /* FIXME: Could be swapping with another .exe */ - cli_dbgmsg("swap %s %s\n", hrefs->value[n], hrefs->value[i]); - ptr = (char *)hrefs->value[n]; - hrefs->value[n++] = (unsigned char *)url; - hrefs->value[i] = (unsigned char *)ptr; - } - } - - n = 0; - - for(i = 0; i < hrefs->count; i++) { - const char *url = (const char *)hrefs->value[i]; - - /* - * TODO: If it's an image source, it'd be nice to note beacons - * where width="0" height="0", which needs support from - * the HTML normalise code - */ - if(strncasecmp("http://", url, 7) == 0) { -#ifndef CL_THREAD_SAFE - struct arg arg; -#endif - char name[NAME_MAX + 1]; - - if(tableFind(t, url) == 1) { - cli_dbgmsg("URL %s already downloaded\n", url); - continue; - } - /* - * What about foreign character spoofing? - */ - if(strchr(url, '%') && strchr(url, '@')) - cli_dbgmsg("Possible URL spoofing attempt noticed, but not blocked (%s)\n", url); - - if(n == FOLLOWURLS) { - cli_dbgmsg("URL %s will not be scanned (FOLLOWURLS limit %d was reached)\n", - url, FOLLOWURLS); - break; - } - - (void)tableInsert(t, url, 1); - cli_dbgmsg("Downloading URL %s to be scanned\n", url); - strncpy(name, url, sizeof(name) - 1); - name[sizeof(name) - 1] = '\0'; - sanitiseName(name); /* bug #538 */ - -#ifdef CL_THREAD_SAFE - args[n].dir = dir; - args[n].url = cli_strdup(url); - args[n].filename = cli_strdup(name); - args[n].depth = 0; - if(pthread_create(&tid[n], NULL, getURL, &args[n])) { - cli_warnmsg("thread creation failed\n"); - free(args[n].filename); - free(args[n].url); - break; - } -#else - arg.url = cli_strdup(url); - arg.dir = dir; - arg.filename = name; - arg.depth = 0; - getURL(&arg); - free(arg.url); -#endif - ++n; - } - } - tableDestroy(t); - -#ifdef CL_THREAD_SAFE - assert(n <= FOLLOWURLS); - cli_dbgmsg("checkURLs: waiting for %d thread(s) to finish\n", n); - while(--n >= 0) { - pthread_join(tid[n], NULL); - free(args[n].filename); - free(args[n].url); - } -#endif -} - -#else /*!FOLLOWURLS*/ - -static void -do_checkURLs(mbox_ctx *mctx, tag_arguments_t *hrefs) -{ -} - -#endif - -#if defined(FOLLOWURLS) && (FOLLOWURLS > 0) -/* - * FIXME: Often WMF exploits work by sending people an email directing them - * to a page which displays a picture containing the exploit. This is not - * currently found, since only the HTML on the referred page is downloaded. - * It would be useful to scan the HTML for references to pictures and - * download them for scanning. But that will hit performance so there is - * an issue here. - */ - -/* - * Simple implementation of a subset of RFC1945 (HTTP/1.0) - * TODO: HTTP/1.1 (RFC2068) - */ -static void * -#ifdef CL_THREAD_SAFE -getURL(void *a) -#else -getURL(struct arg *arg) -#endif -{ - FILE *fp; -#ifdef CL_THREAD_SAFE - struct arg *arg = (struct arg *)a; -#endif - const char *url = arg->url; - const char *dir = arg->dir; - const char *filename = arg->filename; - SOCKET sd; - struct sockaddr_in server; -#ifdef HAVE_IN_ADDR_T - in_addr_t ip; -#else - unsigned int ip; -#endif - in_port_t port; - static in_port_t default_port; - static int tcp; - int doingsite, firstpacket; - char *ptr; - int via_proxy; - const char *proxy; - char buf[BUFSIZ + 1], site[BUFSIZ], fout[NAME_MAX + 1]; - - if(strlen(url) > (sizeof(site) - 1)) { - cli_dbgmsg("Ignoring long URL \"%s\"\n", url); - return NULL; - } - - snprintf(fout, sizeof(fout) - 1, "%s/%s", dir, filename); - - fp = fopen(fout, "wb"); - - if(fp == NULL) { - cli_errmsg("Can't open '%s' for writing\n", fout); - return NULL; - } - cli_dbgmsg("Saving %s to %s\n", url, fout); - -#ifndef C_BEOS - if(tcp == 0) { - const struct protoent *proto = getprotobyname("tcp"); - - if(proto == NULL) { - cli_warnmsg("Unknown prototol tcp, check /etc/protocols\n"); - fclose(fp); - return NULL; - } - tcp = proto->p_proto; -#ifndef C_WINDOWS - endprotoent(); -#endif - } -#endif - if(default_port == 0) { - const struct servent *servent = getservbyname("http", "tcp"); - - if(servent) - default_port = (in_port_t)ntohs(servent->s_port); - else - default_port = 80; -#if !defined(C_WINDOWS) && !defined(C_BEOS) - endservent(); -#endif - } - port = default_port; - - doingsite = 1; - ptr = site; - - proxy = getenv("http_proxy"); /* FIXME: handle no_proxy */ - - via_proxy = (proxy && *proxy); - - if(via_proxy) { - if(strncasecmp(proxy, "http://", 7) != 0) { - cli_warnmsg("Unsupported proxy protocol (proxy = %s)\n", - proxy); - fclose(fp); - return NULL; - } - - cli_dbgmsg("Getting %s via %s\n", url, proxy); - - proxy += 7; - while(*proxy) { - if(doingsite && (*proxy == ':')) { - port = 0; - while(isdigit(*++proxy)) { - port *= 10; - port += *proxy - '0'; - } - continue; - } - if(doingsite && (*proxy == '/')) { - proxy++; - break; - } - *ptr++ = *proxy++; - } - } else { - cli_dbgmsg("Getting %s\n", url); - - if(strncasecmp(url, "http://", 7) != 0) { - cli_dbgmsg("Unsupported protocol\n"); - fclose(fp); - return NULL; - } - - url += 7; - while(*url) { - if(doingsite && (*url == ':')) { - port = 0; - while(isdigit(*++url)) { - port *= 10; - port += *url - '0'; - } - continue; - } - if(doingsite && (*url == '/')) { - url++; - break; - } - *ptr++ = *url++; - } - } - *ptr = '\0'; - - memset((char *)&server, '\0', sizeof(struct sockaddr_in)); - server.sin_family = AF_INET; - server.sin_port = (in_port_t)htons(port); - - ip = inet_addr(site); -#ifdef INADDR_NONE - if(ip == INADDR_NONE) { -#else - if(ip == (in_addr_t)-1) { -#endif - struct hostent h; - - if((my_r_gethostbyname(site, &h, buf, sizeof(buf)) != 0) || - (h.h_addr_list == NULL) || - (h.h_addr == NULL)) { - cli_dbgmsg("Unknown host %s\n", site); - fclose(fp); - return NULL; - } - - memcpy((char *)&ip, h.h_addr, sizeof(ip)); - } - if((sd = socket(AF_INET, SOCK_STREAM, tcp)) < 0) { - fclose(fp); - return NULL; - } - server.sin_addr.s_addr = ip; - if(nonblock_connect(sd, &server, url) < 0) { - closesocket(sd); - fclose(fp); - return NULL; - } - - /* - * TODO: consider HTTP/1.1 - */ - if(via_proxy) - snprintf(buf, sizeof(buf) - 1, - "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: ClamAV %s\r\n\r\n", - url, site, cl_retver()); - else - snprintf(buf, sizeof(buf) - 1, - "GET /%s HTTP/1.0\r\nHost: %s\r\nUser-Agent: ClamAV %s\r\n\r\n", - url, site, cl_retver()); - - /*cli_dbgmsg("%s", buf);*/ - - if(send(sd, buf, (int)strlen(buf), 0) < 0) { - closesocket(sd); - fclose(fp); - return NULL; - } - -#ifdef SHUT_WR - shutdown(sd, SHUT_WR); -#else - shutdown(sd, 1); -#endif - - firstpacket = 1; - - for(;;) { - fd_set set; - struct timeval tv; - int n; - - FD_ZERO(&set); - FD_SET(sd, &set); - - tv.tv_sec = 30; /* FIXME: make this customisable */ - tv.tv_usec = 0; - - if(select((int)sd + 1, &set, NULL, NULL, &tv) < 0) { - if(errno == EINTR) - continue; - closesocket(sd); - fclose(fp); - return NULL; - } - if(!FD_ISSET(sd, &set)) { - fclose(fp); - closesocket(sd); - return NULL; - } - n = recv(sd, buf, sizeof(buf) - 1, 0); - - if(n < 0) { - fclose(fp); - closesocket(sd); - return NULL; - } - if(n == 0) - break; - - /* - * FIXME: Handle header in more than one packet - */ - if(firstpacket) { - char *statusptr; - - buf[n] = '\0'; - - statusptr = cli_strtok(buf, 1, " "); - - if(statusptr) { - int status = atoi(statusptr); - - cli_dbgmsg("HTTP status %d\n", status); - - free(statusptr); - - if((status == 301) || (status == 302)) { - char *location; - - location = strstr(buf, "\nLocation: "); - - if(location) { - char *end; - - if (cli_unlink(fout)) return NULL; - location += 11; - end = location; - while(*end && (*end != '\n')) - end++; - *end = '\0'; - if(arg->depth >= FOLLOWURLS) { - cli_dbgmsg("URL %s will not be followed to %s (FOLLOWURLS limit %d was reached)\n", - arg->url, location, FOLLOWURLS); - break; - } - if(strcmp(location, arg->url) == 0) { - cli_dbgmsg("URL %s redirects to itself\n", - location); - break; - } - - fclose(fp); - closesocket(sd); - - if(strlen(arg->url) < strlen(location)) { - free(arg->url); - arg->url = cli_strdup(location); - } else - strcpy(arg->url, location); - arg->depth++; - cli_dbgmsg("Redirecting to %s\n", location); - return getURL(arg); - } - } - } - /* - * Don't write the HTTP header - */ - if((ptr = strstr(buf, "\r\n\r\n")) != NULL) { - ptr += 4; - n -= (int)(ptr - buf); - } else if((ptr = strstr(buf, "\n\n")) != NULL) { - ptr += 2; - n -= (int)(ptr - buf); - } else - ptr = buf; - - firstpacket = 0; - } else - ptr = buf; - - if(n && (fwrite(ptr, n, 1, fp) != 1)) { - cli_warnmsg("Error writing %d bytes to %s\n", - n, fout); - break; - } - } - - fclose(fp); - closesocket(sd); - return NULL; -} - -/* - * Have a copy here because r_gethostbyname is in shared not libclamav :-( - */ -static int -my_r_gethostbyname(const char *hostname, struct hostent *hp, char *buf, size_t len) -{ - struct hostent *hp2; - int ret = -1; -#if !defined(HAVE_GETHOSTBYNAME_R_6) && !defined(HAVE_GETHOSTBYNAME_R_5) && !defined(HAVE_GETHOSTBYNAME_R_3) -#ifdef CL_THREAD_SAFE - static pthread_mutex_t hostent_mutex = PTHREAD_MUTEX_INITIALIZER; -#endif -#endif - - if((hostname == NULL) || (hp == NULL)) - return -1; - memset(hp, 0, sizeof(struct hostent)); -#if defined(HAVE_GETHOSTBYNAME_R_6) - /* e.g. Linux */ - - if(gethostbyname_r(hostname, hp, buf, len, &hp2, &ret) < 0) - return ret; -#elif defined(HAVE_GETHOSTBYNAME_R_5) - /* e.g. BSD, Solaris, Cygwin */ - /* - * Configure doesn't work on BeOS. We need -lnet to link, but configure - * doesn't add it, so you need to do something like - * LIBS=-lnet ./configure --enable-cache --disable-clamav - */ - if(gethostbyname_r(hostname, hp, buf, len, &ret) == NULL) - return ret; -#elif defined(HAVE_GETHOSTBYNAME_R_3) - /* e.g. HP/UX, AIX */ - if(gethostbyname_r(hostname, &hp, (struct hostent_data *)buf) < 0) - return h_errno; -#else - /* Single thread the code e.g. VS2005 */ -#ifdef CL_THREAD_SAFE - pthread_mutex_lock(&hostent_mutex); -#endif - if((hp2 = gethostbyname(hostname)) == NULL) { -#ifdef CL_THREAD_SAFE - pthread_mutex_unlock(&hostent_mutex); -#endif - return h_errno; - } - memcpy(hp, hp2, sizeof(struct hostent)); -#ifdef CL_THREAD_SAFE - pthread_mutex_unlock(&hostent_mutex); -#endif - -#endif - return 0; -} - -/* - * FIXME: There are lots of copies of this code :-( - */ -static int -nonblock_connect(SOCKET sock, const struct sockaddr_in *sin, const char *hostname) -{ - int select_failures; /* Max. of unexpected select() failures */ - int attempts; - struct timeval timeout; /* When we should time out */ - int numfd; /* Highest fdset fd plus 1 */ - long flags; - char err[128]; - - gettimeofday(&timeout, 0); /* store when we started to connect */ - - if(hostname == NULL) - hostname = "remote"; /* It's only used in debug messages */ - -#ifdef F_GETFL - flags = fcntl(sock, F_GETFL, 0); - - if(flags == -1L) - cli_dbgmsg("getfl: %s\n", cli_strerror(errno, err, sizeof(err))); - else if(fcntl(sock, F_SETFL, (long)(flags | O_NONBLOCK)) < 0) - cli_dbgmsg("setfl: %s\n", cli_strerror(errno, err, sizeof(err))); -#else - flags = -1L; -#endif - if(connect(sock, (const struct sockaddr *)sin, sizeof(struct sockaddr_in)) != 0) - switch(errno) { - case EALREADY: - case EINPROGRESS: - cli_dbgmsg("%s: connect: %s\n", hostname, - cli_strerror(errno, err, sizeof(err))); - break; /* wait for connection */ - case EISCONN: - return 0; /* connected */ - default: - cli_dbgmsg("%s: connect: %s\n", - hostname, cli_strerror(errno, err, sizeof(err))); -#ifdef F_SETFL - if(flags != -1L) - if(fcntl(sock, F_SETFL, flags)) - cli_dbgmsg("f_setfl: %s\n", cli_strerror(errno, err, sizeof(err))); -#endif - return -1; /* failed */ - } - else { -#ifdef F_SETFL - if(flags != -1L) - if(fcntl(sock, F_SETFL, flags)) - cli_dbgmsg("f_setfl: %s\n", cli_strerror(errno, err, sizeof(err))); -#endif - return connect_error(sock, hostname); - } - - numfd = (int)sock + 1; - select_failures = NONBLOCK_SELECT_MAX_FAILURES; - attempts = 1; - timeout.tv_sec += CONNECT_TIMEOUT; - - for (;;) { - int n, t; - fd_set fds; - struct timeval now, waittime; - - /* Force timeout if we ran out of time */ - gettimeofday(&now, 0); - t = (now.tv_sec == timeout.tv_sec) ? - (now.tv_usec > timeout.tv_usec) : - (now.tv_sec > timeout.tv_sec); - - if(t) { - cli_dbgmsg("%s: connect timeout (%d secs)\n", - hostname, CONNECT_TIMEOUT); - break; - } - - /* Calculate how long to wait */ - waittime.tv_sec = timeout.tv_sec - now.tv_sec; - waittime.tv_usec = timeout.tv_usec - now.tv_usec; - if(waittime.tv_usec < 0) { - waittime.tv_sec--; - waittime.tv_usec += 1000000; - } - - /* Init fds with 'sock' as the only fd */ - FD_ZERO(&fds); - FD_SET(sock, &fds); - - n = select(numfd, 0, &fds, 0, &waittime); - if(n < 0) { - cli_dbgmsg("%s: select attempt %d %s\n", - hostname, select_failures, cli_strerror(errno, err, sizeof(err))); - if(--select_failures >= 0) - continue; /* not timed-out, try again */ - break; /* failed */ - } - - cli_dbgmsg("%s: select = %d\n", hostname, n); - - if(n) { -#ifdef F_SETFL - if(flags != -1L) - if(fcntl(sock, F_SETFL, flags)) - cli_dbgmsg("f_setfl: %s\n", cli_strerror(errno, err, sizeof(err))); -#endif - return connect_error(sock, hostname); - } - - /* timeout */ - if(attempts++ == NONBLOCK_MAX_ATTEMPTS) { - cli_dbgmsg("timeout connecting to %s\n", hostname); - break; - } - } - -#ifdef F_SETFL - if(flags != -1L) - if(fcntl(sock, F_SETFL, flags)) - cli_dbgmsg("f_setfl: %s\n", cli_strerror(errno, err, sizeof(err))); -#endif - return -1; /* failed */ -} - -static int -connect_error(SOCKET sock, const char *hostname) -{ - char err[128]; -#ifdef SO_ERROR - int optval; - socklen_t optlen = sizeof(optval); - - getsockopt(sock, SOL_SOCKET, SO_ERROR, &optval, &optlen); - - if(optval) { - cli_dbgmsg("%s: %s\n", hostname, cli_strerror(optval, err, sizeof(err))); - return -1; - } -#endif - - return 0; -} - -#endif - #ifdef HAVE_BACKTRACE static void sigsegv(int sig) @@ -5096,9 +4408,7 @@ do_multipart(message *mainMessage, message **messages, int i, mbox_status *rc, m cli_dbgmsg("Treating inline as attachment\n"); } else { const int is_html = (tableFind(mctx->subtypeTable, cptr) == HTML); - if((mctx->ctx->options&CL_SCAN_MAILURL) && is_html) - checkURLs(aMessage, mctx, rc, 1); - else if(doPhishingScan) + if(doPhishingScan) checkURLs(aMessage, mctx, rc, is_html); messageAddArgument(aMessage, "filename=mixedtextportion"); diff --git a/libclamav/pdf.c b/libclamav/pdf.c index ea0f9a0b8..5fa72302c 100644 --- a/libclamav/pdf.c +++ b/libclamav/pdf.c @@ -74,9 +74,6 @@ static const char *pdf_nextlinestart(const char *ptr, size_t len); static const char *pdf_nextobject(const char *ptr, size_t len); static const char *cli_pmemstr(const char *haystack, size_t hs, const char *needle, size_t ns); -/* - * TODO: handle embedded URLs if (options&CL_SCAN_MAILURL) - */ int cli_pdf(const char *dir, int desc, cli_ctx *ctx, off_t offset) { diff --git a/shared/optparser.c b/shared/optparser.c index b062ef248..893aeb1d0 100644 --- a/shared/optparser.c +++ b/shared/optparser.c @@ -247,8 +247,6 @@ const struct clam_option clam_options[] = { { "ScanMail", "scan-mail", 0, TYPE_BOOL, MATCH_BOOL, 1, NULL, 0, OPT_CLAMD | OPT_CLAMSCAN, "Enable the built in email scanner.", "yes" }, - { "MailFollowURLs", "mail-follow-urls", 0, TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_CLAMSCAN, "If an email contains URLs ClamAV can download and scan them.\nWARNING: This option may open your system to a DoS attack. Please don't use\nthis feature on highly loaded servers.", "no" }, - { "ScanPartialMessages", NULL, 0, TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD, "Scan RFC1341 messages split over many emails. You will need to\nperiodically clean up $TemporaryDirectory/clamav-partial directory.\nWARNING: This option may open your system to a DoS attack. Please don't use\nthis feature on highly loaded servers.", "no" }, { "PhishingSignatures", "phishing-sigs", 0, TYPE_BOOL, MATCH_BOOL, 1, NULL, 0, OPT_CLAMD | OPT_CLAMSCAN, "With this option enabled ClamAV will try to detect phishing attempts by using\nsignatures.", "yes" }, @@ -367,6 +365,7 @@ const struct clam_option clam_options[] = { { "ArchiveMaxCompressionRatio", NULL, 0, TYPE_NUMBER, NULL, -1, NULL, 0, OPT_CLAMD | OPT_DEPRECATED, "", "" }, { "ArchiveBlockMax", NULL, 0, TYPE_BOOL, MATCH_BOOL, -1, NULL, 0, OPT_CLAMD | OPT_DEPRECATED, "", "" }, { "ArchiveLimitMemoryUsage", NULL, 0, TYPE_BOOL, MATCH_BOOL, -1, NULL, 0, OPT_CLAMD | OPT_DEPRECATED, "", "" }, + { "MailFollowURLs", "mail-follow-urls", 0, TYPE_BOOL, MATCH_BOOL, -1, NULL, 0, OPT_CLAMD | OPT_CLAMSCAN | OPT_DEPRECATED, "", "" }, /* Milter specific options */