pax_global_header00006660000000000000000000000064116334422570014521gustar00rootroot0000000000000052 comment=7b9df53e4d92efbd0706ddbbf51023c2852242df dkimstatus/000077500000000000000000000000001163344225700132555ustar00rootroot00000000000000dkimstatus/INSTALL000066400000000000000000000002301163344225700143010ustar00rootroot00000000000000untar the folder dkimstatus/ in your roundcubemail/plugins/ directory and add 'dkimstatus' to the list of plugins in roundcubemail/config/main.inc.php dkimstatus/LICENSE000066400000000000000000000026671163344225700142750ustar00rootroot00000000000000 +-------------------------------------------------------------------------+ | DKIMStatus plugin for Roundcube Webmail IMAP Client | | | | Copyright (C) 2009-2011, Julien Vehent | | | | This program is free software; you can redistribute it and/or modify | | it under the terms of the GNU General Public License version 2 | | as published by the Free Software Foundation. | | | | This program is distributed in the hope that it will be useful, | | but WITHOUT ANY WARRANTY; without even the implied warranty of | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | | GNU General Public License for more details. | | | | You should have received a copy of the GNU General Public License along | | with this program; if not, write to the Free Software Foundation, Inc., | | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | | | +-------------------------------------------------------------------------+ dkimstatus/dkimstatus.php000066400000000000000000000146311163344225700161630ustar00rootroot00000000000000action == 'show' || $rcmail->action == 'preview') { $this->add_hook('imap_init', array($this, 'imap_init')); $this->add_hook('message_headers_output', array($this, 'message_headers')); } else if ($rcmail->action == '') { // with enabled_caching we're fetching additional headers before show/preview $this->add_hook('imap_init', array($this, 'imap_init')); } } function imap_init($p) { $rcmail = rcmail::get_instance(); $p['fetch_headers'] = trim($p['fetch_headers'].' ' . strtoupper('Authentication-Results').' '. strtoupper('X-DKIM-Authentication-Results').' ' .strtoupper('X-Spam-Status')); return $p; } function image($image, $alt, $title) { return ''.$this->gettext($alt).' '; } function message_headers($p) { $this->add_texts('localization'); /* First, if dkimproxy did not find a signature, stop here */ if($p['headers']->others['x-dkim-authentication-results'] || $p['headers']->others['authentication-results'] || $p['headers']->others['x-spam-status']){ $results = $p['headers']->others['x-dkim-authentication-results']; if(preg_match("/none/", $results)) { $image = 'nosiginfo.png'; $alt = 'nosignature'; } else { /* Second, check the authentication-results header */ if($p['headers']->others['authentication-results']) { $results = $p['headers']->others['authentication-results']; if(preg_match("/dkim=([a-zA-Z0-9]*)/", $results, $m)) { $status = ($m[1]); } if(preg_match("/domainkeys=([a-zA-Z0-9]*)/", $results, $m)) { $status = ($m[1]); } if($status == 'pass') { /* Verify if its an author's domain signature or a third party */ if(preg_match("/[@][a-zA-Z0-9]+([.][a-zA-Z0-9]+)?\.[a-zA-Z]{2,4}/", $p['headers']->from, $m)) { $authordomain = $m[0]; if(preg_match("/header\.i=(([a-zA-Z0-9]+[_\.\-]?)+)?($authordomain)/", $results) || preg_match("/header\.from=(([a-zA-Z0-9]+[_\.\-]?)+)?($authordomain)/", $results)) { $image = 'authorsign.png'; $alt = 'verifiedsender'; $title = $results; } else { $image = 'thirdpty.png'; $alt = 'thirdpartysig'; $title = $results; } } } /* If signature proves invalid, show appropriate warning */ else if ($status) { $image = 'invalidsig.png'; $alt = 'invalidsignature'; $title = $results; } /* If no status it can be a spf verification */ else { $image = 'nosiginfo.png'; $alt = 'nosignature'; } /* Third, check for spamassassin's X-Spam-Status */ } else if ($p['headers']->others['x-spam-status']) { $image = 'nosiginfo.png'; $alt = 'nosignature'; /* DKIM_* are defined at: http://search.cpan.org/~kmcgrail/Mail-SpamAssassin-3.3.2/lib/Mail/SpamAssassin/Plugin/DKIM.pm */ $results = $p['headers']->others['x-spam-status']; if(preg_match_all('/DKIM_[^,]+/', $results, $m)) { if(array_search('DKIM_SIGNED', $m[0]) !== FALSE) { if(array_search('DKIM_VALID', $m[0]) !== FALSE) { if(array_search('DKIM_VALID_AU', $m[0])) { $image = 'authorsign.png'; $alt = 'verifiedsender'; $title = 'DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU'; } else { $image = 'thirdpty.png'; $alt = 'thirdpartysig'; $title = 'DKIM_SIGNED, DKIM_VALID'; } } else { $image = 'invalidsig.png'; $alt = 'invalidsignature'; $title = 'DKIM_SIGNED'; } } } } } } else { $image = 'nosiginfo.png'; $alt = 'nosignature'; } if ($image && $alt) { $p['output']['from']['value'] = $this->image($image, $alt, $title) . $p['output']['from']['value']; } return $p; } } dkimstatus/images/000077500000000000000000000000001163344225700145225ustar00rootroot00000000000000dkimstatus/images/BIGICONS.TXT000066400000000000000000000004361163344225700163230ustar00rootroot00000000000000 I personnally prefer small icons (13*13pixels), but if you like them bigger, you can use the ones in the tar file, they are 30*30pixels and expend a little bit the height of the 'From' line of roundcube. Just move the small icons somewhere else and untar the archive in this folder. dkimstatus/images/authorsign.png000066400000000000000000000012731163344225700174160ustar00rootroot00000000000000PNG  IHDR sRGBbKGD pHYs  tIMEtEXtCommentCreated with GIMPWIDAT(ϝOHq?ީs{5ɵA[jVҡCy :xNQC ])j, 6jBR{QP??r%: ;Y̢ !h!3_y87}NhZ%B 6R*8e+ɛ '>lgZ\dx9 s#ѩSt XV8B%eMIENDB`dkimstatus/images/bigicons.tar000066400000000000000000000240001163344225700170230ustar00rootroot00000000000000authorsign.png0000644000175000017500000000213411331546166013313 0ustar julienjulienPNG  IHDRFΨsRGBbKGD pHYs  tIME +!tEXtCommentCreated with GIMPWIDAT8ՔO\Us|fDRoXtU.W]颡ƴ1MJV]hX`\VэhN*A(r=.&or7Owya7ֿmq.y*pڢ'=Wʎѐ+l&C)!^yMҗԃs׃EYw@U+g >CYH\|=8znٜo<"9*pbOB6DEN H.{(Ũf6+ǃB@z%0 W#| F jb?.տӿʑ՝W`]@d/@j z6PT! -!4 t4 =A"YS/01@ @,0@4#5)&i3@bԵ𤿎 T!('Ex G+3epf ,K/OA[DNV0sR.O시P`>=H| o '4:0&fMʸp*cx~PwF!T*ľ04Ao Ł}$@ÌeZ•>Btrl,DXE蹻|zVO Q p%o +'"[ZUG#TZ)d ;# t2T*!.0R痒,iSIQ H3 ܴZVyB)B-nKnLn68bO99D9!= YȌp=t7k/%>~ lFp3 /ko)]'8@j?ĿGfslEIENDB`invalidsig.png0000644000175000017500000000171011331546270013254 0ustar julienjulienPNG  IHDR sRGBbKGD pHYs  tIME ,'(,MtEXtCommentCreated with GIMPW#IDAT8˽T[hTW];3w&iDSi!IU!O)jSjC B㇕U#D|EQbA|L8s>h 뜵ޜ}Ə&6C㉶V ~{ۯ42Ǜ%W-<> )U}/IPou)ttծ}N7F?U^Zk;O,}Uepfq.Xٳ.ټ@=Ow\u`pm~Nm:vҤKi ';JW-}? n^X|Um'rW$AWx-Ãbuzg±<O 5uX_M.j =((`8\{>k3oFZn4; %b'k:pxc1@\]˗yG!ē滅ci'*| 0 L< m)'Ӡ+ƆazўE6 O[y \@ ˰1ppmsoU_}P-:żnް&Ź4L '²Pn_ͱ"9AD덯ڹ jM}?-VGù IFDE|@3 : :?l-S}[b: !'&BWd%yp* RQ'Ǹ2M@PFI/%,#R wIENDB`nosiginfo.png0000644000175000017500000000235411331546350013122 0ustar julienjulienPNG  IHDR-sRGBbKGD pHYs  tIME -i_tEXtCommentCreated with GIMPWGIDAT8}ohUuǿ9޻gNTJQ1 Rb+P3Z/ !*"7A ĜmJSgsܝs9 M]}=yEa_9^_<5COwHff۱8T*ƩF6)mtZ#M}n~wMï=׺4 z~BHtK_~8rƖ='OsaS )ud߭b9d,du4 n?$3Mv6l*(SEE$\ޢ{7pb"Պi^,\ f #+Q_EQE$p뫪^Ym""TUCwض]CH /["$s,XKa3 UQRB AS= "him ,%"-aY> fm1 E6,ZxTU3CT:N V *Y3|B: i^fmtv9ski8N2p9.\aʡ0>>Xl%%1L.?/BTJD ҙt} Dc y N$ 偱;@0! 1qr/B@X+ת%ʲ: Ba[[%נ2?nv9ucWc-Ύ>LV 2mV'ABE:cxb`)aYYZB;r2m{găΎ>L ÃDEExb`{5)cYHAi mPy[ɻwζ\j e磷g@{v_vժU/ RR0F<~ #A{{kۖ- LKP `7^@ոfnY␇Ç ݱ9Փ2S6`5*y_&'sٻw0( 4EgIENDB`thirdpty.png0000644000175000017500000000235311331546046012777 0ustar julienjulienPNG  IHDR-sRGBbKGD pHYs  tIME * tEXtCommentCreated with GIMPWFIDAT8}[le_۵ZvC mA#D"5(xaLH8+T]QA4$& 9Aq覬 UuVAK޼yЪٺgqP ?PNn=wKzbVg &@}Pч|ӊ8~N)-[P4P49a92t8n}~Kv+O7o 0.w>-%Gqz6]=~4ܓ63fx*]]{o||QedXqzFdG4glh:%kQUz1/m0*jluJBy!S]y>`|Pz7Bd!.,(+;'`:tH! ؀5R+(jIENDB`dkimstatus/images/invalidsig.png000066400000000000000000000011521163344225700173600ustar00rootroot00000000000000PNG  IHDR r|sRGBbKGD pHYs  tIME8x$tEXtCommentCreated with GIMPWIDAT(ϕ?hSQw3/%&Ķ֖\: : bkjJWyb7]E n&PH1 I~.*ZZtv]Tu{3Z#kw(O_,IͭiYK3r:x^|9gV/ zy<-{ ō5o^uh+c ?=+RGi,MPSw7cHyHy8]R k!o/>op;ӓ ^>AzpIY[0͈>n([PfVq{P~ 5|DCMxʂ#e4w.^/u) €1y9WlHy˘ƻj3:d"qxuBH~VII=25NDKwj8° K8IENDB`dkimstatus/images/nosiginfo.png000066400000000000000000000013031163344225700172200ustar00rootroot00000000000000PNG  IHDR 7sRGBbKGD pHYs  tIME(evtEXtCommentCreated with GIMPWIDAT(];LSaGߥ@ H"V!>ծLFtS CH|.`0jx IyHkR{wQS99aij&fW>Ƿ{x 5BDE1E1LNLlQR}/&?3bigiE1B_ut\LIQ~lyB RU=\n|* ۚrp e/*wjoJHScG]LƪLFB`0T\nKH" },5, Lh k,Mnlo 4M@ RBʕ&*dɤ9G8 A(m[[d|GO$cccC7fV9ϡ DD1r |~c^x/: lt6vJ}YZysT`ѧEc<%Ei}cFq_DFv|R]+?ZH\(ob"uIENDB`dkimstatus/images/thirdpty.png000066400000000000000000000013221163344225700170750ustar00rootroot00000000000000PNG  IHDR 7sRGBbKGD pHYs  tIME(ڠtEXtCommentCreated with GIMPW-IDAT(eMHqǿtmIqZ,ceHlKQP.Yt2. P(Z, )|hP|>4U;n+)˩o? CD.JƒJ19erjC!8c⅞sg9c6"gI%G}݁m- ']gNOΑ(9geְ$ u'%{~_=g ^l:vʮq@䠛s-E%PJ^cͷrI"h>C3 ds |η:vb: i a3 *TM"qseg"kbtnMǒ5cln۽nDJ=f$VcewxQ-+Yv9\ @Q5bQS^EaХ6IVy2.-[v-(evr` ~P IENDB`dkimstatus/localization/000077500000000000000000000000001163344225700157455ustar00rootroot00000000000000dkimstatus/localization/cs_CZ.inc000066400000000000000000000007041163344225700174420ustar00rootroot00000000000000 dkimstatus/localization/de_DE.inc000066400000000000000000000007221163344225700174010ustar00rootroot00000000000000 dkimstatus/localization/en_US.inc000066400000000000000000000005421163344225700174520ustar00rootroot00000000000000 dkimstatus/localization/es_ES.inc000066400000000000000000000005441163344225700174410ustar00rootroot00000000000000 dkimstatus/localization/fr_FR.inc000066400000000000000000000006021163344225700174340ustar00rootroot00000000000000 dkimstatus/localization/it_IT.inc000066400000000000000000000005711163344225700174530ustar00rootroot00000000000000dkimstatus/localization/ja_JP.inc000066400000000000000000000006421163344225700174250ustar00rootroot00000000000000 dkimstatus/localization/pl_PL.inc000066400000000000000000000005441163344225700174510ustar00rootroot00000000000000 dkimstatus/localization/ro_RO.inc000066400000000000000000000007131163344225700174610ustar00rootroot00000000000000