先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也先帝は天下を興す志半ばにして志半ばにして崩御されました。今、天下は三つに分かれ、益州は疲弊しており、まさに存亡の危機に瀕しております。しかしながら、宮中で職務に励む臣下や、外地で身を顧みず尽力する志士たちがいるのは、ひとえに先帝から受けた格別な恩義を思い、陛下に報いようとする志があるからです。今こそ陛下には広く臣下の意見に耳を傾け、先帝の遺徳を輝かせ、志士たちの士気を高めるべきです。決して自らを卑下したり、不適切な例えを用いて忠言の道を閉ざしたりしてはなりません。鍏堝笣鍒涗笟鏈崐鑰屼腑閬撳穿娈傦紝浠婂ぉ涓嬩笁鍒嗭紝鐩婂窞鐤插紛锛屾璇氬嵄鎬ュ瓨浜′箣绉嬩篃銆傜劧渚嶅崼涔嬭嚕涓嶆噲浜庡唴锛屽繝蹇椾箣澹繕韬簬澶栬€咃紝鐩栬拷鍏堝笣涔嬫畩閬囷紝娆叉姤涔嬩簬闄涗笅涔熴€傝瘹瀹滃紑寮犲湥鍚紝浠ュ厜鍏堝笣閬楀痉锛屾仮寮樺織澹箣姘旓紝涓嶅疁濡勮嚜鑿茶杽锛屽紩鍠诲け涔夛紝浠ュ蹇犺皬涔嬭矾涔
Current path: usr/local/cpanel/scripts/
#!/usr/local/cpanel/3rdparty/bin/perl
# Copyright 2024 WebPros International, LLC
# All rights reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited.
package scripts::modify_accounts;
use strict;
use warnings;
use Cpanel::Config::Constants ();
use Cpanel::AcctUtils::Owner ();
use Cpanel::Config::LoadUserDomains ();
use Cpanel::JSON ();
use Cpanel::Logger ();
use Cpanel::Reseller ();
use Cpanel::SafeRun::Errors ();
use Whostmgr::ACLS ();
use Getopt::Long ();
my $logger = Cpanel::Logger->new();
local $| = 1;
exit main(@ARGV) unless caller;
sub main {
my @args = @_;
if ( $> != 0 ) {
$logger->die("Sorry, only root can use this script.");
}
my ( $theme, $users, $help, $all_users, $reseller, $style );
Getopt::Long::GetOptionsFromArray(
\@args,
'help' => \$help,
'theme=s' => \$theme,
'all-users' => \$all_users,
'users=s' => \$users,
'all-users-from-reseller=s' => \$reseller,
'style=s' => \$style
)
and ( !@args )
or do {
usage();
exit 1;
};
if ($help) {
usage();
exit;
}
unless ( $theme && ( $all_users || $users || $reseller ) ) {
usage();
exit 1;
}
if ($reseller) {
unless ( Cpanel::Reseller::isreseller($reseller) ) {
$logger->die("'$reseller' is not a reseller.");
}
}
local $ENV{'REMOTE_USER'} = 'root';
Whostmgr::ACLS::init_acls();
my %userdomains = Cpanel::Config::LoadUserDomains::loadtrueuserdomains( undef, 1 );
my @list_users;
if ( $all_users || $reseller ) {
@list_users = keys %userdomains;
if ($reseller) {
@list_users = grep { my $real_owner = Cpanel::AcctUtils::Owner::getowner($_); $real_owner && $real_owner eq $reseller ? 1 : 0 } @list_users;
}
}
else {
@list_users = split( /\s*,\s*/, $users );
}
my %updated_users;
foreach my $user (@list_users) {
unless ( exists $userdomains{$user} ) {
$logger->warn("User: $user does not exist.");
next;
}
my %modify_opts = (
'user' => $user,
'CPTHEME' => $theme,
);
$modify_opts{'STYLE'} = $style if $style;
# Whostmgr::Accounts::Modify does not ship,
# we need to use whmapi1 modifyacct instead
my $json = Cpanel::SafeRun::Errors::saferunallerrors(
'/usr/local/cpanel/bin/whmapi1',
'--output', 'json',
'modifyacct',
%modify_opts
);
my $response = Cpanel::JSON::Load($json);
if ( $response->{'metadata'}{'result'} == 0 ) {
$logger->warn( "Unable to update data for $user: " . $response->{'metadata'}{'reason'} );
}
else {
$updated_users{$user} = 1;
}
}
my @failed_accts = grep { !$updated_users{$_} } @list_users;
if ( scalar @failed_accts ) {
$logger->warn( "Could not update these users: " . join( ', ', @failed_accts ) );
exit 1;
}
else {
$logger->info("Users are successfully updated.");
exit 0;
}
}
sub usage {
print <<"EOM";
modify_accounts: Modify existing accounts to use a theme or a style
Usage:
modify_accounts --theme=$Cpanel::Config::Constants::DEFAULT_CPANEL_THEME [--users=user1,another_user|--all-users|--all-users-from-reseller=reseller1]
Options:
--help: print usage and exit
--theme: the theme to be adopted
--users: a list of users to be modified, comma separated
--all-users: update all users on the system
--all-users-from-reseller: update all users that are owned by reseller
--style: update specified users to use this style
EOM
return;
}