IQg(VddlZddlZddlZddlZddlZddlmZGddeZGddeZ dZ dd Z d Z d e d e fd Zd dZiZd!dZd"dZejdejejzejzZdZdZdZdZdZdZdZedgdZdZ de d e fdZ!dS)#N) namedtupleceZdZdZdS)WebConfigParsingErrorc||_dSNmessageselfr s s/builddir/build/BUILD/imunify360-venv-2.5.0/opt/imunify360/venv/lib/python3.11/site-packages/clcommon/clconfpars.py__init__zWebConfigParsingError.__init__  N__name__ __module__ __qualname__r rr rr#rrceZdZdZdS)WebConfigMissingc||_dSrrr s r r zWebConfigMissing.__init__rrNrrrr rrrrrasectionFc&tjddd}|r t|_|rbt |d5}|tjd}dddn #1swxYwYn>t |dd5}|}dddn #1swxYwY| d td |z| t| t S) NTF)allow_no_value interpolationstrictrbreplacerutf-8encoding[z] )source)section) configparser ConfigParserstr optionxformopenreaddecodelocalegetpreferredencoding read_stringSECHEADdictitems)pathcase_sensitiveignore_bad_encodingconfigfraws r loadr:s  &d59.3555F!  $   L&&((//&"="?"?KKC L L L L L L L L L L L L L L L$g . . . !&&((C                '7'''#-d;;;  W -- . ..s#:A>>BBB==CC)'"valreturnc|tr$|tr |ddS|S)zW Strips single or double quote char only if the quote present from both sides. ) startswith_QUOTESendswith)r=s r $_strip_escape_quotes_of_config_valuerE0s> ~~g3<<#8#81R4y Jr=cfi}t|ddd5}|D]m}||d} |\}}n#t$rY+wxYw|}|rt |n|}|||<n dddn #1swxYwY|S)Nr r!surrogateescape)r#errorsr@)r+ readlinessplit ValueErrorstriprE) r4 delimiter strip_quotesdatar8linepartskeyvalues r load_fastrU9s D dC'2C D D D&KKMM & &DJJy!,,E " UU    KKMME 4U;;;  !&D   &&&&&&&&&&&&&&&& Ks6-B&A  B& AB&AAB&&B*-B*c t|}nV#t$rI t|x}t|<n+#ttjf$r|six}t|<YnwxYwYnwxYw|S)zD Read ini file once (cached) and return its content as dict )cacheKeyErrorr:IOErrorr'Error)r4 ignore_errorsress r load_oncer]Ps#Dk ### #!%d +C5;;+, # # #   " "C%+++ ## Js/  A#5A#%AA#AA#"A#c |s|dz}g}t|dd5}t|dd5}|D]}|}|r}|dsh|dd\}} |}||vr7||d||d |||| dddn #1swxYwYdddn #1swxYwYt|d d5}|D]'}||vr!||d||d ( dddn #1swxYwYt j||dS) Nz.tmpr r!r"w#rFr@ a)r+rMrBrKwriteappendosrename) settings_dictr4tmp_path used_keysfinfoutrQ stripped_linerS_s r change_settingsrn`su !&=I tS7 + + + s xw / / / 37  D JJLLM ]%=%=c%B%B &,,S!44Qiikk-''JJ#>> c(:>>>???$$S))) JJt                                    hg . . .<$  < z _ngx_tokenize..sZ  [[^^ Arc3DK|]}|d|VdS)r`N)rB)rrtoks r rtz _ngx_tokenize..s3 = =C)<)< =C = = = = = =r)_NGINX_TOKENS_REfinditer)rPtokenss r _ngx_tokenizerzsD%..t44F > =6 = = ==rc#*K|D] }||vrdS|VdSrr)itr=rvs r _ngx_take_untilr}s: #:: FF rc#`Kd}|D]&}|dkr|dz }n |dkr|dz}|dkrdS|V'dS)Nr@{}r)r|lvlts r _ngx_take_until_block_endrse C  88 1HCC #XX 1HC 77 FFrci}|D]@}|dkrt|D]}||vr"t|d}t|||<A|S)z5Scan a block for required fields, skips nested blocksrz; )rr}list) block_tokens need_fieldsinforvrm value_tokenss r _ngx_scan_block_inforsj D++ #::.|<<   +  *<??L\**DI Krc#zKt|}|D]}|dkr t|dD]}t|}t|d} |d}|d}n#t$rYYwxYw|s|sbt |dt |dd|dgvd Vd S) aq Parse content of NGINX configuration in a manner tolerant to minor mistakes and extract relevant fields from all `server` directives. Relevant fields are: - `server_name` - `root` - returned as `document_root` - `ssl` - if `listen` field contains "ssl" word Doesn't handle interpolated values (ex. `${val}`) outside of quoted strings serverr) server_namerootlistenrrrsslr)r document_rootrN)rzr}rrrXrEget)rPryrvrmrrrrs r nginx_conf_loose_parserrs4 F   (??  !--  A 188 $L2STT }-K>) $ $DByBBCCC7 BBJ ' 33 4 44rc tj|std|g}t |}d|D}d}d}i}g}t |dkr|d}d|vr|d} d} | d\} } | d d } n#t$r| } YnwxYw| | | | d }d |vr|||<|dz }d}g}|r| |t |dk| D]} dd d dt| ddd }| D]O} d| vrD| d dd |d<Kd| vrC| dd|d<d| vr=dd| ddD|d<d| vr/| d|d<d| vrE| ddk|d<Q| ||S)Nrc<g|]}tjd||S)z ^((?!#).)*$)research)rris r z&apache_conf_parser..s) ? ? ?!29]A#>#> ?A ? ? ?rrFz Tz)userrr server_aliasportr ServerNamezwww.r DocumentRootr<r ServerAlias,c34K|]}t|VdSr)r))rrns r rtz%apache_conf_parser...s(/Q/Q1A/Q/Q/Q/Q/Q/QrrSuexecUserGroupr SSLEngineonr)rer4rrr splitlineslenpoprKrrLrdvaluesintrMjoinlower)r conf_datadata_allrPIDenableresultvhostoutip_portriprTrQs r apache_conf_parserrs* 7>>) $ $DByBBCCCI5i@@KKMMH ? ?x ? ? ?D B F F E d))a--hhqkk S iikk!nGD "==--D||C,,     LL    LL   F  s " "F2J EBFE    LL    1 d))a--4 ""$!%U1X  F FDt##&*jjll1o&;&;&=&=&E&Efb&Q&Q]#%%(, Q(=(=(?(?(E(Ec(J(J_%$$'*xx/Q/Q QRR@P/Q/Q/Q'Q'Q^$ D((#zz||A4466V d"""jjll1o3355;;==EU  s2.C!! C0/C0 PamLVECfg)min_uidcagefs_enabledgroupscZt|dd5}|D]}|dr|}t|dkr|ddkrt|dkrt |dnd }t|d kr"t t |dnd }t|d kr|d d ndg}t |||ccdddS dddn #1swxYwYdS)aD Parse string like: "session required pam_lve.so 500 1 group1,group2" :param configfile: path to config file to parse :type configfile: str :return: PamLVECfg instance when pam_lve configuratiom is found, None otherwise :rtype: namedtuple :raises: IOError, ValueError r r!r"r`z pam_lve.soiFrwheelN)r+rBrKrrboolr) configfiler8rQsrrrs r parse_pam_lve_configr<s j# 0 0 0 BA B BDs##  A1vv{{qt|33'*1vv{{#ad)))47FFaKKc!A$iiU,/FFaKK1CgY .&AAAA B B B B B B B B B B B B B B B B B B B B B B B B 4sC2D D  D$'D$ file_pathc6t|d5}|}dddn #1swxYwY |S#t$r<t jtjd|d|dcYSwxYw)NrzFailed to decode "zL" content as utf-8 - loading with placeholders for invalid unicode sequencesr)rI)r+r,r-UnicodeDecodeErrorsyslog LOG_WARNING)rr8raw_datas r rrUs i  !66881   111   x x x x   i00000 1s266AABB)FF)rFF)Fr)"r'r.rerr collectionsr Exceptionrrr1r:rCr)rErUrWr]rncompile IGNORECASE MULTILINEVERBOSErwrzr}rrrrrrrrrrr rs """"""I y  / / / / cc*      62:"MBL 2:-%,>>>       ( ( ( V555FFFR J{$K$K$K L L 2 1c 1c 1 1 1 1 1 1r