[ Avaa Bypassed ]




Upload:

Command:

www-data@3.15.17.212: ~ $
# Functions for cert creation with Let's Encrypt

if ($config{'letsencrypt_cmd'}) {
	$letsencrypt_cmd = &has_command($config{'letsencrypt_cmd'});
	}
else {
	$letsencrypt_cmd = &has_command("letsencrypt-auto") ||
			   &has_command("letsencrypt") ||
			   &has_command("certbot-auto") ||
			   &has_command("certbot");
	}

$account_key = "$module_config_directory/letsencrypt.pem";

$letsencrypt_chain_urls = [
	"https://letsencrypt.org/certs/lets-encrypt-r3-cross-signed.pem",
	"https://letsencrypt.org/certs/lets-encrypt-r3.pem",
	"https://letsencrypt.org/certs/lets-encrypt-e1.pem",
	];

# check_letsencrypt()
# Returns undef if all dependencies are installed, or an error message
sub check_letsencrypt
{
if (&has_command($letsencrypt_cmd)) {
	# Use official client
	return undef;
	}
my $python = &get_python_cmd();
if (!$python || !&has_command("openssl")) {
        return $text{'letsencrypt_ecmds'};
        }
my $out = &backquote_command("$python -c 'import argparse' 2>&1");
if ($?) {
        return &text('letsencrypt_epythonmod', '<tt>argparse</tt>');
        }
my $ver = &backquote_command("$python --version 2>&1");
if ($ver !~ /Python\s+([0-9\.]+)/) {
        return &text('letsencrypt_epythonver',
                     "<tt>".&html_escape($out)."</tt>");
        }
$ver = $1;
if ($ver < 2.5) {
        return &text('letsencrypt_epythonver2', '2.5', $ver);
        }
return undef;
}

# get_letsencrypt_install_message(return-link, return-title)
# Returns a link or form to install Let's Encrypt
sub get_letsencrypt_install_message
{
my ($rlink, $rmsg) = @_;
&foreign_require("software");
return &software::missing_install_link(
	"certbot", $text{'letsencrypt_certbot'}, $rlink, $rmsg);
}

# request_letsencrypt_cert(domain|&domains, webroot, [email], [keysize],
# 			   [request-mode], [use-staging], [account-email])
# Attempt to request a cert using a generated key with the Let's Encrypt client
# command, and write it to the given path. Returns a status flag, and either
# an error message or the paths to cert, key and chain files.
sub request_letsencrypt_cert
{
my ($dom, $webroot, $email, $size, $mode, $staging, $account_email, $key_type) = @_;
my @doms = ref($dom) ? @$dom : ($dom);
$email ||= "root\@$doms[0]";
$mode ||= "web";
@doms = &unique(@doms);
my ($challenge, $wellknown, $challenge_new, $wellknown_new, $wildcard);

# Wildcard mode?
foreach my $d (@doms) {
	if ($d =~ /^\*/) {
		$wildcard = $d;
		}
	}

if ($mode eq "web") {
	# Create a challenges directory under the web root
	if ($wildcard) {
		return (0, "Wildcard hostname $wildcard can only be ".
			   "validated in DNS mode");
		}
	$wellknown = "$webroot/.well-known";
	$challenge = "$wellknown/acme-challenge";
	$wellknown_new = !-d $wellknown ? $wellknown : undef;
	$challenge_new = !-d $challenge ? $challenge : undef;
	my @st = stat($webroot);
	my $user = getpwuid($st[4]);
	if (!-d $challenge) {
		my $cmd = "mkdir -p -m 755 ".quotemeta($challenge).
			  " && chmod 755 ".quotemeta($wellknown);
		if ($user && $user ne "root") {
			$cmd = &command_as_user($user, 0, $cmd);
			}
		my $out = &backquote_logged("$cmd 2>&1");
		if ($?) {
			return (0, "mkdir failed : $out");
			}
		}

	# Create a .htaccess file to ensure the directory is accessible 
	if (&foreign_installed("apache")) {
		&foreign_require("apache");
		my $htaccess = "$challenge/.htaccess";
		if (!-r $htaccess && $apache::httpd_modules{'core'} >= 2.2) {
			&open_tempfile(HT, ">$htaccess");
			&print_tempfile(HT, "AuthType None\n");
			&print_tempfile(HT, "Require all granted\n");
			&print_tempfile(HT, "Satisfy any\n");
			&close_tempfile(HT);
			&set_ownership_permissions(
				$user, undef, 0755, $htaccess);
			}
		}
	}
elsif ($mode eq "dns") {
	# Make sure all the DNS zones exist
	if ($wildcard && !$letsencrypt_cmd) {
		return (0, "Wildcard hostname $wildcard can only be ".
			   "validated when the certbot Let's Encrypt client ".
			   "is installed");
		}
	&foreign_require("bind8");
	foreach my $d (@doms) {
		my $z = &get_bind_zone_for_domain($d);
		my $d = &get_virtualmin_for_domain($d);
		$z || $d || return (0, "Neither DNS zone $d or any of its ".
				       "sub-domains exist on this system");
		}
	}
else {
	return (0, "Unknown mode $mode");
	}

# Create DNS hook wrapper scripts
my $dns_hook = "$module_config_directory/letsencrypt-dns.pl";
my $cleanup_hook = "$module_config_directory/letsencrypt-cleanup.pl";
if ($mode eq "dns") {
	&foreign_require("cron");
	&cron::create_wrapper($dns_hook, $module_name,
			      "letsencrypt-dns.pl");
	&cron::create_wrapper($cleanup_hook, $module_name,
			      "letsencrypt-cleanup.pl");
	}

# Run the before command
if ($config{'letsencrypt_before'}) {
	my $out = &backquote_logged("$config{'letsencrypt_before'} 2>&1 </dev/null");
	if ($?) {
		return (0, "Pre-request command failed : $out");
		}
	}

my @rv;
if ($letsencrypt_cmd) {
	# Call the native Let's Encrypt client
	my $temp = &transname();
	&open_tempfile(TEMP, ">$temp");
	&print_tempfile(TEMP, "email = $email\n");
	&print_tempfile(TEMP, "text = True\n");
	&close_tempfile(TEMP);
	my $dir = $letsencrypt_cmd;
	my $cmd_ver = &get_certbot_major_version($letsencrypt_cmd);
	my $old_flags;
	my $new_flags;
	$key_type ||= $config{'letsencrypt_algo'} || 'rsa';
	if (&compare_version_numbers($cmd_ver, 1.11) < 0) {
		$old_flags = " --manual-public-ip-logging-ok";
		}
	if (&compare_version_numbers($cmd_ver, 2.0) >= 0) {
		$new_flags = " --key-type ".quotemeta($key_type);
		}
	$dir =~ s/\/[^\/]+$//;
	$size ||= 2048;
	my $out;
	if ($mode eq "web") {
		# Webserver based validation
		&clean_environment();
		$out = &backquote_command(
			"cd $dir && (echo A | $letsencrypt_cmd certonly".
			" -a webroot ".
			join("", map { " -d ".quotemeta($_) } @doms).
			" --webroot-path ".quotemeta($webroot).
			" --duplicate".
			" --force-renewal".
			"$old_flags".
			" --non-interactive".
			" --agree-tos".
			" --config ".quotemeta($temp)."".
			"$new_flags".
			" --rsa-key-size ".quotemeta($size).
			" --cert-name ".quotemeta($doms[0]).
			($staging ? " --test-cert" : "").
			" 2>&1)");
		&reset_environment();
		}
	elsif ($mode eq "dns") {
		# DNS based validation, via hook script
		&clean_environment();
		$out = &backquote_command(
			"cd $dir && (echo A | $letsencrypt_cmd certonly".
			" --manual".
			join("", map { " -d ".quotemeta($_) } @doms).
			" --preferred-challenges=dns".
			" --manual-auth-hook $dns_hook".
			" --manual-cleanup-hook $cleanup_hook".
			" --duplicate".
			" --force-renewal".
			"$old_flags".
			" --non-interactive".
			" --agree-tos".
			" --config ".quotemeta($temp)."".
			"$new_flags".
			" --rsa-key-size $size".
			" --cert-name ".quotemeta($doms[0]).
			($staging ? " --test-cert" : "").
			" 2>&1)");
		&reset_environment();
		}
	else {
		@rv = (0, "Bad mode $mode");
		goto FAILED;
		}
	if ($?) {
		@rv = (0, "<pre>".&html_escape($out || "No output from $letsencrypt_cmd")."</pre>");
		goto FAILED;
		}
	my ($full, $cert, $key, $chain);
	if ($out =~ /((?:\/usr\/local)?\/etc\/letsencrypt\/(?:live|archive)\/[a-zA-Z0-9\.\_\-\/\r\n\* ]*\.pem)/) {
		# Output contained the full path
		$full = $1;
		$full =~ s/\s//g;
		}
	else {
		# Try searching common paths
		my @fulls = (glob("/etc/letsencrypt/live/$doms[0]-*/cert.pem"),
			     glob("/usr/local/etc/letsencrypt/live/$doms[0]-*/cert.pem"));
		if (@fulls) {
			my %stats = map { $_, [ stat($_) ] } @fulls;
			@fulls = sort { $stats{$a}->[9] <=> $stats{$b}->[9] }
				      @fulls;
			$full = pop(@fulls);
			}
		else {
			@rv = (0, "Output did not contain a PEM path!");
			goto FAILED;
			}
		}
	if (!-r $full || !-s $full) {
		@rv = (0, &text('letsencrypt_efull', $full));
		goto FAILED;
		}
	$full =~ s/\/[^\/]+$//;
	$cert = $full."/cert.pem";
	if (!-r $cert || !-s $cert) {
		@rv = (0, &text('letsencrypt_ecert', $cert));
		goto FAILED;
		}
	$key = $full."/privkey.pem";
	if (!-r $key || !-s $key) {
		@rv = (0, &text('letsencrypt_ekey', $key));
		goto FAILED;
		}
	$chain = $full."/chain.pem";
	$chain = undef if (!-r $chain);
	&set_ownership_permissions(undef, undef, 0600, $cert);
	&set_ownership_permissions(undef, undef, 0600, $key);
	&set_ownership_permissions(undef, undef, 0600, $chain);

	if ($account_email) {
		# Attempt to update the contact email on file with let's encrypt
		&system_logged(
		    "$letsencrypt_cmd register --update-registration".
		    " --email ".quotemeta($account_email).
		    " >/dev/null 2>&1 </dev/null");
		}

	@rv = (1, $cert, $key, $chain);
	}
elsif ($mode eq "dns") {
	# Python client doesn't support DNS
	@rv = (0, $text{'letsencrypt_eacmedns'});
	}
else {
	# Fall back to local Python client
	$size ||= 4096;

	# Generate the account key if missing
	if (!-r $account_key) {
		my $out = &backquote_logged(
			"openssl genrsa 4096 2>&1 >$account_key");
		if ($?) {
			@rv = (0, &text('letsencrypt_eaccountkey',
					&html_escape($out)));
			goto FAILED;
			}
		}

	# Generate a key for the domain
	my $key = &transname();
	my $out = &backquote_logged("openssl genrsa $size 2>&1 >".quotemeta($key)."");
	if ($?) {
		@rv = (0, &text('letsencrypt_ekeygen', &html_escape($out)));
		goto FAILED;
		}

	# Generate a CSR
	my $csr = &transname();
	my ($ok, $csr) = &generate_ssl_csr($key, undef, undef, undef,
					   undef, undef, \@doms, undef);
	if (!$ok) {
		@rv = &text('letsencrypt_ecsr', $csr);
		goto FAILED;
		}
	&copy_source_dest($csr, "/tmp/lets.csr", 1);

	# Find a reasonable python version
	my $python = &get_python_cmd();

	# Request the cert and key
	my $cert = &transname();
	&clean_environment();
	my $out = &backquote_logged(
		"$python $module_root_directory/acme_tiny.py ".
		"--account-key ".quotemeta($account_key)." ".
		"--csr ".quotemeta($csr)." ".
		($mode eq "web" ? "--acme-dir ".quotemeta($challenge)." "
				: "--dns-hook $dns_hook ".
				  "--cleanup-hook $cleanup_hook ").
		($staging ? "--ca https://acme-staging-v02.api.letsencrypt.org "
			  : "--disable-check ").
		"--quiet ".
		"2>&1 >".quotemeta($cert));
	&reset_environment();
	if ($?) {
		my @lines = split(/\r?\n/, $out);
		my $trace;
		for(my $i=1; $i<@lines; $i++) {
			if ($lines[$i] =~ /^Traceback\s+/) {
				$trace = $i;
				last;
				}
			}
		if ($trace) {
			@lines = @lines[0 .. $trace-1];
			$out = join("\n", @lines);
			}
		@rv = (0, &text('letsencrypt_etiny',
				"<pre>".&html_escape($out))."</pre>");
		goto FAILED;
		}
	if (!-r $cert || !-s $cert) {
		@rv = (0, &text('letsencrypt_ecert', $cert));
		goto FAILED;
		}

	# Check if the returned cert contains a CA cert as well
	my $chain = &transname();
	my @certs = &cert_file_split($cert);
	if (@certs > 1) {
		# Yes .. keep the first as the cert, and use the others as
		# the chain
		my $orig = shift(@certs);
		my $fh = "CHAIN";
		&open_tempfile($fh, ">$chain");
		foreach my $c (@certs) {
			&print_tempfile($fh, $c);
			}
		&close_tempfile($fh);
		my $fh2 = "CERT";
		&open_tempfile($fh2, ">$cert");
		&print_tempfile($fh2, $orig);
		&close_tempfile($fh2);
		}
	else {
		# Download the fixed list chained cert files
		foreach my $url (@$letsencrypt_chain_urls) {
			my $cout;
			my ($host, $port, $page, $ssl) = &parse_http_url($url);
			my $err;
			&http_download($host, $port, $page, \$cout, \$err,
				       undef, $ssl);
			if ($err) {
				@rv = (0, &text('letsencrypt_echain', $err));
				goto FAILED;
				}
			if ($cout !~ /\S/ && !-r $chain) {
				@rv = (0, &text('letsencrypt_echain2', $url));
				goto FAILED;
				}
			my $fh = "CHAIN";
			&open_tempfile($fh, ">>$chain");
			&print_tempfile($fh, $cout);
			&close_tempfile($fh);
			}
		}

	# Copy the per-domain files
	my $certfinal = "$module_config_directory/$doms[0].cert";
	my $keyfinal = "$module_config_directory/$doms[0].key";
	my $chainfinal = "$module_config_directory/$doms[0].ca";
	&copy_source_dest($cert, $certfinal, 1);
	&copy_source_dest($key, $keyfinal, 1);
	&copy_source_dest($chain, $chainfinal, 1);
	&set_ownership_permissions(undef, undef, 0600, $certfinal);
	&set_ownership_permissions(undef, undef, 0600, $keyfinal);
	&set_ownership_permissions(undef, undef, 0600, $chainfinal);
	&unlink_file($cert);
	&unlink_file($key);
	&unlink_file($chain);

	@rv = (1, $certfinal, $keyfinal, $chainfinal);
	}

# Run the after command
FAILED:
if ($wellknown_new) {
	&cleanup_wellknown($wellknown_new, $challenge_new);
	}
if ($config{'letsencrypt_after'}) {
	&backquote_logged("$config{'letsencrypt_after'} 2>&1 </dev/null");
	}

return @rv;
}

# cleanup_wellknown(wellknown, challenge)
# Delete directories that were created as part of this process
sub cleanup_wellknown
{
my ($wellknown_new, $challenge_new) = @_;
&unlink_file($challenge_new) if ($challenge_new);
&unlink_file($wellknown_new) if ($wellknown_new);
}

# get_bind_zone_for_domain(domain)
# Given a hostname like www.foo.com, return the local BIND zone that contains
# it like foo.com
sub get_bind_zone_for_domain
{
my ($d) = @_;
&foreign_require("bind8");
my $bd = $d;
while ($bd =~ /\./) {
	my $z = &bind8::get_zone_name($bd, "any");
	if ($z && $z->{'file'} && $z->{'type'} eq 'master') {
		return ($z, $bd);
		}
	$bd =~ s/^[^\.]+\.//;
	}
return ( );
}

# get_virtualmin_for_domain(domain-name)
# If Virtualmin is installed, return the domain object that contains the given DNS domain
sub get_virtualmin_for_domain
{
my ($bd) = @_;
return undef if (!&foreign_check("virtual-server"));
&foreign_require("virtual-server");
while ($bd =~ /\./) {
	my $d = &virtual_server::get_domain_by("dom", $bd);
	if ($d && $d->{'dns'}) {
		return $d;
		}
	$bd =~ s/^[^\.]+\.//;
	}
return undef;
}

# get_certbot_major_version(cmd)
# Returns Let's Encrypt client major version, such as 1.11 or 0.40
sub get_certbot_major_version
{
my ($cmd) = @_;
my $out = &backquote_command("$cmd --version 2>&1");
if ($out && $out =~ /\s*(\d+\.\d+)\s*/) {
	return $1;
	}
return undef;
}

# cleanup_letsencrypt_files(domain)
# Delete all temporary files under /etc/letsencrypt for a domain name
sub cleanup_letsencrypt_files
{
my ($dname) = @_;
foreach my $base ("/etc/letsencrypt", "/usr/local/etc/letsencrypt") {
	next if (!-d $base);
	foreach my $f ("$base/live/$dname",
		       glob("$base/live/$dname-[0-9][0-9][0-9][0-9]"),
		       "$base/archive/$dname",
                       glob("$base/archive/$dname-[0-9][0-9][0-9][0-9]"),
		       "$base/renewal/$dname.conf",
		       glob("$base/renewal/$dname-[0-9][0-9][0-9][0-9].conf")) {
		&unlink_file($f) if (-e $f);
		}
	}
}

1;

Filemanager

Name Type Size Permission Actions
help Folder 0755
images Folder 0755
lang Folder 0755
subdir Folder 0755
CHANGELOG File 12.02 KB 0644
acme_tiny.py File 11.24 KB 0755
adminupgrade File 299 B 0644
backup_config.pl File 1.97 KB 0755
bootup.cgi File 1.04 KB 0755
cache.cgi File 1.47 KB 0755
cgi_args.pl File 159 B 0755
change_access.cgi File 1.34 KB 0755
change_advanced.cgi File 3 KB 0755
change_anon.cgi File 712 B 0755
change_bind.cgi File 4.8 KB 0755
change_ca.cgi File 674 B 0755
change_debug.cgi File 1.38 KB 0755
change_lang.cgi File 558 B 0755
change_lock.cgi File 554 B 0755
change_log.cgi File 2.38 KB 0755
change_mobile.cgi File 940 B 0755
change_os.cgi File 1.85 KB 0755
change_osdn.cgi File 1.54 KB 0755
change_overlay.cgi File 1.16 KB 0755
change_proxy.cgi File 1.09 KB 0755
change_referers.cgi File 633 B 0755
change_session.cgi File 4.77 KB 0755
change_ssl.cgi File 3.03 KB 0755
change_startpage.cgi File 773 B 0755
change_status.cgi File 1.02 KB 0755
change_theme.cgi File 1.16 KB 0755
change_twofactor.cgi File 1.43 KB 0755
change_ui.cgi File 1.61 KB 0755
change_web.cgi File 2.47 KB 0755
clear_blocked.cgi File 154 B 0755
clear_cache.cgi File 205 B 0755
clone_mod.cgi File 2.06 KB 0755
config File 114 B 0644
config.info File 696 B 0644
config.info.ar File 414 B 0644
config.info.ca File 408 B 0644
config.info.cs File 233 B 0644
config.info.de File 368 B 0644
config.info.es File 229 B 0644
config.info.fa File 301 B 0644
config.info.fr File 577 B 0644
config.info.hr File 0 B 0644
config.info.hu File 0 B 0644
config.info.it File 245 B 0644
config.info.ja File 531 B 0644
config.info.ko File 206 B 0644
config.info.ms File 286 B 0644
config.info.nl File 299 B 0644
config.info.no File 283 B 0644
config.info.pl File 284 B 0644
config.info.pt_BR File 299 B 0644
config.info.ru File 491 B 0644
config.info.sk File 132 B 0644
config.info.sv File 202 B 0644
config.info.tr File 155 B 0644
cpan_modules.pl File 229 B 0755
defaultacl File 17 B 0644
delete_cache.cgi File 471 B 0755
delete_mod.cgi File 2.24 KB 0755
delete_webmincron.cgi File 1.51 KB 0755
download_cert.cgi File 532 B 0755
edit_access.cgi File 1.38 KB 0755
edit_advanced.cgi File 3.87 KB 0755
edit_anon.cgi File 812 B 0755
edit_assignment.cgi File 1.12 KB 0755
edit_bind.cgi File 2.95 KB 0755
edit_blocked.cgi File 944 B 0755
edit_ca.cgi File 2.82 KB 0755
edit_categories.cgi File 1.69 KB 0755
edit_debug.cgi File 2.04 KB 0755
edit_descs.cgi File 1.49 KB 0755
edit_ipkey.cgi File 1.7 KB 0755
edit_lang.cgi File 1.82 KB 0755
edit_lock.cgi File 763 B 0755
edit_log.cgi File 3.04 KB 0755
edit_mobile.cgi File 1.26 KB 0755
edit_mods.cgi File 4.45 KB 0755
edit_os.cgi File 2.72 KB 0755
edit_proxy.cgi File 3.7 KB 0755
edit_referers.cgi File 899 B 0755
edit_sendmail.cgi File 3.48 KB 0755
edit_session.cgi File 5.18 KB 0755
edit_ssl.cgi File 10.55 KB 0755
edit_startpage.cgi File 1.68 KB 0755
edit_status.cgi File 1.13 KB 0755
edit_themes.cgi File 3.72 KB 0755
edit_twofactor.cgi File 1.5 KB 0755
edit_ui.cgi File 2.51 KB 0755
edit_upgrade.cgi File 4.26 KB 0755
edit_web.cgi File 2.88 KB 0755
edit_webmincron.cgi File 1.35 KB 0755
export_mod.cgi File 1.23 KB 0755
feedback_files.pl File 126 B 0755
fix_os.cgi File 228 B 0755
gnupg-lib.pl File 13.38 KB 0755
hide.cgi File 326 B 0755
index.cgi File 4.16 KB 0755
install_mod.cgi File 3.11 KB 0755
install_theme.cgi File 2.29 KB 0755
jcameron-key.asc File 1.29 KB 0644
letsencrypt-cleanup.pl File 2.02 KB 0755
letsencrypt-dns.pl File 2.57 KB 0755
letsencrypt-lib.pl File 14.03 KB 0755
letsencrypt.cgi File 4.64 KB 0755
log_parser.pl File 1.23 KB 0755
module.info File 195 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 142 B 0644
module.info.ar File 185 B 0644
module.info.ar.auto File 22 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 208 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 218 B 0644
module.info.ca File 134 B 0644
module.info.ca.auto File 15 B 0644
module.info.cs File 28 B 0644
module.info.cs.auto File 128 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 142 B 0644
module.info.de File 126 B 0644
module.info.de.auto File 15 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 262 B 0644
module.info.es File 33 B 0644
module.info.es.auto File 109 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 158 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 202 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 141 B 0644
module.info.fr File 32 B 0644
module.info.fr.auto File 129 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 195 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 149 B 0644
module.info.hu File 30 B 0644
module.info.hu.auto File 148 B 0644
module.info.it File 33 B 0644
module.info.it.auto File 107 B 0644
module.info.ja File 180 B 0644
module.info.ko File 22 B 0644
module.info.ko.auto File 129 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 180 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 157 B 0644
module.info.ms File 119 B 0644
module.info.ms.auto File 15 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 144 B 0644
module.info.nl File 28 B 0644
module.info.nl.auto File 117 B 0644
module.info.no File 29 B 0644
module.info.no.auto File 117 B 0644
module.info.pl File 155 B 0644
module.info.pl.auto File 15 B 0644
module.info.pt File 33 B 0644
module.info.pt.auto File 113 B 0644
module.info.pt_BR File 36 B 0644
module.info.pt_BR.auto File 119 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 147 B 0644
module.info.ru File 34 B 0644
module.info.ru.auto File 172 B 0644
module.info.sk File 30 B 0644
module.info.sk.auto File 132 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 147 B 0644
module.info.sv File 30 B 0644
module.info.sv.auto File 114 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 258 B 0644
module.info.tr File 33 B 0644
module.info.tr.auto File 128 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 215 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 209 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 177 B 0644
module.info.zh File 22 B 0644
module.info.zh_TW File 25 B 0644
module.info.zh_TW.auto File 115 B 0644
newcsr.cgi File 800 B 0755
newkey.cgi File 879 B 0755
postinstall.pl File 2.01 KB 0755
refresh_modules.cgi File 664 B 0755
restart.cgi File 87 B 0755
save_assignment.cgi File 485 B 0755
save_categories.cgi File 946 B 0755
save_descs.cgi File 1006 B 0755
save_ipkey.cgi File 1.31 KB 0755
save_newmod.cgi File 278 B 0755
save_sendmail.cgi File 2.08 KB 0755
save_webmincron.cgi File 1016 B 0755
savekey.cgi File 2.8 KB 0755
setup_ca.cgi File 1.52 KB 0755
standard_chooser.cgi File 1.68 KB 0755
stop_ca.cgi File 1.03 KB 0755
syslog_logs.pl File 633 B 0755
system_info.pl File 5.02 KB 0644
test_sendmail.cgi File 784 B 0755
third_chooser.cgi File 1.55 KB 0755
twofactor-funcs-lib.pl File 8.81 KB 0644
uninstall.pl File 236 B 0755
update.cgi File 2.86 KB 0755
upgrade.cgi File 16.6 KB 0755
view_webmincron.cgi File 1.66 KB 0755
webmin-lib.pl File 68.77 KB 0755