
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
."d                 @   sx   d dl Z d dlZd dlZd dlZd dlZd dlZdZdd Zdd Zdd Z	dd	d
Z
dd Zdd Zedkrte  dS )    Nzreload-cmds.shc              O   s   t | dtji| d S )Nfile)printsysstderr)argskwargs r   ;./usr/share/crypto-policies/python/build-crypto-policies.pyeprint   s    r
   c              C   s   t jdd} | jdddd | jdddd | jd	td
dd | jdddd | jdddd | jddd | jddd | j S )zParse the command lineF)Zallow_abbrevz--flat
store_truez1put all the generated files in a single directory)actionhelpz--testz7compare the generated config file with the existing onez--policyZPOLICYz"generate the specified policy only)typemetavarr   z--reloadcmdszDalso save reload cmds into reload-cmds.sh script in output directoryz--strictzfail on warnings	policydirz5a directory with base policy definition files (*.pol))r   	outputdirz.a target directory with generated config files)argparseArgumentParseradd_argumentstr
parse_args)parserr   r   r	   r      s     
r   c             C   s<  | j r tjj| jdj||}n`tjj| j|}tjj|snytj| W n" tk
rl   t	dj| dS X tjj||d }| j
r y@t|dd}|j }W d Q R X ||krt	dj|| dS dS  tk
r   Y n$ tk
 r   t	d	j| dS X td
j|| t|dd}|j| W d Q R X t  dS )Nz	{}-{}.txtz%Cannot create directory for policy {}Fz.txtr)modez9Config for {} for policy {} differs from the existing oneTzError reading generated file {}z"Saving config for {} for policy {}w)Zflatospathjoinr   formatisdirmkdirOSErrorr
   ZtestopenreadFileNotFoundErrorr   write)cmdlinepolicy_nameZconfig_nameconfigr   dirpathfZ
old_configr   r   r	   save_config-   s8    r+   c             C   s(  d}|d krg }yt j|f||d| ji}W n0 tk
r^ } ztdt|  dS d }~X nX dd ttD }x|D ]}tj| }| }	|	j	|j
|	j}
|dks|	j|
ry(dj|f|}t| ||	j|
sd	}W n0 tk
r
   td
|	j  td d}Y nX qxtd|	j  d}qxW |S )Nr   r   zError:    c             S   s   g | ]}d |kr|qS )	Generatorr   ).0gr   r   r	   
<listcomp>\   s    z build_policy.<locals>.<listcomp>ZEMPTY:   zError saving config for zKeeping original configuration   zError testing config for    )cryptopoliciesZUnscopedCryptoPolicyr   
ValueErrorr
   r   dirpolicygenerators__dict__Zgenerate_configZscopedZSCOPESZtest_configr   r+   ZCONFIG_NAMEr!   )r&   r'   subpolicy_nameserrZcpe
generatorsr/   clsgenr(   namer   r   r	   build_policyO   s6    

rA   c             C   s   d}dd t tD }tjj| jt}y@t|dd*}x"|D ]}tj| }|j	|j
 q<W W d Q R X W n  tk
r   td d}Y nX |S )Nr   c             S   s   g | ]}d |kr|qS )r-   r   )r.   r/   r   r   r	   r0   u   s    z$save_reload_cmds.<locals>.<listcomp>r   )r   zError saving reload cmds   )r7   r8   r   r   r   r   RELOAD_CMD_NAMEr"   r9   r%   Z
RELOAD_CMDr!   r
   )r&   r;   r=   r   r*   r/   r>   r   r   r	   save_reload_cmdsr   s    


rD   c              C   s   t  } d}| jrtjd | jrHtd| jj jd^}}t| ||}nft	j
| jT}xL|D ]D}|jjd r\|j r\t	jj|j\}}|dkr\t| |}|r\P q\W W dQ R X | r| jrt| }tj| dS )z!The actual command implementationr   errorNr1   .z.pol)r   strictwarningsfilterwarningsZpolicyfilteruppersplitrA   r   scandirr   r@   
startswithis_filer   splitextZ
reloadcmdsrD   r   exit)r&   r;   r'   r:   ZsdiZextr   r   r	   main   s$    


rS   __main__)N)r   r   r   rH   r5   r8   rC   r
   r   r+   rA   rD   rS   __name__r   r   r   r	   <module>   s   "
#