#!/usr/bin/perl -wT # outboxer # Frederik Vermeulen # 2005-11-02 # Distributed under GPL. ### config use strict; use String::Random; use MIME::QuotedPrint; use MIME::Base64; use URI::Escape; # This directory needs to be writable by qmail-queue # This directory probably should also be cleaned # regularly by a crontab job a la # find $outboxdir -type d -mtime +30 -exec rm -rf {} \; my $outboxdir = '/var/www/outbox/'; my $outboxfile = ''; # This URL should not allow directory listing my $outboxURL = 'https://inoa.net/outbox'; my $guidlen = 12; ### main my $debug = 0; my $guid = new String::Random->randregex("[A-Za-z0-9]{$guidlen}"); if ((! -d $outboxdir) || (-d "$outboxdir/$guid")){ exit 1; } umask 0022; mkdir("$outboxdir/$guid", 0755) || exit 1; my $inheader= 1; my $filename = 0; while (<>){ if ($inheader){ if (/[\t ]filename=\"(.+)\"/){ $filename = decode_qp($1); }elsif (/[\t ]filename=(\S+)/){ $filename = decode_qp($1); } if (/^\n$/){ $inheader = 0; if (!$filename){ exit 1;} $outboxfile = $outboxdir . "/" . $guid . "/" . $filename; $outboxURL .= "/" . $guid . "/" . uri_escape($filename); open (OUT, ">$outboxfile") || exit 1; } }else{ print OUT decode_base64($_); } } if ($inheader) { exit 1;} close(OUT); print $outboxURL; exit 0;