From 68dbe2160ede05e902fbd51b38da10981ee0fe41 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Tue, 6 Sep 2011 11:22:15 +0200 Subject: daemon: kill DaemonMixin It doesn't seem used, and has a bunch of issues (allows symlink attacks against pidfile in /tmp, DoS, TOCTTOU, ...). --- ChangeLog | 7 +++-- daemon.py | 104 +------------------------------------------------------------- 2 files changed, 5 insertions(+), 106 deletions(-) diff --git a/ChangeLog b/ChangeLog index c4f87cb..be611eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,11 @@ ChangeLog for logilab.common ============================ - -- - * modutils: allow overriding of _getobj by suppressing mangling +-- + * daemon: remove unused(?) DaemonMixin class --- +-- + * modutils: allow overriding of _getobj by suppressing mangling * daemon: call initgroups/setgid before setuid 2011-08-05 -- 0.56.1 diff --git a/daemon.py b/daemon.py index 2eedca5..6815bc9 100644 --- a/daemon.py +++ b/daemon.py @@ -15,7 +15,7 @@ # # You should have received a copy of the GNU Lesser General Public License along # with logilab-common. If not, see . -"""A daemonize function (for Unices) and daemon mix-in class""" +"""A daemonize function (for Unices)""" __docformat__ = "restructuredtext en" @@ -96,105 +96,3 @@ def daemonize(pidfile=None, uid=None, umask=077): if uid: setugid(uid) return None - - -class DaemonMixIn: - """Mixin to make a daemon from watchers/queriers. - """ - - def __init__(self, configmod) : - self.delay = configmod.DELAY - self.name = str(self.__class__).split('.')[-1] - self._pid_file = os.path.join('/tmp', '%s.pid'%self.name) - if os.path.exists(self._pid_file): - raise Exception('''Another instance of %s must be running. -If it i not the case, remove the file %s''' % (self.name, self._pid_file)) - self._alive = 1 - self._sleeping = 0 - self.config = configmod - - def _daemonize(self): - if not self.config.NODETACH: - if daemonize(self._pid_file) is None: - # put signal handler - signal.signal(signal.SIGTERM, self.signal_handler) - signal.signal(signal.SIGHUP, self.signal_handler) - else: - return -1 - - def run(self): - """ optionally go in daemon mode and - do what concrete class has to do and pauses for delay between runs - If self.delay is negative, do a pause before starting - """ - if self._daemonize() == -1: - return - if self.delay < 0: - self.delay = -self.delay - time.sleep(self.delay) - while True: - try: - self._run() - except Exception, ex: - # display for info, sleep, and hope the problem will be solved - # later. - self.config.exception('Internal error: %s', ex) - if not self._alive: - break - try: - self._sleeping = 1 - time.sleep(self.delay) - self._sleeping = 0 - except SystemExit: - break - self.config.info('%s instance exited', self.name) - # remove pid file - os.remove(self._pid_file) - - def signal_handler(self, sig_num, stack_frame): - if sig_num == signal.SIGTERM: - if self._sleeping: - # we are sleeping so we can exit without fear - self.config.debug('exit on SIGTERM') - sys.exit(0) - else: - self.config.debug('exit on SIGTERM (on next turn)') - self._alive = 0 - elif sig_num == signal.SIGHUP: - self.config.info('reloading configuration on SIGHUP') - reload(self.config) - - def _run(self): - """should be overridden in the mixed class""" - raise NotImplementedError() - - -import logging -from logilab.common.logging_ext import set_log_methods -set_log_methods(DaemonMixIn, logging.getLogger('lgc.daemon')) - -## command line utilities ###################################################### - -L_OPTIONS = ["help", "log=", "delay=", 'no-detach'] -S_OPTIONS = 'hl:d:n' - -def print_help(modconfig): - print """ --help or -h - displays this message - --log - log treshold (7 record everything, 0 record only emergency.) - Defaults to %s - --delay - the number of seconds between two runs. - Defaults to %s""" % (modconfig.LOG_TRESHOLD, modconfig.DELAY) - -def handle_option(modconfig, opt_name, opt_value, help_meth): - if opt_name in ('-h', '--help'): - help_meth() - sys.exit(0) - elif opt_name in ('-l', '--log'): - modconfig.LOG_TRESHOLD = int(opt_value) - elif opt_name in ('-d', '--delay'): - modconfig.DELAY = int(opt_value) - elif opt_name in ('-n', '--no-detach'): - modconfig.NODETACH = 1 -- cgit v1.2.1 From 9f1e46df679e8678e31698635724c1f8368f09c9 Mon Sep 17 00:00:00 2001 From: Sylvain Th?nault Date: Tue, 6 Sep 2011 15:56:45 +0200 Subject: pytest should have default warning policy --- bin/pytest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/pytest b/bin/pytest index 852bdd1..0ad0ecb 100755 --- a/bin/pytest +++ b/bin/pytest @@ -1,4 +1,4 @@ -#!/usr/bin/python -u +#!/usr/bin/python -uWdefault from logilab.common.pytest import run run() -- cgit v1.2.1