VULN_CHECK_I913V6 /iP@dZddlZddlZddlmZddlmZddlmZddlmZddlm Z Gd d Z d Z d Z d Z dZdZGddZGddZGddZGddZy)z7 Classes for representing and manipulating interfaces. N)access) refpolicy) objectmodel)matching)_cNeZdZdZdZdZdZeeeZedZ dZ y) Paramz; Object representing a parameter for an interface. c|d|_tj|_tj|_d|_y)NT) _Param__namerSRC_TYPEtypeIdSet obj_classesrequiredselfs 8/usr/lib/python3.12/site-packages/sepolgen/interfaces.py__init__zParam.__init__&s, && $??, cXtj|std|z||_y)NzName [%s] is not a param)r is_idparam ValueErrorr )rnames rset_namezParam.set_name,s(  &7$>? ? rc|jSN)r rs rget_namezParam.get_name1s {{rc2t|jddSNr)intrrs rzParam.6sS12%7r)fgetcd|jdtj|jddj |j dS)Nz$)rr field_to_strrjoinrrs r__repr__zParam.__repr__8s7 911$))XZ ZrN) __name__ __module__ __qualname____doc__rrrpropertyrnumr)rrr r "s5   Hh 'D 7 8CZrr chd}||vr||}||jk(ry|tjk(s|tjk(r|jtjk(s|jtjk(red}|r|jg}ng}t j |j|D]}|tjvsd}ntj|_n*d}n't}||_ ||_|||j<|r%|jj|j|SNrr) rrrTGT_TYPE obj_class itertoolschainrrimplicitly_typed_objectsr radd)rravparamsretpavobjsobjs r__param_insertr?>s C v~ 4L 166>  I&& &$)2D2D*D FFi(( (AFFi6H6H,HC,, q}}f=+>>>C>''AF C Gqvv  ",,' Jrcd}d}tj|jr+t|jtj ||dk(rd}tj|j r+t|j tj||dk(rd}tj|jr+t|jtj||dk(rd}|S)ajExtract the parameters from an access vector. Extract the parameters (in the form $N) from an access vector, storing them as Param objects in a dictionary. Some attempt is made at resolving conflicts with other entries in the dict, but if an unresolvable conflict is found it is reported to the caller. The goal here is to figure out how interface parameters are actually used in the interface - e.g., that $1 is a domain used as a SRC_TYPE. In general an interface will look like this: interface(`foo', ` allow $1 foo : file read; ') This is simple to figure out - $1 is a SRC_TYPE. A few interfaces are more complex, for example: interface(`foo_trans',` domain_auto_trans($1,fingerd_exec_t,fingerd_t) allow $1 fingerd_t:fd use; allow fingerd_t $1:fd use; allow fingerd_t $1:fifo_file rw_file_perms; allow fingerd_t $1:process sigchld; ') Here the usage seems ambiguous, but it is not. $1 is still domain and therefore should be returned as a SRC_TYPE. Returns: 0 - success 1 - conflict found rFr) rrsrc_typer?rrtgt_typer3r4 OBJ_CLASS)r9r:r; found_srcs rav_extract_paramsrEjsH CI % "++y'9'92v F! KC % "++y'9'92v F! KC & ",, (;(;R HA MC Jrctj|jr&t|jtj d|Syr)rrroler?rROLE)rGr:s rrole_extract_paramsrIs2 #diivFF$rcvfd}d}||jtjrd}||jtjrd}||j tj rd}tj|jr(t|jtjdrd}|S)Nchd}|D])}tj|st||ds(d}+|Sr2)rrr?)setrr;xr:s rextract_from_setz2type_rule_extract_params..extract_from_sets:A  #!!T48C rrr) src_typesrr tgt_typesr3rrCrr dest_typer? DEST_TYPE)ruler:rNr;s ` rtype_rule_extract_paramsrTs C (:(:; (:(:;(()*=*=> ( $..)*=*=tV LC Jrcd}|jD]7}tj|st|tj d|s6d}9|Sr2)argsrrr?rr)ifcallr:r;args rifcall_extract_paramsrYsE C{{   S !c9#5#5tVD  JrceZdZdZdZy)AttributeVectorcDd|_tj|_y)Nr )rrAccessVectorSetrs rrzAttributeVector.__init__s ,,. rc:|jj|yr)radd_avrr9s rr_zAttributeVector.add_avs 2rN)r*r+r,rr_r0rrr[r[s /rr[ceZdZdZdZdZy) AttributeSetci|_yr) attributesrs rrzAttributeSet.__init__s rc6||j|j<yr)rdr)rattrs radd_attrzAttributeSet.add_attrs%) "rc d}d}|D]e}|dd}|ddk(r|r|j|||},|s/|jd}tj|}|j |g|r|j|yy)Nc|ddj}t|dk7s|ddk7rtd|zt}|d|_|S)Nrr Attributez#Syntax error Attribute statement %s)splitlen SyntaxErrorr[r)linefieldsas r parse_attrz*AttributeSet.from_file..parse_attrsV!BZ%%'F6{a6!9 #;!"G$"NOO!AAYAFHrrjr[,)rgrmr AccessVectorr_)rfdrsrrrplr9s r from_filezAttributeSet.from_files  D9DAw#~MM!$t$JJsO((+  MM!  rN)r*r+r,rrgryr0rrrbrbs*rrbc:eZdZdifdZifdZdZdZdZdZy)InterfaceVectorNcd|_d|_tj|_i|_|r|j ||d|_y)NTr F)enabledrrr]r:from_interfaceexpanded)r interfacerds rrzInterfaceVector.__init__sG  ,,.      : 6 rc|j|_|jD]f}|jtjj k7r+d|jvr:t j|}|D]}|j|h|r|jD]}|jD]}||jvr|j|}|j D]|} tj| }|j|jk(r|j|_ |j|jk(r|j|_|j|~|jD]} t!| |j"s|j%D]} t'| |j"s|j)D]} t+| |j"sy)N dontaudit)ravrules rule_typerAVRuleALLOWravrule_to_access_vectorsr_typeattributesrdcopyrArrBrolesrIr: typerulesrTinterface_callsrY) rrrdavruleavsr9 typeattributerfattr_vecrrrGrSrWs rr~zInterfaceVector.from_interfacesNN  '')F9#3#3#9#99inn,11&9C B* !*!9!9!; )44D:#8#88 )44T:H%__!YYq\;;(--7*7*<*)rr}rs rr)zInterfaceVector.__repr__Cs,0IIt||DDr) r*r+r,rr~r_rrr)r0rrr{r{s,!%""46/h Err{c`eZdZddZdZdZdZdZdZifdZ difd Z d Z d Z d Z d Zy) InterfaceSetNc<i|_i|_g|_||_yr) interfaces tgt_type_map tgt_type_alloutput)rrs rrzInterfaceSet.__init__Hs  rcZ|jr|jj|dzyy)Nr)rwrite)rrs rozInterfaceSet.oNs$ ;; KK  cDj ) rc<t|jjdD]}|jd|jzt|j jdD]>}|j|jdt j|jd@|jdt|jj}|D]3}|jdj||jd 5y) Nc|jSrrrMs rr#z&InterfaceSet.to_file..Ssr)keyz[InterfaceVector %s c|jSrrrs rr#z&InterfaceSet.to_file..Us!&&rrr&z] rur) sortedrvaluesrrr:rr'rrto_listr()rrwivparamavlr9s rto_filezInterfaceSet.to_fileRs//17GHB HH+bgg5 6 0 0 28HIUZZ1G1G 1STUJ HHUO**,-C"& Irc(d}d}|D]e}|dd}|ddk(r|r|j|||},|s/|jd}tj|}|j |g|r|j||j y)Nc|ddj}t|dks|ddk7rtd|zt}|d|_t|dk(ry|ddD]w}|jd}t|dk7rtd|zt }|d|_t j|d|_||j|j<y|S) Nrrjrkrr{z)Syntax error InterfaceVector statement %srz-Invalid param in InterfaceVector statement %s) rmrnror{rr r str_to_fieldrr:)rprqifvfieldr<rs r parse_ifvz)InterfaceSet.from_file..parse_ifv^s!BZ%%'F6{Q&)/@"@!"MPT"TUU!#CayCH6{aKK$q6Q;%&UX\&\]]qT &33AaD9 ). 5::&$Jrrjrrtru)add_ifvrmrrvr_index)rrwrrrprxr9s rryzInterfaceSet.from_file]s $D9DAw#~LL%oJJsO((+ 2  LL  rc6||j|j<yr)rr)rrs rrzInterfaceSet.add_ifvs$'!rc|jjD]}t}|jD]c}tj|j r'|j j|t}n|j|j e|D]/}|jj|g}|j|1yr) rrrLrrrBrrr8r setdefault)rrrPr9rrxs rrzInterfaceSet.indexs??))+CIjj$$R[[1%%,,S1 #I bkk* !"%%00r: ",rc>t||}|j|yr)r{r)rrrdrs rr8zInterfaceSet.addsi4 Srctj|j|jD]}|j |||j ||j yr)r5r6r templatesr8expand_ifcallsr)rheadersrrdis r add_headerszInterfaceSet.add_headerssQ!3!3!5w7H7H7JKA HHQ #L G$ rctj|rNt|dd}|t|jkDry|j|dz }t |t r|S|gS|gSr!)rrr"rnrV isinstancelist)ridrWr/rXs r map_paramzInterfaceSet.map_paramsd   R bf+CS%%kk#'*c4(J5L4Krc |j|j|}|y|j|j|}|y|j|j|}|yt j }|j D](}|j||} | |j| *t|dk(ry|D].} |D]'} |D] } |jj| | | |")0y)Nr) rrArBr4rrpermsupdaternrr8) rrr9rWrOrPr new_permspermr<rArBr4s r map_add_avzInterfaceSet.map_add_avsNN2;;7   NN2;;7   nnR\\6:   OO% HHDtV,Ay  #  y>Q  !H%!,IJJNN8Xy)L"-&"rc|dfg}|j|j}d|_t|dkDr|j d\}}|j|j}||k7r1|j D]}|j ||||jrq|jD]Z} | j|jk(r|jtdy || j} |j| | f\t|dkDryy#t$r*|jtd| jzYwxYw)NTrrjzFound circular interface classz#Missing interface definition for %s) rrrrnpoprrrifnamerrKeyErrorr) rr if_by_namestackrcur cur_ifcallcur_ifvr9rWnewifs rdo_expand_ifcallszInterfaceSet.do_expand_ifcallss% T"#ooinn- %j1n#iimOCoochh/Gi!..BOOCZ8) ##--/==INN2FF1=>?&v}}5E  eV_-0%j1n( FF1BV]]RSTs D0EEc&i}tj|j|jD]}|||j<tj|j|jD]}|j ||yr)r5r6rrrr)rrrrrs rrzInterfaceSet.expand_ifcallssy !3!3!5w7H7H7JKA!"Jqvv L#););)=w?P?P?RSI  " "9j 9Trr)r*r+r,rrrryrrr8rrrrrr0rrrrGsM * !F( )++/2 M8!.H :rr)r-rr5r rrrr sepolgeni18nrr r?rErIrTrYr[rbr{rr0rrrsx( ZZ8(X2hG2 >WEWEtp:p:r