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

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