Refactor and update loading keys (file and table) to both are now loaded

This commit is contained in:
Scott Kitterman
2019-10-20 02:43:06 -04:00
parent 1097894eac
commit 5588748795
+23 -17
View File
@@ -170,13 +170,9 @@ def own_socketfile(milterconfig, sockname=None):
os.chown(sockname[offset:], user, group) os.chown(sockname[offset:], user, group)
def read_keyfile(milterconfig, keytype): def read_keyfile(keyfile):
"""Read private key from file.""" """Read private key from file."""
import syslog import syslog
if keytype == "RSA":
keyfile = milterconfig.get('KeyFile')
if keytype == "Ed25519":
keyfile = milterconfig.get('KeyFileEd25519')
try: try:
f = open(keyfile, 'r') f = open(keyfile, 'r')
keylist = f.readlines() keylist = f.readlines()
@@ -191,20 +187,26 @@ def read_keyfile(milterconfig, keytype):
key += line key += line
return key return key
def read_keytable(milterconfig, tabletype): def read_keytable(tablefile):
"""Read keytables into in memory configuration data so all keys are read """Read keytables into in memory configuration data so all keys are read
before priviledges are dropped.""" before priviledges are dropped.
KeyTable contains a filename of the table.
File contains comma separated rows of:
domain, selector, key file location
When loaded, KeyTableData is a dict:
{domain: [selector, key]}"""
import syslog import syslog
if tabletype == "RSA": if tabletype == "RSA":
tablefile = milterconfig.get('KeyTable') tablefile = milterconfig.get('KeyTable')
if tabletype == "Ed25519": if tabletype == "Ed25519":
tablefile = milterconfig.get('KeyTableEd25519') tablefile = milterconfig.get('KeyTableEd25519')
if milterconfig.get(tablefile): if milterconfig.get(tablefile):
keytabledata = [] keytabledata = {}
try: try:
f = open(milterconfig.get(tablefile)) f = open(milterconfig.get(tablefile))
for row in f: for row in f:
keytabledata.append(row) key = read_keyfile(row[2])
keytabledata.update({row[0]:[row[1], key]})
f.close() f.close()
except IOError as e: except IOError as e:
if milterconfig.get('Syslog'): if milterconfig.get('Syslog'):
@@ -216,12 +218,16 @@ def read_keytable(milterconfig, tabletype):
def get_keys(milterconfig): def get_keys(milterconfig):
"""Read keys (table or file) into memory before dropping priviledges""" """Read keys (table or file) into memory before dropping priviledges"""
if milterconfig.get('KeyFile'): milterconfig['privateRSA'] = False
milterconfig['privateRSA'] = read_keyfile(milterconfig, 'RSA') milterconfig['privateRSATable'] = False
else: milterconfig['privateEd25519'] = False
milterconfig['privateRSA'] = False milterconfig['privateEd25519Table'] = False
if milterconfig.get('KeyFileEd25519'): if milterconfig.get('KeyTable'):
milterconfig['privateEd25519'] = read_keyfile(milterconfig, 'Ed25519') milterconfig['privateRSATable'] = read_keytable(milterconfig.get('KeyTable'))
else: elif milterconfig.get('KeyFile'):
milterconfig['privateEd25519'] = False milterconfig['privateRSA'] = read_keyfile(milterconfig.get('KeyFile'))
if milterconfig.get('KeyTableEd25519'):
milterconfig['privateEd25519Table'] = read_keytable(milterconfig.get('KeyTableEd25519'))
elif milterconfig.get('KeyFileEd25519'):
milterconfig['privateEd25519'] = read_keyfile(milterconfig.get('KeyFileEd25519'))
return milterconfig return milterconfig