On Mon, Feb 08, 2021 at 03:47:27PM -0500, Alex wrote:
> I still have to consider much of what you've written before I can
> respond, but I wanted to be sure my design was clear here - it's not
> so much that end-users are modifying the config in the same way as
> webmin does, like making changes directly to main.cf, but type in the
> name of a new domain to be added to relay_domains, for example. The
> script then then modifies main.cf to apply that change.
If the goal is to just modify *data* elements in main.cf, and not
structural settings, then in the vast majority of cases specific
data elements can be set via separate files or database tables.
# File with one domain per-line
#
relay_domains = ${config_directory}/relay_domains
# An indexed file with ignored non-empty RHS
#
relay_domains = cdb:${config_directory}/relay_domains
# An LDAP table, with data managed centrally.
#
relay_domains = ldap:${config_directory}/relay_domains.cf
...
As much as possible, avoid pasting user-provided strings directly
into main.cf and master.cf.
For directly editing the files, one might employ a git repository
to which only authorised administrators can push commits, and where
to keep routine changes simple there's separation between a template
for expert users and parameter values applied to the template that
are ideally less error-prone in the hands of less-expert users.
--
Viktor.