#!/usr/bin/perl -wT # # Receive HTTP post request with a file upload and process it as a # sitesummary submission. # # Handle three different submission methods # - simple post message, where the complete body is the popcon report # (used by popcon version 1.30). # - mime-encoded upload with report in compressed form (used by # popcon version 1.31 and newer). # - mime-encoded upload with report in uncompressed form (used by # ubuntu popcon). use strict; use CGI; my $basedir = "/var/lib/sitesummary"; $ENV{PATH}=""; print "Content-Type: text/plain\n\n"; if (exists $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} ne "POST") { print "Sitesummary HTTP-POST submission URL\n"; print "Visit http://debian-edu.alioth.debian.org/ for more info.\n"; exit 0; } # Extract post data, handle both simple and multipart way my @entry; if (exists $ENV{CONTENT_TYPE} && $ENV{CONTENT_TYPE} =~ m%multipart/form-data%){ my $query = new CGI; my $fh = $query->upload("popcondata"); if ($fh) { my $filename = $query->param("popcondata"); my $type = $query->uploadInfo($filename)->{'Content-Type'}; if ("text/plain; charset=utf-8" ne $type && "application/octet-stream" ne $type) { # Used by ubuntu script print "Only 'text/plain; charset=utf-8' and 'application/octet-stream ' is supported (not $type)!"; die; } else { my $encoding = $query->uploadInfo($filename)->{'Content-Encoding'}; if ("x-gzip" eq $encoding || "gzip" eq $encoding) { # Uncompress print "Compressed ($encoding) encoding detected.\n"; my $data; # $data = join("", <$fh>); my $len = (stat($fh))[7]; read $fh, $data, $len; $data = Compress::Zlib::memGunzip($data); @entry = ($data); } else { # Pass throught print "Identity encoding detected.\n"; @entry = <$fh>; } } } else { print $query->cgi_error; die; } } else { print <