virtualmin - Silvermouse
Sat Jan 15 2022 22:06:44 GMT+0000 (Coordinated Universal Time)
Saved by @pirate
#!/usr/bin/perl # Copyright James Lawrie 2021 # james@silvermouse.net # use warnings; use strict; use Data::Dumper; my @domains = glob('/etc/webmin/virtual-server/domains/*'); my @sites; my %aliases; foreach my $domain (@domains) { my %temp_config; open my $file, "<", $domain; foreach (<$file>) { if (/^([^=]+)=([^=]+)$/) { chomp ($temp_config{$1} = $2); } } close $file; if ($temp_config{"alias_mode"} eq "1") { if (!$aliases{$temp_config{"backup_alias_dom"}}) { $aliases{$temp_config{"backup_alias_dom"}} = []; } push ($aliases{$temp_config{"backup_alias_dom"}}, $temp_config{'dom'}); } else { push (@sites, \%temp_config); } } foreach my $site (@sites) { my %config = %{$site}; print generate_config($config{'dom'}, $config{'ssl'}, %config); if ($config{'logrotate'}) { generate_logrotate($config{'dom'}); } } sub generate_config { my $site = shift; my $ssl = shift; my %config = @_; my $port = $ssl ? $config{'web_sslport'} : $config{'web_port'}; my $ssl_config; my $config = "<VirtualHost $config{'dns_ip'}:${port}"; $config .= $config{ip6} ? " [$config{'ip6'}]:${port}>\n" : ">\n"; if ($ssl) { $config .= <<"EOF"; SSLEngine on SSLCertificateFile $config{'ssl_cert'} SSLCertificateKeyFile $config{'ssl_key'} EOF $config .= " SSLCertificateChainFile $config{'ssl_chain'}\n" if $config{'ssl_chain'}; } $config .= <<"EOF"; SuexecUserGroup "#$config{'uid'}" "#$config{'gid'}" ServerName $site ServerAlias www.${site} ServerAlias autoconfig.${site} ServerAlias autodiscover.${site} EOF my $aliases = $aliases{$config{'dom'}}; foreach my $alias (@$aliases) { $config .= " ServerAlias ${alias}\n ServerAlias www.${alias}\n" if $alias; } $config .= <<"EOF"; DocumentRoot $config{'public_html_path'} ErrorLog /var/log/virtualmin/$config{'dom'}_error_log CustomLog /var/log/virtualmin/$config{'dom'}_access_log combined RemoveHandler .php RemoveHandler .php5 RemoveHandler .php5.6 RemoveHandler .php7.0 RemoveHandler .php7.2 RemoveHandler .php7.3 RemoveHandler .php7.4 php_admin_value engine Off DirectoryIndex index.html index.htm index.php index.php4 index.php5 <Directory $config{'public_html_path'}> Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch Require all granted AddType application/x-httpd-php .php EOF my @fcgis = glob("$config{'home'}/fcgi-bin/*"); my $default_php = 0; foreach (@fcgis) { if (/.*(php(.*))\.fcgi/) { $config .= " FCGIWrapper $_ .${1}\n"; $config .= " AddHandler fcgid-script ${1}\n"; $default_php = $2 > $default_php ? $2 : $default_php; } } if ($config{'last_php_version'}) { $default_php = $config{'last_php_version'}; } $config .= <<"EOF"; FCGIWrapper $config{'home'}/fcgi-bin/php${default_php}.fcgi .php AddHandler fcgid-script .php Require all granted </Directory> <Directory $config{'cgi_bin_path'}> allow from all AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch Require all granted </Directory> FcgidMaxRequestLen 1073741824 Redirect /mail/config-v1.1.xml /cgi-bin/autoconfig.cgi IPCCommTimeout 61 FcgidMaxRequestLen 1073741824 php_value memory_limit 32M php_value suhosin.session.encrypt Off <Files awstats.pl> AuthName "$config{'dom'} statistics" AuthType Basic AuthUserFile $config{'home'}/.awstats-htpasswd require valid-user </Files> </VirtualHost> EOF if ($ssl) { $config .= generate_config($config{'dom'}, 0, %config); } else { return $config; } } sub generate_logrotate { my $domain = shift; my $logrot = "/etc/logrotate.d/${domain}.conf"; my $output = <<"EOF"; /var/log/virtualmin/${domain}_access_log /var/log/virtualmin/${domain}_error_log { rotate 5 weekly compress postrotate systemctl reload httpd.service ; sleep 5 endscript sharedscripts } EOF if (!-e $logrot) { open my $fh, ">", $logrot; print $fh $output; } }
Comments