- weitere Versuche
authorheiko
Wed, 05 Sep 2007 23:15:45 +0000
changeset 11 1fccf68e52c6
parent 10 af315e1a9b1e
child 12 62cd5aef2cfa
- weitere Versuche
Makefile
hs12
messages/plain.out
messages/signed.out
t/00-vip-from.t
t/10-x.t
--- a/Makefile	Wed Sep 05 14:52:16 2007 +0000
+++ b/Makefile	Wed Sep 05 23:15:45 2007 +0000
@@ -1,4 +1,4 @@
-BIN = mimecut
+BIN = mimecut hs12
 CLEANFILES = $(BIN)
 
 .PHONY: all clean install test
@@ -6,7 +6,11 @@
 all:	$(BIN)
 
 test:	all
-	prove --timer t/
+	@rm .verbose 2>/dev/null && O=--verbose;\
+	prove $$O --timer t/
+
+verbose:
+	@touch .verbose
 
 clean:  ; -rm -f $(CLEANFILES)
 
--- a/hs12	Wed Sep 05 14:52:16 2007 +0000
+++ b/hs12	Wed Sep 05 23:15:45 2007 +0000
@@ -1,36 +1,40 @@
 #! /usr/bin/perl
+
 use strict;
 use warnings;
 
 use Fatal qw(:void select);
 use File::Temp qw(tempfile);
-use Smart::Comments;
+use if $ENV{DEBUG} => "Smart::Comments";
 
 sub print_message(*$);
 sub read_message();
 sub pass_mime($);
 sub forward_to_boundary($*);
-sub read_header(*);
-sub process(*$);
+sub read_header(*$);
+sub process(*$$);
 
 MAIN: {
     my $message = read_message();
     my $tmpout  = tempfile();
-    my $stdout  = select $tmpout;
+    my $stdout  = select $tmpout;    # print ab jetzt ins tmpout
 
     seek($message, 0, 0);
-    process($message, undef);
+    process($message, undef, undef);
 
     # spit out everthing
     select $stdout;
     seek($tmpout, 0, 0);
 
-    {    # the tmpout may contain only parts of the message
-            # to avoid unnessesary copy actioins
+    # now output the stuff collected in tmpout
+    # and the rest of the message
+    {
         local $/ = \10240;
         print while <$tmpout>;
         print while <$message>;
     }
+
+    exit 0;
 }
 
 sub print_message(*$) {
@@ -46,27 +50,36 @@
     }
 }
 
-sub process(*$) {
-    my ($m,      $boundary) = shift;
-    my ($header, %header)   = read_header($m);
-    my $mime;
+sub process(*$$) {
+    my ($m, $boundary, $mime_version) = @_;
+    my ($header, %header) = read_header($m, $boundary);
+    my $mime_type;
 
-    if (    $header{"mime-version"}
+    $mime_version ||= $header{"mime-version"};
+
+    ### $header
+
+    if (    $mime_version
         and $header{"content-type"})
     {
-        ($mime, undef, $boundary) = (
+        ($mime_type, undef, $boundary) = (
             $header{"content-type"} =~ /^(.*?); # mime type
 	      (?:.*(?:boundary=(['"])(.*?)\2))? # eventuell noch mehr
 	    /x
         );
     }
 
-    if (!$mime or pass_mime($mime)) {
+    if (not $mime_type or pass_mime($mime_type)) {
+        warn "passing: " . ($mime_type ? $mime_type : "no mime_type") . "\n";
         print $header;
         print_message($m, $boundary);
         return;
     }
+    else {
+        warn "not just passing: $mime_type\n";
+    }
 
+    process($m, $boundary, $mime_version);
 
 }
 
@@ -86,19 +99,27 @@
 
 # in:	current message file handle
 # out:	($orignal_header, %parsed_header)
-sub read_header(*) {
-    my $msg = shift;
-    my ($from, $h);
+sub read_header(*$) {
+    my ($msg, $start) = @_;
+    my $h = "";
 
-    local $_ = <$msg>;
-    $from = /^from\s/i ? $_ : "";
+    if (defined $start) {
+        while (<$msg>) {
+            $h .= $_;
+            last if /^--$start\s*$/;
+        }
+    }
 
-    while (<$msg>) { $h .= $_; last if /^\s*$/ }
-    $_ = $h;
+    while (<$msg>) {
+        $h .= $_;
+        last if /^\s*$/;
+    }
+
+    $_ = $h;    # unmodified header (excl. $from)
 
     s/\r?\n\s+(?=\S)/ /gm;    # continuation lines
     s/^(\S+):/\L$1:/gm;       # header fields to lower case
 
-    return ("$from$h", ":unix_from:" => split(/^(\S+):\s*/m, "$from$_"));
+    return ($h, ":unix_from:" => split(/^(\S+):\s*/m, $_));
 }
 __END__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messages/plain.out	Wed Sep 05 23:15:45 2007 +0000
@@ -0,0 +1,52 @@
+From lug-dd-bounces@mailman.schlittermann.de Wed Sep 05 15:54:11 2007
+Received: from uucp by jumper.schlittermann.de with local-rmail (Exim 4.63)
+	(envelope-from <lug-dd-bounces@mailman.schlittermann.de>)
+	id 1ISvKd-0005xY-TH
+	for heiko@jumper.schlittermann.de; Wed, 05 Sep 2007 15:54:11 +0200
+Received: from cyrus by ssl.schlittermann.de with local (Exim 4.63)
+	(envelope-from <lug-dd-bounces@mailman.schlittermann.de>)
+	id 1ISvJ7-0000I4-Ez
+	for heiko@jumper.schlittermann.de; Wed, 05 Sep 2007 15:52:37 +0200
+Received: from ssl.schlittermann.de ([unix socket])
+	 by pu (Cyrus v2.2.13-Debian-2.2.13-0.4.ius.stable) with LMTPA;
+	 Wed, 05 Sep 2007 15:52:37 +0200
+X-Sieve: CMU Sieve 2.2
+Received: from localhost ([127.0.0.1] helo=pu.schlittermann.de)
+	by ssl.schlittermann.de with esmtp (Exim 4.63)
+	(envelope-from <lug-dd-bounces@mailman.schlittermann.de>)
+	id 1ISvJ6-0000EV-MT; Wed, 05 Sep 2007 15:52:36 +0200
+Received: from scanner.schlittermann.de ([212.80.235.140])
+	by ssl.schlittermann.de with esmtp (Exim 4.63)
+	(envelope-from <konrad@silmor.de>) id 1ISvIR-0000E5-4j
+	for lug-dd@mailman.schlittermann.de; Wed, 05 Sep 2007 15:51:55 +0200
+X-Virus-Scanned: Debian amavisd-new at scanner.schlittermann.de
+Received: from ssl.schlittermann.de ([212.80.235.130])
+	by scanner.schlittermann.de (scanner.schlittermann.de [212.80.235.140])
+	(amavisd-new, port 10024)
+	with ESMTP id G6ViDk9SYaNn for <lug-dd@mailman.schlittermann.de>;
+	Wed,  5 Sep 2007 15:51:52 +0200 (CEST)
+Received: from silmor.de ([217.160.219.75] helo=p15139323.pureserver.info)
+	by ssl.schlittermann.de with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32)
+	(Exim 4.63) (envelope-from <konrad@silmor.de>) id 1ISvI7-0000Au-Jf
+	for lug-dd@mailman.schlittermann.de; Wed, 05 Sep 2007 15:51:39 +0200
+Received: from pd9eb52c2.dip.t-dialin.net ([217.235.82.194] helo=zaphod.local)
+	by p15139323.pureserver.info with esmtpsa
+	(TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.63)
+	(envelope-from <konrad@silmor.de>) id 1ISvHx-0005BE-QG
+	for lug-dd@mailman.schlittermann.de; Wed, 05 Sep 2007 15:51:25 +0200
+From: Konrad Rosenbaum <konrad@silmor.de>
+To: Linux-User-Group Dresden <lug-dd@mailman.schlittermann.de>
+Date: Wed, 5 Sep 2007 15:51:25 +0200
+User-Agent: KMail/1.9.6
+References: <200709041804.48445.2005@kuarepoti-dju.net>
+	<200709050938.25537@zaphod.konrad.silmor.de>
+	<46DE9079.2040409@gmx.de>
+In-Reply-To: <46DE9079.2040409@gmx.de>
+MIME-Version: 1.0
+Message-Id: <200709051551.26621@zaphod.konrad.silmor.de>
+
+Hallo,
+das ist nur ein Test,
+sonst nichts.
+-- 
+HS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messages/signed.out	Wed Sep 05 23:15:45 2007 +0000
@@ -0,0 +1,132 @@
+From bounce-debian-user-german=hs=schlittermann.de@lists.debian.org Mon Sep 03 17:38:53 2007
+Received: from uucp by jumper.schlittermann.de with local-rmail (Exim 4.63)
+	(envelope-from <bounce-debian-user-german=hs=schlittermann.de@lists.debian.org>)
+	id 1ISE0r-0004Ok-KE
+	for heiko@jumper.schlittermann.de; Mon, 03 Sep 2007 17:38:53 +0200
+Received: from cyrus by ssl.schlittermann.de with local (Exim 4.63)
+	(envelope-from <bounce-debian-user-german=hs=schlittermann.de@lists.debian.org>)
+	id 1ISDwP-00023b-Io
+	for heiko@jumper.schlittermann.de; Mon, 03 Sep 2007 17:34:17 +0200
+Received: from ssl.schlittermann.de ([unix socket])
+	 by pu (Cyrus v2.2.13-Debian-2.2.13-0.4.ius.stable) with LMTPA;
+	 Mon, 03 Sep 2007 17:34:17 +0200
+X-Sieve: CMU Sieve 2.2
+Received: from scanner.schlittermann.de ([212.80.235.140])
+	by ssl.schlittermann.de with esmtp (Exim 4.63)
+	(envelope-from <bounce-debian-user-german=hs=schlittermann.de@lists.debian.org>)
+	id 1ISDwP-00023T-9h
+	for hs@schlittermann.de; Mon, 03 Sep 2007 17:34:17 +0200
+X-Virus-Scanned: Debian amavisd-new at scanner.schlittermann.de
+Received: from ssl.schlittermann.de ([212.80.235.130])
+	by scanner.schlittermann.de (scanner.schlittermann.de [212.80.235.140]) (amavisd-new, port 10024)
+	with ESMTP id etEIcw56mc1b for <hs@schlittermann.de>;
+	Mon,  3 Sep 2007 17:34:16 +0200 (CEST)
+Received: from murphy.debian.org ([70.103.162.31])
+	by ssl.schlittermann.de with esmtp (Exim 4.63)
+	(envelope-from <bounce-debian-user-german=hs=schlittermann.de@lists.debian.org>)
+	id 1ISDwH-000227-6R
+	for hs@schlittermann.de; Mon, 03 Sep 2007 17:34:13 +0200
+Received: from localhost (localhost [127.0.0.1])
+	by murphy.debian.org (Postfix) with QMQP
+	id 2BA702E7A4; Mon,  3 Sep 2007 15:40:29 +0000 (UTC)
+Old-Return-Path: <uwe.kerstan@gmx.de>
+X-Spam-Checker-Version: SpamAssassin 3.1.4 (2006-07-26) on murphy.debian.org
+X-Spam-Status: No, score=-7.3 required=4.0 tests=AWL,BAYES_00,LDOSUBSCRIBER,
+	SPF_PASS autolearn=ham version=3.1.4
+X-Original-To: debian-user-german@lists.debian.org
+Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+	by murphy.debian.org (Postfix) with SMTP id 8AA922E6E9
+	for <debian-user-german@lists.debian.org>; Mon,  3 Sep 2007 15:40:21 +0000 (UTC)
+Received: (qmail invoked by alias); 03 Sep 2007 15:33:43 -0000
+Received: from pD95D3374.dip0.t-ipconnect.de (EHLO kiste.home.zz) [217.93.51.116]
+  by mail.gmx.net (mp036) with SMTP; 03 Sep 2007 17:33:43 +0200
+X-Authenticated: #636122
+X-Provags-ID: V01U2FsdGVkX1+EVgAKYkaEHifj89tKEtKSvw8bFiMfD1wz7Sl+VW
+	Bjno2WJ62Zdjmi
+Received: from uk by kiste.home.zz with local (Exim 4.63)
+	(envelope-from <uwe.kerstan@gmx.de>)
+	id 1ISDvr-0001tq-BJ
+	for debian-user-german@lists.debian.org; Mon, 03 Sep 2007 17:33:43 +0200
+Date: Mon, 3 Sep 2007 17:33:43 +0200
+From: Uwe Kerstan <uwe.kerstan@gmx.de>
+To: debian-user-german@lists.debian.org
+Message-ID: <20070903153343.GA5367@kiste.home.zz>
+Mail-Followup-To: debian-user-german@lists.debian.org
+References: <8Z2Q8-5sF-15@gated-at.bofh.it> <8Z67m-2hf-13@gated-at.bofh.it> <8ZhP5-3BY-15@gated-at.bofh.it> <8ZjHe-6F4-3@gated-at.bofh.it> <0MKxQS-1ISC0q3VR5-000887@mrelayeu.kundenserver.de>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="Q68bSM7Ycu6FN28Q"
+Content-Disposition: inline
+In-Reply-To: <0MKxQS-1ISC0q3VR5-000887@mrelayeu.kundenserver.de>
+X-Priority: normal
+Organization: CoLUG
+X-Face: )M4WRmNYmN{3M5vXo_nkM-A3^OAc,/Hr_@z~#Y[$%&ju~oLC)p`Lp5E*~y]D=|BKd_ACwSi
+ L*"9GpEg<D>RUAPbGg3Sbcy%'4tzZkb[<ZWW;6Ae;#?}|;;.8OHNU8QO$
+X-URL: http://www.linuxer.onlinehome.de 
+Mail-Copies-To: nobody
+User-Agent: Mutt/1.5.13 (2006-08-11)
+X-Y-GMX-Trusted: 0
+X-Rc-Virus: 2006-10-25_01
+X-Rc-Spam: 2007-05-24_01
+Resent-Message-ID: <-vOUfC.A.nwE.trC3GB@murphy>
+Resent-From: debian-user-german@lists.debian.org
+X-Mailing-List: <debian-user-german@lists.debian.org> archive/latest/215987
+X-Loop: debian-user-german@lists.debian.org
+List-Id: <debian-user-german.lists.debian.org>
+List-Post: <mailto:debian-user-german@lists.debian.org>
+List-Help: <mailto:debian-user-german-request@lists.debian.org?subject=help>
+List-Subscribe: <mailto:debian-user-german-request@lists.debian.org?subject=subscribe>
+List-Unsubscribe: <mailto:debian-user-german-request@lists.debian.org?subject=unsubscribe>
+Precedence: list
+Resent-Sender: debian-user-german-request@lists.debian.org
+Resent-Date: Mon,  3 Sep 2007 15:40:29 +0000 (UTC)
+X-IUS-Spam-Comment: scanned on ssl.schlittermann.de hash:35FCFDF61F49A167A89EABD0CC15386592069464
+X-IUS-Spam-Score: -2.4
+X-IUS-Spam-Level: --
+X-IUS-Spam-Report: AWL=0.155,BAYES_00=-2.599
+Subject: Re: ZDF Mediathek funktioniert nicht im Firefox u.a. Browsern
+
+--Q68bSM7Ycu6FN28Q
+Content-Type: text/plain; charset=iso-8859-1
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+
+* A.net.te_und_Mi.cha.el_Glo.cken.stein  [03-09-2007 15:30]:
+
+> Da scheint es aber ein Problem mit JavaScript zu sein, ich bekomme
+> nur einen grauen Hintergrund, nicht mal eine Auswahl von Optionen
+> oder Filmen. Bin lieber mit dem Konqueror unterwegs, schade.
+
+Der Javascript scheint ein paar Macken zu haben. Bei mir geht es
+mit vlc-plugin und mplayer-plugin. vlc-plugin hat leider keine
+Steuerelemente, mplayer-plugin hat etwas geruckelt, da kann man
+an den Cache-Optionen drehen, dann wird es besser. Wenn man
+zu einem anderen Film wechselt, st=FCrzt der Iceweasel manchmal ab.
+Alternative Links auf die Videos w=E4ren w=FCnschenswert...
+
+Gru=DF Uwe
+
+--Q68bSM7Ycu6FN28Q
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+iD8DBQFG3ClXtReBfnaTvyIRAsmZAKCHsUGjg07DYXS8x+HbnVjTlOTrKwCcD1Lx
+OFqTZ8TAcGvQfRwLsgTAEF0=
+=kwDw
+-----END PGP SIGNATURE-----
+
+--Q68bSM7Ycu6FN28Q--
+
+
+-- 
+Haeufig gestellte Fragen und Antworten (FAQ): 
+http://www.de.debian.org/debian-user-german-FAQ/
+
+Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@lists.debian.org
+mit dem Subject "unsubscribe". Probleme? Mail an listmaster@lists.debian.org (engl)
+
+
--- a/t/00-vip-from.t	Wed Sep 05 14:52:16 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-use Test::More tests => 2;
-use strict;
-use warnings;
-
-my $x = "a";
-
-is($x, "a");
-like($x, qr/a/);
-
-
-__END__
-use Fatal qw(:void open close seek);
-use FindBin qw($Bin);
-
-use IO::File;
-
-my $out = new_tmpfile IO::File;
-my $err = new_tmpfile IO::File;
-
-
-my $pid = open(CUTTER, "|-") or do {
-	open(STDERR, ">&", $err);
-	open(STDOUT, ">&", $out);
-	exec "../mimecut";
-	die "Can't exec: $!\n";
-};
-
-open(X, "$Bin/mail1.eml");
-
-print CUTTER <X>;
-close(CUTTER);
-
-seek($out, 0, 0);
-print <$out>;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t/10-x.t	Wed Sep 05 23:15:45 2007 +0000
@@ -0,0 +1,48 @@
+use Test::More tests => 2;
+use strict;
+use warnings;
+use Fatal qw(:void open seek truncate);
+use FindBin qw($Bin);
+use File::Temp qw(tempfile);;
+use File::Compare;
+
+my $MIMECUT = "$Bin/../hs12";
+
+my $tmpout = tempfile();
+open(my $saveout, ">&STDOUT");
+open(STDOUT, ">&", $tmpout);
+
+foreach (qw(plain signed)) {
+    seek($tmpout, 0, 0);
+    truncate($tmpout, 0);
+
+    system("$MIMECUT <$Bin/../messages/$_.in");
+    seek($tmpout, 0, 0);
+    is(compare($tmpout, "$Bin/../messages/$_.out"), 0, $_);
+}
+
+
+__END__
+use Fatal qw(:void open close seek);
+use FindBin qw($Bin);
+
+use IO::File;
+
+my $out = new_tmpfile IO::File;
+my $err = new_tmpfile IO::File;
+
+
+my $pid = open(CUTTER, "|-") or do {
+	open(STDERR, ">&", $err);
+	open(STDOUT, ">&", $out);
+	exec "../mimecut";
+	die "Can't exec: $!\n";
+};
+
+open(X, "$Bin/mail1.eml");
+
+print CUTTER <X>;
+close(CUTTER);
+
+seek($out, 0, 0);
+print <$out>;