#!/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'} = "
Log In Error: $mmai
"; 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 log in again\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{'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/\&/\&\;/g; $mmcn =~ s/\/\>\;/g; $mmcn =~ s/\%mmco/\/g; my($mmcq) = '(http://|https://|ftp://)' . q%(?:&(?![gl]t;)|[^\s\(\)\|<>,"'\&])+% . q%[^\.?!;,"'\|\[\]\(\)\s<>\&]%; my($mmcr) = "\$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'} .= "[$mmdf] "; } else { $mailman::mmaj{'PAGELINKS'} .= qq||; } } else { if($mmdb) { $mailman::mmaj{'PAGELINKS'} .= "[$mmdf] "; } else { $mailman::mmaj{'PAGELINKS'} .= qq|| . qq|[$mmdf] |; } } } } 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|

\n| . qq|\n| . qq|\n| . qq|

\n|; } else { if($mmdz =~ /\.(jpg)|(gif)|(png)\s*$/i) { $mmdg .= qq|

\n| . qq|

\n| . qq|\n| . qq|\n| . qq|\n| . qq|
Attachment 1:\n| . qq|\n| . qq|$mmdz
\n| . qq|\n| . qq|\n| . qq|

\n|; } else { $mmdg .= qq|

Attachment 1:\n| . qq|\n| . qq|$mmdz

\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|

\n| . qq|\n| . qq|\n| . qq|

\n|; } else { if($mmek[$mmer+1] =~ /\.(jpg)|(gif)|(png)\s*$/i) { $mmdg .= qq|

\n| . qq|

\n| . qq|\n| . qq|\n| . qq|\n| . qq|
Attachment #$mmer:\n| . qq|\n| . qq|$mmek[$mmer+1]
\n| . qq|\n| . qq|\n| . qq|

\n|; } else { $mmdg .= qq|

Attachment #$mmer:\n| . qq|\n| . qq|$mmek[$mmer+1]

\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 .= '

\n"; } else { if($mmep[$mmeu] =~ /\.(jpg)|(gif)|(png)\s*$/i) { $mmdg .= qq|

\n| . qq|

\n| . qq|\n| . qq|\n| . qq|\n| . qq|
Attachment #$mmeu:\n| . qq|\n| . qq|$mmep[$mmeu]
\n| . qq|\n| . qq|\n| . qq|

\n|; } else { $mmdg .= qq|

Attachment #$mmeu:\n| . qq|\n| . qq|$mmep[$mmeu]

\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 = "
\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 .= "
\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'} = "
\n";
my($mmba) = ''; foreach $mmba (@mailman::mmdv) { $mmba =~ s/\015//g;
$mmba =~ s/\&/\&\;/g; $mmba =~ s/\/\>\;/g;
$mailman::mmaj{'MESSAGE'} .= $mmba; } $mailman::mmaj{'MESSAGE'} .= "
\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/\"/"/g; $mailman::mmbs =~ s/\"/"/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'} = "
Log In Error: $mmai
"; 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|POP3Mail: Template Can't Be Read\n| . qq|\n| . qq|

POP3Mail Configuration Error

\n| . qq|

The output template "$mmfc" exists and was found by the POP3Mail\n| . qq|script, but the script does not have permission to read it.

\n| . qq|

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.

\n| . qq|\n|; exit(1); } else { print qq|POP3Mail: Template Not Found\n| . qq|\n| . qq|

POP3Mail Configuration Error

\n| . qq|

The output template "$mmfc" could not be found by the POP3Mail \n| . qq|script.

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.

\n| . qq|\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|Template Error: Snippet "$mmhf" not found in | . qq|template "$mmfc"|; 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|Template Error: Snippet "$mmhf" not found in | . qq|template "$mmfc"|); } } 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||; } if(defined($mailman::mmr)) { $mmhd->{'AUTHENTICATION'} .= qq||; } if(defined($mailman::mmq)) { $mmhd->{'AUTHENTICATION'} .= qq||; } if(defined($mailman::mmx)) { $mmhd->{'AUTHENTICATION'} .= qq||; } $mmhd->{'AUTHENTICATION'} .= $mailman::mms; $mmhd->{'SETTINGS'} = ''; if($mailman::mmab) { $mmhd->{'SETTINGS'} .= qq||; } if($mailman::mmac) { $mmhd->{'SETTINGS'} .= qq||; } if(defined($mailman::mmad)) { $mmhd->{'SETTINGS'} .= qq||; } if($mailman::mmgb) { my($mmhl) = mmmc($mailman::mmgb); $mmhd->{'SETTINGS'} .= qq||; } 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|
\n| . qq|\n | . qq|\n| . qq|
\n| . qq|DEBUG OUTPUT
\n| . qq|
$mailman::strDebug
| . qq|
\n| . qq|
\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; }