o c@sNddlZddlZddlZddlmZddlmZGdddeZd dd ZdS) N)glob)getProcessOutputAndValuec@seZdZdZdS)InvalidGPGSignaturez:Raised when the gpg signature for a given file is invalid.N)__name__ __module__ __qualname____doc__r r 3/usr/lib/python3/dist-packages/landscape/lib/gpg.pyr sr /usr/bin/gpg/etc/aptc sfdd}fdd}tttjddttd|td|D}d d d d f|d ||f}t|d}| || ||S)aVerify the GPG signature of a file. @param filename: Path to the file to verify the signature against. @param signature: Path to signature to use. @param gpg: Optionally, path to the GPG binary to use. @param apt_dir: Optionally, path to apt trusted keyring. @return: a C{Deferred} resulting in C{True} if the signature is valid, C{False} otherwise. cst|S)N)shutilrmtree)ignored)gpg_homer r remove_gpg_homes z#gpg_verify..remove_gpg_homecs@|\}}}|d|d}}|dkrtd|||fdS)Nasciirz)%s failed (out='%s', err='%s', code='%d'))decoder)argsouterrcode)gpgr r check_gpg_exit_codes  z'gpg_verify..check_gpg_exit_codecSsg|]}d|fqS)z --keyringr ).0keyringr r r 'szgpg_verify..z{}/trusted.gpgz{}/trusted.gpg.d/*.gpgz --no-optionsz --homedirz--no-default-keyringz--ignore-time-conflictz--verify)r) tempfilemkdtemptuple itertoolschainsortedrformatraddBoth addCallback) filename signaturerapt_dirrrkeyringsrresultr )rrr gpg_verifys*        r+)r r ) r r rrtwisted.internet.utilsr Exceptionrr+r r r r s