File: //usr/sbin/cagefs_enter_site
#!/opt/cloudlinux/venv/bin/python3 -sbb
# -*- coding: utf-8 -*-
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2025 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# https://cloudlinux.com/docs/LICENCE.TXT
#
"""
Execute a command inside CageFS for a site (document root or domain).
This wrapper provides a command-line interface for executing commands within
the isolated CageFS environment for a specific website.
"""
import argparse
import os
import sys
from clcagefslib.webisolation import libenter
def create_parser():
"""
Create argument parser for cagefs_enter_site.
Returns:
argparse.ArgumentParser: Configured argument parser
"""
parser = argparse.ArgumentParser(
# the command is named with _underscores_ to match
# existing cagefs_enter wrapper from lvewrappers
prog="cagefs_enter_site",
description="Execute a command inside CageFS for a site (document root or domain)",
)
parser.add_argument("site", type=str, help="Document root or domain")
parser.add_argument(
"command", type=str, nargs=argparse.REMAINDER, help="Command to execute"
)
return parser
def main():
"""
Main entry point.
Returns:
int: Exit code
"""
parser = create_parser()
args = parser.parse_args()
if not args.command:
parser.error("COMMAND is required")
try:
return libenter.enter_site(args.site, args.command)
except ValueError as e:
print(f"Error: {e}", file=sys.stderr)
return 1
except KeyboardInterrupt:
# Clean Ctrl+C exit without traceback (exit code 130 = SIGINT).
return 130
if __name__ == "__main__":
if os.geteuid() == 0:
print("Error: This program can not be run as root", file=sys.stderr)
sys.exit(1)
sys.exit(main())