Ϫf! dZddlZddlZddlmZmZmZmZddlm Z ddl m Z m Z m Z ddlmZGdde j Zy) z^ Factory for reading openssh configuration files: public keys, private keys, and moduli file. N)DictListOptionalTuple)primes)commonfactorykeys)runAsEffectiveUsercLeZdZdZdZdZdZdeee e e e e fffdZ y)OpenSSHFactoryz/usr/local/etcci}tj|jD]}|dddk(s |dddk(s tjj tj j|j|}tj|jd}|||<|S#t$r(}|jjd||Yd}~d}~wwxYw) z0 Return the server public keys. N ssh_host_iz_key.pubr'bad public key file {filename}: {error}filenameerror)oslistdirdataRootr KeyfromFilepathjoinrgetNSblob Exception_logr)selfksrktes F/usr/lib/python3/dist-packages/twisted/conch/openssh_compat/factory.py getPublicKeyszOpenSSHFactory.getPublicKeyss 4==1 H|{*x} /J ))"'',,t}}h*OPA QVVX.q1ABqE  !IIOOA!)$sA2B.. C7CCcli}tj|jD]q}|dddk(s |dddk(stjj |j|} t j j|}|||j<s|S#t$rb}|jtjk(r:tddt j j|}|||j<nYd}~d}~wt$r)}|jjd||Yd}~ d}~wwxYw) z1 Return the server private keys. Nrr_keyrrr)rrrrrr rrsshTypeOSErrorerrnoEACCESr rrr)r privateKeysrfullPathkeyr$s r%getPrivateKeyszOpenSSHFactory.getPrivateKeys+s   4==1 5H|{*x}/F77<< x@5((++H5C25K .' 5(ww%,,.0Atxx7H7H(S58 CKKM23!IIOOA!)$s%"B D3!AC>> D3 D..D3returncf tj|jdzS#t$rYywxYw)Nz/moduli)rparseModuliFile moduliRootr+)r s r% getPrimeszOpenSSHFactory.getPrimesFs3 ))$//I*EF F  s !$ 00N) __name__ __module__ __qualname__rr5r&r1rrintrrr6r%r r s>H!J&68Dd5c?.C)C$DEr<r )__doc__r,rtypingrrrrtwisted.conch.openssh_compatrtwisted.conch.sshrr r twisted.python.utilr SSHFactoryr r;r<r%rCs6   ../3327W''7r<