From 614fd92a208fde8c0229860eebd05ea6d72e806f Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 1 Nov 2022 18:41:27 -0500 Subject: [PATCH] Use `shlex.join()` when adding postfix alias a bit convoluted perhaps, but still better... --- rattail_fabric2/postfix.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rattail_fabric2/postfix.py b/rattail_fabric2/postfix.py index cdfaede..9b768e0 100644 --- a/rattail_fabric2/postfix.py +++ b/rattail_fabric2/postfix.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2019 Lance Edgar +# Copyright © 2010-2022 Lance Edgar # # This file is part of Rattail. # @@ -24,6 +24,8 @@ Fabric library for Postfix """ +import shlex + from rattail_fabric2 import apt @@ -42,10 +44,17 @@ def alias(c, name, alias_to, path='/etc/aliases'): # does alias entry already exist? if c.run("grep '^{}:' /etc/aliases".format(name), warn=True).failed: # append new entry - c.sudo("""bash -c 'echo "{}: {}" >> /etc/aliases'""".format(name, alias_to)) + entry = '{}: {}'.format(name, alias_to) + echo = shlex.join(['echo', entry]) + cmd = '{} >> /etc/aliases'.format(echo) + cmd = shlex.join(['bash', '-c', cmd]) + c.sudo(cmd) else: # update existing entry - c.sudo('sed -i.bak -e "s/^{}: .*/{}: {}/" /etc/aliases'.format(name, name, alias_to)) + alias_to = alias_to.replace('|', '\\|') + sub = "s|^{}: .*|{}: {}|".format(name, name, alias_to) + cmd = shlex.join(['sed', '-i.bak', '-E', sub, '/etc/aliases']) + c.sudo(cmd) c.sudo('newaliases')