
    l
j                         d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ  ej                   d       G d d             Zy)	    N)Optional)LandlockError)PR_SET_NO_NEW_PRIVSFSAccessPathBeneathAttrRulesetAttrget_add_ruleget_create_ruleset	get_prctlget_restrict_selfT)frozenc                       e Zd ZU  ej                  ej                        Zeed<    ej                  d      Z	e
ed<   d Zddd	ee   fd
Zd Zy)Ruleset)default_factoryrestrict_rulesF)init_fdc                     t        | j                        } t               t        j                  |      t        j
                  |      d      }t        j                  | d|       y )Nr   r   )r   r   r
   ctypesbyrefsizeofobject__setattr__)selfruleset_attrfds      -/usr/libexec/warpinator/landlock/porcelain.py__post_init__zRuleset.__post_init__   sQ    "4#6#67!!LL&MM,'

 	4+    N)rulesr    c                P   || j                   }|D ]y  }t        j                  |t        j                        }	 t	        ||      } t               | j                  dt        j                  |      d       t        j                  |       { y # t        j                  |       w xY w)N)flags   r   )
r   osopenO_PATHr   r	   r   r   r   close)r   r    pathspathr   	rule_attrs         r   allowzRuleset.allow!   s    =''E 	DRYY/B+E26	txxFLL,CQG	 s   <BB%c                     	 t               } |t        dddd        t	               | j
                  d       y # t        $ r}t        d      |d }~ww xY w)NzCannot find prctl libc functionr#   r   )r   	Exceptionr   r   r   r   )r   prctles      r   applyzRuleset.apply-   sZ    	JKE 	!1aA. 	DHHa(  	J ABI	Js   
8 	AAA)__name__
__module____qualname__dataclassesfieldr   allr   __annotations__r   intr   r   r+   r0    r   r   r   r      sT    0{00NNHN {  e,C,, 9= 
8H#5 
	)r   r   )r   r4   r$   typingr   landlockr   landlock.plumbingr   r   r   r   r	   r
   r   r   	dataclassr   r9   r   r   <module>r>      sI      	  "	 	 	 d#") ") $")r   