Tj#ddlZddlZddlmZddlmZmZmZddlm Z m Z dZ dZ ej dZdZd ZGd d ZGd d ZdS)N) ConfigParser) run_commandget_file_linesExternalProgramFailed)AnyStrListz /etc/sysctl.d/90-cloudlinux.confz/etc/sysctl.confz[A-Za-z0-9._/-]+ct|trt|st ddS)zLReject names that are not a valid sysctl key (prevents directive injection).z?Invalid sysctl parameter name (must match a sysctl key grammar)N) isinstancestr_SYSCTL_NAME_RE fullmatch ValueError)names /builddir/build/BUILDROOT/alt-python27-cllib-3.4.41-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/sysctl.py_validate_sysctl_namersH dC \(A(A$(G(G\Z[[[\\ct|tr|nt|}td|DrtddS)zOReject control chars / \r / \n in a value so it cannot inject extra directives.c3jK|].}t|dkst|dko|dvV/dS) z N)ord).0chs r z)_validate_sysctl_value..%sD R RrCGGdN -c"ggo B2U? R R R R R Rrz9Invalid sysctl value (control characters are not allowed)N)r r anyr)valuetexts r_validate_sysctl_valuers_uc** :55E D R RT R R RRRVTUUUVVrczeZdZdZdZedfdZdZedZ dZ e dZ d Z d Zd Zdd Zd ZdS) SysCtlConfz( For reading params from sysctl z /sbin/sysctlTc@||_|jd|_||_dS)z :param config_file: path to user defined systcl config file :param mute_errors: T/F value to define should we skip errors or not (used in cldiag checker) .tmpN) config_fileconfig_tmp_file mute_errors)selfr#r%s r__init__zSysCtlConf.__init__0s.'"&"2888&rcj|jdg} t|dS#t$r |jsYdSwxYw)z> Apply all params from sysctl.d & sysctl.conf z--systemN) SYSCTL_BINrrr%)r&cmds r _apply_allzSysCtlConf._apply_all;sf O         $   #     s 22cp|jddd|g}t|d\}}}|}|S)zM Read sysctl param :param name: name of sysctl param z-bz-nz--T)r*return_full_output)r)rstrip)clsrr*ret_codestd_outstd_inrs r_read_sysctl_paramzSysCtlConf._read_sysctl_paramMsU N     %0#% % % !'6  rcjt|jdd5}d|}|||t j|dddn #1swxYwYt j|j|j dS)zm Write sysctl params to sysctl.conf :param lines: content for writing to sysctl.conf wutf-8encodingN) openr$joinwriteflushosfsyncfilenorenamer#)r&lines sysctl_confs r_write_params_to_filez SysCtlConf._write_params_to_filefs $&g > > > ++GGENNE   e $ $ $       H['')) * * *  + + + + + + + + + + + + + + + $&(899999sA%B  B B c\|ddS)N=r)splitr.)lines r_get_param_name_from_linez$SysCtlConf._get_param_name_from_liness%zz#q!'')))rc.t|j}|S)zW Read content from sysctl.conf :return: lines from sysctl.conf )rr#)r&results r_read_sysctl_confzSysCtlConf._read_sysctl_confys  011 rcj}tfd|D}|S)Nc3JK|]}|kVdS)N)rI)rrH param_namer&s rrz+SysCtlConf.has_parameter..s6__DZ4#A#A$#G#GG______r)rLr)r&rO file_linesrKs`` r has_parameterzSysCtlConf.has_parametersB++-- _____T^_____ rcX|||}|S)z{ Get sysctl param by name :param name: name of sysctl param :return: value of sysctl param )r+r3)r&rrs rgetzSysCtlConf.gets, ''-- rct|t||d|d}t|}d}t |D]8\}}|dr||} || kr|}9|dkr||n|r|||<||| dS)z Set sysctl param by name :param overwrite: overwrite value of existed parameter :param name: name of sysctl param :param value: value of sysctl param z =  #N) rrlistrL enumerate startswithrIappendrDr+) r&rr overwriteparamsysctl_conf_output idx_paramirHkeys rsetzSysCtlConf.sets d###u%%%%%E%%%!$"8"8":":;;  !344  GAts## 0066Cs{{ ??  % %e , , , ,  2,1 y ) ""#5666 rc:|t|}g}t|D]6\}}||}||kr|d|7|D]}||=||dS)z[ Remove systcl param from config :param name: name of sysctl param rN)r+rXrLrYrIinsertrD)r&rr^idx_listr`rHras rremovezSysCtlConf.removes !$"8"8":":;; !344 & &GAt0066Cs{{1%%% & &A"1%% ""#566666rN)T)__name__ __module__ __qualname____doc__r) SYSCTL_FILEr'r+ classmethodr3rD staticmethodrIrLrQrSrbrfrrr r )s J#.D ' ' ' '$[0 : : :**\*      877777rr c<eZdZdZdZedZdZdZdZdZ dZ d S) SysCtlMigratezp Class for migrating of sysctl parameter from /etc/sysctl.conf to /etc/sysctl.conf.d/90-cloudlinux.conf z/var/lve/cl-sysctl.migrater"mainctt|_tt|_t dd|_|j|jdS)N)r#F) interpolationstrict) r rk _src_confSYSCTL_CL_CONF_FILE _dst_confr_migrate_configreadMIGRATE_CONFIG_PATH)r&s rr'zSysCtlMigrate.__init__s^# <<<#0CDDD ,$uMMM !!$":;;;;;rcd}|j|jr@|j|j|r |j|j|}|S)NF)rx has_section MAIN_SECTION has_option getboolean)r&rOrKs r_is_migration_donez SysCtlMigrate._is_migration_donese   + +D,= > > T$//0A:NN T)44T5F SSF rc|j|js|j|j|j|j|dt |jdd5}|j||tj | dddn #1swxYwYtj |j|j dS)Ntruer5r6r7)rxr|r} add_sectionrbr:MIGRATE_CONFIG_TMP_PATHr<r=r>r?r@rArz)r&rO config_tmps r_set_migration_state_to_donez*SysCtlMigrate._set_migration_state_to_dones(#//0ABB @  , ,T-> ? ? ?   !2JGGG $.g F F F **  & &z 2 2 2       HZ&&(( ) ) ) * * * * * * * * * * * * * * * $.0HIIIIIs7ACCCcN||rdS|j|r|j|}n|}|j||#|dnd}|j|||||dS)a% Migrate sysctl parameter from one config to another in conformity with presence of parameter in source config and default value. All cases of using you can see in doc: https://docs.google.com/spreadsheets/d/1H_q3TA3CMFCj1YwAOn7G1LZgxcS1F4h90B6jCgiTUpo )rONTF)r\)rrurQrSrfrwrbr)r&rO default_valuerr\s rmigratezSysCtlMigrate.migrates  " "j " 9 9  F > ' ' 3 3 "N&&z22EE"E j)))  !. 55I N  z5I  F F F ))Z)@@@@@rN) rgrhrirjrzrr}r'rrrrnrrrprps~7!4:::L<<< J J JAAAAArrp)r>re configparserrclcommon.utilsrrrtypingrrrvrkcompiler rrr rprnrrrs %%%%%%MMMMMMMMMM8 "*011\\\VVV\7\7\7\7\7\7\7\7~DADADADADADADADADADAr