Thomas Gleixner 05ac7bb6ac remail/pipe: Add command line option to handle config updates
When using pipe mode configuration updates are not handled until the next
mail is sent to the list. That means that e.g. welcome mails are delayed.

Add a command line option to allow the invocation of remail_pipe just to
deal with configuration updates without trying to process mail from stdin.

The update handling is serialized against concurrent incoming mail via the
folder lock, so no extra serialization is required. Whichever comes first
handles it.

Reported-by: Konstantin Ryabitsev <>
Signed-off-by: Thomas Gleixner <>
Tested-by: Konstantin Ryabitsev <>
2020-09-19 01:43:07 +02:00

61 lines
1.9 KiB
Executable file

#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0-only
# Copyright Thomas Gleixner <>
from remail.utils import logger
from remail.version import __version__
from remail.remaild import remaild
from argparse import ArgumentParser
import sys
import os
def exit_daemon(logger, res):
if __name__ == '__main__':
parser = ArgumentParser(description='remail pipe')
parser.add_argument('config', help='Config file')
parser.add_argument('--cfgupdate', '-c', dest='cfgupdate',
help='Handle config file update. No mail processing.')
parser.add_argument('--syslog', '-s', dest='syslog', action='store_true',
help='Use syslog for logging. Default is stderr')
parser.add_argument('--verbose', '-v', dest='verbose', action='store_true',
help='Verbose logging')
parser.add_argument('--version', '-V', action='version',
version='%(prog)s {version}'.format(version=__version__))
args = parser.parse_args()
logger = logger(use_syslog=args.syslog, verbose=args.verbose)
# Change into the directory in which the config file resides
wdir = os.path.dirname(args.config)
if len(wdir):
args.config = os.path.basename(args.config)
rd = remaild(args.config, logger)
except Exception as ex:
Exceptions which reach here are fatal
logger.log_exception('', ex, verbose=True)
exit_daemon(logger, 11)
res = rd.handle_pipe(args.cfgupdate)
except Exception as ex:
Exceptions which reach here are fatal
logger.log_exception('', ex, verbose=True)
res = 12
exit_daemon(logger, res)