+
    	:i  c                   s   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHtHtHt ^ RIt^RI	H
t
 ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^R	I	Ht ^R
I	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^RI	Ht ^ RIHt ^ RIHt Rt ^ RIt/ t]P@                  R08  d   R]R&   ]PB                  ! ]3RR/]BRR/B t"]"P<                  t#R t*R t+R t,R t-^ t.^t/^t0^t1Rt2Rt3^ t4^t5^t6^t7^t8^t9^t:^t;^t<^	t=^
t>^t?^t@/ tA]#! R4      ]A]4&   ]#! R 4      ]A]5&   ]#! R!4      ]A]6&   ]#! R"4      ]A]7&   ]#! R#4      ]A]8&   ]#! R$4      ]A]9&   ]#! R%4      ]A]:&   ]#! R&4      ]A];&   ]#! R'4      ]A]<&   ]#! R(4      ]A]=&   ]#! R)4      ]A]>&   ]#! R*4      ]A]?&   ]#! R+4      ]A]@&   R, tB]4]5]6]9]7.tC]<];]=]>]?.tDR- tE ! R. R/4      tFR#     ^ RI$t$]%]$PL                  R&    L  ]' d    ^ RI(t(])](PL                  R&     ELi ; i; i)1    N)get_all_typesget_all_attributesget_all_roles)
executable)boolean)etc_rw)	unit_file)	var_cache)	var_spool)var_lib)var_log)var_run)tmp)rw)network)script)spec)userzselinux-pythonTunicodeZ	localedirz/usr/share/localeZfallback_c                s    V R,          pV R,          pV R,          pVR,           VP                  R4      ^ ,          ,           pVP                  R4      ^,          pWV.# )z6Given an RPM header return the package NVR as a stringnameversionrelease-Z.)split)Zhdrr   r   r   Zrelease_versionZ
os_version   &     6/usr/lib/python3.14/site-packages/sepolicy/generate.pyget_rpm_nvr_from_headerr   G   sW    v;D)nG)nGmgmmC&8&;;Os#A&J:..    c                 s     ^ RI pRpVP                  4       pVP                  VP                  V 4      pV F  p\	        V4      p V# 	   V#    \        RT ,          4       Rp T# ; i)r    Nz"Failed to retrieve rpm info for %s)rpmtsZdbMatchZRPMTAG_NAMEr   print)Zpackager   Znvrr   ZmiZhr   r   get_rpm_nvr_listr!   R   sr    
VVXZZ1A)!,C
 J  J	3w>?Js   AA A A%c                  sX   / p \         P                  ! \         P                  4       F  pVR ,          R8X  g9   VR ,          R8X  g+   VR ,          R8X  g   VR ,          R8X  g   VR ,          R8X  d   KK  VR ,          VP                  R4      3WR,          VR,          VR	,          3&   K  	  V # )
typeZreserved_port_tZport_tZhi_reserved_port_tZephemeral_port_tZunreserved_port_trangeZlowZhighprotocol)sepolicyinfoZPORTZget)Zdictp     r   get_all_portsr)   b   s    D]]8==)V9))&	X%&	11&	//&	0067iw5Ph&	1Z=12 * Kr   c                  s    \         P                  ! \         P                  4       U u. uF  q R ,          NK  	  pp VP                  R4       VP                  R4       VP	                  4        V# u up i )r   Zsystem_uZroot)r%   r&   USERZremovesort)Zxusersr(   r   get_all_usersr-   o   sT     (hmm <= <1vYY <E=	LL	LL	JJLL	 >s   A.z_admin$z_role$zStandard Init DaemonzDBUS System DaemonzInternet Services DaemonzWeb Application/Script (CGI)ZSandboxzUser ApplicationzExisting Domain Typez Minimal Terminal Login User Rolez!Minimal X Windows Login User RolezDesktop Login User RolezAdministrator Login User Rolez Confined Root Administrator Rolez!Module information for a new typec                  s    \         P                  4       p V P                  4        \        R 4      pV  F  pW:R R\         V,          : R2,          pK!  	  V# )zValid Types:
z>2z: 
)poltypekeysr+   r   )r0   ZmsgZks      r   get_poltype_descr1      sE    <<>DIIK

Ca,, Jr   c                 s8   V R 8X  d   . # Rp . pV P                  R4       F  pVP                  R4      p\        V4      ^8  d   \        h\        V4      ^8X  d&   \        V^ ,          4      p\        V^ ,          4      pM0\        V^ ,          4      p\        V^,          4      pWV8  d   \        h\	        WV^,           4       F'  pV^8  g   Wq8  d   \        hVP                  V4       K)  	  K  	  V#   \         d    \        \        R4      T,          4      hi ; i) Z,r   z8Ports must be numbers or ranges of numbers from 1 to %d i   )r   len
ValueErrorintr#   appendr   )portsZmax_porttempZaZrbeginendr'      &       r   verify_portsr<      s    {	HcS!AA1vz  1v{AaD	!A$iAaD	!A$i;$$5'*q5AL$$A + "$  cUVYaabbcs   C$C2 2'Dc                   s  a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tRuR ltR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R t"R  t#R! t$R" t%R# t&R$ t'R% t(R& t)R' t*R( t+R) t,R* t-R+ t.R, t/R- t0R. t1R/ t2R0 t3R1 t4R2 t5R3 t6R4 t7R5 t8R6 t9R7 t:R8 t;R9 t<R: t=R; t>R< t?R= t@R> tAR? tBR@ tCRA tDRB tERC tFRD tGRE tHRF tIRG tJRH tKRI tLRJ tMRK tNRL tORM tPRN tQRO tRRP tSRQ tTRR tURS tVRT tWRU tXRV tYRW tZRX t[RY t\RZ t]R[ t^R\ t_R] t`R^ taR_ tbR` tcRa tdRb teRc tfRd tgRe thRf tiRg tjRh tkRi tlRj tmRk tnRl toRm tpRn tqRo trRp tsRq tt]uP                  ! 4       3Rr ltwRstxV tyRt# )vpolicyc                s   . V n         / V n        \        4       V n        . V n        V\
        9  d   \        \        R 4      4      hV'       g'   \        \        R4      \
        V,          ,          4      h \        4       V n        / V n        RV P                  R&   RV P                  R&   RV P                  R&   R	V P                  R
&   R	V P                  R&   R	V P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R &   R!V P                  R"&   R#V P                  R$&   R%V P                  R&&   R'V P                  R(&   R)V P                  R*&   R+V P                  R,&   R-V P                  R.&   R/V P                  R0&   R1V P                  R2&   R3V P                  R4&   R5V P                  R6&   R7V P                  R8&   R9V P                  R:&   R;V P                  R<&   R=V P                  R>&   R?V P                  R@&   RAV P                  RB&   RCV P                  RD&   REV P                  RF&   RGV P                  RH&   RIV P                  RJ&   RKV P                  RL&   RMV P                  RN&   ROV P                  RP&   RQV P                  RR&   RSV P                  RT&   RUV P                  RV&   RWV P                  RX&   RYV P                  RZ&   R[V P                  R\&   R]V P                  R^&   R_V P                  R`&   RaV P                  Rb&   RaV P                  Rc&   RaV P                  Rd&   RaV P                  Re&   RfV P                  Rg&   RfV P                  Rh&   RfV P                  Ri&   RfV P                  Rj&   RfV P                  Rg&   RkV P                  Rl&   RmV P                  Rn&   RoV P                  Rp&   RqV P                  Rr&   RsV P                  Rt&   RuV P                  Rv&   RwV P                  Rx&   RyV P                  Rz&   R{V P                  R|&   R}V P                  R~&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   RV P                  R&   / V n        R. \        .V P                  R&   R. \        .V P                  R&   R. \        .V P                  R&   R. \         .V P                  R&   R. \         .V P                  R&   R. \         .V P                  R&   R. \"        .V P                  R&   R. \$        .V P                  R&   R. \&        .V P                  R&   R. \(        .V P                  R&   R. \*        .V P                  R&   / V n        \        V P,                  R&   \         V P,                  R&   \"        V P,                  R&   \$        V P,                  R&   \&        V P,                  R&   \(        V P,                  R&   \*        V P,                  R&   \.        V P,                  R&   . ROV n        V P2                  V P4                  3V P6                  V P8                  3V P:                  V P<                  3V P>                  V P@                  3V PB                  V PD                  3V PF                  V PH                  3V PJ                  V PL                  3V PN                  V PP                  3V PR                  V PT                  3V PV                  V PP                  3V PX                  V PP                  3V PZ                  V P\                  3V P^                  V P`                  33V n1        \d        Pf                  ! RV4      '       g   \        \        R4      4      hV\h        8X  d   RV,          V n5        MWn5        Wn6        . V n7        . V n8        W n9        RV n:        RV n;        RRR. .V n<        RRR. .V n=        RRR. .V n>        RRR. .V n?        RV n@        RV nA        RV nB        RV nC        RV nD        RV nE        RV nF        RV nG        RV nH        V Pr                  \        \        39  V nK        V Pr                  \        \        39  V nL        V Pr                  \        \        39  V nM        RV nN        RV nO        / V nP        / V nQ        / V nR        . V nS        . V nT        RV nU        RV nV        . V nW        . V nX        . V nY        . V nZ        . V n[        R#   \         d   p\        R4        Rp?E	LRp?i\         d   p\        RT4        Rp?E	LRp?ii ; i)z"You must enter a valid policy typez;You must enter a name for your policy module for your '%s'.z9Can not get port types, must be root for this informationNzCan not get port typeszset_use_kerberos(True)Zopenlogzset_use_kerb_rcache(True)zset_use_syslog(True)zset_use_resolve(True)Z	gethostbyZgetaddrinfoZgetnameinfoZkrbzset_manage_krb5_rcache(True)Zgss_accept_sec_contextZkrb5_verify_init_credsZkrb5_rd_reqZ__syslog_chkzset_use_uid(True)ZgetpwnamZgetpwuidzset_use_dbus(True)Zdbus_zset_use_pam(True)Zpam_zset_use_audit(True)zadd_process('fork')Zforkzadd_process('transition')Z
transitionzadd_process('sigchld')Zsigchldzadd_process('sigkill')Zsigkillzadd_process('sigstop')Zsigstopzadd_process('signull')Zsignullzadd_process('ptrace')Zptracezadd_process('getsched')Zgetschedzadd_process('setsched')Zsetschedzadd_process('getsession')Z
getsessionzadd_process('getpgid')Zgetpgidzadd_process('setpgid')Zsetpgidzadd_process('getcap')Zgetcapzadd_process('setcap')Zsetcapzadd_process('share')Zsharezadd_process('getattr')Zgetattrzadd_process('setexec')Zsetexeczadd_process('setfscreate')Zsetfscreatezadd_process('noatsecure')Z
noatsecurezadd_process('siginh')Zsiginhzadd_process('signal_perms')Zkillzadd_process('setrlimit')Z	setrlimitzadd_process('rlimitinh')Z	rlimitinhzadd_process('dyntransition')Zdyntransitionzadd_process('setcurrent')Z
setcurrentzadd_process('execmem')Zexecmemzadd_process('execstack')Z	execstackzadd_process('execheap')Zexecheapzadd_process('setkeycreate')Zsetkeycreatezadd_process('setsockcreate')Zsetsockcreatezadd_capability('chown')Zchownzadd_capability('dac_override')Zdac_overridez!add_capability('dac_read_search')Zdac_read_searchzadd_capability('fowner')Zfownerzadd_capability('fsetid')Zfsetidzadd_capability('setgid')ZsetgidZsetegidZ	setresgidZsetregidzadd_capability('setuid')Z	setresuidZsetuidZseteuidZsetreuidzadd_capability('setpcap')Zsetpcapz!add_capability('linux_immutable')Zlinux_immutablez"add_capability('net_bind_service')Znet_bind_servicezadd_capability('net_broadcast')Znet_broadcastzadd_capability('net_admin')Z	net_adminzadd_capability('net_raw')Znet_rawzadd_capability('ipc_lock')Zipc_lockzadd_capability('ipc_owner')Z	ipc_ownerzadd_capability('sys_module')Z
sys_modulezadd_capability('sys_rawio')Z	sys_rawiozadd_capability('sys_chroot')ZchrootZ
sys_chrootzadd_capability('sys_ptrace')Z
sys_ptracezadd_capability('sys_pacct')Z	sys_pacctzadd_capability('sys_admin')ZmountZunshareZ	sys_adminzadd_capability('sys_boot')Zsys_bootzadd_capability('sys_nice')Zsys_nicezadd_capability('sys_resource')Zsys_resourcezadd_capability('sys_time')Zsys_timez add_capability('sys_tty_config')Zsys_tty_configzadd_capability('mknod')Zmknodzadd_capability('lease')Zleasezadd_capability('audit_write')Zaudit_writezadd_capability('audit_control')Zaudit_controlzadd_capability('setfcap')Zsetfcapr   /etcr   /tmpr   r   /usr/lib/systemd/system/lib/systemd/system/etc/systemd/systemr   
/var/cacher
   /var/libr   /var/logr   /var/runr	   
/var/spoolZ_tmp_tZ_unit_file_tZ_var_cache_tZ
_var_lib_tZ
_var_log_tZ
_var_run_tZ_var_spool_tZ_port_tz^[a-zA-Z0-9-_]+$zOName must be alphanumeric with no spaces. Consider using option "-n MODULENAME"zhttpd_%s_scriptr2   F)r>   rC   rE   r?   r   rD   rF   rG   rB   r@   rA   )\rpmsr7   r   	all_rolestypesr/   r4   r   r)   r    ZRuntimeErrorsymbolsDEFAULT_DIRSr   r   r   r   r   r
   r   r   r	   DEFAULT_EXTr   DEFAULT_KEYSgenerate_daemon_typesgenerate_daemon_rulesgenerate_dbusd_typesgenerate_dbusd_rulesgenerate_inetd_typesgenerate_inetd_rulesgenerate_cgi_typesgenerate_cgi_rulesgenerate_sandbox_typesgenerate_sandbox_rulesgenerate_userapp_typesgenerate_userapp_rulesgenerate_existing_user_typesgenerate_existing_user_rulesgenerate_min_login_user_typesgenerate_login_user_rulesgenerate_x_login_user_typesgenerate_x_login_user_rulesgenerate_login_user_typesgenerate_admin_user_typesgenerate_root_user_typesgenerate_root_user_rulesgenerate_new_typesgenerate_new_rulesDEFAULT_TYPESreZmatchCGIr   	file_namecapabilities	processesr"   
initscriptprogramin_tcpin_udpout_tcpout_udpuse_resolveuse_tmpuse_uid
use_sysloguse_kerberosmanage_krb5_rcacheuse_pamuse_dbus	use_auditEUSERNEWTYPEuse_etcuse_localizationuse_fduse_terminaluse_mailbooleansfilesdirsfound_tcp_portsfound_udp_portsneed_tcp_typeneed_udp_typeadmin_domainsexisting_domainstransition_domainstransition_usersroles)selfr   r"   Zes   &&& r   __init__Zpolicy.__init__   s	   	
&
wQCDEEQ\]`ghl`mmnn	/&DJ ":Y"=Y"8Y$;[!&=]#&=]#6U1O-.1O-.&D]#'=^$#6Z #6Z  4W2V4V4V%@\"":Y":Y":Y":Y!8X#<Z #<Z %@\"":Y":Y!8X!8X 6W":Y":Y&B]#%@\"!8X<V$>[!$>[!(F_%%@\"":Y$>[!#<Z 'D^$(F_% 9W'G^$*M&'!;X!;X!;X"<Y$>[!#=Z $>[!!;X"<Y#=Z $>[!"=Y*M&'+O'((I_%$A[!"=Y#?Z $A[!%C\"$A[!!?X%C\"%C\"$A[! =W"?Y$A[!#?Z #?Z 'G^$#?Z )K%& 9W 9W&E]#(I_%"=Y%-r6$:&!%*B$4&!#'R.$8CR7S344?Y3O/04?Y3O/0+6I*F,')2B(@*%)2B(@*%)2B(@*%+6I*F,'%("+4(+4()0&)0&)0&+4(&-# | '')C)CD&&(A(AB&&(A(AB$$d&=&=>(($*E*EF(($*E*EF..0Q0QR//1O1OP--t/O/OP++T-K-KL++T-K-KL**D,I,IJ$$d&=&=>@ xx+T22Qrstt3;)D0DII	eUB/eUB/ueR0ueR0 !"'yy(88 $		%1A Aiiw'77!
	!!"" ""$ "
e  	OMNN 	/*A..	/s*   3h i"h33i iiic                s    V\         ,          ;'       gD    V\        ,          ;'       g/    V\        ,          ;'       g    \        V\        ,          4      ^ 8  # r    )ALLRESERVED
UNRESERVEDr3   PORTS)r   Zl   &&r   Z
__isnetsetZpolicy.__isnetset  s9    vJJ8JJ*JJQuX9JJr   c                    Wn         R # N)r   )r   r   r   r   set_admin_domainsZpolicy.set_admin_domains  s    *r   c                r   r   )r   )r   r   r   r   set_existing_domainsZpolicy.set_existing_domains       0r   c                r   r   )r   )r   r   r   r   set_admin_rolesZpolicy.set_admin_roles      
r   c                r   r   )r   )r   r   r   r   set_transition_domainsZpolicy.set_transition_domains  s    "4r   c                r   r   )r   )r   r   r   r   set_transition_usersZpolicy.set_transition_users  r   r   c                8    V P                  V P                  4      # r   )_policy__isnetsetrp   r      &r   
use_in_udpZpolicy.use_in_udp      t{{++r   c                r   r   )r   rr   r   r   r   use_out_udpZpolicy.use_out_udp      t||,,r   c                R    V P                  4       ;'       g    V P                  4       # r   )r   r   r   r   r   use_udpZpolicy.use_udp        66D$4$4$66r   c                r   r   )r   ro   r   r   r   
use_in_tcpZpolicy.use_in_tcp  r   r   c                r   r   )r   rq   r   r   r   use_out_tcpZpolicy.use_out_tcp  r   r   c                r   r   )r   r   r   r   r   use_tcpZpolicy.use_tcp  r   r   c                r   r   )r   r   r   r   r   use_networkZpolicy.use_network  s    ||~///r   c                s    V P                   P                  4        F3  w  r4pW8  g   K  W8:  g   K  W%8X  g   K  V P                   W4V3,          u # 	  R # r   )r7   r0   )r   Zportr$   r9   r:   r'   s   &&&   r   	find_portZpolicy.find_port  sA    !ZZ__.ME}zz%h"677 / r   c                sd    V P                   \        9  d   \        \        R 4      4      hWn        R# )z0User Role types can not be assigned executables.N)r"   APPLICATIONSr4   r   rn   )r   rn   r   r   set_programZpolicy.set_program  s$    99L(QQRSSr   c                sd    V P                   \        8w  d   \        \        R 4      4      hWn        R# )z(Only Daemon apps can use an init script.N)r"   DAEMONr4   r   rm   )r   rm   r   r   set_init_scriptZpolicy.set_init_script  s$    99QIJKK$r   c                ,    WV\        V4      .V n        R # r   )r<   ro   r   allZreservedZ
unreservedr7      &&&&&r   
set_in_tcpZpolicy.set_in_tcp      j,u2EFr   c                r   r   )r<   rp   r   r   r   
set_in_udpZpolicy.set_in_udp  r   r   c                .    VR R \        V4      .V n        R# FN)r<   rq   r   r   r7      &&&r   set_out_tcpZpolicy.set_out_tcp      UE<+>?r   c                r   r   )r<   rr   r   r   r   set_out_udpZpolicy.set_out_udp  r   r   c                `    \        V4      \        Jd   \        \        R 4      4      hWn        R# )z$use_resolve must be a boolean value N)r"   boolr4   r   rs   r   Zvalr   r   set_use_resolveZpolicy.set_use_resolve  s%    9D QEFGGr   c                r   )z#use_syslog must be a boolean value N)r"   r   r4   r   rv   r   r   r   set_use_syslogZpolicy.set_use_syslog  s$    9D QDEFFr   c                r   )z%use_kerberos must be a boolean value N)r"   r   r4   r   rw   r   r   r   set_use_kerberosZpolicy.set_use_kerberos  s%    9D QFGHHr   c                r   )z+manage_krb5_rcache must be a boolean value N)r"   r   r4   r   rx   r   r   r   set_manage_krb5_rcacheZpolicy.set_manage_krb5_rcache  s%    9D QLMNN"%r   c                    VR J V n         R# TN)ry   r   r   r   set_use_pamZpolicy.set_use_pam      tr   c                r   r   )rz   r   r   r   set_use_dbusZpolicy.set_use_dbus      r   c                r   r   )r{   r   r   r   set_use_auditZpolicy.set_use_audit  s    +r   c                r   r   )r~   r   r   r   set_use_etcZpolicy.set_use_etc  r   r   c                r   r   )r   r   r   r   set_use_localizationZpolicy.set_use_localization  s    !$r   c                r   r   )r   r   r   r   
set_use_fdZpolicy.set_use_fd  s    d{r   c                r   r   )r   r   r   r   set_use_terminalZpolicy.set_use_terminal  s     D[r   c                r   r   )r   r   r   r   set_use_mailZpolicy.set_use_mail  r   r   c                s    V P                   \        9   d   \        \        R 4      4      hV'       d,   V P                  R,          ^,          P                  R4       R# . V P                  R,          ^&   R# )z'USER Types automatically get a tmp typer?   N)r"   USERSr4   r   rL   r6   r   r   r   set_use_tmpZpolicy.set_use_tmp  sU    99QHIJJf%a(//7+-Df%a(r   c                r   r   )ru   r   r   r   set_use_uidZpolicy.set_use_uid  r   r   c                    V P                   '       d1   \        P                  ! R V P                  \        P
                  4      # R# TEMPLATETYPEr2   )ru   rh   subr   r   Zte_uid_rulesr   r   r   generate_uid_rulesZpolicy.generate_uid_rules  s+    <<<66.$))Z5L5LMMr   c                r   r   )rv   rh   r   r   r   Zte_syslog_rulesr   r   r   generate_syslog_rulesZpolicy.generate_syslog_rules  s+    ???66.$))Z5O5OPPr   c                r   r   )rs   rh   r   r   r   Zte_resolve_rulesr   r   r   generate_resolve_rulesZpolicy.generate_resolve_rules  s.    66.$))Z5P5PQQr   c                r   r   )rw   rh   r   r   r   Zte_kerberos_rulesr   r   r   generate_kerberos_rulesZpolicy.generate_kerberos_rules  s.    66.$))Z5Q5QRRr   c                r   r   )rx   rh   r   r   r   Zte_manage_krb5_rcache_rulesr   r   r   !generate_manage_krb5_rcache_rulesZ(policy.generate_manage_krb5_rcache_rules   s.    """66.$))Z5[5[\\r   c                    R pV P                   '       d1   \        P                  ! RV P                  \        P
                  4      pV# r2   r   )ry   rh   r   r   r   Zte_pam_rulesr   newte   & r   generate_pam_rulesZpolicy.generate_pam_rules&  1    <<<FF>499j6M6MNEr   c                r   r   )r{   rh   r   r   r   Zte_audit_rulesr   r   r   generate_audit_rulesZpolicy.generate_audit_rules,  s1    >>>FF>499j6O6OPEr   c                r   r   )r~   rh   r   r   r   Zte_etc_rulesr   r   r   generate_etc_rulesZpolicy.generate_etc_rules2  r   r   c                r   r   )r   rh   r   r   r   Zte_fd_rulesr   r   r   generate_fd_rulesZpolicy.generate_fd_rules8  s1    ;;;FF>499j6L6LMEr   c                r   r   )r   rh   r   r   r   Zte_localization_rulesr   r   r   generate_localization_rulesZ"policy.generate_localization_rules>  s4       FF>499j6V6VWEr   c                s    R pV P                   \        8w  dC   V P                  '       d1   \        P                  ! RV P
                  \        P                  4      pV# r   )r"   DBUSrz   rh   r   r   r   Zte_dbus_rulesr   r   r   generate_dbus_rulesZpolicy.generate_dbus_rulesD  s<    99FF>499j6N6NOEr   c                r   r   )r   rh   r   r   r   Zte_mail_rulesr   r   r   generate_mail_rulesZpolicy.generate_mail_rulesJ  1    ===FF>499j6N6NOEr   c                s    R pRV: RV: RV: 2pV\         P                  ! 4       9   d   V: RV P                  : R2pV# RV: RV P                  : RV: RV: R	V: R
2pV# )r2   Zcorenet_r   Z(z_t)
z
gen_require(`
    type z_t;
')
allow z_t z_t:z_socket name_z;
)r%   Zget_methodsr   )r   r$   Zaction	port_namelineZmethods   &&&&  r   generate_network_actionZpolicy.generate_network_actionP  s]    '/CX))++#)4995D  , $))Y&:D r   c                s   V P                   \        ,           Fw  pV P                  \        V4      R 4      pVf
   RV n        K+  V^ ,          RR pV P                  R RV4      pW@P                  9  g   K\  V P                  P                  V4       Ky  	  V P                  \        ,           Fw  pV P                  \        V4      R 4      pVf
   RV n        K+  V^ ,          RR pV P                  R RV4      pW@P                  9  g   K\  V P                  P                  V4       Ky  	  V P                  \        ,           Fw  pV P                  \        V4      R4      pVf
   RV n
        K+  V^ ,          RR pV P                  RRV4      pW@P                  9  g   K\  V P                  P                  V4       Ky  	  V P                  RJ g   V P                  RJ d1   \        P                  ! RV P                  \        P                   4      # R# )	tcpNTZbindZconnectudpr   r2   )ro   r   r   r5   r   r   r   r6   rq   rp   r   r   rh   r   r   r   te_types)r   iZrecr   r      &    r   generate_network_typesZpolicy.generate_network_types^  s   U##A..Q/C{%)"F3BK	33E69M333((//5 $ e$$A..Q/C{%)"F3BK	33E9iP333((//5 % U##A..Q/C{%)"F3BK	33E69M333((//5 $ %););t)C66.$))W5E5EFFr   c                sH   V P                    FW  pVP                  V4      ^ 8X  g   K  V P                   V,          ^,          P                  V4       V P                   V,          u # 	  V P                   R,          ^,          P                  V4       V P                   R,          # )r    r   )rL   Zfindr6   )r   filed   && r   Z__find_pathZpolicy.__find_path  s    ""Ayy|q !!!$Q'..t4((++ # 	$"))$/  &&r   c                `    WP                   9  d   V P                   P                  V4       R # R # r   )rk   r6   )r   Z
capabilityr   r   add_capabilityZpolicy.add_capability  s'    ...$$Z0 /r   c                r   r   )rJ   )r   rJ   r   r   	set_typesZpolicy.set_types  r   r   c                r   r   )rl   r6   )r   Zprocessr   r   add_processZpolicy.add_process  s#    ..(NN!!'* )r   c                s"    W P                   V&   R # r   )r   )r   r   Zdescriptionr   r   add_booleanZpolicy.add_boolean  s    )dr   c                B    V P                  V4      V P                  V&   R # r   )_policy__find_pathr   r   r   r   r   add_fileZpolicy.add_file  s    ++D1

4r   c                r  r   )r  r   r  r   r   add_dirZpolicy.add_dir  s    **40		$r   c                    R pV P                   P                  4        \        V P                   4      ^ 8  d/   RV P                  : RRP	                  V P                   4      : R2pV# )r2   allow z_t self:capability {   };
)rk   r+   r3   r   joinr   r   r   generate_capabilitiesZpolicy.generate_capabilities  sO     t  !A%>BiiRVRcRcIdeEr   c                r  )r2   r  z_t self:process { r	  r
  )rl   r+   r3   r   r  r   r   r   generate_processZpolicy.generate_process  sH    t~~";?99chht~~F^_Er   c                s   R pV P                  4       '       Ed   RpV\        P                  ! RV P                  \        P
                  4      ,          pV P                  4       '       Ed}   VR,          pV\        P                  ! RV P                  \        P                  4      ,          pV P                  4       '       d   V\        P                  ! RV P                  \        P                  4      ,          pV P                  '       d]   \        V P                  \        ,          4      ^ 8  d8   V\        P                  ! RV P                  \        P                  4      ,          pV P                  '       d]   \        V P                  \        ,          4      ^ 8  d8   V\        P                  ! RV P                  \        P                   4      ,          pV P                  \"        ,          '       d8   V\        P                  ! RV P                  \        P$                  4      ,          pV P                  \&        ,          '       d8   V\        P                  ! RV P                  \        P(                  4      ,          pV P                  \*        ,          '       d8   V\        P                  ! RV P                  \        P,                  4      ,          pV P                  \"        ,          '       d8   V\        P                  ! RV P                  \        P.                  4      ,          pV P                  \&        ,          '       d8   V\        P                  ! RV P                  \        P0                  4      ,          pV P                  \*        ,          '       d8   V\        P                  ! RV P                  \        P2                  4      ,          pV P4                   F  pW,          pK  	  V P7                  4       '       Ed   VR,          pV\        P                  ! RV P                  \        P8                  4      ,          pV P:                  '       d8   V\        P                  ! RV P                  \        P<                  4      ,          pV P?                  4       '       d8   V\        P                  ! RV P                  \        P@                  4      ,          pV PB                  \"        ,          '       d8   V\        P                  ! RV P                  \        PD                  4      ,          pV PB                  \&        ,          '       d8   V\        P                  ! RV P                  \        PF                  4      ,          pV PB                  \*        ,          '       d8   V\        P                  ! RV P                  \        PH                  4      ,          pV PJ                   F  pW,          pK  	  V# )r2   r.   r   )&r   rh   r   r   r   Z
te_networkr   Zte_tcpr   Z	te_in_tcpr   r3   ro   r   Zte_in_need_port_tcprq   Zte_out_need_port_tcpr   Zte_in_all_ports_tcpr   Zte_in_reserved_ports_tcpr   Zte_in_unreserved_ports_tcpZte_out_all_ports_tcpZte_out_reserved_ports_tcpZte_out_unreserved_ports_tcpr   r   Zte_udpr   Zte_in_need_port_udpr   Z	te_in_udprp   Zte_in_all_ports_udpZte_in_reserved_ports_udpZte_in_unreserved_ports_udpr   )r   r   r      &  r   generate_network_rulesZpolicy.generate_network_rules  s   ERVVNDIIw7I7IJJE||~~		7>>JJ??$$RVVNDIIw?P?PQQE)))c$++e2D.E.I		7C^C^!__%%%#dll5.A*BQ*FRVVNDIIw?[?[\\E;;s##RVVNDIIw?Z?Z[[E;;x((RVVNDIIw?_?_``E;;z**RVVNDIIw?a?abbE<<$$RVVNDIIw?[?[\\E<<))RVVNDIIw?`?`aaE<<
++RVVNDIIw?b?bccE--AJE . ||~~		7>>JJ%%%RVVNDIIw?Z?Z[[E??$$RVVNDIIw?P?PQQE;;s##RVVNDIIw?Z?Z[[E;;x((RVVNDIIw?_?_``E;;z**RVVNDIIw?a?abbE--AJE .r   c                s   R pV P                    FQ  p\        P                  ! RV P                  \        P
                  4      pV\        P                  ! RW#4      ,          pKS  	  V P                  \        8X  dy   V P                   Fh  p\        P                  ! RV P                  \        P                  4      pV\        P                  ! RVP                  R4      ^ ,          V4      ,          pKj  	  V# )r2   r   APPLICATIONr*   _u)r   rh   r   r   r   Zte_transition_rulesr"   r*   r   r   Zte_run_rulesr   )r   r   appr   ur8   r   r   generate_transition_rulesZ policy.generate_transition_rules  s    **C&&D4L4LMCRVVM344E + 99**vvndii9P9PQa(8$?? + r   c                s    R pV P                   \        8X  d   V P                   F  pVP                  R4      ^ ,          pVR,           pV P                   Fo  p\
        P                  ! RV\        P                  4      pW@P                  9  d   \
        P                  ! VRV4      pV\
        P                  ! RWV4      ,          pKq  	  K  	  V# V P                   \        8X  Ed,   V\
        P                  ! RV P                  \        P                  4      ,          pV P                   FQ  p\
        P                  ! RV P                  \        P                  4      pV\
        P                  ! RWV4      ,          pKS  	  V P                   F  pVP                  R4      ^ ,          pVR,           V P                  9   g   K5  \
        P                  ! RV P                  \        P                  4      pV\
        P                  ! RWF4      ,          pK  	  V# )r2   _t_rr   Zsystem_rr  r  r*   )r"   r|   r   r   r   rh   r   r   Zte_admin_domain_rulesrI   RUSERr   Zte_admin_rulesr   Zte_admin_trans_rules)r   r   r   r   roler  r   r  r;   r   generate_admin_rulesZpolicy.generate_admin_rules  sx   99**wwt}Q'd{--C&&t7Q7QRC>>1 ffT:s;RVVM3<<E . + L99RVVNDIIt7J7JKKE))ff^TYY8R8RSs88 * **wwt}Q'4KDNN2&&D<U<UVCRVVFD66E + r   c                r   r   )rz   rh   r   r   r   Zif_dbus_rulesr   newifr   r   generate_dbus_ifZpolicy.generate_dbus_if  r   r   c                s    R pV P                   \        8w  d   V# \        P                  ! RV P                  \
        P                  4      pV# r   )r"   SANDBOXrh   r   r   r   Zif_sandbox_rulesr  r   r   generate_sandbox_ifZpolicy.generate_sandbox_if  s9    99L~tyy*2M2MNr   c                s    R pR pV P                   R 8w  do   V\        P                  ! RV P                  \        P
                  4      ,          pV\        P                  ! RV P                  \        P                  4      ,          pV P                   F  p\        V P                  V,          ^,          4      ^ 8  g   K-  V\        P                  ! RV P                  V P                  V,          ^,          P                  4      ,          pV\        P                  ! RV P                  V P                  V,          ^,          P                  4      ,          pK  	  VR 8w  d   \        P                  ! RV P                  \        P                  4      pWB,          pV\        P                  ! RV P                  \        P                  4      ,          pWA,          pV\        P                  ! RV P                  \        P                  4      ,          pV# R # r   )rm   rh   r   r   r   Zif_initscript_admin_typesZif_initscript_adminrN   r3   rL   Zif_admin_typesZif_admin_rulesZif_begin_adminZif_middle_adminZif_end_admin)r   r  Znewtypesr   Zretr   r   generate_admin_ifZpolicy.generate_admin_if  si   ??b ~tyy*:^:^__HRVVNDIIz7U7UVVE""A4$$Q'*+a/BFF>499d>O>OPQ>RST>U>d>dee		4;L;LQ;OPQ;R;a;abb #
 B;&&J4M4MNCOC266.$))Z5O5OPPCLC266.$))Z5L5LMMCJr   c                b    \         P                  ! R V P                  \        P                  4      # r   )rh   r   rj   r   te_cgi_typesr   r   r   rU   Zpolicy.generate_cgi_types5  s    vvndnnj6M6MNNr   c                r   r!  )rh   r   rj   r   te_sandbox_typesr   r   r   rW   Zpolicy.generate_sandbox_types8  s    vvndnnj6Q6QRRr   c                r   r!  )rh   r   r   r   Zte_userapp_typesr   r   r   rY   Zpolicy.generate_userapp_types;      vvndii1L1LMMr   c                r   r!  )rh   r   r   r   Zte_inetd_typesr   r   r   rS   Zpolicy.generate_inetd_types>      vvndii1J1JKKr   c                r   r!  )rh   r   r   r   Zte_dbusd_typesr   r   r   rQ   Zpolicy.generate_dbusd_typesA  r%  r   c                r   r!  )rh   r   r   r   Zte_min_login_user_typesr   r   r   r]   Z$policy.generate_min_login_user_typesD  s    vvndii1M1MNNr   c                r   r!  )rh   r   r   r   Zte_login_user_typesr   r   r   ra   Z policy.generate_login_user_typesG      vvndii1I1IJJr   c                r   r!  )rh   r   r   r   Zte_admin_user_typesr   r   r   rb   Z policy.generate_admin_user_typesJ  r&  r   c                s   \        V P                  4      ^ 8X  d1   \        \        R4      \        V P
                  ,          ,          4      h\        P                  ! RV P                  \        P                  4      pVR,          pV P                   FT  pVRV,          ,          pVP                  R4      ^ ,          R,           pW0P                  9   g   KD  VRV,          ,          pKV  	  VR,          pV# )	r    z,'%s' policy modules require existing domainsr   zgen_require(`z
        type %s;r  r  z

	role %s;z
')
)r3   r   r4   r   r/   r"   rh   r   r   r   Zte_existing_user_typesr   rI   )r   r   r   r     &   r   r[   Z#policy.generate_existing_user_typesM  s    t$$%*QMNQXY]YbYbQccdd~tyy$2M2MN$$&&A  E774=#d*D~~%   ' 	  	 r   c                r   r!  )rh   r   r   r   Zte_x_login_user_typesr   r   r   r_   Z"policy.generate_x_login_user_types_      vvndii1K1KLLr   c                r   r!  )rh   r   r   r   Zte_root_user_typesr   r   r   rc   Zpolicy.generate_root_user_typesb  s    vvndii1H1HIIr   c                sj   R p\        V P                  4      ^ 8X  d   \        \        R4      4      hV P                   F  pV P                   F|  pVP                  V4      '       g   K  \        W"R\        V4      )  4       V\        P                  ! RVR\        V4      )  V P                  V,          P                  4      ,          p K  	  K  	  \        '       dX   VR 8X  dQ   . pV P                   F  pVP                  V4       K  	  \        \        R4      RP                  V4      ,          4      hV# )r2   zType field requiredNr   z3You need to define a new type which ends with: 
 %sz
 )r3   rJ   r4   r   rM   endswithr    rh   r   r   r}   r6   r  )r   r   tr   Zdefault_extr   r   re   Zpolicy.generate_new_typese  s    tzz?aQ4566A%%::a==!xQ[)RVVNAhAwKAQAQRSATA]A]^^E	 &  7u{K%%""1% &QUVY^YcYcdoYppqqr   c                s    R # )r2    r   r   r   rf   Zpolicy.generate_new_rulesy  s    r   c                s    \         P                  ! R V P                  \        P                  4      pV P
                  R8w  d8   V\         P                  ! R V P                  \        P                  4      ,          pV# r   )rh   r   r   r   Zte_daemon_typesrm   Zte_initscript_typesr   r   r   rO   Zpolicy.generate_daemon_types|  sP    ~tyy*2L2LM??b RVVNDIIz7U7UVVEr   c                r   r   )rt   rh   r   r   r   r   r   r   r   generate_tmp_typesZpolicy.generate_tmp_types  )    <<<66.$))S\\BBr   c                s    R pV P                    FY  p\        P                  ! RV\        P                  4      pV\        P                  ! RV P                   V,          V4      ,          pK[  	  V# )r2   BOOLEANZDESCRIPTION)r   rh   r   r   Z
te_boolean)r   r   br   r'  r   generate_booleansZpolicy.generate_booleans  sT    A&&Aw'9'9:CRVVM4==+;SAAE  r   c                s    R pV P                    F0  pV\        P                  ! RV\        P                  4      ,          pK2  	  V# )r2   r.  )r   rh   r   r   te_rules)r   r   r/  r  r   generate_boolean_rulesZpolicy.generate_boolean_rules  s7    ARVVIq'*:*:;;E r   c                r   r!  )rh   r   r   r   r#  r   r   r   generate_sandbox_teZpolicy.generate_sandbox_te  r$  r   c                r   r!  )rh   r   r   r   r"  r   r   r   generate_cgi_teZpolicy.generate_cgi_te  s    vvndii1H1HIIr   c                f    \         P                  ! R V P                  \        P                  4      pV# r!  )rh   r   r   r   Zte_daemon_rulesr  r   r   rP   Zpolicy.generate_daemon_rules  s#    ~tyy*2L2LMr   c                sD   R pV P                    F  pV P                   Fz  pVP                  V4      '       g   K  VR\        V4      )  R,           pV\        P
                  ! RVR\        V4      )  V P                  V,          P                  4      ,          p K  	  K  	  V# )r2   Nr  r   )rJ   rM   r)  r3   rh   r   if_rules)r   r  r*  r   Zreqtyper   r   generate_new_type_ifZpolicy.generate_new_type_if  s    A%%::a==#a&kD0GRVVNAhAwKAQAQRSATA]A]^^E	 &  r   c                r   r!  )rh   r   r   r   Zte_login_user_rulesr   r   r   r^   Z policy.generate_login_user_rules  r&  r   c                r5  r!  )rh   r   r   r   Zte_existing_user_rules)r   Znerulesr   r   r\   Z#policy.generate_existing_user_rules  s#    &&D4O4OPr   c                r   r!  )rh   r   r   r   Zte_x_login_user_rulesr   r   r   r`   Z"policy.generate_x_login_user_rules  r(  r   c                r5  r!  )rh   r   r   r   Zte_root_user_rulesr   r   r   rd   Zpolicy.generate_root_user_rules  s#    ~tyy$2I2IJr   c                r   r!  )rh   r   r   r   Zte_userapp_rulesr   r   r   rZ   Zpolicy.generate_userapp_rules  r$  r   c                r   r!  )rh   r   r   r   Zte_inetd_rulesr   r   r   rT   Zpolicy.generate_inetd_rules  r%  r   c                r   r!  )rh   r   r   r   Zte_dbusd_rulesr   r   r   rR   Zpolicy.generate_dbusd_rules  r%  r   c                r   r   )rt   rh   r   r   r   r1  r   r   r   generate_tmp_rulesZpolicy.generate_tmp_rules  r-  r   c                x    R pV\         P                  ! RV P                  \        P                  4      ,          pV# r   )rh   r   r   r   Zte_cgi_rulesr   r   r   rV   Zpolicy.generate_cgi_rules  s-    		:3J3JKKr   c                r9  r   )rh   r   r   r   Zte_sandbox_rulesr   r   r   rX   Zpolicy.generate_sandbox_rules  s-    		:3N3NOOr   c                sp   R pV P                   '       g   V P                  \        8X  d1   \        P                  ! RV P
                  \        P                  4      pV P                  \        \        \        \        39   d8   V\        P                  ! RV P
                  \        P                  4      ,          pV# r   )r   r"   r*   rh   r   r   r   Zif_user_program_rulesTUSERXUSERAUSERLUSERZif_role_change_rulesr  r   r   generate_user_ifZpolicy.generate_user_if  su    		T 1FF>499j6V6VWE99ue44RVVNDIIz7V7VWWEr   c           	     sn   R pV\         P                  ! RV P                  \        P                  4      ,          pV P
                  '       d8   V\         P                  ! RV P                  \        P                  4      ,          pV P                  R 8w  d8   V\         P                  ! RV P                  \        P                  4      ,          pV P                   EFU  p\        V P                  V,          ^,          4      ^ 8  g   K.  V\         P                  ! RV P                  V P                  V,          ^,          P                  4      ,          pV P                  V,          ^,           F  p\        P                  P                  V4      '       g   K*  \         P"                  ! \        P                   ! V4      \         P$                  ,          4      '       g   Kq  V\         P                  ! RV P                  V P                  V,          ^,          P&                  4      ,          p EKS  	  EKX  	  WP)                  4       ,          pWP+                  4       ,          pWP-                  4       ,          pWP/                  4       ,          pWP1                  4       ,          pWP3                  4       ,          pV# r   )rh   r   r   r   Zif_heading_rulesrn   Zif_program_rulesrm   Zif_initscript_rulesrN   r3   rL   r6  ospathexistsstatS_ISSOCKST_MODEZif_stream_rulesr>  r  r  r  r7  rf   )r   r  r   r   r'  r   generate_ifZpolicy.generate_if  s   		:3N3NOO<<<RVVNDIIz7R7RSSE??b RVVNDIIz7U7UVVE""A4$$Q'*+a/		4;L;LQ;OPQ;R;[;[\\**1-a00Aww~~a((T]]2771:dll;S-T-T		4CTCTUVCWXYCZCjCj!kk 1 # 	&&((&&((''))))++**,,((**r   c                sT    V P                   V P                  ,          ^ ,          ! 4       # r   rg   r"   r   r   r   generate_default_typesZpolicy.generate_default_types  s    !!$)),Q/11r   c                s    V P                   V P                  ,          ^,          '       d*   V P                   V P                  ,          ^,          ! 4       # R# )   r2   rF  r   r   r   generate_default_rulesZpolicy.generate_default_rules  s<    dii(++%%dii0355r   c                s*   R pV P                   \        \        \        \        39   d   R p\        V P                  4      ^ 8  d   V\        P                  ! RV P                  \        P                  4      ,          pV\        P                  ! RV P                  \        P                  4      ,          pV P                   FQ  p\        P                  ! RV P                  \        P                  4      pV\        P                  ! RW44      ,          pKS  	  V# )r2   r   ZROLE)r"   r:  r;  r<  r=  r3   r   rh   r   r   r   Zte_sudo_rulesZte_newrole_rulesZte_roles_rules)r   r   r   r  r   r   r   generate_roles_rulesZpolicy.generate_roles_rules  s    99ue44E4::"		4;M;MNN		4;P;PQQ JJD&&D<O<OPCRVVFD66E ' r   c           
     s
   V P                  4       pV P                   F  p\        V P                  V,          ^,          4      ^ 8  g   K-  V P                  \
        8w  g
   VR8w  g   KK  V\        P                  ! RV P                  V P                  V,          ^,          P                  4      ,          pK  	  V P                  \        8w  d   VRV P                  ,          ,          pWP                  4       ,          pWP                  4       ,          pWP                  4       ,          pWP                  4       ,          pWP                  4       ,          pWP!                  4       ,          pWP#                  4       ,          pV P                   EFi  p\        V P                  V,          ^,          4      ^ 8  g   K.  V P                  \        8X  d   RpV P$                   F~  pV\        P                  ! RVRR
 R,           V P                  V,          ^,          P&                  4      ,          pV\        P                  ! RV P                  R	,           V4      ,          pK  	  MKV\        P                  ! RV P                  V P                  V,          ^,          P&                  4      ,          pV P                  V,          ^,           EF+  p\(        P*                  P-                  V4      '       g   K+  \.        P0                  ! \(        P.                  ! V4      \.        P2                  ,          4      '       g   Kr  V P                  \        8X  dY   V P$                   FG  pV\        P                  ! RVRR
 V P                  V,          ^,          P4                  4      ,          pKI  	  MKV\        P                  ! RV P                  V P                  V,          ^,          P4                  4      ,          p EKg  	  EKl  	  WP7                  4       ,          pWP9                  4       ,          pWP;                  4       ,          pWP=                  4       ,          pWP?                  4       ,          pWPA                  4       ,          pWPC                  4       ,          pWPE                  4       ,          pWPG                  4       ,          pWPI                  4       ,          pWPK                  4       ,          pWPM                  4       ,          pWPO                  4       ,          pWPQ                  4       ,          pWPS                  4       ,          pWPU                  4       ,          pWPW                  4       ,          pV# )rH  r   r   z@
########################################
#
# %s local policy
#
r2   ZTEMPLATETYPE_tNr  ZTEMPLATETYPE_rw_tZ_rw_tr   ),rG  rN   r3   rL   r"   ri   rh   r   r   r   r|   r  r  r   r,  r0  rI  r2  r   r1  r?  r@  rA  rB  rC  rD  Zte_stream_rulesr8  r  r   r   r   r   r   r   r   r   rJ  r   r  r  r   r   r   )r   r   r   Z	newte_tmpZdomainr   r   r   generate_teZpolicy.generate_te  s   ++-""A4$$Q'*+a/99#qDyRVVNDIIt?P?PQR?STU?V?_?_``E	 # 99 
 ii E 	++--&&((,,..((**'')),,..,,..""A4$$Q'*+a/99% "I"&"7"7!RVV,<fSbkD>PRVRcRcdeRfghRiRrRr%ss	(;TYY=PR[!\\ #8 RVVNDIIt?P?PQR?STU?V?_?_``E**1-a00Aww~~a((T]]2771:dll;S-T-T99-*.*?*? %sTM^M^_`MabcMdMtMt)u u +@ "RVVNDIItGXGXYZG[\]G^GnGn%ooE 1 #& 	((**,,..''))((**((**((****,,++--1133,,..**,,))++//11**,,))++--//7799r   c                s   R p. pV P                   P                  4        EFM  p\        P                  P	                  V4      '       d   \
        P                  ! \        P
                  ! V4      \
        P                  ,          4      '       dF   \        P                  ! RV P                  V P                   V,          ^,          P                  4      pMD\        P                  ! RV P                  V P                   V,          ^,          P                  4      p\        P                  ! RW44      pVP                  \        P                  ! RV P                   V,          ^ ,          V4      4       EKP  	  V P                  P                  4        F  p\        P                  ! RV P                  V P                  V,          ^,          P                  4      p\        P                  ! RW44      pVP                  \        P                  ! RV P                  V,          ^ ,          V4      4       K  	  V P                   \"        \$        .,           9   d!   \'        V4      ^ 8X  d   \(        P*                  # V P                   \"        \$        \,        \.        .,           9  d'   V P0                  '       g   \3        \5        R4      4      hV P0                  '       db   \        P                  ! RV P0                  \(        P6                  4      pVP                  \        P                  ! RV P                  V4      4       V P8                  R 8w  db   \        P                  ! RV P8                  \(        P:                  4      pVP                  \        P                  ! RV P                  V4      4       VP=                  4        RP?                  V4      pV# )r2   r   FILENAMEZFILETYPEz<You must enter the executable path for your confined processZ
EXECUTABLEr.   ) r   r0   r?  r@  rA  rB  rC  rD  rh   r   r   Zfc_sock_fileZfc_filer6   r   Zfc_dirr"   r   r  r3   r   Zfc_userr|   r}   rn   r4   r   Z
fc_programrm   Zfc_initscriptr+   r  )r   ZnewfcZfclistr   t1Zt2r   r   generate_fcZpolicy.generate_fcD  sP   "Aww~~a  T]]2771:dll3K%L%LVVNDIItzz!}Q7G7T7TUVVNDIItzz!}Q7G7O7OP
A*BMM"&&TZZ]1-=rBC # !A		499Q<?3I3IJB
A*BMM"&&TYYq\!_bAB "
 99	))6{a!)))99EWeW$===dlllQ]^__<<<dllJ4I4IJBMM"&&B?@??b dooz7O7OPBMM"&&B?@		&!r   c                s   R pV P                   \        \        \        \        \
        39  d   V# R pV P                   F  pVRV,          ,          pK  	  VR 8w  d
   VR,          p\        P                  ! RV P                  \        P                  4      pV\        P                  ! RW$4      ,          pV P                   \
        8X  g   V P                   \        8X  db   V P                   FQ  p\        P                  ! RV P                  \        P                  4      pV\        P                  ! RWT4      ,          pKS  	  V P                   \        8X  d:   V\        P                  ! RV P                  \        P                  4      ,          pV# V\        P                  ! RV P                  \        P                  4      ,          pV# )r2   z %s_rz	 system_rr   ZROLESr*   )r"   r:  r;  r<  r=  r  r   rh   r   r   r   r,   r   Zadmin_transZmin_login_user_default_contextZx_login_user_default_context)r   newshr   r  r   r  r   r   generate_user_shZpolicy.generate_user_shg  s:   99UE5%??LJJDWt^#E B;[ Eff^TYY=,,99e!3**ff^TYY8J8JK// + 99RVVNDIIv7\7\]]E  RVVNDIIv7Z7Z[[Er   c                s.   \         P                  ! R V P                  \        P                  4      p\         P                  ! RV P
                  V4      pV P                  \        8X  d+   \         P                  ! RRV P                  ,          V4      pMY\         P                  ! RV P                  V4      pV\         P                  ! RV P
                  \        P                  4      ,          pV P                  '       d8   V\         P                  ! RV P                  \        P                  4      ,          pV P                  R8w  d8   V\         P                  ! RV P                  \        P                  4      ,          pV P                  P                  4        F0  pV\         P                  ! RV\        P                  4      ,          pK2  	  V P                  P                  4        F0  pV\         P                  ! RV\        P                  4      ,          pK2  	  V P                  \         ,          V P"                  \         ,          ,            Fo  pV P%                  VR4      e   K  \         P                  ! RRV,          \        P&                  4      pV\         P                  ! R V P
                  V4      ,          pKq  	  V P(                  \         ,           Fo  pV P%                  VR	4      e   K  \         P                  ! RRV,          \        P*                  4      pV\         P                  ! R V P
                  V4      ,          pKq  	  W P-                  4       ,          pV\         P                  ! RV P                  \        P.                  4      ,          pV# )
r   Z
DOMAINTYPEZTEMPLATEFILEz%srL  r2   r   ZPORTNUMz%dr   )rh   r   rj   r   Zcompiler   r"   r|   Zmanpagern   Z
restoreconrm   r   r0   r   ro   r   rq   r   Z	tcp_portsrp   Z	udp_portsrP  r   )r   r8   rO  r   rM  r   r   generate_shZpolicy.generate_sh  sP   vvndnnfnnEvvlDIIt499FF>4$..+@$GEFF>4>>4@ERVVL$))V^^DDE<<<RVVJf6G6GHHE??b RVVJ9J9JKKE"ARVVJ6+<+<==E # !ARVVJ6+<+<==E " U#dll5&999A~~a'/VVItax1A1AB		2>> :
 U##A~~a'/VVItax1A1AB		2>> $
 	&&((

CCr   c                s   R p\        R4      pVf   RpM	V^,          pV\        P                  ,          pV P                  \        9   EdE   V\        P
                  ,          pV P                  '       d8   V\        P                  ! RV P                  \        P                  4      ,          pV P                  R 8w  d8   V\        P                  ! RV P                  \        P                  4      ,          pV P                  P                  4        F0  pV\        P                  ! RV\        P                  4      ,          pK2  	  V P                  P                  4        F0  pV\        P                  ! RV\        P                  4      ,          pK2  	  V\        P                  ! RV\        P                  4      ,          p\        P                  ! RV P                  V4      p\        P                  ! RV P                   V4      p\#        V P$                  4      ^ 8  d*   VRRP'                  V P$                  4      ,          ,          pV\        P                  ! RV P                  \        P(                  4      ,          p\        P                  ! RV P                   V4      p\        P                  ! R	\*        P,                  ! R
4      V4      pV P                  \        9  d   \        P                  ! RR V4      pV P                  \.        8X  d*   \        P                  ! RV P                   ,          R V4      pV P                  \0        \2        \4        \6        \8        39  d*   \        P                  ! RV P                   ,          R V4      pV# )r2   zselinux-policyz0.0.0rL  ZVERSIONZ
MODULENAMEZ
DOMAINNAMEzRequires(post): %s
z, Z
TODAYSDATEz%a %b %e %Yz%relabel_filesz.*%s_selinux.8.*z.*%s_u.*)r!   r   Zheader_comment_sectionr"   r   Zdefine_relabel_files_beginrn   rh   r   Zdefine_relabel_files_endrm   r   r0   r   Zbase_sectionrj   r   r3   rH   r  Zmid_sectiontimeZstrftimer|   r:  r;  r<  r=  r  )r   ZnewspecZselinux_policynvrZselinux_policyverr   r   r   generate_specZpolicy.generate_spec  s\   ,-=>$ ' 1! 44...99$t666G|||266*dllD<Y<YZZ"$266*doot?\?\]]ZZ__&266*a1N1NOO 'YY^^%266*a1N1NOO & 	266)%68I8IJJ&&t~~w?&&tyy':tyy>A-		$))0DDDG266,8H8HII&&tyy':&&t}}]'CWM99L(ff-r7;G 99ff/$));RIG99UE5%??ffZ$))3RAGr   c                    V: R V P                   : R2p\        VR4      pVP                  V P                  4       4       VP	                  4        V# )/z_selinux.specw)rj   openwriterS  close)r   out_dirZspecfilefd   &&  r   
write_specZpolicy.write_spec  s?    +2DNNC(C 
##%&

r   c                rT  )rU  z.terV  )rj   rW  rX  rK  rY  )r   rZ  Ztefiler[  r\  r   write_teZpolicy.write_te  ?    &7&#
!!#$

r   c                s    V: R V P                   : R2p\        VR4      pVP                  V P                  4       4       VP	                  4        \
        P                  ! VR4       V# )rU  z.shrV  i  )rj   rW  rX  rQ  rY  r?  Zchmod)r   rZ  Zshfiler[  r\  r   write_shZpolicy.write_sh  sM    &7&#
!!#$


r   c                rT  )rU  z.ifrV  )rj   rW  rX  rE  rY  )r   rZ  Ziffiler[  r\  r   write_ifZpolicy.write_if  r_  r   c                rT  )rU  z.fcrV  )rj   rW  rX  rN  rY  )r   rZ  Zfcfiler[  r\  r   write_fcZpolicy.write_fc  r_  r   c           	     s   ^ RI pVP                  4       ;_uu_ 4       pVP                  P                  P	                  R4       VP                  4        VP                  RR7       VP                  P                  4       pVP                  V P                  R7      pVP                  4        EF  pV P                  P                  VP                  4       VP                   F  pV P                    Fn  pVR8X  d   K  VP#                  V4      '       g   K%  \$        P&                  P)                  V4      '       d   V P+                  V4       K]  V P-                  V4       Kp  	  K  	  VP/                  4       pVP                  VP0                  R7      pVP                  4        F  p	V	P                   F  pV P                    Fn  pVR8X  d   K  VP#                  V4      '       g   K%  \$        P&                  P)                  V4      '       d   V P+                  V4       K]  V P-                  V4       Kp  	  K  	  K  	  EK  	  RRR4       R#   + '       g   i     R# ; i)r    NrU  T)Zload_system_repo)r   r>   )Zprovides)dnfZBaseZconfZsubstitutionsZupdate_from_etcZread_all_reposZ	fill_sackZsackqueryZfilterrn   ZrunrH   r6   r   r   rL   
startswithr?  r@  isfiler  r  Z	availableZsource_name)
r   rc  Zbaserd  ZpqZpkgZfnamer/  ZsqZbpkgs
   &         r   Z__extract_rpmsZpolicy.__extract_rpms  s   XXZZ4II##33C8!NNDN1IIOO%E4<<0Bvvx		  * YYE!..;$ ++A..!ww~~e44 $e 4 $U 3 / ' __&YYY8FFHD!%!%!2!2A F{ ($//22#%77>>%#8#8$(MM%$8$(LL$7 "3 ", %   ZZZs%   C2I$I9B&I$$I	5II	c                sR    V P                  4        \        P                  P	                  R V P
                  ,          4      '       d#   V P                  R V P
                  ,          4       \        P                  P                  RV P
                  ,          4      '       d#   V P                  RV P
                  ,          4       \        P                  P                  RV P
                  ,          4      '       d#   V P                  RV P
                  ,          4       \        P                  P	                  RV P
                  ,          4      '       d#   V P                  RV P
                  ,          4       \        P                  P                  RV P
                  ,          4      '       d#   V P                  RV P
                  ,          4       \        P                  P	                  RV P
                  ,          4      '       d#   V P                  RV P
                  ,          4       . pV P                  P                  4        EF?  p. p V P                  V,          ^,          ^ ,          R,           pT P                  T,          ^,           F-  pTP                  T4      '       d   TP                  T4       K-  K/  	  \        T4      ^ 8w  g   K  T F]  pY@P                   P                  4       9   d   T P                   T K0  Y@P"                  P                  4       9   d   T P"                  T K]  K_  	  \%        \'        T P                  T,          ^,          4      \'        T4      ,
          4      T P                  T,          ^&   EKB  	  R#   \         d     ELi ; i  \         d     EKg  i ; i)	z/var/run/%s.pidz/var/run/%sz/var/log/%sz/var/log/%s.logz/var/lib/%sz/etc/rc.d/init.d/%sz/etc/rc\.d/init\.d/%srU  N)_policy__extract_rpmsImportErrorr?  r@  rf  r   r  Zisdirr  r   rL   r0   Z
IndexErrorre  r6   r3   r   r   ZlistZset)r   Ztemp_basepathr'   Z	temp_dirsr   r   r   gen_writeableZpolicy.gen_writeable  s   	! 77>>+dii788MM+dii7877==233LL2377==233LL2377>>+dii788MM+dii7877==233LL2377>>/$));<<  !9DII!EF ""'')AI $ 1 1! 4Q 7 :S @ &&q)!,,<<..$$Q'	 - 9~""AIINN,, IIaLjjoo// JJqM  # +/s43D3DQ3G3J/KcR[n/\*]!!!$Q'- *1  		8  s#   N (NNNN&%N&c                sL   V P                   \        9  d   R # \        P                  P	                  V P
                  4      '       g3   \        P                  P                  RV P
                  ,          4       R # \        P                  ! RV P
                  ,          4      pVP                  4       P                  4        FR  pV P                   F?  pVP                  V4      '       g   K  \        RV P                  V,          ,          4       KA  	  KT  	  VP                  4        R # )Nzl
***************************************
Warning %s does not exist
***************************************

znm -D %s | grep Uzself.%s)r"   r   r?  r@  rA  rn   sysZstderrrX  ZpopenZreadr   rK   re  ZexecrY  )r   r[  Zsr/  r'  r   gen_symbolsZpolicy.gen_symbolsI  s    99L(ww~~dll++JJ 
 ll  XX)DLL89"A\\<<??T\\!_45 " # 	
r   c                s   \        R 4      pW P                  V4      : R\        R4      : R2,          pW P                  V4      : R\        R4      : R2,          pW P                  V4      : R\        R4      : R2,          pV P                  \
        8w  dQ   W P                  V4      : R\        R4      : R2,          pW P                  V4      : R\        R4      : R2,          pV# )zCreated the following files:
z # zType Enforcement filer.   zInterface filezFile Contexts filez	Spec filezSetup Script)r   r^  ra  rb  r"   r}   r]  r`  )r   rZ  Zoutr   r   generateZpolicy.generate[  s    01mmG4a8O6PQQmmG4a8H6IJJmmG4a8L6MNN99//'":AkNKKC--"8!N:KLLC
r   ).rL   rM   rN   rg   r   rI   r   rk   r   r   rj   r   r   r   ro   rp   rm   rx   r   r   r   rq   rr   r7   rl   rn   r   rH   rK   r   r   r"   rJ   r{   rz   r~   r   rw   r   r   ry   rs   rv   r   rt   ru   N)r   )zZ__name__Z
__module__Z__qualname__Z__firstlineno__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  rU   rW   rY   rS   rQ   r]   ra   rb   r[   r_   rc   re   rf   rO   r,  r0  r2  r3  r4  rP   r7  r^   r\   r`   rd   rZ   rT   rR   r8  rV   rX   r>  rE  rG  rI  rJ  rK  rN  rP  rQ  rS  r]  r^  r`  ra  rb  rg  ri  rk  r?  Zgetcwdrl  Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r=   r=      sp    BK+151,-7,-70%GG@@ &%&'%.$*&.%$L'1+*216p>,OSNLLOKK$MJ(NJ
KMNLL

02

<|!F2!F(T"8H1^f$  "yy{  r   r=   )i   )Gr?  rj  rB  rh   r%   r   r   r   rR  Z	templatesr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Zsepolgen.interfacesZ
interfacesZsepolgen.defaultsZdefaultsZPROGNAMEZgettextZkwargsZversion_infoZtranslationr*  r   ZbuiltinsZstrZ__dict__rh  Z__builtin__r   r   r!   r)   r-   r   r   r   r   ZADMIN_TRANSITION_INTERFACEZUSER_TRANSITION_INTERFACEr   r   ZINETDri   r  r*   r|   r:  r;  r=  r<  r  r}   r/   r1   r   r   r<   r=   r+  r   r   <module>rm     sn  , 
 
  	  E E  !                  ( $
 ,F
$ yH 	#1	#	# "	#A 	
		A/ 
 
	& $ 	
	
				



*+&'-./0Y< $%)*5667,-235689  eT3/	ueU+c:_ _M,,!$# ,$+S!,s+   AF0 0G*3GG'"G*&G''G*