[ Avaa Bypassed ]




Upload:

Command:

www-data@3.137.198.25: ~ $
# sendmail-lib.pl
# Functions for managing sendmail aliases, domains and mappings.
# Only sendmail versions 8.8 and above are supported

BEGIN { push(@INC, ".."); };
use WebminCore;
&init_config();
%access = &get_module_acl();
$features_access = $access{'opts'} && $access{'ports'} && $access{'cws'} && $access{'masq'} && $access{'trusts'} && $access{'vmode'} && $access{'amode'} && $access{'omode'} && $access{'cgs'} && $access{'relay'} && $access{'mailers'} && $access{'access'} && $access{'domains'};
$config{'perpage'} ||= 20;	# a value of 0 can cause problems
@port_modifier_flags = ( 'a', 'b', 'c', 'f', 'h', 'C', 'E' );

# get_sendmailcf()
# Parses sendmail.cf and return a reference to an array of options.
# Each line is a single character directive, followed by a list of values?
sub get_sendmailcf
{
if (!@sendmailcf_cache) {
	local($lnum, $i);
	$lnum = 0; $i = 0;
	open(CF, "<".$config{'sendmail_cf'});
	while(<CF>) {
		s/^#.*$//g;	# remove comments
		s/\r|\n//g;	# remove newlines
		if (/^(\S)(\s*(.*))$/) {
			local(%opt);
			$opt{'type'} = $1;
			$opt{'value'} = $3;
			$opt{'values'} = [ split(/\s+/, $2) ];
			$opt{'line'} = $lnum;
			$opt{'eline'} = $opt{'line'};
			$opt{'pos'} = $i++;
			push(@sendmailcf_cache, \%opt);
			}
		$lnum++;
		}
	close(CF);
	}
return \@sendmailcf_cache;
}

# check_sendmail_version(&config)
# Is the sendmail config file a usable version?
sub check_sendmail_version
{
local $ver = &find_type("V", $_[0]);
return $ver && $ver->{'value'} =~ /^(\d+)/ && $1 >= 7 ? $1 : undef;
}

# get_sendmail_version(&out)
# Returns the actual sendmail executable version, if it is available
sub get_sendmail_version
{
local $out = &backquote_with_timeout("$config{'sendmail_path'} -d0 -bv 2>&1",
				     2, undef, 1);
local $version;
if ($out =~ /version\s+(\S+)/i) {
	$version = $1;
	}
${$_[0]} = $out if ($_[0]);
return $version;
}

# save_directives(&config, &oldvalues, &newvalues)
# Given 2 arrays of directive structures, this function will replace the
# old ones with the new. If the old list is empty, new directives are added
# to the end of the config file. If the new list is empty, all old directives
# are removed. If both exist, new ones replace old..
sub save_directives
{
local(@old) = @{$_[1]};
local(@new) = @{$_[2]};
$lref = &read_file_lines($config{'sendmail_cf'});
for($i=0; $i<@old || $i<@new; $i++) {
	if ($i >= @old) {
		# A new directive has been added.. put it at the end of the file
		$new[$i]->{'line'} = scalar(@$lref);
		$new[$i]->{'eline'} = $new[$i]->{'line'}+1;
		push(@$lref, &directive_line($new[$i]));
		push(@{$_[0]}, $new[$i]);
		}
	elsif ($i >= @new) {
		# A directive was deleted
		$ol = $old[$i]->{'eline'} - $old[$i]->{'line'} + 1;
		splice(@$lref, $old[$i]->{'line'}, $ol);
		&renumber_list($_[0], $old[$i], -$ol);
		splice(@{$_[0]}, &indexof($old[$i], @{$_[0]}), 1);
		}
	else {
		# A directive was changed
		$ol = $old[$i]->{'eline'} - $old[$i]->{'line'} + 1;
		splice(@$lref, $old[$i]->{'line'}, $ol,
		       &directive_line($new[$i]));
		$new[$i]->{'line'} = $new[$i]->{'eline'} = $old[$i]->{'line'};
		&renumber_list($_[0], $old[$i], 1-$ol);
		$_[0]->[&indexof($old[$i], @{$_[0]})] = $new[$i];
		}
	}
}

# directive_line(&details)
sub directive_line
{
return $_[0]->{'type'}.join(' ', @{$_[0]->{'values'}});
}

# find_type(name, &config)
# Returns an array of config directives of some type
sub find_type
{
local($c, @rv);
foreach $c (@{$_[1]}) {
	if ($c->{'type'} eq $_[0]) {
		push(@rv, $c);
		}
	}
return @rv ? wantarray ? @rv : $rv[0]
           : wantarray ? () : undef;
}

# find_option(name, &config)
# Returns the structure and value of some option directive
sub find_option
{
local(@opts, $o);
@opts = &find_type("O", $_[1]);
foreach $o (@opts) {
	if ($o->{'value'} =~ /^\s*([^=]+)=(.*)$/ && $1 eq $_[0]) {
		# found it.. return
		return wantarray ? ($o, $2) : $2;
		}
	}
return undef;
}

# find_optionss(name, &config)
# Returns the structures and values of some option directive
sub find_options
{
local(@opts, $o);
@opts = &find_type("O", $_[1]);
foreach $o (@opts) {
	if ($o->{'value'} =~ /^\s*([^=]+)=(.*)$/ && $1 eq $_[0]) {
		push(@rv, [ $o, $2 ]);
		}
	}
return wantarray ? @rv : $rv[0];
}

# find_type2(type1, type2, &config)
# Returns the structure and value of some directive
sub find_type2
{
local @types = &find_type($_[0], $_[2]);
local $t;
foreach $t (@types) {
	if ($t->{'value'} =~ /^(\S)(.*)$/ && $1 eq $_[1]) {
		return ($t, $2);
		}
	}
return undef;
}

# restart_sendmail()
# Send a SIGHUP to sendmail
sub restart_sendmail
{
if ($config{'sendmail_restart_command'}) {
	# Use the restart command
	local $out = &backquote_logged("$config{'sendmail_restart_command'} 2>&1 </dev/null");
	return $? || $out =~ /failed|error/i ? "<pre>$out</pre>" : undef;
	}
else {
	# Just HUP the process
	local ($pid, $any);
	foreach my $pidfile (split(/\t+/, $config{'sendmail_pid'})) {
		if (open(PID, "<".$pidfile)) {
			chop($pid = <PID>);
			close(PID);
			if ($pid) { &kill_logged('HUP', $pid); }
			$any++;
			}
		}
	if (!$any) {
		local @pids = &find_byname("sendmail");
		@pids || return $text{'restart_epids'};
		&kill_logged('HUP', @pids) ||
			return &text('restart_ekill', $!);
		}
	return undef;
	}
}

# run_makemap(textfile, dbmfile, type)
# Run makemap to rebuild some map. Calls error if it fails.
sub run_makemap
{
local($out);
$out = &backquote_logged(
	$config{'makemap_path'}." ".quotemeta($_[2])." ".quotemeta($_[1]).
	" <".quotemeta($_[0])." 2>&1");
if ($?) { &error("makemap failed : <pre>".
		 &html_escape($out)."</pre>"); }
}

# rebuild_map_cmd(textfile)
# If a map rebuild command is defined, run it and return 1, otherwise return 0.
# Calls error if it fails.
sub rebuild_map_cmd
{
local ($file) = @_;
if ($config{'rebuild_cmd'}) {
	local $cmd = &substitute_template($config{'rebuild_cmd'},
					  { 'map_file' => $file });
	local $out = &backquote_logged("($cmd) 2>&1");
	if ($?) { &error("Map rebuild failed : <pre>".
			 &html_escape($out)."</pre>"); }
	return 1;
	}
return 0;
}

# find_textfile(config, dbm)
sub find_textfile
{
local($conf, $dbm) = @_;
if ($conf) { return $conf; }
elsif (!$dbm) { return undef; }
elsif ($dbm =~ /^(.*)\.(db|dbm|pag|dir|hash)$/i && -r $1) {
	# Database is like /etc/virtusertable.db, text is /etc/virtusertable
	return $1;
	}
elsif ($dbm =~ /^(.*)\.(db|dbm|pag|dir|hash)$/i && -r "$1.txt") {
	# Database is like /etc/virtusertable.db, text is /etc/virtusertable.txt
	return "$1.txt";
	}
elsif (-r "$dbm.txt") {
	# Database is like /etc/virtusertable, text is /etc/virtusertable.txt
	return "$dbm.txt";
	}
elsif ($dbm =~ /^(.*)\.(db|dbm|pag|dir|hash)$/i) {
	# Database is like /etc/virtusertable.db, text is /etc/virtusertable,
	# but doesn't exist yet.
	return $1;
	}
else {
	# Text and database have same name
	return $dbm;
	}
}

# mailq_dir($conf)
sub mailq_dir
{
local ($opt, $mqueue) = &find_option("QueueDirectory", $_[0]);
local @rv;
if (!$mqueue) { @rv = ( "/var/spool/mqueue" ); }
elsif ($mqueue =~ /\*|\?/) {
	@rv = split(/\s+/, `echo $mqueue`);
	}
else {
	@rv = ( $mqueue );
	}
push(@rv, split(/\s+/, $config{'queue_dirs'}));
return @rv;
}

sub sort_by_domain
{
local ($a1, $a2, $b1, $b2);
if ($a->{'from'} =~ /^(.*)\@(.*)$/ && (($a1, $a2) = ($1, $2)) &&
    $b->{'from'} =~ /^(.*)\@(.*)$/ && (($b1, $b2) = ($1, $2))) {
	return $a2 cmp $b2 ? $a2 cmp $b2 : $a1 cmp $b1;
	}
else {
	return $a->{'from'} cmp $b->{'from'};
	}
}

# can_view_qfile(&mail)
# Returns 1 if some queued message can be viewed, 0 if not
sub can_view_qfile
{
return 1 if (!$access{'qdoms'});
local $re = $access{'qdoms'};
if ($access{'qdomsmode'} == 0) {
	return $_[0]->{'header'}->{'from'} =~ /$re/i;
	}
elsif ($access{'qdomsmode'} == 0) {
	return $_[0]->{'header'}->{'to'} =~ /$re/i;
	}
else {
	return $_[0]->{'header'}->{'from'} =~ /$re/i ||
	       $_[0]->{'header'}->{'to'} =~ /$re/i;
	}
}

# renumber_list(&list, &position-object, lines-offset)
sub renumber_list
{
return if (!$_[2]);
local $e;
foreach $e (@{$_[0]}) {
	if (!defined($e->{'file'}) || $e->{'file'} eq $_[1]->{'file'}) {
		$e->{'line'} += $_[2] if ($e->{'line'} > $_[1]->{'line'});
		$e->{'eline'} += $_[2] if (defined($e->{'eline'}) &&
					   $e->{'eline'} > $_[1]->{'eline'});
		}
	}
}

# get_file_or_config(&config, suffix, [additional-conf], [&cwfile])
# Returns all values for some config file entries, which may be in sendmail.cf
# (like Cw) or externally (like Fw)
sub get_file_or_config
{
local ($conf, $suffix, $addit, $cwref) = @_;
local ($cwfile, $f);
foreach $f (&find_type("F", $conf)) {
	if ($f->{'value'} =~ /^${suffix}[^\/]*(\/\S+)/ ||
	    $f->{'value'} =~ /^\{${suffix}\}[^\/]*(\/\S+)/) {
		$cwfile = $1;
		}
	}
local @rv;
if ($cwfile) {
	# get entries listed in a separate file
	$$cwref = $cwfile if ($cwref);
	open(CW, "<".$cwfile);
	while(<CW>) {
		s/\r|\n//g;
		s/#.*$//g;
		if (/\S/) { push(@rv, $_); }
		}
	close(CW);
	}
else {
	$$cwref = undef if ($cwref);
	}
# Add entries from sendmail.cf
foreach $f (&find_type("C", $conf)) {
	if ($f->{'value'} =~ /^${suffix}\s*(.*)$/ ||
	    $f->{'value'} =~ /^\{${suffix}\}\s*(.*)$/) {
		push(@rv, split(/\s+/, $1));
		}
	}
if ($addit) {
	push(@rv, map { $_->{'value'} } &find_type($addit, $conf));
	}
return &unique(@rv);
}

# save_file_or_config(&conf, suffix, &values, [additional-conf])
# Updates the values in some external file or in sendmail.cf
sub save_file_or_config
{
local ($conf, $suffix, $values, $addit) = @_;
local ($cwfile, $f);
foreach $f (&find_type("F", $conf)) {
	if ($f->{'value'} =~ /^${suffix}[^\/]*(\/\S+)/ ||
	    $f->{'value'} =~ /^\{${suffix}\}[^\/]*(\/\S+)/) {
		$cwfile = $1;
		}
	}
local @old = grep { $_->{'value'} =~ /^${suffix}/ ||
		    $_->{'value'} =~ /^\{${suffix}\}/ } &find_type("C", $conf);
if ($addit) {
	push(@old, &find_type($addit, $conf));
	}
local @new;
local $d;
if ($cwfile) {
	# If there is a .cw file, write all entries to it and take any
	# out of sendmail.cf
	&open_tempfile(CW, ">$cwfile");
	foreach $d (@$values) {
		&print_tempfile(CW, $d,"\n");
		}
	&close_tempfile(CW);
	}
else {
	# Stick all entries in sendmail.cf
	foreach $d (@$values) {
		push(@new, { 'type' => 'C',
			     'values' => [ $suffix.$d ] });
		}
	}
&save_directives($conf, \@old, \@new);
}

# add_file_or_config(&config, suffix, value)
# Adds an entry to sendmail.cf or an external file
sub add_file_or_config
{
local ($conf, $suffix, $value) = @_;
local ($cwfile, $f);
foreach $f (&find_type("F", $conf)) {
	if ($f->{'value'} =~ /^${suffix}[^\/]*(\/\S+)/ ||
	    $f->{'value'} =~ /^\{${suffix}\}[^\/]*(\/\S+)/) {
		$cwfile = $1;
		}
	}
local @old = grep { $_->{'value'} =~ /^${suffix}/ ||
		    $_->{'value'} =~ /^\{${suffix}\}/ } &find_type("C", $conf);
if ($cwfile) {
	# Add to external file
	&open_tempfile(CW, ">>$cwfile");
	&print_tempfile(CW, $value,"\n");
	&close_tempfile(CW);
	}
else {
	# Add to sendmail.cf
	local @new = ( @old, { 'type' => 'C',
			       'values' => [ $suffix.$value ] });
	&save_directives($conf, \@old, \@new);
	}
}

# delete_file_or_config(&config, suffix, value)
# Removes an entry from sendmail.cf or an external file
sub delete_file_or_config
{
local ($conf, $suffix, $value) = @_;
local ($cwfile, $f);
foreach $f (&find_type("F", $conf)) {
	if ($f->{'value'} =~ /^${suffix}[^\/]*(\/\S+)/ ||
	    $f->{'value'} =~ /^\{${suffix}\}[^\/]*(\/\S+)/) {
		$cwfile = $1;
		}
	}
local @old = grep { $_->{'value'} =~ /^${suffix}/ ||
		    $_->{'value'} =~ /^\{${suffix}\}/ } &find_type("C", $conf);
if ($cwfile) {
	# Remove from external file
	local $lref = &read_file_lines($cwfile);
	@$lref = grep { $_ !~ /^\s*\Q$value\E\s*$/i } @$lref;
	&flush_file_lines($cwfile);
	}
else {
	# Remove from sendmail.cf
	local @new = grep { $_->{'values'}->[0] ne $suffix.$value } @old;
	&save_directives($conf, \@old, \@new);
	}
}

# list_mail_queue([&conf])
# Returns a list of all files in the mail queue
sub list_mail_queue
{
local ($mqueue, @qfiles);
local $conf = $_[0] || &get_sendmailcf();
foreach $mqueue (&mailq_dir($conf)) {
	opendir(QDIR, $mqueue);
	push(@qfiles, map { "$mqueue/$_" } grep { /^(qf|hf|Qf)/ } readdir(QDIR));
	closedir(QDIR);
	}
return @qfiles;
}

# list_dontblames()
# Returns an array of valid options for the DontBlameSendmail option
sub list_dontblames
{
local @rv;
open(BLAME, "<$module_root_directory/dontblames");
while(<BLAME>) {
	s/\r|\n//g;
	s/^\s*#.*$//;
	if (/^(\S+)\s+(\S.*)$/) {
		push(@rv, [ $1, $2 ]);
		}
	}
close(BLAME);
return @rv;
}

# stop_sendmail()
# Stops the sendmail process, returning undef on success or an error message
# upon failure.
sub stop_sendmail
{
if ($config{'sendmail_stop_command'}) {
	local $out = &backquote_logged("$config{'sendmail_stop_command'} </dev/null 2>&1");
	if ($?) {
		return "<pre>$out</pre>";
		}
	}
else {
	foreach my $pidfile (split(/\t+/, $config{'sendmail_pid'})) {
		local $pid = &check_pid_file($pidfile);
		if ($pid && &kill_logged('KILL', $pid)) {
			unlink($pidfile);
			}
		else {
			return $text{'stop_epid'};
			}
		}
	}
return undef;
}

# start_sendmail()
# Starts the sendmail server, returning undef on success or an error message
# upon failure.
sub start_sendmail
{
if ($config{'sendmail_stop_command'}) {
	# Make sure any init script lock files are gone
	&backquote_logged("$config{'sendmail_stop_command'} </dev/null 2>&1");
	}
local $out = &backquote_logged("$config{'sendmail_command'} </dev/null 2>&1");
return $? ? "<pre>$out</pre>" : undef;
}

sub is_sendmail_running
{
if ($config{'sendmail_smf'}) {
	# Ask SMF, as on Solaris there is no PID file
	local $out = &backquote_command("svcs -H -o STATE ".
			quotemeta($config{'sendmail_smf'})." 2>&1");
	if ($?) {
		&error("Failed to get Sendmail status from SMF : $out");
		}
	return $out =~ /online/i ? 1 : 0;
	}
else {
	# Use PID files, or check for process
	local @pidfiles = split(/\t+/, $config{'sendmail_pid'});
	if (@pidfiles) {
		foreach my $p (@pidfiles) {
			local $c = &check_pid_file($p);
			return $c if ($c);
			}
		return undef;
		}
	else {
		return &find_byname("sendmail");
		}
	}
}

# mailq_table(&qfiles)
# Print a table showing queued emails. Returns the number quarantined.
sub mailq_table
{
local ($qfiles, $qmails) = @_;
local $quarcount;

# Show buttons to flush and delete
print "<form action=del_mailqs.cgi method=post>\n";
local @links = ( &select_all_link("file", 0),
	         &select_invert_link("file", 0) );
if ($config{'top_buttons'}) {
	if ($access{'mailq'} == 2) {
		print "<input type=submit value='$text{'mailq_delete'}'>\n";
		print "<input type=checkbox name=locked value=1> $text{'mailq_locked'}\n";
		print "&nbsp;&nbsp;\n";
		print "<input type=submit name=flush value='$text{'mailq_flushsel'}'>\n";
		print "<p>\n";
		print &ui_links_row(\@links);
		}
	}

# Generate table header
local (@hcols, @tds);
if ($access{'mailq'} == 2) {
	push(@hcols, "");
	push(@tds, "width=5");
	}
local %show;
foreach my $s (split(/,/, $config{'mailq_show'})) {
	$show{$s}++;
	}
push(@hcols, $text{'mailq_id'});
push(@hcols, $text{'mailq_sent'}) if ($show{'Date'});
push(@hcols, $text{'mailq_from'}) if ($show{'From'});
push(@hcols, $text{'mailq_to'}) if ($show{'To'});
push(@hcols, $text{'mailq_cc'}) if ($show{'Cc'});
push(@hcols, $text{'mailq_subject'}) if ($show{'Subject'});
push(@hcols, $text{'mailq_size'}) if ($show{'Size'});
push(@hcols, $text{'mailq_status'}) if ($show{'Status'});
push(@hcols, $text{'mailq_dir'}) if ($show{'Dir'});
print &ui_columns_start(\@hcols, 100, 0, \@tds);

# Show table rows for emails
foreach my $f (@$qfiles) {
	local $n;
	($n = $f) =~ s/^.*\///;
	local $mail = $qmails->{$f} || &mail_from_queue($f);
	next if (!$mail);
	local $dir = $f;
	$dir =~ s/\/[^\/]+$//;

	$mail->{'header'}->{'from'} ||= $text{'mailq_unknown'};
	$mail->{'header'}->{'to'} ||= $text{'mailq_unknown'};
	$mail->{'header'}->{'date'} ||= $text{'mailq_unknown'};
	$mail->{'header'}->{'subject'} ||= $text{'mailq_unknown'};
	$mail->{'header'}->{'cc'} ||= "&nbsp;";
	if ($mail->{'quar'}) {
		$mail->{'status'} = $text{'mailq_quar'};
		$quarcount++;
		}
	$mail->{'status'} ||= $text{'mailq_sending'};

	$mail->{'header'}->{'from'} =
		&html_escape($mail->{'header'}->{'from'});
	$mail->{'header'}->{'to'} =
		&html_escape($mail->{'header'}->{'to'});
	$mail->{'header'}->{'date'} =~ s/\+.*//g;

	local @cols;
	$size = &nice_size($mail->{'size'});
	if ($access{'mailq'} == 2) {
		push(@cols, "<a href=\"view_mailq.cgi?".
			    "file=$f\">$n</a>");
		}
	else {
		push(@cols, $n);
		}
	push(@cols, "<font size=1>".&simplify_date($mail->{'header'}->{'date'}, "ymd")."</font>") if ($show{'Date'});
	push(@cols, "<font size=1>$mail->{'header'}->{'from'}</font>") if ($show{'From'});
	push(@cols, "<font size=1>$mail->{'header'}->{'to'}</font>") if ($show{'To'});
	push(@cols, "<font size=1>$mail->{'header'}->{'cc'}</font>") if ($show{'Cc'});
	push(@cols, "<font size=1>$mail->{'header'}->{'subject'}</font>") if ($show{'Subject'});
	push(@cols, "<font size=1>$size</font>") if ($show{'Size'});
	push(@cols, "<font size=1>$mail->{'status'}</font>") if ($show{'Status'});
	push(@cols, "<font size=1>$dir</font>") if ($show{'Dir'});
	print "</tr>\n";
	if ($access{'mailq'} == 2) {
		print &ui_checked_columns_row(\@cols, \@tds, "file",$f);
		}
	else {
		print &ui_columns_row(\@cols, \@tds);
		}
	}
print &ui_columns_end();
if ($access{'mailq'} == 2) {
	print &ui_links_row(\@links);
	print "<input type=submit value='$text{'mailq_delete'}'>\n";
	print "<input type=checkbox name=locked value=1> $text{'mailq_locked'}\n";

	print "&nbsp;&nbsp;\n";
	print "<input type=submit name=flush value='$text{'mailq_flushsel'}'>\n";
	print "<p>\n";
	}
print "</form>\n";
return $quarcount;
}

# is_table_comment(line, [force-prefix])
# Returns the comment text if a line contains a comment, like # foo
sub is_table_comment
{
local ($line, $force) = @_;
if ($config{'prefix_cmts'} || $force) {
	return $line =~ /^\s*#+\s*Webmin:\s*(.*)/ ? $1 : undef;
	}
else {
	return $line =~ /^\s*#+\s*(.*)/ ? $1 : undef;
	}
}

# make_table_comment(comment, [force-tag])
# Returns an array of lines for a comment in a map file, like # foo
sub make_table_comment
{
local ($cmt, $force) = @_;
if (!$cmt) {
	return ( );
	}
elsif ($config{'prefix_cmts'} || $force) {
	return ( "# Webmin: $cmt" );
	}
else {
	return ( "# $cmt" );
	}
}

1;


Filemanager

Name Type Size Permission Actions
help Folder 0755
images Folder 0755
lang Folder 0755
CHANGELOG File 4.2 KB 0644
access-lib.pl File 6.41 KB 0755
acl_security.pl File 9.7 KB 0755
aliases-lib.pl File 7.93 KB 0755
autoreply.pl File 12.19 KB 0755
backup_config.pl File 1.48 KB 0755
boxes-lib.pl File 80.37 KB 0755
build.cgi File 1.84 KB 0755
cgi_args.pl File 1.42 KB 0755
config-AlmaLinux-7.0-ALL File 685 B 0644
config-Amazon-Linux-2-ALL File 685 B 0644
config-CentOS-Linux-7.0-ALL File 685 B 0644
config-CentOS-Stream-Linux-8.0-ALL File 685 B 0644
config-CloudLinux-8.0-ALL File 685 B 0644
config-Oracle-Linux-8.0-ALL File 685 B 0644
config-Redhat-Enterprise-Linux-7.0-ALL File 685 B 0644
config-Rocky-Linux-7.0-ALL File 685 B 0644
config-Scientific-Linux-7.0-ALL File 685 B 0644
config-aix File 573 B 0644
config-cobalt-linux File 669 B 0644
config-coherent-linux File 661 B 0644
config-corel-linux File 528 B 0644
config-debian-linux File 607 B 0644
config-debian-linux-2.1-2.2 File 612 B 0644
config-debian-linux-3.0-ALL File 616 B 0644
config-freebsd File 654 B 0644
config-freebsd-4.0-ALL File 659 B 0644
config-generic-linux File 672 B 0644
config-gentoo-linux File 697 B 0644
config-hpux File 525 B 0644
config-irix File 668 B 0644
config-macos File 657 B 0644
config-macos-1.3-ALL File 662 B 0644
config-mandrake-linux File 678 B 0644
config-mandrake-linux-8.2 File 661 B 0644
config-mandrake-linux-9.0-ALL File 678 B 0644
config-msc-linux File 576 B 0644
config-netbsd File 639 B 0644
config-open-linux File 671 B 0644
config-open-linux-2.5 File 676 B 0644
config-open-linux-3.1e File 676 B 0644
config-openSUSE-Linux-15.0-ALL File 636 B 0644
config-openbsd File 640 B 0644
config-openserver File 572 B 0644
config-osf1 File 538 B 0644
config-redhat-linux File 654 B 0644
config-redhat-linux-10.0-23.0 File 685 B 0644
config-redhat-linux-24.0-ALL File 747 B 0644
config-redhat-linux-7.1-7.3 File 656 B 0644
config-redhat-linux-7.4-9.0 File 661 B 0644
config-slackware-linux File 523 B 0644
config-slackware-linux-8.0 File 672 B 0644
config-slackware-linux-8.1-ALL File 699 B 0644
config-sol-linux File 679 B 0644
config-solaris File 641 B 0644
config-solaris-10-ALL File 722 B 0644
config-solaris-7 File 730 B 0644
config-solaris-8-9 File 729 B 0644
config-suse-linux File 592 B 0644
config-suse-linux-8.2-ALL File 640 B 0644
config-turbo-linux File 654 B 0644
config-united-linux File 592 B 0644
config-unixware File 566 B 0644
config.info File 2.4 KB 0644
config.info.ca File 2.78 KB 0644
config.info.cs File 2.6 KB 0644
config.info.de File 2.79 KB 0644
config.info.es File 1.74 KB 0644
config.info.fr File 2.42 KB 0644
config.info.hu File 0 B 0644
config.info.nl File 2.72 KB 0644
config.info.no File 2.52 KB 0644
config.info.pl File 1.13 KB 0644
config.info.pt_BR File 2.85 KB 0644
config.info.ru File 2.45 KB 0644
config.info.sv File 1.06 KB 0644
config.info.tr File 1.09 KB 0644
config.info.uk File 2.48 KB 0644
config.info.zh File 970 B 0644
config.info.zh_TW File 1.04 KB 0644
create_file.cgi File 1.41 KB 0755
defaultacl File 286 B 0644
defines File 3.77 KB 0644
del_mailq.cgi File 1.31 KB 0755
del_mailqs.cgi File 2.82 KB 0755
delete_access.cgi File 782 B 0755
delete_aliases.cgi File 800 B 0755
delete_domains.cgi File 710 B 0755
delete_generics.cgi File 790 B 0755
delete_mailers.cgi File 713 B 0755
delete_virtusers.cgi File 799 B 0755
domain-lib.pl File 4.25 KB 0755
dontblames File 3.34 KB 0644
edit_access.cgi File 505 B 0755
edit_afile.cgi File 1.08 KB 0755
edit_alias.cgi File 470 B 0755
edit_domain.cgi File 433 B 0755
edit_feature.cgi File 2.98 KB 0755
edit_ffile.cgi File 2.05 KB 0755
edit_file.cgi File 2.26 KB 0755
edit_generic.cgi File 460 B 0755
edit_mailer.cgi File 435 B 0755
edit_rfile.cgi File 3.05 KB 0755
edit_virtuser.cgi File 473 B 0755
features-lib.pl File 4.25 KB 0755
feedback_files.pl File 397 B 0755
filter.pl File 1.99 KB 0755
flushq.cgi File 714 B 0755
generics-lib.pl File 4.52 KB 0755
index.cgi File 4.81 KB 0755
install_check.pl File 452 B 0755
list_access.cgi File 3.04 KB 0755
list_aliases.cgi File 3.48 KB 0755
list_cgs.cgi File 636 B 0755
list_cws.cgi File 706 B 0755
list_domains.cgi File 2.36 KB 0755
list_features.cgi File 2.97 KB 0755
list_generics.cgi File 3.83 KB 0755
list_mailers.cgi File 2.66 KB 0755
list_mailq.cgi File 3.54 KB 0755
list_masq.cgi File 1.15 KB 0755
list_opts.cgi File 4.91 KB 0755
list_ports.cgi File 2.2 KB 0755
list_relay.cgi File 938 B 0755
list_trusts.cgi File 646 B 0755
list_us File 1 B 0644
list_virtusers.cgi File 3.75 KB 0755
log_parser.pl File 1.73 KB 0755
mailers-lib.pl File 5.32 KB 0755
mailq_search.cgi File 996 B 0755
manual_features.cgi File 398 B 0755
module.info File 646 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 129 B 0644
module.info.ar File 0 B 0644
module.info.ar.auto File 217 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 218 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 230 B 0644
module.info.ca File 144 B 0644
module.info.ca.auto File 24 B 0644
module.info.cs File 30 B 0644
module.info.cs.auto File 122 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 137 B 0644
module.info.de File 130 B 0644
module.info.de.auto File 17 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 296 B 0644
module.info.es File 35 B 0644
module.info.es.auto File 134 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 150 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 229 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 164 B 0644
module.info.fr File 34 B 0644
module.info.fr.auto File 133 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 173 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 161 B 0644
module.info.hu File 37 B 0644
module.info.hu.auto File 129 B 0644
module.info.it File 0 B 0644
module.info.it.auto File 161 B 0644
module.info.ja File 27 B 0644
module.info.ja.auto File 143 B 0644
module.info.ko File 24 B 0644
module.info.ko.auto File 141 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 173 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 169 B 0644
module.info.ms File 127 B 0644
module.info.ms.auto File 21 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 142 B 0644
module.info.nl File 30 B 0644
module.info.nl.auto File 108 B 0644
module.info.no File 31 B 0644
module.info.no.auto File 113 B 0644
module.info.pl File 31 B 0644
module.info.pl.auto File 122 B 0644
module.info.pt File 35 B 0644
module.info.pt.auto File 122 B 0644
module.info.pt_BR File 39 B 0644
module.info.pt_BR.auto File 128 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 144 B 0644
module.info.ru File 42 B 0644
module.info.ru.auto File 214 B 0644
module.info.sk File 0 B 0644
module.info.sk.auto File 146 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 153 B 0644
module.info.sv File 32 B 0644
module.info.sv.auto File 104 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 294 B 0644
module.info.tr File 35 B 0644
module.info.tr.auto File 131 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 228 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 233 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 156 B 0644
module.info.zh File 24 B 0644
module.info.zh.auto File 93 B 0644
module.info.zh_TW File 27 B 0644
module.info.zh_TW.auto File 99 B 0644
move.cgi File 559 B 0755
negativeacl File 8 B 0644
prefs.info File 147 B 0644
qdetach.cgi File 1.05 KB 0755
rbac-mapping File 186 B 0644
save_access.cgi File 1.98 KB 0755
save_afile.cgi File 580 B 0755
save_alias.cgi File 4.12 KB 0755
save_cgs.cgi File 640 B 0755
save_cws.cgi File 678 B 0755
save_domain.cgi File 1.37 KB 0755
save_feature.cgi File 2.32 KB 0755
save_ffile.cgi File 860 B 0755
save_file.cgi File 3.02 KB 0755
save_generic.cgi File 1.57 KB 0755
save_mailer.cgi File 1.83 KB 0755
save_masq.cgi File 1.2 KB 0755
save_opts.cgi File 3.29 KB 0755
save_ports.cgi File 2.47 KB 0755
save_relay.cgi File 710 B 0755
save_rfile.cgi File 1.25 KB 0755
save_trusts.cgi File 589 B 0755
save_virtuser.cgi File 2.81 KB 0755
sendmail-lib.pl File 17.76 KB 0755
start.cgi File 248 B 0755
stop.cgi File 276 B 0755
useradmin_update.pl File 1.43 KB 0755
view_mailq.cgi File 3.91 KB 0755
virtusers-lib.pl File 6.22 KB 0755