OLD | NEW |
| (Empty) |
1 from twisted.conch.ssh import keys, factory, common | |
2 from twisted.python import log | |
3 import primes | |
4 import os | |
5 | |
6 class OpenSSHFactory(factory.SSHFactory): | |
7 dataRoot = '/usr/local/etc' | |
8 moduliRoot = '/usr/local/etc' # for openbsd which puts moduli in a different | |
9 # directory from keys | |
10 def getPublicKeys(self): | |
11 ks = {} | |
12 for file in os.listdir(self.dataRoot): | |
13 if file[:9] == 'ssh_host_' and file[-8:]=='_key.pub': | |
14 try: | |
15 k = keys.getPublicKeyString(self.dataRoot+'/'+file) | |
16 t = common.getNS(k)[0] | |
17 ks[t] = k | |
18 except Exception, e: | |
19 log.msg('bad public key file %s: %s' % (file,e)) | |
20 return ks | |
21 def getPrivateKeys(self): | |
22 ks = {} | |
23 euid,egid = os.geteuid(), os.getegid() | |
24 os.setegid(0) # gain priviledges | |
25 os.seteuid(0) | |
26 for file in os.listdir(self.dataRoot): | |
27 if file[:9] == 'ssh_host_' and file[-4:]=='_key': | |
28 try: | |
29 k = keys.getPrivateKeyObject(self.dataRoot+'/'+file) | |
30 t = keys.objectType(k) | |
31 ks[t] = k | |
32 except Exception, e: | |
33 log.msg('bad private key file %s: %s' % (file, e)) | |
34 os.setegid(egid) # drop them just as quickily | |
35 os.seteuid(euid) | |
36 return ks | |
37 | |
38 def getPrimes(self): | |
39 try: | |
40 return primes.parseModuliFile(self.moduliRoot+'/moduli') | |
41 except IOError: | |
42 return None | |
43 | |
OLD | NEW |