You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.7 KiB
45 lines
1.7 KiB
import re
|
|
|
|
SPAMC_CONFIG_FILE = '/etc/mail/spamassassin/spamc.conf'
|
|
SPAMASSASSIN_SERVICE_OVERRIDE = '/etc/systemd/system/spamassassin.service'
|
|
SYSCONFIG_SPAMASSASSIN = '/etc/sysconfig/spamassassin'
|
|
SYSCONFIG_VARIABLE = 'SPAMDOPTIONS'
|
|
SPAMD_SHORTOPTS_NOARG = "ch46LlxPQqVv"
|
|
""" All short options in spamd that do not accept an argument, excluding -d. """
|
|
|
|
|
|
def parse_sysconfig_spamassassin(content):
|
|
"""
|
|
Splits up a spamassassin sysconfig file into three parts and returns those parts:
|
|
1. Beginning of the file up to the SPAMDOPTIONS assignment
|
|
2. The assignment to the SPAMDOPTIONS variable (this is the assignment
|
|
that takes effect, i.e. the last assignment to the variable)
|
|
3. End of the file after the SPAMDOPTIONS assignment
|
|
"""
|
|
line_continues = False
|
|
is_assignment = False
|
|
assignment_start = None
|
|
assignment_end = None
|
|
lines = content.split('\n')
|
|
for ix, line in enumerate(lines):
|
|
is_assignment = ((is_assignment and line_continues) or
|
|
(not (not is_assignment and line_continues) and
|
|
re.match(r'\s*' + SYSCONFIG_VARIABLE + '=', line)))
|
|
if is_assignment:
|
|
if line_continues:
|
|
assignment_end += 1
|
|
else:
|
|
assignment_start = ix
|
|
assignment_end = ix + 1
|
|
line_continues = line.endswith('\\')
|
|
|
|
if assignment_start is None:
|
|
return content, '', ''
|
|
assignment = ''
|
|
for line in lines[assignment_start:assignment_end - 1]:
|
|
assignment += line[:-1]
|
|
assignment += lines[assignment_end - 1]
|
|
pre_assignment = '\n'.join(lines[:assignment_start])
|
|
post_assignment = '\n'.join(lines[assignment_end:])
|
|
return pre_assignment, assignment, post_assignment
|