晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/sa-update_wrapper 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
use strict;
use warnings;
use Cpanel::Binaries ();
use Cpanel::SafeRun::Object ();
use Cpanel::SpamAssassin::Rules ();
alarm(3600);
if ($>) {
die "$0: must run as root";
}
my $saupdate_bin = Cpanel::Binaries::path('sa-update');
if ( $ENV{CPANEL_BASE_INSTALL} ) {
print STDERR "“$0” refuses to run during a cPanel installation.\n";
exit(0);
}
if ( !$saupdate_bin ) {
die "$0: Found no sa-update path!\n";
}
if ( !-e $saupdate_bin ) {
die "$0: “$saupdate_bin” is missing!\n";
}
if ( !-x _ ) {
die "$0: “$saupdate_bin” is not executable!\n";
}
sub run_saupdate {
my $gpg_option = shift;
if ( !$gpg_option ) {
my $gpg_bin = Cpanel::Binaries::path('gpg');
$gpg_option = !-x $gpg_bin ? '--nogpg' : '--gpg';
}
print "[*] Cleaning up from previous updates.....\n";
clean_up_updates();
print "[*] Running sa-update ($saupdate_bin).....\n";
print "[*] Please note that 'IO::Socket::IP' and 'Net::Patricia' are not needed by our implementation of SpamAssassin.\n[*] The warnings related to them can be safely ignored.\n\n";
my $run = Cpanel::SafeRun::Object->new(
'program' => $saupdate_bin,
'args' => [ $gpg_option, grep( /-Q/i, @ARGV ) ? () : ('-D') ],
'stdout' => \*STDOUT,
'stderr' => \*STDOUT,
'timeout' => 3600,
'read_timeout' => 3600,
);
if ( $run->CHILD_ERROR() ) {
if ( $run->signal_code() || _sa_update_exit_code_is_a_real_failure( $run->error_code() ) ) {
$run->die_if_error();
}
}
print "Done\n";
return;
}
sub _sa_update_exit_code_is_a_real_failure {
my ($error_code) = @_;
# sa-update uses nonzero error codes to indicate
# certain success states:
# https://spamassassin.apache.org/full/3.1.x/doc/sa-update.html#exit_codes
#
# exit code of 0 = updates installed
return 0 if !$error_code;
# exit code of 1 = no updates needed
return 0 if $error_code == 1;
# exit code of 2 = lint of files failed, perl die or general failure
return 1 if $error_code == 2;
# exit code of 3 = at least one channel download filed, but the updater found a backup server to update from successfully
return 0 if $error_code == 3;
# exit code of 4+ = error downloading or extracting and all channels failed
return 1;
}
sub clean_up_updates {
my $version = eval { require Mail::SpamAssassin; $Mail::SpamAssassin::VERSION };
return unless defined $version;
my $dir = "/var/lib/spamassassin/$version/updates_spamassassin_org";
return unless opendir( my $dh, $dir );
while ( defined( my $file = readdir $dh ) ) {
unlink "$dir/$file" if $file =~ /^\d+\.tar\.gz(?:\.(?:asc|sha1))?$/;
}
closedir($dh);
return;
}
run_saupdate();
print "Checking update....";
if ( !Cpanel::SpamAssassin::Rules::has_rules_installed() ) {
print "update failed...retrying without gpg...\n";
run_saupdate('--nogpg');
}
else {
print "update ok!\n";
}