[ Avaa Bypassed ]




Upload:

Command:

www-data@3.22.217.190: ~ $
#!/usr/bin/perl
# Create, update or delete a filter

require './filter-lib.pl';
use Time::Local;
&ReadParse();

# Find existing filter object
@filters = &list_filters();
if (!$in{'new'}) {
	($filter) = grep { $_->{'index'} == $in{'idx'} } @filters;
	$filter || &error($text{'save_egone'});
	}
else {
	$filter = { 'index' => scalar(@filters) };
	}

if ($in{'delete'}) {
	# Just remove
	&lock_file($procmail::procmailrc);
	&delete_filter($filter);
	&unlock_file($procmail::procmailrc);
	&redirect("");
	}
elsif ($in{'apply'}) {
	# Redirect to mail search, with keys from filter
	if ($filter->{'condspam'}) {
		# Is spam or not?
		&redirect("../mailbox/mail_search.cgi?".
			  "id=".&urlize($in{'applyfrom'})."&".
			  "field_0=X-Spam-Status&".
			  "what_0=Yes");
		}
	elsif ($filter->{'condlevel'}) {
		# Spam level at least
		&redirect("../mailbox/mail_search.cgi?".
			  "id=".&urlize($in{'applyfrom'})."&".
			  "spam=1&score=".$filter->{'condlevel'});
		}
	else {
		# Some other header
		$field = $filter->{'condheader'};
		$what = $filter->{'condvalue'};
		$field = lc($field);
		# XXX regexp checkbox?
		&redirect("../mailbox/mail_search.cgi?".
			  "id=".&urlize($in{'applyfrom'})."&".
			  "field_0=".&urlize($field)."&".
			  "what_0=".&urlize($what)."&".
			  "re_0=1");
		}
	}
elsif ($in{'move'}) {
	# Redirect to move CGI
	&redirect("move.cgi?idx=$in{'idx'}");
	}
else {
	# Validate and store inputs
	&error_setup($text{'save_err'});

	# Parse condition first
	delete($filter->{'condspam'});
	delete($filter->{'condlevel'});
	delete($filter->{'condheader'});
	delete($filter->{'condtype'});
	delete($filter->{'cond'});
	$filter->{'body'} = 0;
	if ($in{'cmode'} == 0) {
		# Always enabled, so nothing to set!
		}
	elsif ($in{'cmode'} == 5) {
		# Match if spamassassin has set header
		$filter->{'condspam'} = 1;
		}
	elsif ($in{'cmode'} == 6) {
		# Match by spam level
		$in{'condlevel'} =~ /^[1-9]\d*$/ ||
			&error($text{'save_econdlevel'});
		$filter->{'condlevel'} = $in{'condlevel'};
		}
	elsif ($in{'cmode'} == 4) {
		# Check some header
		$filter->{'condheader'} = $in{'condmenu'} || $in{'condheader'};
		$filter->{'condheader'} =~ /^[a-zA-Z0-9\-]+$/ ||
			&error($text{'save_econdheader'});
		if ($in{'condvalue'} !~ /^[\000-\177]*$/) {
			$in{'condvalue'} = &mailbox::encode_mimewords(
				$in{'condvalue'}, 'Charset' => &get_charset());
			}
		if (!$in{'condregexp'} &&
		    $in{'condvalue'} =~ /[\^\$\.\*\+\?\|\(\)\[\]\{\}\\]/) {
			# If the user didn't ask for a regexp but there are
			# regexp special characters, escape them
			$in{'condvalue'} = quotemeta($in{'condvalue'});
			}
		if ($in{'condmode'} == 0) {
			$filter->{'condvalue'} = $in{'condvalue'};
			}
		elsif ($in{'condmode'} == 1) {
			$filter->{'condvalue'} = ".*".$in{'condvalue'}.".*";
			}
		else {
			$filter->{'condvalue'} = ".*".$in{'condvalue'}."\$";
			}
		}
	elsif ($in{'cmode'} == 3) {
		# Smaller than some size
		$in{'condsmall'} =~ /^\d+$/ || &error($text{'save_esmall'});
		$filter->{'cond'} = $in{'condsmall'}*$in{'condsmall_units'};
		$filter->{'condtype'} = '<';
		}
	elsif ($in{'cmode'} == 2) {
		# Larger than some size
		$in{'condlarge'} =~ /^\d+$/ || &error($text{'save_elarge'});
		$filter->{'cond'} = $in{'condlarge'}*$in{'condlarge_units'};
		$filter->{'condtype'} = '>';
		}
	elsif ($in{'cmode'} == 1) {
		# Matches regexp
		$in{'cond'} || &error($text{'save_econd'});
		$filter->{'cond'} = $in{'cond'};
		$filter->{'body'} = $in{'body'};
		}

	# Parse action section
	delete($filter->{'actionreply'});
	delete($filter->{'actionspam'});
	delete($filter->{'actionthrow'});
	delete($filter->{'actiondefault'});
	delete($filter->{'actionreply'});
	delete($filter->{'actiontype'});
	delete($filter->{'continue'});
	if ($in{'amode'} == 3) {
		# Deliver normally
		$filter->{'actiondefault'} = 1;
		}
	elsif ($in{'amode'} == 5) {
		# Run spamassassin
		$filter->{'actionspam'} = 1;
		}
	elsif ($in{'amode'} == 4) {
		# Throw away
		$filter->{'actionthrow'} = 1;
		}
	elsif ($in{'amode'} == 1) {
		# Forward to an address
		$in{'forward'} =~ /\S/ || &error($text{'save_eforward'});
		$in{'forward'} =~ s/^\s+//;
		$in{'forward'} =~ s/\s+$//;
		$in{'forward'} =~ s/\s+/,/g;
		$filter->{'action'} = $in{'forward'};
		$filter->{'actiontype'} = '!';
		$filter->{'nobounce'} = $in{'nobounce'};
		}
	elsif ($in{'amode'} == 0) {
		# Write to a folder or file
		@folders = &mailbox::list_folders();
		if ($in{'folder'}) {
			$folder = &mailbox::find_named_folder($in{'folder'},
							      \@folders);
			$file = $folder->{'file'};
			}
		else {
			$in{'file'} =~ /\S/ || &error($text{'save_efile'});
			$file = $in{'file'};
			}
		$file =~ s/^\Q$remote_user_info[7]\/\E/\$HOME\//;
		$filter->{'action'} = $file;
		if ($folder->{'type'} == 1 ||
		    $folder->{'type'} == 4 && -d $folder->{'file'}) {
			# Maildir has to end with /
			$filter->{'action'} .= '/';
			}
		}
	elsif ($in{'amode'} == 6) {
		# Send autoreply
		$filter->{'actionreply'} = 1;
		$in{'reply'} =~ /\S/ || &error($text{'save_ereply'});
		$in{'reply'} =~ s/\r//g;
		$filter->{'reply'}->{'autotext'} = $in{'reply'};
		$filter->{'reply'}->{'from'} =
			&mailbox::get_preferred_from_address();
		$idx = defined($filter->{'index'}) ? $filter->{'index'}
						   : scalar(@filters);
		$filter->{'reply'}->{'autoreply'} ||=
			"$remote_user_info[7]/autoreply.$idx.txt";
		if ($config{'reply_force'}) {
			# Forced to minimum
			$min = $config{'reply_min'} || 60;
			$filter->{'reply'}->{'period'} = $min*60;
			$filter->{'reply'}->{'replies'} ||=
				"$user_module_config_directory/replies";
			}
		elsif ($in{'period_def'}) {
			# No autoreply period
			delete($filter->{'reply'}->{'replies'});
			delete($filter->{'reply'}->{'period'});
			}
		else {
			# Set reply period and tracking file
			$in{'period'} =~ /^\d+$/ ||
				&error($text{'save_eperiod'});
			if ($config{'reply_min'} &&
			    $in{'period'} < $config{'reply_min'}) {
				&error(&text('save_eperiodmin',
					     $config{'reply_min'}));
				}
			$filter->{'reply'}->{'period'} = $in{'period'}*60;
			$filter->{'reply'}->{'replies'} ||=
				"$user_module_config_directory/replies";
			}
		# Save autoreply start and end
		foreach $p ('start', 'end') {
			local ($s, $m, $h) = $p eq 'start' ? (0, 0, 0) :
						(59, 59, 23);
			if ($in{'d'.$p}) {
				eval {
					$tm = timelocal($s, $m, $h, $in{'d'.$p},
					    $in{'m'.$p}-1, $in{'y'.$p}-1900);
					};
				$tm || &error($text{'save_e'.$p});
				$filter->{'reply'}->{'autoreply_'.$p} = $tm;
				}
			else {
				delete($filter->{'reply'}->{'autoreply_'.$p});
				}
			}
		# Save character set
		if ($in{'charset_def'}) {
			delete($filter->{'reply'}->{'charset'});
			}
		else {
			$in{'charset'} =~ /^[a-z0-9\.\-\_]+$/i ||
				error($text{'save_echarset'});
			$filter->{'reply'}->{'charset'} = $in{'charset'};
			}
		# Save subject
		if ($in{'subject_def'}) {
			delete($filter->{'reply'}->{'subject'});
			}
		else {
			$filter->{'reply'}->{'subject'} = $in{'subject'};
			}
		}
	elsif ($in{'amode'} == 7) {
		# Create a new folder for saving (always in Maildir format)
		$in{'newfolder'} =~ /\S/ || &error($text{'save_enewfolder'});
		$in{'newfolder'} !~ /^\// && $in{'newfolder'} !~ /\.\./ ||
			&error($text{'save_enewfolder2'});
		($clash) = grep { $_->{'name'} eq $in{'newfolder'} } 
				@folders;
		$clash && &error($text{'save_enewfolder3'});
		$folder = { 'name' => $in{'newfolder'},
			    'mode' => 0,
			    'type' => 1 };
		&mailbox::save_folder($folder);
		$filter->{'action'} = $folder->{'file'}."/";
		$filter->{'action'} =~ s/^\Q$remote_user_info[7]\/\E/\$HOME\//;
		}
	$filter->{'continue'} = $in{'continue'};

	# Save or create
	&lock_file($procmail::procmailrc);
	if ($in{'new'}) {
		&create_filter($filter);
		}
	else {
		&modify_filter($filter);
		}
	&unlock_file($procmail::procmailrc);
	&redirect("");
	}

Filemanager

Name Type Size Permission Actions
images Folder 0755
lang Folder 0755
CHANGELOG File 2.96 KB 0644
aliases-lib.pl File 7.93 KB 0755
autoreply-file-lib.pl File 2.28 KB 0755
config File 218 B 0644
config.info File 489 B 0644
config.info.ca File 575 B 0644
config.info.cs File 370 B 0644
config.info.de File 594 B 0644
config.info.el File 404 B 0644
config.info.hu File 0 B 0644
config.info.nl File 584 B 0644
config.info.no File 519 B 0644
config.info.pl File 604 B 0644
delete.cgi File 431 B 0755
down.cgi File 261 B 0755
edit.cgi File 8.97 KB 0755
edit_auto.cgi File 3.11 KB 0755
edit_forward.cgi File 1.18 KB 0755
filter-lib.pl File 17.71 KB 0755
index.cgi File 4.65 KB 0755
module.info File 260 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 101 B 0644
module.info.ar File 0 B 0644
module.info.ar.auto File 175 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 170 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 195 B 0644
module.info.ca File 109 B 0644
module.info.cs File 46 B 0644
module.info.cs.auto File 88 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 110 B 0644
module.info.de File 114 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 289 B 0644
module.info.es File 0 B 0644
module.info.es.auto File 114 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 120 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 144 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 132 B 0644
module.info.fr File 0 B 0644
module.info.fr.auto File 124 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 111 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 124 B 0644
module.info.hu File 92 B 0644
module.info.it File 0 B 0644
module.info.it.auto File 100 B 0644
module.info.ja File 0 B 0644
module.info.ja.auto File 151 B 0644
module.info.ko File 0 B 0644
module.info.ko.auto File 121 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 125 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 127 B 0644
module.info.ms File 103 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 107 B 0644
module.info.nl File 34 B 0644
module.info.nl.auto File 75 B 0644
module.info.no File 37 B 0644
module.info.no.auto File 74 B 0644
module.info.pl File 118 B 0644
module.info.pt File 0 B 0644
module.info.pt.auto File 104 B 0644
module.info.pt_BR File 0 B 0644
module.info.pt_BR.auto File 110 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 123 B 0644
module.info.ru File 0 B 0644
module.info.ru.auto File 200 B 0644
module.info.sk File 0 B 0644
module.info.sk.auto File 125 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 133 B 0644
module.info.sv File 0 B 0644
module.info.sv.auto File 124 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 187 B 0644
module.info.tr File 0 B 0644
module.info.tr.auto File 127 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 194 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 165 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 113 B 0644
module.info.zh File 0 B 0644
module.info.zh.auto File 97 B 0644
module.info.zh_TW File 0 B 0644
module.info.zh_TW.auto File 103 B 0644
move.cgi File 1.61 KB 0755
save.cgi File 7.63 KB 0755
save_auto.cgi File 2.73 KB 0755
save_forward.cgi File 959 B 0755
up.cgi File 259 B 0755