晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/imunify360/venv/lib64/python3.11/site-packages/clcommon/public_hooks/bundle/cpanel/ |
| Current File : //opt/imunify360/venv/lib64/python3.11/site-packages/clcommon/public_hooks/bundle/cpanel/manager.py |
# -*- coding: utf-8 -*-
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2018 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
#
import subprocess
from collections import namedtuple
import os
import json
import logging
from clcommon.public_hooks import CLOUDLINUX_HOOKS, CONTACT_SUPPORT_MESSAGE_FOOTER
BIN_DIR = os.path.join(CLOUDLINUX_HOOKS, 'cpanel/')
MANAGE_HOOK = '/usr/local/cpanel/bin/manage_hooks'
Hook = namedtuple('Hook', ['path', 'category', 'event', 'stage'])
HOOKS = (
Hook(BIN_DIR + 'postwwwacct', 'Whostmgr', 'Accounts::Create', 'post'),
Hook(BIN_DIR + 'postkillacct', 'Whostmgr', 'Accounts::Remove', 'post'),
Hook(BIN_DIR + 'prekillacct', 'Whostmgr', 'Accounts::Remove', 'pre'),
Hook(BIN_DIR + 'postmodifyacct', 'Whostmgr', 'Accounts::Modify', 'post'),
Hook(BIN_DIR + 'premodifyacct', 'Whostmgr', 'Accounts::Modify', 'pre'),
Hook(BIN_DIR + 'postrestoreacct', 'PkgAcct', 'Restore', 'post'),
)
logger = logging.getLogger(__name__)
def _install_hook(hook_path, category, event, stage):
is_installed = _is_hook_installed(event, category, hook_path, stage)
if is_installed:
logger.info('Hook for %s:%s:%s action '
'is already installed; skip installing',
category, event, stage)
return True
logger.debug('Registering %s:%s:%s action hook', category, event, stage)
try:
output = subprocess.check_output([
MANAGE_HOOK, 'add', 'script', hook_path,
'--category', str(category),
'--event', str(event),
'--stage', str(stage), '--manual'
], stderr=subprocess.STDOUT, text=True)
except (OSError, subprocess.CalledProcessError) as e:
if isinstance(e, subprocess.CalledProcessError):
message = e.output.rstrip('\n')
else:
message = str(e)
logger.error('Can\'t install hook `%s` to category: `%s` event: `%s`; message: `%s`',
os.path.basename(hook_path), category, str(event), message)
return False
else:
logger.info('Register hook ended successfully; tool output: `%s`', output.rstrip())
return True
def _is_hook_installed(event, category, hook_script_path, stage):
"""
Check if hook with given parameters
is installed in control panel
:return: boolean
"""
all_hooks = _get_hooks_config()
if all_hooks is None:
return None
try:
for i in all_hooks[category][event]:
if i['hook'] == hook_script_path and i['stage'] == stage:
return True
except KeyError:
return False
return False
def _get_hooks_config():
"""
Reads main hooks config file
"""
try:
stream = subprocess.check_output(
['/usr/local/cpanel/bin/manage_hooks', 'list', '--output=JSON'],
text=True
)
except (OSError, subprocess.CalledProcessError) as e:
logger.error('Unable to load list of '
'already installed hooks. Reason is `%s`', str(e))
return None
try:
all_hooks = json.loads(stream)
except (ValueError, TypeError):
logger.exception('Received list of installed hooks '
'is malformed and not valid JSON. %s',
CONTACT_SUPPORT_MESSAGE_FOOTER)
return None
return all_hooks
def _delete_hook_script(hook_script_path, category, event, stage):
"""
Delete hook script and unregister in cPanel
"""
# if something bad happened and _is_hook_installed is None, we must try
# to uninstall hooks in order not to leave garbage
if _is_hook_installed(event, category, hook_script_path, stage) is False:
logger.info('Hook for %s:%s:%s action '
'is not installed; skip removing',
category, event, stage)
return True
logger.debug('Unregistering %s:%s:%s action hook', category, event, stage)
try:
output = subprocess.check_output([
MANAGE_HOOK, 'delete', 'script', hook_script_path,
'--category', str(category),
'--event', str(event),
'--stage', str(stage), '--manual'
], stderr=subprocess.STDOUT, text=True)
except (OSError, subprocess.CalledProcessError) as e:
if isinstance(e, subprocess.CalledProcessError):
message = e.output.rstrip('\n')
else:
message = str(e)
logger.error('Can\'t delete hook with category:`%s` event:`%s`; message: `%s`. %s',
category, str(event), message, CONTACT_SUPPORT_MESSAGE_FOOTER)
return False
else:
logger.info('Unregister hook ended successfully; tool output: `%s`', output.rstrip())
return True
def install_hooks(hooks=HOOKS):
success = True
for hook in hooks:
success = _install_hook(
hook.path, hook.category, hook.event, hook.stage) and success
return success
def remove_hooks(hooks=HOOKS):
success = True
for hook in hooks:
success = _delete_hook_script(
hook.path, hook.category, hook.event, hook.stage) and success
return success
|