JFIF ( %!1!%)+...383-7(-.+  -%%/----------------------------------------------7--"C !1AQ"aq2B#R$CSbr3s'!1"AQ2a#$B ?:5+k,T‰u2 rMtd5=.61ZlJSlT۔X+9!%W5R9I+Q !#`ߙAW  5<"cY=i #bLw z1LLjzrXf'9q ϑ*SQN;.YEp>UJHߕ-W ^/ayM4:(KIc`ATZ0WܣlsdHUCvYoMhjݱR!.PĘ0s+JC Rp9)0 PEkTy5[ VѺ\hpWwaВ6NqUN+KRQ{rbE[VBзDCa'x)).JR*B\~a1;( leZcoC ZUltd+yy%&XqkݧNa N{\s_˷nǻ[6AVC $iAvx<&XI :\h gT uF S{D2ɿ7\r+e"nYە4TMK{k6"#4l@ĉbGRѡH)Sj1۬2S )|47S.jYS8}پ )lhoktZLٸeԕ0YhkRXb|u[|sO=Kw}*´'ss"Vtc֠2'Khs :&=lfy@j"¸XE}4.{M?Myt*C[yrgJQ@l=oLdËi.}u?4'CK}/LAMYrIb 4w(j{w+MF7)륑UiEwof9F)ݕ%,7W)0lgfpe1}7^D'GE(O29OOJ"/9**I n#0pm V !nPS N`y%$Ą\-]HJkAQZeg;yV| |G[;yH?>K=Ѧ% ªjEe\>w+pQ#;/p̤V(A&aڏ~ɟ~ō{,8 t>!k9bǁo԰ 26E&ޢ 4S$Ǘ4i,Zk4bC+4#Rg8Mj?9á!zp"0d0IlN"1D6[Ywk)9?TV8L\ִΪ-9M알%$pmF]=ڭ|?+>4݊$@ ;eĤM$†sm4fIE}W5o-{\M[P\I%A\䗓pe1ڭ]-sg+>2iqeżT, YpG;ZèklWjlJ8N 4rUVIt)k?TعE-MC tMs-|G5Ls\,r+!ȋ)-K@0\JUTnK86# ˪THbGWVjHIkt|kJQGcmu4e6]n1h;u|EL%x |qpiŊ3 MBp-[c&s|ӺjlBIypմMxp/ֆ3۝mMFjQ=;HI7o2!h\Cө[b{[_%A:Z #`ѠdOᦢbFbE~xd8=\ 2;%kAY5@5&6'9$I\$/ A.STaDZ[cs`of ͤךk =VgIIdQTMsNZwdt䓢(`BߢfqrH *ykE)#R-Y< Zvd.X"x!K*铼^9>Ě]0t(e$4O_d:! 9(z 'A"5 W٠pSn:{V peQͽ!ݔj4*N @4EÉ908ܪ\5E,RLp*vúcKNoތ/De=vkI~MI1a5%×_YVa&Lwzzm9\r3x71~}sddG#NY([I[SLۂ\Ӕnlu׳|3Uc܍2u"1&0Cp}!4:r;&umrGS WdQ=դ:.ʧBNK43@̀`Vi!VG#t7:" TD-ʍid]C4J T4ȢqwJʖF (T{V*Y|UaƉ 3mG 2S¶7sPTG6$+)]g4sd @'@ '>LdPaMe_DFSHf:6Iq›$_k_mٳKgK.,wSm=DwK#[~CRǸ ԹeyOlQdl!sXܤߊp{˜eP4hN=Y]h9,];`})#$QYE#ZZH"m6ǡ\pi?g4H` Q3D],3;SWwlqtSd#:аϪd?fq>'sXӣmn$US{ݼ XcᣂM+mV]9ͽnVCbmo\MhpT"){;WֹCIv B -Q 0w245\OUmWeZYŞy,Wci{./ԁSxvI\t*2SJt 4. "V>\q(pV[;?NJVIX;;4XXv)8{ >Z-:#k(] ;;nBV,} /U;33;=@E^ưi$1Ӹէ]s(mk6V^(ث`tO;;]m+L%i3H(ʑLeE8DTA#,[\c;9bk,ŕMIg;[Xh k( q+!+" %B(}L؁v "N,nA„3Чk@i 6:Pvǐ(#nv5+qJΊB@rP^O% MF 5j>.IUk<9?WV*3&:v U4:x۹N)g VX)5EFʑ%E4F׿+f ],?q>U2O-'/2Ɣ -3_}A+vFtߒ 5?>Þpv 444[Ak(edƜ$<4U?JW>7?%dsmvg: SMcǾT7K# ʫPqEhȣ'O ~PGdɔe&?Aq~c4wߋ{%v={fcTg d8\cT⛦Z/.s;6컠W*j89É|ƥsgws.qq}X=N0?dr.~)9.Ci|DXT 3#BS^Y`crVPI-SS|T y$!^Pszh6P6[y!qc" @^g@mNhjb HHPs57?$\Vq:u\tTd4A mb~cڃL߲(҂|'ĝ7\bt\ k5{qVjF,u)2W-tj%i`k*K&t= N\泴#GPNg*~4o2!mh6GRvh4aQTq SGGGSRH,`*4?BzAw5`q߫g;ZCjl{#HsAkFU&u.fuӒ= 9Z>3kD6‰fL`6tU׾ 8m46emԁq;[{ߢ :f4'~t|mlCP$Dtwᘋ&lnm֛o窳 %a'VO׉p͕IAW8ڴ 'N# tDe|;a?ڲC#- Mq2dTǎt+*3\8nB,/uuCͪ),5%V!h͜O>jz^*jɇt~Kyp/%<Q/{z+3vZd E Dj4@r@!&&{0M(TzgoKn#yhЍ M!-Ԇ:_ι9SϻM7vq|j:X$DۘoZc9U_+v_t<ڸ&ƑeNnjxK+$BU<&ɢ skp v'{*:A#=[ y n(|lD`H˧vFObfmL`7o0OP罭7U{hLNvSAD'ʔ잟-x  GQZ AfkF];u\0D4~kIP"#yW m[Y^6 #&VX~$g1bnRŊKH [eo4.tN.EY1|ȶSA,i,m/&H Ţ{} 9!gŠnv+vըP=[a!M9/ UD膑 i,)eK.JaxNatMLi:S".U=Q4Xr?koQ3h { K֋7tt\B:UH:ArlRZsiϓztV\;cݣ'Ow2Odi06ޕWVe 'ĒARWWf#mS>{o-(mX.26ZaYjfQ7+@W/-1oDTO$O%H%[sZ%hꂌI*<ts=wRs/:KC%xCRtҼ m)O>?^L-RxvOiMStթ`Z$ N۔zOV,{'U[$vG5||hFlHU1[ɆF{@\59ͽ)v }3#y] Xpw N΄ۜzCY"?Gݙz䬐H.P JoNm M ]UF $9zOQz@Ѣ8'\8T٭WX$ !TN w}Ѡi@i fH`|Ҭp+Ydyvk`ݜ}7Cbul9j,T~Za403WebShell
403Webshell
Server IP : 103.247.9.134  /  Your IP : 216.73.216.59
Web Server : LiteSpeed
System : Linux kahayan.iixcp.rumahweb.net 5.14.0-570.37.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Aug 26 10:33:12 EDT 2025 x86_64
User : sinj3299 ( 1448)
PHP Version : 8.3.30
Disable Function : system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /sbin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sbin/lvdctl
#!/opt/cloudlinux/venv/bin/python3 -bb
# coding=utf-8
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2026 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
#
# lvdctl — end-user utility for managing per-domain (LVD) resource limits.
# JSON-only output.

import argparse
import json
import logging
import os
import sys

from clcommon.clpwd import ClPwd

from websiteisolation.commands import cmd_apply, cmd_list, cmd_set
from websiteisolation.config import resolve_lve_id
from websiteisolation.exceptions import LvdError


VERSION = '1.0.0'


def _setup_logging():
    log_dir = os.path.join(ClPwd(min_uid=0).get_pw_by_uid(os.getuid())[0].pw_dir, '.lve')
    log_path = os.path.join(log_dir, 'lvdctl.log')
    logger = logging.getLogger('websiteisolation')
    logger.setLevel(logging.DEBUG)
    logger.propagate = False

    fmt = logging.Formatter('[%(levelname)s | %(asctime)s]: %(message)s')

    os.makedirs(log_dir, mode=0o700, exist_ok=True)
    fh = logging.FileHandler(log_path)
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(fmt)
    logger.addHandler(fh)


def _output(data):
    """Print JSON response to stdout."""
    print(json.dumps(data, indent=2))


def _error(message, exit_code=1):
    """Print JSON error to stdout and exit."""
    _output({'result': 'error', 'message': str(message)})
    sys.exit(exit_code)


def _add_user_args(parser):
    """Add mutually exclusive --lve-id / --username to a subparser."""
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--lve-id', type=int, metavar='ID',
                       help='LVE (user) ID')
    group.add_argument('--username', metavar='NAME',
                       help='username (alternative to --lve-id)')


def _add_domain_arg(parser, required=True):
    parser.add_argument('--domain', required=required, metavar='NAME',
                        help='domain name')


def _add_limit_args(parser):
    parser.add_argument('--cpu', type=int, metavar='VAL',
                        help='CPU limit (hundredths of percent, 2500 = 25%%)')
    parser.add_argument('--pmem', type=int, metavar='VAL',
                        help='physical memory limit (bytes)')
    parser.add_argument('--io', type=int, metavar='VAL',
                        help='I/O limit (KB/s)')
    parser.add_argument('--nproc', type=int, metavar='VAL',
                        help='max processes')
    parser.add_argument('--iops', type=int, metavar='VAL',
                        help='I/O operations per second')


def _collect_limits(args):
    limits = {}
    for field in ('cpu', 'pmem', 'io', 'nproc', 'iops'):
        val = getattr(args, field, None)
        if val is not None:
            limits[field] = val
    return limits


def handle_list(args):
    lve_id = resolve_lve_id(args.lve_id, args.username)
    return cmd_list(lve_id=lve_id, domain=args.domain)


def handle_set(args):
    lve_id = resolve_lve_id(args.lve_id, args.username)
    limits = _collect_limits(args)
    if not limits:
        _error("at least one limit (--cpu, --pmem, --io, --nproc, --iops) required")
    return cmd_set(lve_id, args.domain, limits)


def handle_apply(args):
    lve_id = resolve_lve_id(args.lve_id, args.username)
    return cmd_apply(lve_id, args.domain)


def build_parser():
    parser = argparse.ArgumentParser(
        prog='lvdctl',
        description='Manage per-domain (LVD) resource limits. JSON-only output.')
    parser.add_argument('--version', action='version',
                        version=json.dumps({'version': VERSION}))

    sub = parser.add_subparsers(dest='command', metavar='command')

    # list
    p = sub.add_parser('list', help='show limits for all domains or a specific domain')
    _add_user_args(p)
    _add_domain_arg(p, required=False)
    p.set_defaults(func=handle_list)

    # set
    p = sub.add_parser('set', help='store per-domain limits and apply them to kernel',
                       epilog='Example:\n'
                              '  lvdctl set --domain example.com --cpu 5000 --pmem 268435456 --io 2048 --nproc 30 --iops 500\n'
                              '\n'
                              'This sets: CPU 50%, 256 MB RAM, 2048 KB/s IO, 30 procs, 500 IOPS.\n'
                              'Use PYLVE_DEBUG=1 for verbose helper output.',
                       formatter_class=argparse.RawDescriptionHelpFormatter)
    _add_user_args(p)
    _add_domain_arg(p)
    _add_limit_args(p)
    p.set_defaults(func=handle_set)

    # apply
    p = sub.add_parser('apply', help='push one domain\'s limits from config to kernel')
    _add_user_args(p)
    _add_domain_arg(p)
    p.set_defaults(func=handle_apply)

    return parser


def main():
    if os.getuid() == 0:
        _error("lvdctl must not be run as root; run as a regular user")

    _setup_logging()
    log = logging.getLogger(__name__)
    log.debug('Executing "%s"', ' '.join(sys.argv))

    is_debug = int(os.environ.get('PYLVE_DEBUG', 0))
    if is_debug:
        print(f"DEBUG [lvdctl]: uid={os.getuid()} argv={sys.argv}",
              file=sys.stderr)

    parser = build_parser()
    args = parser.parse_args()

    if not args.command:
        parser.print_help()
        sys.exit(1)

    try:
        result = args.func(args)
        _output(result)
    except LvdError as e:
        log.error('%s', e)
        _error(str(e))
    except Exception as e:
        log.exception('unexpected error')
        _error(f"unexpected error: {e}")


if __name__ == '__main__':
    main()

Youez - 2016 - github.com/yon3zu
LinuXploit