晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - scripts/ssl_crt_status Copyright 2022 cPanel, L.L.C.
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
package scripts::ssl_crt_status;
use strict;
use warnings;
use Cpanel::SSLPath ();
use Cpanel::SSLInfo ();
use Getopt::Param ();
use Cpanel::StringFunc ();
use Cpanel::ArrayFunc ();
use Term::ANSIColor ();
use Cpanel::Config::LoadUserDomains ();
use Cpanel::Hostname ();
__PACKAGE__->run() unless caller();
sub run {
my $param = Getopt::Param->new(
{
'quiet' => 0,
'help_coderef' => sub {
print <<"END_HELP";
$0 - give a status report of the server's SSL certificates
--help this screen
--verbose show more than just errors
--verbose=long include verification result of valid crts
By default it will check every domain, you can specify one or more specific
domains to check by passing one or more --domain flags:
--domain=your.domain.here --domain=other.domain.here
END_HELP
exit;
},
}
);
my $debug = $param->get_param('debug');
my $verbose = $param->get_param('verbose');
my @domains = Cpanel::ArrayFunc::uniq_from_arrayrefs( [ $param->exists_param('domain') ? $param->get_param('domain') : ( Cpanel::Hostname::gethostname(), grep( !/^\*/, sort keys %{ Cpanel::Config::LoadUserDomains::loaduserdomains( undef, 1 ) } ) ) ] );
if ( grep /^--domain$/, @domains ) {
print "Domain must be unambiguously specified in this format --domain=fqdn.tld\n\n";
$param->help();
}
my $sslroot = Cpanel::SSLPath::getsslroot();
print "[info] SSL root: $sslroot\n" if $verbose;
if ($debug) {
require Data::Dumper;
}
# fetchinfo() is and verifysslcert() may still be "loud"
close STDERR; # just to be on the safe side
open STDERR, '>', '/dev/null'; ## no critic qw(InputOutput::RequireCheckedOpen)
for my $domain (@domains) {
my $ssl_info_hr = Cpanel::SSLInfo::fetchinfo($domain);
if ($debug) {
print Data::Dumper::Dumper($ssl_info_hr);
}
if ( $ssl_info_hr->{'statusmsg'} =~ /^No certificate for the domain \S+ could be found[.]$/ ) {
if ($verbose) {
print Term::ANSIColor::color 'bold blue';
print "Ok: $domain does not have an SSL crt\n";
print Term::ANSIColor::color 'reset';
}
}
else {
my ( $rc, $msg ) = Cpanel::SSLInfo::verifysslcert(
$sslroot,
$ssl_info_hr->{'crt'},
$ssl_info_hr->{'key'},
$ssl_info_hr->{'cab'},
1, # makes verifysslcert() not do any print()s
1, # makes verifysslcert() return plain text instead of HTML
);
if ($rc) {
if ($verbose) {
print Term::ANSIColor::color 'bold green';
print "Ok: $domain SSL crt verified\n";
print Term::ANSIColor::color 'reset';
if ( $verbose eq 'long' ) {
print Cpanel::StringFunc::indent_string($msg) . "\n";
}
}
}
else {
print Term::ANSIColor::color 'bold red';
print "Error: $domain SSL crt verification failed:\n";
print Term::ANSIColor::color 'reset';
print Cpanel::StringFunc::indent_string($msg) . "\n";
}
}
}
return 1;
}
1;