VULN_CHECK_I913V6 /i nddlZddlZddlZddlZddlZddlZddlZddlZddldZ ddl Z ddl m Z ddl mZddlZ ddlZiZej$dkrded<ej&e fd d ied diZej ZddlZiZeed <eed<eed<eed<eed<eed<e ed<e ed<e ed<e!ed<e!ed<e!ed<e"ed<e"ed<e"ed<e#ed<e#ed<e#ed<e$ed<e$ed <e$ed!<e%ed"<e%ed#<e%ed$<ddddddd d"d%Z&d&d&d'd(d)d*d+d,dd- Z' ddl(Z(e(jRe(jTGd.d/Z+Gd1d2Z-d3Z.dPd4Z/dPd5Z0Gd6d7Z1Gd8d9e1Z2Gd:d;e1Z3Gd<d=e1Z4Gd>d?e1Z5Gd@dAe1Z6GdBdCe1Z7GdDdEe1Z8GdFdGe1Z9GdHdIe1Z:GdJdKe1Z;GdLdMe1Z<GdNdOe1Z=y# ddlZeej0d <n#e$rddlZeej0d <YnwxYwYxYw#e,ef$r Gd0d/Z+YwxYw)QN)*zselinux-python) SELinuxPolicy) TypeQuery)Tunicode localedirz/usr/share/localefallback_ all filesa regular filez--fz-d directorydz-ccharacter devicecz-b block devicebz-ssocketsz-ll symbolic linkpz-p named pipe)r rrrrrrranyblockchardirfilesymlinkpipe) r r rrrrrrrc.eZdZdZddZddZdZdZy)loggercRtj|_g|_g|_yN)audit audit_openaudit_fdlog_listlog_change_listselfs -/usr/lib/python3.12/site-packages/seobject.py__init__zlogger.__init__ns!!,,.DMDM#%D c d} ||k7r || dzz }d} ||k7r || dzz }d} ||k7r || dzz }d} |jj|jtjt j dt||d||||||dddgy)N-sename,rolerangerr )r*appendr)r'AUDIT_ROLE_ASSIGNsysargvstr) r-msgnamer3seroleserange oldsename oldserole oldserangeseps r.logz logger.logssC"sX~%"sV|#*$sW}$ MM $--1H1H#((ST+WZ[^W_aeghjprx{BDMOXZdfhjlnp"q rr0c |jj|jtjt j dt||d||||||dddgy)Nrr )r*r7r)r'AUDIT_ROLE_REMOVEr9r:r; r-r<r=r3r>r?r@rArBs r. log_removezlogger.log_removesz MM $--1H1H#((ST+WZ[^W_aeghjprx{BDMOXZdfhjlnp"q rr0c |jj|jtjt |ddddgy)Nsemanager )r+r7r)r'AUDIT_USER_MAC_CONFIG_CHANGEr;r-r<s r. log_changezlogger.log_changes:  ' '8Z8Z\_`c\dfprtvxz|(} ~r0c|jD]}tj||gz|jD]}tj||gzg|_g|_yr&)r*r'audit_log_semanage_messager+audit_log_user_comm_message)r-successrs r.commitz logger.commitsY]]001y=B#))11A MC*DM#%D r0Nr r r r r r r __name__ __module__ __qualname__r/rDrHrMrRr0r.r$r$ls & r r  &r0r$c.eZdZdZddZddZdZdZy)r$cg|_yr&)r*r,s r.r/zlogger.__init__s DMr0c d|d|} |dk7r| d|zz } |dk7r| d|zz } |dk7r| d|zz } |dk7r| d|zz } |dk7r || d|zz } |dk7r || d |zz } |jj| y) N z name=r z sename=z oldsename=z role=z old_role=z MLSRange=z old_MLSRange=r*r7) r-r<r=r3r>r?r@rArBmessages r.rDz logger.logs'*D1G|:..B=944|8f,,B<)33"}!4<'11RJ$:+j88 MM  )r0c 4|j||||||||yr&)rDrGs r.rHzlogger.log_removes HHS$Iz Zr0c@|jjd|zy)Nz %sr]rLs r.rMzlogger.log_changes MM  -r0c|dk(rd}nd}|jD])}tjtj||z+y)Nz Successful: zFailed: )r*syslogLOG_INFO)r-rQr^rs r.rRz logger.commits7!|($]] foow{;#r0NrSrTrXr0r.r$r$s  *  [ . z'moduleRecords.get_all..yQqTr0T)keyreversec |dSNrrXrs r.rz'moduleRecords.get_all..zrr0)r) semanage_module_list_allrrr r6semanage_module_list_nthsemanage_module_info_get_name semanage_module_info_get_enabled!semanage_module_info_get_priority!semanage_module_info_get_lang_extr7sort) r-rrmlistnumberimodr=enabledprioritylang_exts r.get_allzmoduleRecords.get_all]s8 6tww?UF 6Q?@A AvA*5!4C4TWWcBHBAv #>!?@@:477CHKBAv #A!BCC40 >"r0c|j}t|dk(rgS|Dcgc] }|ddk(s |c}Dcgc] }d|dz c}Scc}wcc}w)Nrrbz-d %s)rr|)r-allrxs r.rzmoduleRecords.customized}s[lln s8q=I47(ECq1Q419C(EF(E1!A$(EFF(EFs AAAc .|j}t|dk(ry|r2tdtdddtdddtdd|D]=}|d dk(r td }n|rd }t|ddd|d dd|d dd|?y)Nr z Module Name25r\Priority9LanguagerbDisabledr r5)rr|printr )r-heading locallistrrdisableds r.listzmoduleRecords.listslln s8q=   =)91Z=!J-X YAtqyZ= !A$!adHE Fr0c,tjj|stt d|zt |j |}|dkrtt d|zt|j |}|dk\r|jyy)NzModule does not exist: %s r3Invalid priority %d (needs to be between 1 and 999)) ospathexistsrr semanage_set_default_priorityrsemanage_module_install_filerR)r-r rrs r.addzmoduleRecords.adds{ww~~d#Q;BAv #B!CDD,TWWc6BBAv$Q'C%Dq%HII$Q'D%E%IJJ  r0c"t|j|}|dkrttd|z|j D]:}t |j|}|dks|dk7s%ttd|z|j y)Nrrz*Could not remove module %s (remove failed))rrrr rsemanage_module_removerR)r-rrrrs r.deletezmoduleRecords.deletes *477H = 6QTUX``a aA'3BAv"( #O!PST!TUU r0c|jDcgc] }|ddk(s |c}Dcgc]}|d }}|D]}|j|dycc}wcc}w)NrbrT)rr)r-rrrrs r.rzmoduleRecords.deletealls^'+||~C~!1A~C DCaQqTC DA   Q %D Ds AA Ar&rbr) rUrVrWr/rrrrrrrrXr0r.rrXs--@G G $ &r0rceZdZddZdZy)dontauditClassNc0tj||yr&rrs r.r/zdontauditClass.__init__rr0c|dvrttd|jt|j|dk(|j y)N)onoffz'dontaudit requires either 'on' or 'off'r)rr rsemanage_set_disable_dontauditrrR)r- dontaudits r.togglezdontauditClass.toggles@ M )QHIJ J &tww U0BC r0r&)rUrVrWr/r rXr0r.rrs -r0rc:eZdZd dZdZdZd dZdZdZdZ y) permissiveRecordsNc0tj||yr&rrs r.r/zpermissiveRecords.__init__rr0c,g}t|j\}}}|dkrttdt |D]Q}t ||}t |}|s|jds/|j|jddS|S)Nrr permissive_rb) semanage_module_listrrr r6rsemanage_module_get_name startswithr7r)r-rrrrrrr=s r.rzpermissiveRecords.get_alls 2477;UF 6Q?@A AvA*5!4C+C0D 6M2156  r0c`t|jDcgc]}d|z c}Scc}w)Nz-a %s)sortedr)r-rs r.rzpermissiveRecords.customizeds+%+DLLN%;<%;! %;<<? @\\^ A "a z?a    +#@!AB CA !H!#__s CC Ccd|z}d|z}t|j|t||d}|dk\r|j|dkrt t d|zy)N permissive_%sz(typepermissive %s)cilrz?Could not set permissive domain %s (module installation failed))semanage_module_installrr|rRrr )r-typer=modtxtrs r.rzpermissiveRecords.addsc%&- $TWWfc&k4 O 7 KKM 6Q`adhhi i r0c|jD]7}t|jd|z}|dks"tt d|z|j y)Nrrz5Could not remove permissive domain %s (remove failed))rrrrr rR)r-r=nrs r.rzpermissiveRecords.deletesPA'11DEBAv #Z![^b!bcc r0c|j}t|dkDr#dj|}|j|yy)Nrr\)rr|joinr)r-rrs r.rzpermissiveRecords.deleteall s6 LLN q6A:((1+C KK  r0r&r) rUrVrWr/rrrrrrrXr0r.r r s&- =( jr0r cdeZdZddZdZdZdZddZddZdZ d Z d Z d Z dd Z d ZddZy) loginRecordsNchtj||d|_d|_d|_d|_yr&)rr/r@rBr3r?rs r.r/zloginRecords.__init__s.  t,  r0ctj|\}|_|_|dk(rd}t |j }|j |j\}\}}|j |\}\}} tdk(r|dk7r t|}n|}t|j|\}} |dkrttd|z|ddk(r tj|ddn tj |t#|j\}} |dkrttd |zt%|j| |}|dkrttd |ztdk(r8|dk7r3t'|j| |}|dkrttd |zt)|j| |}|dkrttd |zt+|j| | }|dkrttd |zt-| t/| y#ttd|ddzxYw#ttd|zxYw)Nr user_urbrCould not create a key for %s%zLinux Group %s does not existzLinux User %s does not existz%Could not create login mapping for %sCould not set name for %sCould not set MLS range for %sz!Could not set SELinux user for %sz"Could not add login mapping for %s)rzgetseuserbynamer@rBseluserRecordsrgetrrsemanage_seuser_key_createrrr grpgetgrnampwdgetpwnamsemanage_seuser_createsemanage_seuser_set_namesemanage_seuser_set_mlsrangesemanage_seuser_set_senamesemanage_seuser_modify_localsemanage_seuser_key_freesemanage_seuser_free) r-r=r3r?recuserrecr6rrAr>kus r.__addzloginRecords.__adds9/6/F/Ft/L,T^T_ R<F +!(T^^!<I%kk&1|F Q "}%g.,TWWd;Q 6Q>?$FG G 7c> P T!"X& K T")1Q 6QFG$NO O %dggq$ 7 6Q:;dBC C a gm-dggq'BBAv #C!Dt!KLL 'F ; 6QBCdJK K )$''1a 8 6QCDtKL L #Q= P #B!Cd12h!NOO K #A!BT!IJJsH&,I&IIc  |j|j|r+ttd|z|j |||n|j ||||j y#t$r}|d}~wwxYw)Nz:Login mapping for %s is already defined, modifying instead)r_loginRecords__existsrr _loginRecords__modify_loginRecords__addrRrr-r=r3r?errors r.rzloginRecords.addRsn  JJL}}T"aTUX\\] dFG4 41 KKM K sA/A22 B;A==Bct|j|\}}|dkrttd|zt |j|\}}|dkrttd|zt ||S)Nrr)2Could not check if login mapping for %s is defined)r0rrr semanage_seuser_existsr:r-r=rr>rs r.__existszloginRecords.__exists`sr,TWWd;Q 6Q>?$FG G-dggq9 V 6QSTW[[\ \ # r0c`tj|\}|_|_|dk(r|dk(rt t dt |j}|j|j\}\}}|dk7r|j|\}\}} n|} |dk7r||_ n||_ t|j|\}} |dkrt t d|zt|j| \}} |dkrt t d|z| st t d|zt|j| \}} |dkrt t d|zt| |_t| |_t dk(r%|dk7r t#|j| t%||dk7rt'|j| |||_n|j|_t+|j| | }|dkrt t d |zt-| t/| y) Nr zRequires seuser or serangerr)rH#Login mapping for %s is not definedzCould not query seuser for %srbz%Could not modify login mapping for %s)rzr-r@rBrr r.rr/r?r0rrIsemanage_seuser_querysemanage_seuser_get_mlsrangesemanage_seuser_get_senamerr7rr8r3r9r:r;) r-r=r3r?r<r=r6rrAr>r>rr?s r.__modifyzloginRecords.__modifyls/6/F/Ft/L,T^T_ R?$FG G-dggq9 V 6QSTW[[\ \QDELM M'3Q 6Q>?$FG G6q93A6 a gm (![5I J R< &tww6 : DK..DK )$''1a 8 6QFG$NO O #Qr0c |j|j||||jy#t$r}|d}~wwxYwr&)rrCrRrrEs r.modifyzloginRecords.modifys>  JJL MM$ 0 KKM K s36 AAAcZtj|\}|_|_t |j }|j |j\}\}}t|j|\}}|dkrttd|zt|j|\}}|dkrttd|z|sttd|zt|j|\}}|dkrttd|z|sttd|zt|j|}|dkrttd|zt|tjd\}|_|_|j |j\}\}} y)Nrr)rHrMzrr>s r.__deletezloginRecords.__deletesy/6/F/Ft/L,T^T_ +!(T^^!<I,TWWd;Q 6Q>?$FG G-dggq9 V 6QSTW[[\ \QDELM M3DGGQ? V 6QSTW[[\ \Q]^aeef f &tww 2 6QFG$NO O #)0)@)@)O&T[$,%kk$++6|Fr0c |j|j||jy#t$r}|d}~wwxYwr&)r_loginRecords__deleterRrr-r=rFs r.rzloginRecords.deletes:  JJL MM$  KKM K s14 A?Act|j\}}|dkrttd |j |D]}|j t ||jy#t$r}|d}~wwxYwNrCould not list login mappings)semanage_seuser_list_localrrr rrZsemanage_seuser_get_namerRr-rulistr?rFs r.rzloginRecords.deleteallst09 U 6Q>?@ @  JJL 6q9: KKM K sAA55 B>BBci}tjdz|_tj|jD]}\}}}||jk(s|D]b} t |dz|z}|j jjd}|j|d|d|df||<d|S#t$rYtwxYw)Nz/logins/:rbrr) rzselinux_policy_root logins_pathrwalkopenreadrstriprclose IndexError)r-ddictrdirsfilesr=fdr<s r.get_all_loginszloginRecords.get_all_loginss"6689D!#)9)9!: D$t'''!D!$*t"34 ggi..066s; '*1vs1vs1v&>d ""; &sAC C  C c"i}|rt|j\}|_nt|j\}|_|dkrt t d|jD]'}t |}t|t|df||<)|S)Nrr^r) r_rrbsemanage_seuser_listrr r`rPrO)r-rrnrr?r=s r.rzloginRecords.get_alls 9$''B R3DGG< R 6Q>?@ @A+A.D5a8:VWX:Y[^_E$K r0c g}|jd}t|jD]N}||dr'|jd||dd||dd|2|jd||dd|P|S)NTrbz-a -s r -r '' r\rrkeysr7r-rrnr>s r.rzloginRecords.customizedx  T" %AQx{%(1+uQx{ANO%(1+q9: & r0c *|j|}|j}t|j}t|j}t |dk(rt |dk(ryt dk(r|r?t dtdddtdddtdddtd d |D]2}||}t |dd|dddt|ddd|d 4t |rt d |jz|D]2}||}t |dd|dddt|ddd|d 4y|r&t dtdd dtdd d|D]}t |d d||dd y) Nrrbrz Login Name20r\ SELinux Userz MLS/MCS RangeServicerz Local customization in %sr) rrrrryr|rrr rrg) r-rrrnldictlkeysryr>r?s r.rzloginRecords.listsH Y'##%uzz|$ejjl# t9>c%jAo  Q AlOQ~EVXYZiXjlmnwlxyz!H1Q41Q4!A$OP5z3d6F6FFG!H1Q41Q4!A$OP1\?Anrr?r?r>s r.r/zseluserRecords.get!s*477D9Q 6Q>?$FG G+DGGQ7 V 6QNORVVW W%dggq1Q 6Q<=DE E,Q/(!4q!1r0c,tdk(r&|dk(rd}n t|}|dk(rd}n t|}t|dkrtt d|zt |j |\}}|dkrtt d|zt|j \}}|dkrtt d|zt|j ||}|dkrtt d|z|D]C} t|j || }|dks tt d j| | tdk(rft|j ||}|dkrtt d |zt|j ||}|dkrtt d |zt|j ||}|dkr%tt d j |t|j |\}} |dkrtt d|zt|j ||}|dkrtt d|zt!|t#||j$j'd|dj)||y)Nrbr s0z%You must add at least one role for %srr)z$Could not create SELinux user for %sr+z$Could not add role {role} for {name})r5r=r,zCould not set MLS level for %sz(Could not add prefix {prefix} for {role})r5prefixzCould not extract key for %szCould not add SELinux user %sseuserr4)r3r>r?)rrr|rr rrsemanage_user_createsemanage_user_set_namesemanage_user_add_roleformatsemanage_user_set_mlsrangesemanage_user_set_mlslevelsemanage_user_set_prefixsemanage_user_key_extractsemanage_user_modify_localrrrrDr#) r-r=rolesselevelr?rrr>r?rrs r.r@zseluserRecords.__add1s` Q "}%g."}%g. u:>QFG$NO O*477D9Q 6Q>?$FG G&tww/Q 6QEFMN N #DGGQ 5 6Q:;dBC CA'A6BAv #I!J!Q!QWX_c!Q!dee Q +DGGQ@BAv #C!Dt!KLL+DGGQ@BAv #C!Dt!KLL %dggq& 9 6QIJQQWXagQhi i-dggq9 S 6Q=>EF F 'A 6 6Q>?$FG Gq!1 xSXXe_gVr0cH |j|j|r-ttd|z|j |||||n|j ||||||j y#t$r"}|jj d|d}~wwxYw)Nz5SELinux user %s is already defined, modifying insteadr) r_seluserRecords__existsrr _seluserRecords__modify_seluserRecords__addrRrrr-r=rrr?rrFs r.rzseluserRecords.addhs  JJL}}T"aOPSWWX dE7GVD 4&A KKM  JJ  a K sA3A66 B!?BB!ct|j|\}}|dkrttd|zt |j|\}}|dkrttd|zt ||S)Nrr)r)rrrr rrrJs r.rKzseluserRecords.__existsusr*477D9Q 6Q>?$FG G+DGGQ7 V 6QNORVVW Wq! r0r c d}d}dj|}|dk(rIt|dk(r;|dk(r6|dk(r1tdk(rtt dtt dt |j |\} } | dkrtt d|zt|j | \} } | dkrtt d|z| stt d |zt|j | \} } | dkrtt d |zt| }t|j | \} } | dk\rdj| }tdk(r%|dk7r t|j | t|tdk(r%|dk7r t|j | t||dk7rt|j | |t|dk7r;| D]}||vst| ||D]}|| vst!|j | | t#|j | | } | dkrtt d |zt%| t'| d j|j)}d j|j)}|j*j-d ||||||y)Nr r\rrbz&Requires prefix, roles, level or rangezRequires prefix or rolesr)rSELinux user %s is not definedrz Could not modify SELinux user %sr4r)r3r@r>r?rArB)r#r|rrr rrrrrrrrrrsemanage_user_del_rolerrrrrrrD)r-r=rrr?rrArBnewrolesrr>rr?rlistrr5s r.rQzseluserRecords.__modifysx  88E? R??*477D9Q 6Q>?$FG G+DGGQ7 V 6QNORVVW WQ?@4GH H%dggq1Q 6Q<=DE E/2 -dggq9 U 7I a gm &tww;w3G H a gm &tww;w3G H R< $TWWa 8 u:?E>*1a0E>*477Aq9(A 6 6QABTIJ Jq!1xx()HHY__./  xTSZfo}G Hr0c |j|j||||||jy#t$r"}|jjd|d}~wwxYwr)rrrRrrrs r.rSzseluserRecords.modifysT  JJL MM$w @ KKM  JJ  a K s58 A#AA#cHt|j|\}}|dkrttd|zt |j|\}}|dkrttd|z|sttd|zt |j|\}}|dkrttd|z|sttd|zt |j|\}}|dkrttd|zt|}t|j|\}}dj|}t|j|}|dkrttd|zt|t||jjd ||| y) Nrr)rrz7SELinux user %s is defined in policy, cannot be deletedrr4z Could not delete SELinux user %sr)r@rBrA)rrrr rsemanage_user_exists_localrrrr#semanage_user_del_localrrrrH) r-r=rr>rr?rBrrAs r.rXzseluserRecords.__deletes*477D9Q 6Q>?$FG G+DGGQ7 V 6QNORVVW WQ?@4GH H1$''1= V 6QNORVVW WQXY\``a a%dggq1Q 6Q<=DE E/2 -dggq9 UHHUO $TWWa 0 6QABTIJ Jq!1 h$:Ybcr0c |j|j||jy#t$r"}|jjd|d}~wwxYwr)r_seluserRecords__deleterRrrr[s r.rzseluserRecords.deletesL  JJL MM$  KKM  JJ  a K s14 AAAcFt|j\}}|dkrttd |j |D]}|j t ||jy#t$r"}|jjd|d}~wwxYwr]) semanage_user_list_localrrr rrsemanage_user_get_namerRrras r.rzseluserRecords.deletealls.tww7 U 6Q>?@ @  JJL 4Q78 KKM  JJ  a K sAA55 B >BB ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]}t |}t|j|\}}|dkrt t d|zdj|}t|t|t||f|t |<|S)NrzCould not list SELinux usersz Could not list roles for user %sr\) rrrbsemanage_user_listrr rrr#semanage_user_get_prefixsemanage_user_get_mlslevelr)r-rrnrr?r=rrs r.rzseluserRecords.get_alls 7@ R1$'': R 6Q=>? ?A)!,D1$''1=KRAv #E!F!MNNHHUOE0H0KMghiMjmGHImJLQ0RE(+ , r0c "g}|jd}t|jD]_}||ds||dr0|jd||dd||dd||dd|C|jd ||dd|a|S) NTrbrz-a -L z -r z -R 'rrwz-a -R 'rxrzs r.rzseluserRecords.customizeds  T" %AQx{eAhqka U1Xa[RWXYRZ[\R]_`abE!HQK;< & r0c |j|}t|dk(ryt|j}tdk(r|rt ddddt dddt d ddt d d t t d ddt d ddt d ddt dd dt dd |D]I}t |dd||dddt||dddt||dd d||d Ky|r$t t d ddt dd|D]}t |dd||dy)Nrrbrr 15r\Labeling10zMLS/30r~Prefixz MCS Levelz MCS Rangez SELinux Rolesrr)rr|rryrrr rr-rrrnryr>s r.rzseluserRecords.lists8 Y' u:? ejjl# Q R:& STU[S\]^.8I1X;XYZeXfhijuhvxy{JyKLMaq!iPUVWPXYZP[F\^ghmnohpqrhs^tv{|}v~@AwBCDa&7?9KLMAuQx{34r0r&rr)rUrVrWr/r/rrrrrSrrrrrrrXr0r.r.r.s_- 5Wn  $&r2b6Hp"$RBdB (5r0r.cleZdZgZddZdZdZdZdZdZ dZ d Z d Z d Z dd Zdd ZdZddZy) portRecordsNctj|| tttjtj ddd|_y#t$rYywxYw)N port_typertypes)rr/rrr ATTRIBUTE valid_types RuntimeErrorrs r.r/zportRecords.__init__0sX  t, #Dx7I7I;)W$XYZ$[\c$deD    sAA A&%A&cDttttd}||j vr||}nt t d|dk(rt t dt|tr|jdd}n|f}t|dk(rt|dx}}nt|d}t|d}|dkDrt t d t|j|||\}} |dkr%t t d j|| | |||fS) N)tcpudpsctpdccpz0Protocol has to be one of udp, tcp, dccp or sctpr zPort is requiredr2rbrz Invalid Portz)Could not create a key for {proto}/{port}protoport)SEMANAGE_PROTO_TCPSEMANAGE_PROTO_UDPSEMANAGE_PROTO_SCTPSEMANAGE_PROTO_DCCPryrr rr;rr|intsemanage_port_key_createrr) r-rr protocolsproto_dportshighlowrr>s r.__genkeyzportRecords.__genkey7s..002 INN$ $&GQQRS S 2:Q123 3 dC JJsA&EGE u:?U1X &D3eAh-CuQx=D %<Q~./ /*477CwGQ 6QJKRRY^eiRjk k7C&&r0c4tdk(r|dk(rd}n t|}|dk(rttdt j |}||j vrttd|z|j||\}}}}t|j\} } | dkr%ttdj||t| |t| ||t|j\} } | dkr%ttd j||t|j| d } | dkr%ttd j||t|j| d } | dkr%ttd j||t!|j| |} | dkr%ttdj||tdk(rF|dk7rAt#|j| |} | dkr%ttdj||t%|j| | } | dkr%ttdj||t'|j|| } | dkr%ttdj||t)| t+|t-| |j.j1d|dt3j4|dd dd d|d| y)Nrbr rType is required'Type %s is invalid, must be a port typerz(Could not create port for {proto}/{port}rz+Could not create context for {proto}/{port}system_uz5Could not set user in port context for {proto}/{port}object_rz5Could not set role in port context for {proto}/{port}z5Could not set type in port context for {proto}/{port}z;Could not set mls fields in port context for {proto}/{port}z-Could not set port context for {proto}/{port}z!Could not add port {proto}/{port}zresrc=port op=add lport= proto= tcontext=re)rrrr rget_real_type_namer_portRecords__genkeysemanage_port_createrrsemanage_port_set_protosemanage_port_set_rangesemanage_context_createsemanage_context_set_usersemanage_context_set_rolesemanage_context_set_typesemanage_context_set_mlssemanage_port_set_consemanage_port_modify_localsemanage_context_freesemanage_port_key_freesemanage_port_freerrMrgetprotobyname) r-rrr?rr>rrrrrcons r.r@zportRecords.__addWs Q "}%g. 2:Q123 3**40 t'' 'QHIDPQ Q"&--e"<GS$&tww/Q 6QIJQQX]dhQij j7+3-+DGG4 S 6QLMTT[`gkTlm m &twwZ @ 6QVW^^ejqu^vw w &twwZ @ 6QVW^^ejqu^vw w &twwT : 6QVW^^ejqu^vw w a gm)$''3@BAv #`!a!h!hot{!h"ABB "477As 3 6QNOVV]bimVno o 'A 6 6QBCJJQV]aJbc cc"q!1 \`bhbwbwx}b~AKMWY]_fg hr0c|j|j||r:ttdj |||j ||||n|j |||||jy)Nz6Port {proto}/{port} already defined, modifying insteadr)r_portRecords__existsrr r_portRecords__modify_portRecords__addrR)r-rrr?rs r.rzportRecords.addsf ==u % !LMTT[`gkTl m MM$w 5 JJtUGT 2 r0c|j||\}}}}t|j|\}}|dkr%tt dj ||t ||S)Nr1Could not check if port {proto}/{port} is definedr)rsemanage_port_existsrrr rr r-rrr>rrrrrs r.rKzportRecords.__existssf"&--e"<GS$+DGGQ7 V 6QRSZZafmqZrs sq! r0cX|dk(r6|dk(r1tdk(rttdttdtj|}|r%||j vrttd|z|j ||\}}}}t|j|\} } | dkr%ttdj||| s%ttd j||t|j|\} } | dkr%ttd j||t| } tdk(r(|dk(rd }n t|j| t||dk7rt|j| |t|j|| } | dkr%ttd j||t!|t#| |j$j'd |dt)j*|ddddd|d| y)Nr rbRequires setype or serangeRequires setyperrrr"Port {proto}/{port} is not definedz#Could not query port {proto}/{port}rz$Could not modify port {proto}/{port}zresrc=port op=modify lport=rrrrer)rrr rrrrrrrsemanage_port_querysemanage_port_get_conrrrrrrrrMrr) r-rrr?setyper>rrrrrrrs r.rQzportRecords.__modifys b=Vr\" #?!@AA #4!566,,V4 fD$4$44QHIFRS S"&--e"<GS$+DGGQ7 V 6QRSZZafmqZrs sQCDKKRW^bKcd d%dggq1Q 6QDELLSX_cLde e#A& Q "}(#{77KL R< %dggsF ; 'A 6 6QEFMMTY`dMef fq!1 _cekezez|AfBDNPZ\bdkl mr0cl|j|j|||||jyr&)rrrR)r-rrr?rs r.rSzportRecords.modifys&  dE7F3 r0c pt|j\}}|dkrttd|j |D]}t |}t |}t|}t|}|d|}|j||\} } }}|dkrttd|zt|j| }|dkrttd|zt| ||k(r|}|jjd|dtj||j!y)NrzCould not list the portsr2r)zCould not delete the port %sresrc=port op=delete lport=r)semanage_port_list_localrrr rsemanage_port_get_protosemanage_port_get_proto_strsemanage_port_get_lowsemanage_port_get_highrsemanage_port_del_localrrrMrrrR) r-rplistrr proto_strrrport_strr>rs r.rzportRecords.deletealls.tww7 U 6Q9:; ; D+D1E3E:I'-C)$/D"%t,H&*mmHi&H #QdAv #B!Ch!NOO(!4BAv #A!BX!MNN "1 %d{ JJ ! !hX^XmXmnwXx"y z'* r0c|j||\}}}}t|j|\}}|dkr%tt dj |||s%tt dj ||t |j|\}}|dkr%tt dj |||s%tt dj ||t|j|}|dkr%tt dj ||t||jjd|dtj|y) Nrrrrz;Port {proto}/{port} is defined in policy, cannot be deletedz$Could not delete port {proto}/{port}rr) rrrrr rsemanage_port_exists_localr rrrMrrrs r.rXzportRecords.__deletesI"&--e"<GS$+DGGQ7 V 6QRSZZafmqZrs sQCDKKRW^bKcd d1$''1= V 6QRSZZafmqZrs sQ\]ddkpw{d|} } $TWWa 0 6QEFMMTY`dMef fq! $PVPePefkPlmnr0ch|j|j|||jyr&)r_portRecords__deleterR)r-rrs r.rzportRecords.deletes"  dE" r0ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]Y}t |}t|}t|}t|}t|} t|} t|} ||f|| | | f<[|S)NrCould not list ports) rrr semanage_port_listrr rsemanage_context_get_typesemanage_context_get_mlsrrr r ) r-rrnrrrctypelevelrr rrs r.rzportRecords.get_all s 7@ R1$'': R 6Q567 7JJD'-C-c2E,S1E+D1E3E:I'-C)$/D-2ENE3i( ) r0ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]}t |}t|}t|}t|}t|} t|} ||f|jvrg|||f<| | k(r|||fjd| z|||fjd| | fz|S)Nrrz%dz%d-%d)rrr rrr rrrrr r ryr7) r-rrnrrrrrr rrs r.get_all_by_typezportRecords.get_all_by_type s 7@ R1$'': R 6Q567 7JJD'-C-c2E+D1E3E:I'-C)$/Dy!5,.ui()d{ui()00<ui()00C;1FG r0c Rg}|jd}t|jD]w}|d|dk(r|dn |dd|d}||dr-|jd||dd||dd|dd |U|jd||dd |dd |y|S) NTrrbr2-a -t rvz' -p rr\ -p rxr-rrnr>rs r.rzportRecords.customized8s  T" %AQ41Q4<1Q4!ad-CDQx{a U1Xa[RSTURVX\]^a QqT4HI & r0c P|j|}t|dk(ryt|j}|r1t t dddt dddt dd|D]5}d |z}|d ||dzz }||d dD] }|d |zz } t |7y) NrzSELinux Port Typerr\Proto8 Port Numberrz %-30s %-8s %srb, %s)rr|rryrr r-rrrnryrr<rs r.rzportRecords.listCs$$Y/ u:? ejjl#  q)<'=qz1]K[\ ]A!#C 4%(1+% %C1Xab\vz!" #J r0r&rr)rUrVrWrr/rrrrrrSrrrrrrrrXr0r.rr,sSK'@8ht(mT <o, (0  r0rcleZdZgZddZdZdZdZdZdZ dZ d Z d Z d Z dd Zdd ZdZddZy) ibpkeyRecordsNctj|| ttt j |j dg}td|jD|_ y#YyxYw)N ibpkey_typeattrsc32K|]}t|ywr&r;.0rs r. z)ibpkeyRecords.__init__..Zs%Bkc!fk) rr/rrrget_store_policyrrresultsrr-rqs r.r/zibpkeyRecords.__init__Vs^  t, -(A(A$**(MNWdVefA%%Baiik%BBD    AA22A6c|dk(rttd|jd}t|dk(rt |ddx}}nt |dd}t |dd}|dkDrttdt |j |||\}}|dkr%ttdj|| ||||fS) Nr zSubnet Prefix is requiredr2rbrrz Invalid Pkeyz1Could not create a key for {subnet_prefix}/{pkey} subnet_prefixpkey)rr rr|rsemanage_ibpkey_key_createrr)r-r;r:pkeysrrrr>s r.rzibpkeyRecords.__genkey^s B Q:;< < 3 u:?U1Xq) )D3eAh"CuQx#D %<Q~./ /,TWWmS$OQ 6QRSZZiv~BZCD D=#t,,r0ctdk(r|dk(rd}n t|}|dk(rttdt j |}||j vrttd|z|j||\}}}}t|j\}} |dkr%ttdj||t|j| |t| ||t|j\}} |dkr%ttd j||t|j| d }|dkr%ttd j||t|j| d }|dkr%ttd j||t!|j| |}|dkr%ttdj||tdk(rF|dk7rAt#|j| |}|dkr%ttdj||t%|j| | }|dkr%ttdj||t'|j|| }|dkr%ttdj||t)| t+|t-| y)Nrbr rr)Type %s is invalid, must be a ibpkey typerz2Could not create ibpkey for {subnet_prefix}/{pkey}r9z3Could not create context for {subnet_prefix}/{pkey}rz?Could not set user in ibpkey context for {subnet_prefix}/{pkey}rz?Could not set role in ibpkey context for {subnet_prefix}/{pkey}z?Could not set type in ibpkey context for {subnet_prefix}/{pkey}zECould not set mls fields in ibpkey context for {subnet_prefix}/{pkey}z7Could not set ibpkey context for {subnet_prefix}/{pkey}z+Could not add ibpkey {subnet_prefix}/{pkey})rrrr rrr_ibpkeyRecords__genkeysemanage_ibpkey_createrr!semanage_ibpkey_set_subnet_prefixsemanage_ibpkey_set_rangerrrrrsemanage_ibpkey_set_consemanage_ibpkey_modify_localrsemanage_ibpkey_key_freesemanage_ibpkey_free) r-r;r:r?rr>rrrrrs r.r@zibpkeyRecords.__addqs Q "}%g. 2:Q123 3**40 t'' 'QJKdRS S(, dM(J%M3(1Q 6QST[[jwC[DE E)$''1mD!!S$/+DGG4 S 6QTU\\kx@D\EF F &twwZ @ 6Q`ahhxELPhQR R &twwZ @ 6Q`ahhxELPhQR R &twwT : 6Q`ahhxELPhQR R a gm)$''3@BAv #j!k!r!rBOVZ!r"[\\ $TWWa 5 6QXY``o|DH`IJ J )$''1a 8 6QLMTTcpw{T|} }c" #Qr0c|j|j||r:ttdj |||j ||||n|j |||||jy)Nz@ibpkey {subnet_prefix}/{pkey} already defined, modifying insteadr9)r_ibpkeyRecords__existsrr r_ibpkeyRecords__modify_ibpkeyRecords__addrR)r-r;r:r?rs r.rzibpkeyRecords.addsp ==} - !VW^^mzBF^G H MM$ w = JJt]GT : r0c|j||\}}}}t|j|\}}|dkr%tt dj ||t ||S)Nr;Could not check if ibpkey {subnet_prefix}/{pkey} is definedr9)r@semanage_ibpkey_existsrrr formnatrFr-r;r:r>rrrrs r.rKzibpkeyRecords.__existssw(, dM(J%M3-dggq9 V 6Q\]eeuBIMeNO O # r0c|dk(r6|dk(r1tdk(rttdttdtj|}|r%||j vrttd|z|j ||\}}}}t|j|\}} |dkr%ttdj||| s%ttd j||t|j|\}} |dkr%ttd j||t| } tdk(r%|dk7r t|j| t||dk7rt|j| |t|j|| }|dkr%ttd j||t!|t#| y) Nr rbrrr?rrMr9,ibpkey {subnet_prefix}/{pkey} is not definedz-Could not query ibpkey {subnet_prefix}/{pkey}z.Could not modify ibpkey {subnet_prefix}/{pkey})rrr rrrr@rNrrsemanage_ibpkey_querysemanage_ibpkey_get_conrrrrErFrG) r-r;r:r?rr>rrrrrrs r.rQzibpkeyRecords.__modifys b=Vr\" #?!@AA #4!566,,V4 fD$4$44QJKfTU U(, dM(J%M3-dggq9 V 6Q\]ddtAHLdMN NQMNUUdqx|U}~ ~'3Q 6QNOVVery}V~ %a( a gm $TWWc;w3G H R< %dggsF ; )$''1a 8 6QOPWWfsz~WA A #Qr0cl|j|j|||||jyr&)rrJrR)r-r;r:r?rs r.rSzibpkeyRecords.modifys&  dM7F; r0ct|j\}}|dkrttd|j |D]}t |j|\}}t |}t|}|d|}|j||\}}}}|dkrttd|zt|j|}|dkrttd|zt||jy)NrzCould not list the ibpkeysr2r)zCould not delete the ibpkey %s) semanage_ibpkey_list_localrrr r!semanage_ibpkey_get_subnet_prefixsemanage_ibpkey_get_lowsemanage_ibpkey_get_highr@semanage_ibpkey_del_localrFrR) r-rr ibpkeyr:rrpkey_strr>s r.rzibpkeyRecords.deletealls09 U 6Q;<= = F"CDGGV"T R)&1C+F3D"%t,H,0MM(M,R )Q sDAv #B!Ch!NOO*477A6BAv #C!Dx!OPP $Q ' r0cp|j||\}}}}t|j|\}}|dkr%tt dj |||s%tt dj ||t |j|\}}|dkr%tt dj |||s%tt dj ||t|j|}|dkr%tt dj ||t|y)NrrMr9rRzEibpkey {subnet_prefix}/{pkey} is defined in policy, cannot be deletedz.Could not delete ibpkey {subnet_prefix}/{pkey}) r@rNrrr rsemanage_ibpkey_exists_localr[rFrPs r.rXzibpkeyRecords.__deletes^(, dM(J%M3-dggq9 V 6Q\]ddtAHLdMN NQMNUUdqx|U}~ ~3DGGQ? V 6Q\]ddtAHLdMN NQfgnn~KRVnWX X &tww 2 6QOPWWfsz~WA A #r0ch|j|j|||jyr&)r_ibpkeyRecords__deleterR)r-r;r:s r.rzibpkeyRecords.deletes"  dM* r0ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]b}t |}t|}|dk(rt|}t|j|\}}t|} t|} ||f|| | |f<d|S)NrCould not list ibpkeysreserved_ibpkey_t) rWrr semanage_ibpkey_listrr rTrrrXrYrZ) r-rrnrr\rrrr:rrs r.rzibpkeyRecords.get_alls 9$''B R3DGG< R 6Q789 9jjF)&1C-c2E++,S1E"CDGGV"T R)&1C+F3D16E3m, -! r0c i}|rt|j\}|_nt|j\}|_|dkrt t d|jD]}t |}t|}t|j|\}}t|}t|} ||f|jvrg|||f<|| k(r|||fjd|z|||fjd|| fz|S)Nrrc0x%xz 0x%x-0x%x) rWrr rerr rTrrXrYrZryr7) r-rrnrr\rrr:rrs r.rzibpkeyRecords.get_all_by_type,s 9$''B R3DGG< R 6Q789 9jjF)&1C-c2E"CDGGV"T R)&1C+F3D}%UZZ\902um,-d{um,-44Vc\Bum,-44[C;5NO! r0c Rg}|jd}t|jD]w}|d|dk(r|dn |dd|d}||dr-|jd||dd||dd|dd |U|jd||dd |dd |y|S) NTrrbr2rrvz' -x rr\z -x rxrs r.rzibpkeyRecords.customizedCs  T" %AQ41Q4<1Q4!ad-CDQx{a U1Xa[RSTURVX\]^a QqT4HI & r0c P|j|}|j}t|dk(ry|r1tt dddt dddt ddt |D]5}d |z}|d ||dzz }||d dD] }|d |zz } t|7y) NrzSELinux IB Pkey Typerr\ Subnet_Prefix18z Pkey Numberr %-30s %-18s r$rbr%rryr|rr rr&s r.rzibpkeyRecords.listOs$$Y/zz| t9>   *@(A1_CUWXYfWgh iA 1$C 4%(1+% %C1Xab\vz!" #J r0r&rr)rUrVrWrr/r@rKrrIrJrSrrarrrrrrXr0r.r(r(RsOK-&6 p$ L .$( *.  r0r(cleZdZgZddZdZdZdZdZdZ dZ d Z d Z d Z dd Zdd ZdZddZy)ibendportRecordsNctj|| ttt j |j dg}td|jD|_ y#YyxYw)Nibendport_typer+c32K|]}t|ywr&r.r/s r.r1z,ibendportRecords.__init__..fs"?;a3q6;r2) rr/rrrr3rsetr4rr5s r.r/zibendportRecords.__init__bs^  t, -(A(A$**(MNWgVhiA""?199;"??D   r7c|dk(rttdt|}|dkDs|dkrttdt|j||\}}|dkr%ttdj |||||fS) Nr zIB device name is requiredrbzInvalid Port Numberrz=Could not create a key for ibendport {ibdev_name}/{ibendport} ibdev_name ibendport)rr rsemanage_ibendport_key_createrr)r-rxrwrrr>s r.rzibendportRecords.__genkeyjs  Q;<= =9~ #:Q456 6/TJQ 6Q^_ffr|IRfST T:t$$r0ctdk(r|dk(rd}n t|}|dk(rttdt j |}||j vrttd|z|j||\}}}t|j\}}|dkr%ttdj||t|j||t||t|j\}} |dkr%ttd j||t|j| d }|dkr%ttd j||t|j| d }|dkr%ttd j||t!|j| |}|dkr%ttdj||tdk(rF|dk7rAt#|j| |}|dkr%ttdj||t%|j|| }|dkr%ttdj||t'|j||}|dkr%ttdj||t)| t+|t-|y)Nrbr rr-Type %s is invalid, must be an ibendport typerz2Could not create ibendport for {ibdev_name}/{port}rwrz/Could not create context for {ibendport}/{port}rz?Could not set user in ibendport context for {ibdev_name}/{port}rz?Could not set role in ibendport context for {ibdev_name}/{port}z?Could not set type in ibendport context for {ibdev_name}/{port}zECould not set mls fields in ibendport context for {ibdev_name}/{port}z7Could not set ibendport context for {ibdev_name}/{port}z+Could not add ibendport {ibdev_name}/{port})rrrr rrr_ibendportRecords__genkeysemanage_ibendport_createrr!semanage_ibendport_set_ibdev_namesemanage_ibendport_set_portrrrrrsemanage_ibendport_set_consemanage_ibendport_modify_localrsemanage_ibendport_key_freesemanage_ibendport_free) r-rxrwr?rr>rrrrs r.r@zibendportRecords.__addxs Q "}%g. 2:Q123 3**40 t'' 'QNORVVW W#}}Y CIt+DGG4Q 6QST[[gqx|[}~ ~)$''1jA#At,+DGG4 S 6QPQXXdnuyXz{ { &twwZ @ 6Q`ahht~FJhKL L &twwZ @ 6Q`ahht~FJhKL L &twwT : 6Q`ahht~FJhKL L a gm)$''3@BAv #j!k!r!rIPT!r"UVV 'C 8 6QXY``lv~B`CD D ,TWWa ; 6QLMTT`jquTvw wc"#A&"r0c |j|j||r>ttdj |t |j ||||n|j|||||jy)Nz@ibendport {ibdev_name}/{port} already defined, modifying insteadr|) r_ibendportRecords__existsrr rr_ibendportRecords__modify_ibendportRecords__addrR)r-rxrwr?rs r.rzibendportRecords.addsl ==J / !VW^^jt{^A B MM)Z$ ? JJy*gt < r0c|j||\}}}t|j|\}}|dkr%tt dj ||t ||S)Nrz;Could not check if ibendport {ibdev_name}/{port} is definedr|)r}semanage_ibendport_existsrrr rrr-rxrwr>rrrs r.rKzibendportRecords.__existssq#}}Y CIt0!< V 6Q\]ddpzBFdGH H#A& r0c|dk(r6|dk(r1tdk(rttdttdtj|}|r%||j vrttd|z|j ||\}}}t|j|\}}|dkr%ttdj|||s%ttd j||t|j|\}} |dkr%ttd j||t| } tdk(r%|dk7r t|j| t||dk7rt|j| |t|j|| }|dkr%ttd j||t!|t#| y) Nr rbrrr{r@Could not check if ibendport {ibdev_name}/{ibendport} is definedrv1ibendport {ibdev_name}/{ibendport} is not definedz2Could not query ibendport {ibdev_name}/{ibendport}z3Could not modify ibendport {ibdev_name}/{ibendport})rrr rrrr}rrrsemanage_ibendport_querysemanage_ibendport_get_conrrrrrr) r-rxrwr?rr>rrrrrs r.rQzibendportRecords.__modifys b=Vr\" #?!@AA #4!566,,V4 fD$4$44QNORXXY Y $ i DJ0!< V 6QabiiuLUiVW WQRSZZfp}FZGH H*477A6Q 6QST[[gq~G[HI I(+ a gm $TWWc;w3G H R< %dggsF ; ,TWWa ; 6QTU\\hrH\IJ J#A&"r0cl|j|j|||||jyr&)rrrR)r-rxrwr?rs r.rSzibendportRecords.modifys&  iWf= r0c$t|j\}}|dkrttd|j |D]}t |j|\}}t |}|jt||\}}}|dkr%ttdj||t|j|}|dkr%ttdj||t||jy)NrzCould not list the ibendportsz.Could not create a key for {ibdev_name}/{port}r|z2Could not delete the ibendport {ibdev_name}/{port}) semanage_ibendport_list_localrrr r!semanage_ibendport_get_ibdev_namesemanage_ibendport_get_portr}r;rsemanage_ibendport_del_localrrR)r-rr rxrwrr>s r.rzibendportRecords.deletealls3DGG< U 6Q>?@ @ I@)T R.y9D$(MM#d)Z$H !Q DAv #S!T![![gqx|![!}~~-dggq9BAv #W!X!_!_ku}A!_"BCC ' * r0cn|j||\}}}t|j|\}}|dkr%tt dj |||s%tt dj ||t |j|\}}|dkr%tt dj |||s%tt dj ||t|j|}|dkr%tt dj ||t|y)NrrrvrzJibendport {ibdev_name}/{ibendport} is defined in policy, cannot be deletedz3Could not delete ibendport {ibdev_name}/{ibendport}) r}rrrr rsemanage_ibendport_exists_localrrrs r.rXzibendportRecords.__deletesh $ i DJ0!< V 6QabiiuLUiVW WQRSZZfp}FZGH H6twwB V 6QabiiuLUiVW WQklss@JV_s`a a )$''1 5 6QTU\\hrH\IJ J#A&r0ch|j|j|||jyr&)r_ibendportRecords__deleterR)r-rxrws r.rzibendportRecords.deletes"  i, r0ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]V}t |}t|}|dk(rt|}t|j|\}}t|} ||f|| |f<X|S)NrCould not list ibendportsreserved_ibendport_t) rrr semanage_ibendport_listrr rrrrr) r-rrnrrxrrrrwrs r.rzibendportRecords.get_alls    *D(EqIYGZ\]^k\lm nA 1$C 4%(1+% %C1Xab\vz!" #J r0r&rr)rUrVrWrr/r}rrrrrSrrrrrrrrXr0r.roro^sOK %5#n$#L *'( (&  r0rocdeZdZgZddZdZdZdZdZdZ dZ d Z d Z d Z dd Zd ZddZy) nodeRecordsNctj||ddg|_ ttt j tj ddd|_y#t$rYywxYw)Nipv4ipv6 node_typerr) rr/protocolrrrrrrrs r.r/znodeRecords.__init__`sd  t,(  #Dx7I7I;)W$XYZ$[\c$deD    sAA## A/.A/c|}|}d}|dk(rttdt|dk(s|ddk(rQtj||z}t |j }t |j}d|jz} |jj|} tj|}||||fS#ttdxYw#|dk(rtj}nttdYMxYw)Nr zNode Address is requiredrrdzipv%dzUnknown or missing protocolr)rr r| ipaddress ip_networkr;network_addressnetmaskversionrindexrr IPPROTO_IPIP) r-addrmaskrnewaddrnewmask newprotocolraudit_protocols r.validateznodeRecords.validatehs  2:Q9:; ; t9>T!W^$$TD[1A!++,G!))nG*H ?----h7K C#228 > C F"!'!4!4 #@!ABBsB?$C?C,Dc"|j|||\}}}}tdk(r|dk(rd}n t|}|dk(rtt dt j |}||jvrtt d|zt|j|||\}}|dkrtt d|zt|j\}} |dkrtt d|zt| |t|j| ||}t|j\}} |dkrtt d |zt|j| ||}|dkrtt d |zt|j| d }|dkrtt d |zt!|j| d }|dkrtt d|zt#|j| |}|dkrtt d|ztdk(r8|dk7r3t%|j| |}|dkrtt d|zt'|j| | }|dkrtt d|zt)|j|| }|dkrtt d|zt+| t-|t/| |j0j3d|d|d|dd dd d|d|y)Nrbr rzSELinux node type is required'Type %s is invalid, must be a node typerCould not create key for %szCould not create addr for %sCould not create context for %szCould not set mask for %srz)Could not set user in addr context for %srz)Could not set role in addr context for %sz)Could not set type in addr context for %sz/Could not set mls fields in addr context for %sz!Could not set addr context for %szCould not add addr %szresrc=node op=add laddr= netmask=rrre)rrrrr rrrsemanage_node_key_creatersemanage_node_createsemanage_node_set_protosemanage_node_set_addrrsemanage_node_set_maskrrrrsemanage_node_set_consemanage_node_modify_localrsemanage_node_key_freesemanage_node_freerrM) r-rrrr?r audit_protorr>noders r.r@znodeRecords.__adds)-tT5)I&dE; Q "}%g. B;Q>?@ @++E2 (( (QHIEQR R*477D$FQ 6Q<=DE E)$''2 T 6Q=>EF Fe, #DGGT5$ ?+DGG4 S 6Q@ADHI I #DGGT5$ ? 6Q:;dBC C &twwZ @ 6QJKdRS S &twwZ @ 6QJKdRS S &twwU ; 6QJKdRS S a gm)$''3@BAv #T!UX\!\]] "477D# 6 6QBCdJK K 'D 9 6Q67$>? ?c"q!4  gkmqs~AKMWY^`gh ir0c|j|j|||r-ttd|z|j |||||n|j ||||||j y)Nz*Addr %s already defined, modifying instead)r_nodeRecords__existsrr _nodeRecords__modify_nodeRecords__addrR)r-rrrr?rs r.rznodeRecords.adds_ ==tU + !@ADH I MM$eWe < JJtT5'5 9 r0c$|j|||\}}}}t|j|||\}}|dkrtt d|zt |j|\}}|dkrtt d|zt ||S)Nrr%Could not check if addr %s is defined)rrrrr semanage_node_existsrr-rrrrrr>rs r.rKznodeRecords.__existss)-tT5)I&dE;*477D$FQ 6Q<=DE E+DGGQ7 V 6QFG$NO Oq! r0c|j|||\}}}}|dk(r|dk(rttdtj|}|r%||j vrttd|zt |j|||\}}|dkrttd|zt|j|\}} |dkrttd|z| sttd|zt|j|\}} |dkrttd|zt| } td k(r%|dk7r t|j| t||dk7rt|j| |t|j|| }|dkrttd |zt!|t#| |j$j'd |d |d |ddddd|d|y)Nr rrrrrAddr %s is not definedzCould not query addr %srbzCould not modify addr %szresrc=node op=modify laddr=rrrrrer)rrr rrrrrrsemanage_node_querysemanage_node_get_conrrrrrrrrrM) r-rrrr?rrrr>rrrs r.rQznodeRecords.__modifys)-tT5)I&dE; b=Vr\Q;<= =,,V4 fD$4$44QHIFRS S*477D$FQ 6Q<=DE E+DGGQ7 V 6QFG$NO OQ784?@ @(!4 T 6Q89D@A A#D) a gm $TWWc;w3G H R< %dggsF ; 'D 9 6Q9:TAB Bq!4  jnptwBDNPZ\bdkl mr0cn|j|j||||||jyr&)rrrR)r-rrrr?rs r.rSznodeRecords.modify s(  dD%&9 r0c|j|||\}}}}t|j|||\}}|dkrtt d|zt |j|\}}|dkrtt d|z|stt d|zt |j|\}}|dkrtt d|z|stt d|zt|j|}|dkrtt d|zt||jjd|d|d |y) Nrrrrz/Addr %s is defined in policy, cannot be deletedzCould not delete addr %szresrc=node op=delete laddr=rr) rrrrr rsemanage_node_exists_localsemanage_node_del_localrrrMrs r.rXznodeRecords.__deletes8)-tT5)I&dE;*477D$FQ 6Q<=DE E+DGGQ7 V 6QFG$NO OQ784?@ @1$''1= V 6QFG$NO OQPQTXXY Y $TWWa 0 6Q9:TAB Bq! UY[_almnr0cj|j|j||||jyr&)r_nodeRecords__deleterR)r-rrrs r.rznodeRecords.delete+s$  dD%( r0c bt|j\}}|dkrttd|j |D]Y}|j t |j|dt|j|d|jt|[|jy)Nrz!Could not deleteall node mappingsrb) semanage_node_list_localrrr rrsemanage_node_get_addrsemanage_node_get_maskrsemanage_node_get_protorR)r-rnlistrs r.rznodeRecords.deleteall0s.tww7 U 6QBCD D D MM0$?BDZ[_[b[bdhDijkDlnrn{n{}TUY}Zo[ \ r0ci}|rt|j\}|_nt|j\}|_|dkrt t d|jD]}t |}t|j|}t|j|}|jt|}t|t|t|t|f||d|d|f<|S)NrzCould not list addrsrb)rrilistsemanage_node_listrr rrrrrsemanage_context_get_usersemanage_context_get_rolerr) r-rrnrrrrrrs r.rznodeRecords.get_all:s 7@ R1$'': R 6Q567 7JJD'-C)$''48D)$''48DMM"9$"?@E0I#0NPijmPnqJKNqOQijmQn0oE47DGU+ ,  r0c<g}|jd}t|jD]l}||dr6|jd|dd|dd||dd||dd |d  A|jd|dd|dd||dd |d n|S) NTrz-a -M rbrr -t rvrwrr\rxrzs r.rznodeRecords.customizedLs  T" %AQx{adAaD%PQ(ST+W\]^W_`aWbdefgdhijadAaD%(1+qQRtTU & r0c|j|}t|dk(ryt|j}|rt ddzt rp|D]j}d}|D]}|dzt |z}t |ddd|ddd|d d d||dd ||dd ||d d t||d d dly|D]=}t |ddd|ddd|d d d||dd ||dd ||d d ?y)Nrz%-18s %-18s %-5s %-5s )z IP AddressNetmaskProtocolContextr  rkr\rbrrrerF)rr|rryrrr;r)r-rrrnryr>valfieldss r.rznodeRecords.listVs= Y' u:? ejjl#  +.^^ _ F*s6{2C 1qtQqT5QR8TU;X]^_X`abXcejklemnoepr{}BCD}EFG}HJOsPQR  adAaD!A$aQR UZ[\U]^_U`bghibjklbmnor0r&rr)rUrVrWrr/rrrrrrSrrrrrrrXr0r.rr\sPK =D@iD &mP o6 $pr0rcZeZdZddZdZdZdZdZdZdZ d Z d Z dd Z d Z dd Zy)interfaceRecordsNc0tj||yr&rrs r.r/zinterfaceRecords.__init__krr0c Rtdk(r|dk(rd}n t|}|dk(rttdt |j |\}}|dkrttd|zt |j \}}|dkrttd|zt|j ||}t|j \}}|dkrttd|zt|j |d }|dkrttd |zt|j |d }|dkrttd |zt|j ||}|dkrttd |ztdk(r8|dk7r3t|j ||}|dkrttd|zt|j ||}|dkrttd|zt|j ||}|dkrttd|zt|j ||}|dkrttd|zt!|t#|t%||j&j)d|dd dd d|d| y)Nrbr rSELinux Type is requiredrrz!Could not create interface for %srrz.Could not set user in interface context for %srz.Could not set role in interface context for %sz.Could not set type in interface context for %sz4Could not set mls fields in interface context for %sz&Could not set interface context for %sz$Could not set message context for %szCould not add interface %szresrc=interface op=add netif=rre)rrrr semanage_iface_key_creatersemanage_iface_createsemanage_iface_set_namerrrrrsemanage_iface_set_ifconsemanage_iface_set_msgconsemanage_iface_modify_localrsemanage_iface_key_freesemanage_iface_freerrM)r- interfacer?rrr>ifacers r.r@zinterfaceRecords.__addns| Q "}%g. B;Q9:; ;+DGGY?Q 6Q<= IJ J+DGG4 U 6QBCiOP P $TWWeY ?+DGG4 S 6Q@AIMN N &twwZ @ 6QOPS\\] ] &twwZ @ 6QOPS\\] ] &twwU ; 6QOPS\\] ] a gm)$''3@BAv #Y!Z]f!fgg %dgguc : 6QGH9TU U &twws ; 6QEFRS S (!U ; 6Q;rs r.rKzinterfaceRecords.__existssq+DGGY?Q 6Q<= IJ J,TWWa8 V 6QKLyXY Y" r0c @|dk(r|dk(rttdt|j|\}}|dkrttd|zt |j|\}}|dkrttd|z|sttd|zt |j|\}}|dkrttd|zt |}tdk(r%|dk7r t|j|t||dk7rt|j||t|j||}|dkrttd |zt|t||jjd |d d d dd |d | y)Nr rrrrInterface %s is not definedzCould not query interface %srbzCould not modify interface %sz resrc=interface op=modify netif=rrrer)rr rrrsemanage_iface_querysemanage_iface_get_ifconrrrrrrrrrM) r-rr?rrr>rrrs r.rQzinterfaceRecords.__modifys b=Vr\Q;<= =+DGGY?Q 6Q<= IJ J,TWWa8 V 6QKLyXY YQ<= IJ J*477A6 U 6Q=>JK K&u- a gm $TWWc;w3G H R< %dggsF ; (!U ; 6Q>?)KL L"E" [dfpr|EGNO Pr0cj|j|j||||jyr&)rrrR)r-rr?rs r.rSzinterfaceRecords.modifys$  i&1 r0c\t|j|\}}|dkrttd|zt |j|\}}|dkrttd|z|sttd|zt |j|\}}|dkrttd|z|sttd|zt |j|}|dkrttd|zt||jjd|zy)Nrrrrz4Interface %s is defined in policy, cannot be deletedzCould not delete interface %sz"resrc=interface op=delete netif=%s) rrrr rsemanage_iface_exists_localsemanage_iface_del_localrrrMrs r.rXzinterfaceRecords.__deletes+DGGY?Q 6Q<= IJ J,TWWa8 V 6QKLyXY YQ<= IJ J2477A> V 6QKLyXY YQUVYbbc c %dggq 1 6Q>?)KL L" BYNOr0cf|j|j||jyr&)r_interfaceRecords__deleterR)r-rs r.rzinterfaceRecords.deletes   i  r0ct|j\}}|dkrttd|j |D]}|j t ||jy)Nrz(Could not delete all interface mappings)semanage_iface_list_localrrr rrsemanage_iface_get_namerR)r-rrbrs r.rzinterfaceRecords.deleteall sZ/8 U 6QIJK K A MM1!4 5 r0cZi}|rt|j\}|_nt|j\}|_|dkrt t d|jD]C}t |}t|t|t|t|f|t|<E|S)NrzCould not list interfaces) rrrsemanage_iface_listrr rrrrrr)r-rrnrrrs r.rzinterfaceRecords.get_all s 8A R2477; R 6Q:;< <I*95C9RSV9WYrsvYwzSTWzXZrsvZw9xE))4 5$ r0c g}|jd}t|jD]N}||dr'|jd||dd||dd|2|jd||dd|P|S)NTrrrrvrwr\rxrzs r.rzinterfaceRecords.customized r{r0c|j|}t|dk(ryt|j}|r$t t dddt ddt rE|D]?}t |dd||dd||dd||d dt||d d d Ay|D],}t |dd||dd||dd||d d.y) NrzSELinux Interfacerr\rrrerbrrF)rr|rryrr rrrs r.rzinterfaceRecords.list% s Y' u:? ejjl#  !$7"8!I,G H aq!eAhqk5QR8TU;XabghibjklbmotXuvw1eAhqk58A;aQR TUr0r&rr)rUrVrWr/rrrrrSrrrrrrrXr0r.rrisD-8Lt  PD P2   Vr0rceZdZgZddZdZdZdZddZdZ ddZ dd Z d Z d Z d Zd ZdZdZddZdZddZy)fcontextRecordsNc 4tj|| tttjtj ddd|_|xj tttjtj dddz c_i|_i|_ d|_ ttjd}|jD]U}|j}t!|dk(r"|j#dr4|j%\}}||j|<W|j' ttj*d}|jD]U}|j}t!|dk(r"|j#dr4|j%\}}||j|<W|j'y#t$rYPwxYw#t($rYwxYw#t($rYywxYw)N file_typerr device_nodeFr#)rr/rrrrrrequiv equiv_dist equal_indrirzselinux_file_context_subs_path readlinesstripr|rrrlIOError#selinux_file_context_subs_dist_path)r-rrqrtarget substitutes r.r/zfcontextRecords.__init__9 s  t, #Dx7I7I;)W$XYZ$[\c$deD    T(--8J8JM*Z%[\]%^_f%g h h   g<<>DB\\^GGIq6Q;<<$%&WWY" %/ 6"$ HHJ gAACSIB\\^GGIq6Q;<<$%&WWY" *4'$ HHJ;   "      s8BG,>BG<BH , G98G9< HH HHc|jrtj}d|z}t|d}|jj D]&}|j |d|j|d(|j tj|tj|tjtj||d|_tj|y#Y7xYw)Nz%s.tmpwr\rF)rrzrrirrywriterlrchmodstatST_MODErenamerrR)r- subs_filetmpfilerqr$s r.rRzfcontextRecords.commit_ s >>>>@I*Ggs#B**//+fdjj.@AB, HHJ "'')"4T\\"BC IIgy )"DNt$  s :C33C7c |j|dk7r|ddk(rttd|z|dk7r|ddk(rttd|z||jj vrt td|z||j|<d|_|jjdtjd|d d tjd |d |jy|j||j|jfD]:}|D]3}|j|dzsttd ||||fz<|jjd tjd|d d tjd |d ||j|<d|_|jy)Nrdz=Target %s is not valid. Target is not allowed to end with '/'zESubstitute %s is not valid. Substitute is not allowed to end with '/'z:Equivalence class for %s already exists, modifying insteadTresrc=fcontext op=modify-equal sglobrr\tglobz4File spec %s conflicts with equivalency rule '%s %s'zresrc=fcontext op=add-equal )rrr rryrrrrMr'audit_encode_nv_stringrRrrr)r-r$r%fdictrs r. add_equalzfcontextRecords.add_equalo s S=VBZ3.Q^_bhhi i  B3!6Qfgjttu u TZZ__& & !PQTZZ [!+DJJv !DN JJ ! !ELhLhiprxz{L|D[[\ceoqrs#t u KKM  fjj$//2E<< -$Q']%^bhjkmrstmuav%vww3 UEaEabikqstEuw|xTxTU\^hjkxlm n' 6 r0c l|j||jjvrtt d|z||j|<d|_|j jdtjd|ddtjd|d|jy)Nz'Equivalence class for %s does not existTr1r2rr\r3) rrryrr rrrMr'r4rR)r-r$r%s r. modify_equalzfcontextRecords.modify_equal s * *QHIFRS S' 6 HdHdelntvwHxz{W{WX_akmn{op q r0ct|j\}}|dkrttd|z|dk(rd}t |j||}|dkrttd|zt |j|d}|dkrttd|zt dk(r3t|j|d }|dkrttd |z|S) Nrrr rz)Could not set user in file context for %srz)Could not set role in file context for %srbr/Could not set mls fields in file context for %s)rrrr rrrr)r-r$rrrs r. createconzfcontextRecords.createcon s+DGG4 S 6Q@AFJK K R<F &twwV < 6QJKfTU U &twwZ @ 6QJKfTU U Q )$''3=BAv #T!UX^!^__ r0c |dk(s|jddk\rttd|jddk7rttd|j|jfD]U}|D]N}|j |dzst j||||}ttd |||||fzWy) Nr rrzInvalid file specificationr\r0z)File specification can not include spacesrdzMFile spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead)findrr rrrrosub)r-r$r5rrs r.rzfcontextRecords.validate s R<6;;t,1Q;<= = ;;s r !QJKL Ljj$//2E$$QW-q%(F3A$Q'v%w|BDEGLMNGOQR{S&STT3r0c|j|tdk(r t|}|dk(rtt d|dk7r:t j |}||jvrtt d|zt|j|t|\}}|dkrtt d|zt|j\}}|dkrtt d|zt|j||}|dk7r|j||} t|j| |}|dkrtt d |ztdk(r8|dk7r3t|j| |}|dkrtt d |zt!|j|| }|dkrtt d |zt#|t|t%|j||}|dkrtt d |z|dk7r t' t)|t+||sd }|j,j/dt1j2d|ddt4|d|ddd|d| y)Nrbr r<>1Type %s is invalid, must be a file or device typerrz$Could not create file context for %sz)Could not set type in file context for %sr:!Could not set file context for %sz!Could not add file context for %srzresrc=fcontext op=add r3 ftype=rrer)rrrrr rrrsemanage_fcontext_key_creater file_typessemanage_fcontext_createsemanage_fcontext_set_exprr;rrsemanage_fcontext_set_consemanage_fcontext_set_typesemanage_fcontext_modify_localrsemanage_fcontext_key_freesemanage_fcontext_freerrMr'r4ftype_to_audit) r-r$rftyper?rrr>fcontextrs r.r@zfcontextRecords.__add st f Q !'*G 2:Q9:; ; : ..t4D4+++ #V!WZ^!^__.tww 5@QRQ 6Q<=FG G1$'':X 6QEFOP P '6 B : ..0C*477C>BAv #N!ORX!XYY!#'R--dggsGD6$Q'X%Y\b%bcc*477HcBBAv #F!G&!PQQ"8Z->? +DGGQ A 6QBCfLM M :  !# &"1%x(F Z_ZvZvw~AGIJ[KM[\aMbdjlvx|~EF Gr0c|j|j||r-ttd|z|j |||||n|j ||||||j y)Nz6File context for %s already defined, modifying instead)r_fcontextRecords__existsrr _fcontextRecords__modify_fcontextRecords__addrR)r-r$rrNr?rs r.rzfcontextRecords.add s^ == ' !LMPVV W MM&$w ? JJvtUGV < r0cnt|j|t|\}}|dkrtt d|zt |j|\}}|dkrtt d|z|s5t |j|\}}|dkrtt d|zt||S)Nrr1Could not check if file context for %s is defined)rDrrErr semanage_fcontext_existssemanage_fcontext_exists_localrKr-r$rNrr>rs r.rKzfcontextRecords.__exists s.tww 5@QRQ 6Q<=FG G/; V 6QRSV\\] ]9$''1ELRAv #V!WZ`!`aa"1% r0cp|dk(r|dk(r|dk(rttd|dvr:tj|}||jvrttd|z|j |t |j|t|\}}|dkrttd|zt|j|\}}|dkrttd|z|r t|j|\}} nht|j|\}}|dkrttd|z|sttd |z t|j|\}} |d k7rt| } | |j|} t d k(r%|dk7r t#|j| t%||dk7rt'|j| ||dk7rt)|j| |t+|j| | }|dkrJttd |zt+|j| d}|dkrttd |zt-|j|| }|dkrttd |zt/|t1| |sd}|j2j5dt7j8d|ddt:|d|ddd|d| y#t$rttd|zwxYw#t$rttd|zwxYw)Nr z"Requires setype, serange or seuser)r r@rArr)rUz#Could not query file context for %s"File context for %s is not definedr@rbrBz$Could not modify file context for %srzresrc=fcontext op=modify r3rCrrer)rr rrrrrDrrErVsemanage_fcontext_queryOSErrorrWsemanage_fcontext_query_localsemanage_fcontext_get_conr;rrrrrrHrJrKrLrrMr'r4rM) r-r$rrNr?rrr>rrOrs r.rQzfcontextRecords.__modify s< b=Vr\flQCDE E * *008FT--- #V!WZ`!`aa f.tww 5@QRQ 6Q>?&HI I/; V 6QRSV\\] ]  T!8!!DX:$''1ELRAv #V!WZ`!`aa #G!H6!QRR T!>tww!JX Z +H5C{nnV,!#'R-(#{77KL|)$''3?|)$''3?*477HcBBAv #F!G&!PQQ*477HdCBAv #F!G&!PQQ +DGGQ A 6QEFOP P"1%x(F ]b]y]y{BDJLM^NP^_dPegmoy{ACJK L[ T #H!IF!RSS T T #H!IF!RSS Ts(K0L0!L!L5cn|j|j||||||jyr&)rrRrR)r-r$rrNr?rs r.rSzfcontextRecords.modifyK s(  ffeWf= r0c t|j\}}|dkrttd|j |D]}t |}t |}t|}t|j|t|\}}|dkrttd|zt|j|}|dkrttd|zt||jjdtjd|ddt t"|i|_d|_|j)y) Nrz Could not list the file contextsr)z$Could not delete the file context %sresrc=fcontext op=delete r3rCT)semanage_fcontext_list_localrrr rsemanage_fcontext_get_exprsemanage_fcontext_get_typesemanage_fcontext_get_type_strrDrEsemanage_fcontext_del_localrKrrMr'r4rMfile_type_str_to_optionrrrR)r-rflistrOr$rN ftype_strr>s r.rzfcontextRecords.deleteallP s32477; U 6QABC C H/9F.x8E6u=I2477FJyDYZGRAv #B!Cf!LMM,TWWa8BAv #I!JV!STT &q ) JJ ! !ELhLhiprxz{L|MNefoNpq#r s  r0c||jjvrV|jj|d|_|jj dt jd|dzyt|j|t|\}}|dkrttd|zt|j|\}}|dkrttd|z|set|j|\}}|dkrttd|z|rttd|zttd|zt|j|}|dkrttd |zt!||jj d t jd|dd t"|y) NTz!resrc=fcontext op=delete-equal %sr3rr)rUz;File context for %s is defined in policy, cannot be deletedrZz$Could not delete file context for %srarC)rrypoprrrMr'r4rDrrErr rWrVrfrKrMrXs r.rXzfcontextRecords.__deletej s TZZ__& & JJNN6 "!DN JJ ! !"EIeIefmouwxIy"z { .tww 5@QRQ 6Q>?&HI I5dggqA V 6QRSV\\] ]3DGGQ?LRAv #V!WZ`!`aa #`!adj!jkk #G!H6!QRR (! 4 6QEFOP P"1% HdHdelntvwHx{IJO{PQ Rr0ch|j|j|||jyr&)r_fcontextRecords__deleterR)r-r$rNs r.rzfcontextRecords.delete s"  fe$ r0c|rt|j\}|_nt|j\}|_|dkrt t dt |j\}}|dkrt t dt|j\}}|dkrt t d|xj|z c_|xj|z c_i}|jD]g}t|}t|}t|} t|} | r0t| t| t| t| f||| f<a| ||| f<i|S)NrzCould not list file contextsz1Could not list file contexts for home directoriesz"Could not list local file contexts)rbrrhsemanage_fcontext_listrr semanage_fcontext_list_homedirsrcrdrer^rrrr) r-rr fchomedirsfclocalrnrOexprrNrirs r.rzfcontextRecords.get_all sY ;DGGD R5dgg> RAv #A!BCC>twwG RAv #V!WXX8AMRAv #G!HII JJ* $J JJ' !J H-h7D.x8E6u=I+H5C,Ec,JLefiLjmFGJmKMefiMj,ktY'(+.tY'(# r0c g}|jd}|jD]v}||s ||dr8|jdt|dd||dd||dd|d d I|jdt|dd||dd |d d xt |j rC|j jD]&}|jd |j |d |(|S)NTrz-a -f rbrrrvz' 'r'z 'z-a -e r\)rryr7rgr|r)r-r fcon_dictr>r$s r.rzfcontextRecords.customized s LL& !A|Q<?HH>UVWXYVZ>[]fgh]ijk]lnwxynz{|n}@ABC@DEFHH6MaPQd6SU^_`UabcUdfghifjkl " tzz?**//+$**V*>z, SELinux Distribution fcontext Equivalence z = z% SELinux Local fcontext Equivalence ) rr|rr ryrrrrr)r-rrrvfkeysr>r$s r.rzfcontextRecords.list sLL+ y>Q A.@,A1V9aPYl[\!(y~~/0Q<%AaD!A$ RS UVYbcdYefgYhjstujvwxjy|EFOPQFRSTFUW\|]^_1qtYq\RS_V_`aVbcdVegpqrgstugvwxAaD!A$?@ t !LMN"oo224Fvtv/FGH5 tzz?aABC**//+64::f+=>?, r0r&)r)r r rrr)rUrVrWrr/rRr6r8r;rrSrrQrRrSrrmrrrrrXr0r.rr5 sgK$L% : , T4Gl"ALF 4RB @ @r0rc\eZdZddZdZddZdZdZdZdZ dd Z d Z d Z d Z dd Zy)booleanRecordsNctj||i|_d|jd<d|jd<d|jd<d|jd<d|jd<d|jd< tj\}|_tj \}}|jd k(s|j|k(rd |_yd |_y#g|_d}Y;xYw) NrbTRUErFALSEONOFF10r TF) rr/dictrzsecurity_get_boolean_namescurrent_booleansrr modify_local)r-rrptypes r.r/zbooleanRecords.__init__ s  t,  & ' $ % # # (/(J(J(L %B%557IB :: tzzU2 $D  %D  $&D !Es 93C C'ctj|}t|j|\}}|dkrt t d|zt |j|\}}|dkrt t d|z|st t d|zt|j|\}}|dkrt t d|z|j|jvr(t||j|jn>t t ddj|jjz|jrA||jvr3t|j||}|dkrt t d|zt!|j||}|dkrt t d |zt#|t%|y) Nrr)(Could not check if boolean %s is definedBoolean %s is not definedzCould not query file context %sz0You must specify one of the following values: %sz, (Could not set active value of boolean %szCould not modify boolean %s)rzselinux_boolean_subsemanage_bool_key_createrrr semanage_bool_existssemanage_bool_queryupperrsemanage_bool_set_valuer#ryrrsemanage_bool_set_activesemanage_bool_modify_localsemanage_bool_key_freesemanage_bool_free)r-r=valuerr>rrs r.__modzbooleanRecords.__mod s**40*477D9Q 6Q>?$FG G+DGGQ7 V 6QIJTQR RQ:;dBC C%dggq1Q 6Q@ADHI I ;;=DII % #Atyy'? @QQRUYU^U^_c_h_h_m_m_oUppq q   )>)>!>)$''1a8BAv #M!NQU!UVV 'A 6 6Q<=DE Eq!1r0c|j|rt|}|jjdD]d}|j }t |dk(r" |jd\}}|j|j |j f|jn|j|||jy#t $r&t tdj||wxYw)Nrr=z&Bad format {filename}: Record {record})filenamerecord) rrirjrr!r|rr r_booleanRecords__modrlrR)r-r=ruse_filerqrboolnamers r.rSzbooleanRecords.modify s dBWWY__T*GGIq6Q;r$%GGCLMHc 8>>+SYY[9+ HHJ JJtU # "r$Q'O%P%W%Waeno%W%pqqrs C/DcJtj|}t|j|\}}|dkrt t d|zt |j|\}}|dkrt t d|z|st t d|zt|j|\}}|dkrt t d|z|st t d|zt|j|}|dkrt t d|zt|y)Nrr)rrz2Boolean %s is defined in policy, cannot be deletedzCould not delete boolean %s) rzrrrrr rsemanage_bool_exists_localsemanage_bool_del_localrrJs r.rXzbooleanRecords.__delete+ s **40*477D9Q 6Q>?$FG G+DGGQ7 V 6QIJTQR RQ:;dBC C1$''1= V 6QIJTQR RQSTW[[\ \ $TWWa 0 6Q<=DE Eq!r0c|j|j||j|j|j||jyr&)r_booleanRecords__deleterR_booleanRecords__reset_valuer-r=s r.rzbooleanRecords.deleteC sB  d  4  r0cg}t|j\}|_|dkrtt d|j |jD]/}t |}|j||j|1|j|j |D]}|j||jyNrzCould not list booleans) semanage_bool_list_localrblistrr rsemanage_bool_get_namer7rrRr)r-deletedrbooleanr=s r.rzbooleanRecords.deleteallO s3DGG<TZ 6Q89: : zzG)'2D NN4 MM$ " G   w ' r0ctj|}t|j|\}}|dkrt t d|zt |j|\}}|dkrt t d|zt|t|t|j||}|dkrt t d|zt|t|y)Nrr)zCould not query boolean %sr) rzrrrrr rrsemanage_bool_get_valuerrr)r-r=rr>rs r. __reset_valuezbooleanRecords.__reset_valuel s**40*477D9Q 6Q>?$FG G%dggq1Q 6Q; %dggq! 4 6QIJTQR Rq!1r0cFi}|rt|j\}|_nt|j\}|_|dkrt t d|jD]}g}t |}|jt||jrW||jvrI|jtj||jtj|n(|j|d|j|d|||<|Sr)rrrsemanage_bool_listrr rr7rrrrzsecurity_get_boolean_pendingsecurity_get_boolean_active)r-rrnrrrr=s r.rzbooleanRecords.get_all s 7@ R1$'': R 6Q89: :zzGE)'2D LL09 :  TT-B-B%B WAA$GH W@@FG U1X& U1X&E$K" r0cVtj|}tj|Sr&)rzrr boolean_descrs r.get_desczbooleanRecords.get_desc s#**40$$T**r0cVtj|}tj|Sr&)rzrrboolean_categoryrs r. get_categoryzbooleanRecords.get_category s#**40((..r0cg}|jd}t|jD]%}||s |jd||dd|'|S)NTz-m -rr\rxrzs r.rzbooleanRecords.customized sQ  T" %AQxa Q78&r0c Dtdtdf}|rL|j|}t|jD]}||s t |d||d y|j|}t |dk(ry|r5z) )r rrryrr|r)r-rrron_offrnr>s r.rzbooleanRecords.list sE(AdG$ LL+EEJJL)8Qa 45*  Y' u:?   +<)=qz1Y("0 :(.+/pr0r{)rb)>r3r1rzrror9r*rrJPROGNAMErsetools.policyreprsetools.typequeryrrgettextkwargs version_info translationrr builtinsr;__dict__ ImportError __builtin__rrcrESEMANAGE_FCONTEXT_ALLSEMANAGE_FCONTEXT_REGSEMANAGE_FCONTEXT_DIRSEMANAGE_FCONTEXT_CHARSEMANAGE_FCONTEXT_BLOCKSEMANAGE_FCONTEXT_SOCKSEMANAGE_FCONTEXT_LINKSEMANAGE_FCONTEXT_PIPErgrMr' audit_closer(r$r\rfrwrrrrrr r%r.rr(rorrrr{rXr0r.rs8.   +', F $ yH #1 # #" #A A  & 2/ ;' 32 >( 4' 3( 4/ ;' 3) 4!7 ( 3* 44 >) 3) 4- 8( 3) 4( 34 ?( 3) 41 <(++.(+/2+.%(,/),. !K<E&e&&()#&#&R   +"$eePh&Oh&V _ @@FF8?F8RM5_M5`d/dL JOJX|||Jp/JpZIVIVXh@oh@V Wp_WpaU,,!$# ,$+ S!,x "<!<!<"