This file is indexed.

/usr/bin/topica2mail is in libwww-topica-perl 0.6-5.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/perl -w

eval 'exec /usr/bin/perl -w -S $0 ${1+"$@"}'
    if 0; # not running under some shell

use strict; 

use Time::Piece;
use Date::Parse;

use WWW::Topica;
use Email::Simple; 
use Email::LocalDelivery;

=pod

=head1 NAME

topica2mail - convert a Topica mailing list into a mail box

=head1 USAGE

    topica2mail <list-id> <mailbox> [login] [password] [ -d ] [ -l ] [ -s <start> ] [ -e <end> ]

=head1 OPTIONS

=head2 list-id

The name of the list

=head2 mailbox

The mailbox you want to deliver the mail into. 
Will automatically prepend the year and the month so

    foo

will turn into

    foo-2004-10

etc etc

=head2 login

Your login email address. 

If you don't pass in your login and password you may not be able to read some lists.

=head2 password

Your password

If you don't pass in your login and password you may not be able to read some lists.

=head2 -d

Debug - print out debug messages where appropriate

=head2 -l 

Local - use the local test files (for testing, obviously)

=head2 -s <start>

Which mail offset to start from

=head2 -e <end>

Which mail offset to end on

=head1 AUTHOR

Simon Wistow <simon@thegestalt.org>

=head1 COPYRIGHT

Copyright (c), 2004 - Simon Wistow

Distributed under the same terms as Perl itself

=cut 


my $email;
my $pass;
my $list  = shift || die "You must pass a list name\n";
my $out   = shift || die "You must pass a mailbox\n";

if (@ARGV && $ARGV[0] !~ /^-/ && $ARGV[1] !~ /^-/) {
    $email = shift;
    $pass  = shift;
}

my %opts = (
                list     => $list,
                email    => $email,
                password => $pass,
                debug    => 0,
                local    => 0,
            );

while (my $arg = shift @ARGV) {
    if ($arg eq '-d') {
        $opts{debug} = 1;
    } elsif ($arg eq '-l') {
        $opts{local} = 1;
    } elsif    ($arg eq '-s') {
        $opts{first} = shift;
    } elsif    ($arg eq '-e') {
        $opts{last} = shift;
    } else {
        die "Confused by $arg - bailing out\n";
    }


}



my $topica = WWW::Topica->new(%opts);

print "\n\n" if $opts{debug};

my $counter  = 1;
while (my $rfc822 = $topica->mail) {
    
    my $mail = Email::Simple->new($rfc822);

    my $date = $mail->header("date");
    my $time = str2time($date);
    my $tp   = Time::Piece->new($time);

    my $mbox = sprintf "%s-%.4d-%.2d", $out, $tp->year, $tp->mon;

    print     "\t\t". $counter++.") ".
               $mail->header("from")." - ". 
               $mail->header("subject")." - ". 
               $mail->header("date")." to $mbox\n\n";

    Email::LocalDelivery->deliver($mail->as_string, $mbox) 
        || die "Couldn't deliver mail to $mbox\n";

}