dbfdg 3 ."d@sxddlZddlZddlZddlZddlZddlZdZddZddZddZ dd d Z d d Z d dZ e dkrte dS)Nzreload-cmds.shcOst|dtji|dS)Nfile)printsysstderr)argskwargsr;./usr/share/crypto-policies/python/build-crypto-policies.pyeprintsr cCstjdd}|jdddd|jdddd|jd td d d |jd ddd|jdddd|jddd|jddd|jS)zParse the command lineF)Z allow_abbrevz--flat store_truez1put all the generated files in a single directory)actionhelpz--testz7compare the generated config file with the existing onez--policyZPOLICYz"generate the specified policy only)typemetavarr z --reloadcmdszDalso save reload cmds into reload-cmds.sh script in output directoryz--strictzfail on warnings policydirz5a directory with base policy definition files (*.pol))r outputdirz.a target directory with generated config files)argparseArgumentParser add_argumentstr parse_args)parserrrr rs   rcCs<|jr tjj|jdj||}n`tjj|j|}tjj|snytj|Wn"tk rlt dj|dSXtjj||d}|j ry@t |dd}|j }WdQRX||krt dj||dSdSt k rYn$tk rt d j|dSXtd j||t |d d}|j|WdQRXtdS) Nz {}-{}.txtz%Cannot create directory for policy {}Fz.txtr)modez9Config for {} for policy {} differs from the existing oneTzError reading generated file {}z"Saving config for {} for policy {}w)ZflatospathjoinrformatisdirmkdirOSErrorr ZtestopenreadFileNotFoundErrorrwrite)cmdline policy_nameZ config_nameconfigrdirpathfZ old_configrrr save_config-s8 r+c Cs(d}|dkrg}ytj|f||d|ji}Wn0tk r^}ztdt|dSd}~XnXddttD}x|D]}tj|}|} | j |j | j } |dks| j | ry(dj |f|} t|| | j| sd }Wn0tk r td | jtd d }YnXqxtd | jd}qxW|S)NrrzError: cSsg|]}d|kr|qS) Generatorr).0grrr \sz build_policy..ZEMPTY:zError saving config for zKeeping original configurationzError testing config for )cryptopoliciesZUnscopedCryptoPolicyr ValueErrorr rdirpolicygenerators__dict__Zgenerate_configZscopedZSCOPESZ test_configrr+Z CONFIG_NAMEr!) r&r'subpolicy_nameserrZcpe generatorsr/clsgenr(namerrr build_policyOs6   rAcCsd}ddttD}tjj|jt}y@t|dd*}x"|D]}tj|}|j |j q.r)rzError saving reload cmds) r7r8rrrrRELOAD_CMD_NAMEr"r9r%Z RELOAD_CMDr!r )r&r;r=rr*r/r>rrr save_reload_cmdsrs   rDc Cst}d}|jrtjd|jrHtd|jjjd^}}t|||}nft j |j T}xL|D]D}|j j d r\|jr\t jj|j \}}|dkr\t||}|r\Pq\WWdQRX| r|jrt|}tj|dS)z!The actual command implementationrerrorNr1.z.pol)rstrictwarningsfilterwarningsZpolicyfilteruppersplitrArscandirrr@ startswithis_filersplitextZ reloadcmdsrDrexit)r&r;r'r:ZsdiZextrrr mains$    rS__main__)N)rrrrHr5r8rCr rr+rArDrS__name__rrrr s" #