PHP 8.0.30
Preview: crontab-user-wrapper.py Size: 2.84 KB
//proc/thread-self/root/opt/cloudlinux/venv/bin/crontab-user-wrapper.py

#!/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
# http://cloudlinux.com/docs/LICENCE.TXT
#
"""
Crontab wrapper for website isolation support.

This wrapper mimics crontab command-line interface:
- crontab -l: Lists current crontab entries, filtering isolation tool prefixes
- crontab [file]: Installs crontab from file (or '-' for stdin)

When website isolation is active (PROXYEXEC_DOCUMENT_ROOT is set):
1. List operations filter out isolation wrapper prefixes from output
2. Save operations automatically prepend isolation tool to commands

The isolation tool is prepended to commands to ensure they run within the
isolated website context.
"""

import argparse
import sys

from clcagefslib.webisolation import crontab


def create_parser():
    """
    Create argument parser for the crontab wrapper.

    Returns:
        argparse.ArgumentParser: Configured argument parser
    """
    parser = argparse.ArgumentParser(
        prog="crontab-user-wrapper",
        description="Crontab wrapper for website isolation support. "
                    "Filters and modifies crontab entries to support website isolation.",
    )

    parser.add_argument(
        "-l",
        "--list",
        action="store_true",
        help="List current crontab entries (filters isolation prefixes)",
        dest="list_crontab",
    )

    parser.add_argument(
        "file",
        nargs="?",
        default="-",
        help="File containing crontab entries to install, or '-' to read from stdin (default: '-')",
    )

    return parser


def main(argv=None):
    """
    Main entry point.

    Args:
        argv: Command line arguments (defaults to sys.argv[1:])

    Returns:
        int: Exit code
    """
    parser = create_parser()
    args = parser.parse_args(argv)

    try:
        if args.list_crontab:
            return crontab.process_list()

        # Handle file argument: '-' means stdin, otherwise open the file
        if args.file == "-":
            stdin = sys.stdin.buffer
        else:
            try:
                stdin = open(args.file, "rb")
            except IOError as e:
                sys.stderr.write(f"crontab: error reading {args.file}: {e}\n")
                return 1

        try:
            return crontab.process_save(stdin=stdin)
        finally:
            if args.file != "-" and stdin != sys.stdin.buffer:
                stdin.close()
    except Exception as e:
        # Surface any failure (e.g. forged PROXYEXEC_DOCUMENT_ROOT rejected
        # by get_document_root) as a clean stderr message instead of a
        # Python traceback leaking into the user's terminal.
        sys.stderr.write(f"crontab: {type(e).__name__}: {e}\n")
        return 1


if __name__ == "__main__":
    sys.exit(main())

Directory Contents

Dirs: 0 × Files: 56

Name Size Perms Modified Actions
1.65 KB lrw-r--r-- 2026-06-16 08:49:16
Edit Download
915 B lrw-r--r-- 2026-06-16 08:49:16
Edit Download
2.14 KB lrw-r--r-- 2026-06-16 08:49:16
Edit Download
8.82 KB lrw-r--r-- 2026-06-16 08:49:16
Edit Download
229 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
15.55 KB lrwxr-xr-x 2026-07-14 13:30:22
Edit Download
1.83 KB lrwxr-xr-x 2026-07-14 13:30:22
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
5.28 KB lrwxr-xr-x 2026-07-13 11:15:48
Edit Download
4.51 KB lrwxr-xr-x 2026-07-13 11:15:48
Edit Download
231 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
231 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
231 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
3.83 KB lrwxr-xr-x 2026-07-13 11:15:48
Edit Download
2.84 KB lrwxr-xr-x 2026-07-14 13:30:22
Edit Download
686 B lrw-r--r-- 2026-07-13 11:15:48
Edit Download
238 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
224 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
235 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
232 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
232 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
232 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
230 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
231 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
1.84 KB lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
1.63 KB lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
225 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
259 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
229 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
1.12 KB lrw-r--r-- 2026-06-23 08:47:01
Edit Download
229 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
260 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
233 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
905 B lrw-r--r-- 2026-07-13 11:15:48
Edit Download
229 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
228 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
229 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
227 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
233 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
249 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
239 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
225 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
237 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
15.59 KB lrwxr-xr-x 2025-08-07 10:15:56
Edit Download
15.59 KB lrwxr-xr-x 2025-08-07 10:15:56
Edit Download
15.59 KB lrwxr-xr-x 2025-08-07 10:15:56
Edit Download
235 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
235 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
223 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
223 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
603 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download
254 B lrwxr-xr-x 2026-06-16 08:49:16
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).