Bladeren bron

Allow supervisord to run as root.

Chris McDonough 19 jaren geleden
bovenliggende
commit
86d8953d79
3 gewijzigde bestanden met toevoegingen van 12 en 12 verwijderingen
  1. 0 2
      TODO.txt
  2. 4 2
      src/supervisor/options.py
  3. 8 8
      src/supervisor/supervisord.py

+ 0 - 2
TODO.txt

@@ -18,8 +18,6 @@
 
    - copy sample.conf to /etc/supervisord.conf
 
-- Require root to change users?  README says otherwise.
-
 - Unit test the http_client package.
 
 - Unit tests for meld classes and ui server.

+ 4 - 2
src/supervisor/options.py

@@ -735,7 +735,7 @@ class ServerOptions(Options):
                 except (os.error, IOError):
                     self.logger.info('Failed to clean up %r' % pathname)
 
-    def make_logger(self, held_messages):
+    def make_logger(self, critical_messages, info_messages):
         # must be called after realize() and after supervisor does setuid()
         format =  '%(asctime)s %(levelname)s %(message)s\n'
         self.logger = self.getLogger(
@@ -751,7 +751,9 @@ class ServerOptions(Options):
             formatter = logging.Formatter(format)
             stdout_handler.setFormatter(formatter)
             self.logger.addHandler(stdout_handler)
-        for msg in held_messages:
+        for msg in critical_messages:
+            self.logger.critical(msg)
+        for msg in info_messages:
             self.logger.info(msg)
 
 class ClientOptions(Options):

+ 8 - 8
src/supervisor/supervisord.py

@@ -473,17 +473,18 @@ class Supervisor:
         self.options = ServerOptions()
         self.options.realize(args)
         self.cleanup_fds()
-        held_messages = []
+        info_messages = []
+        critical_messages = []
         setuid_msg = self.set_uid()
         if setuid_msg:
-            held_messages.append(setuid_msg)
+            critical_messages.append(setuid_msg)
         if first:
             rlimit_messages = self.set_rlimits()
-            held_messages.extend(rlimit_messages)
+            info_messages.extend(rlimit_messages)
 
         # this sets the options.logger object
         # delay logger instantiation until after setuid
-        self.options.make_logger(held_messages)
+        self.options.make_logger(critical_messages, info_messages)
 
         if not self.options.nocleanup:
             # clean up old automatic logs
@@ -608,13 +609,12 @@ class Supervisor:
     def set_uid(self):
         if self.options.uid is None:
             if os.getuid() == 0:
-                self.options.usage('supervisord may not be run as the root '
-                                   'user without a "user" setting in the '
-                                   'configuration file')
-            return
+                return 'Supervisor running as root (no user in config file)'
+            return None
         msg = dropPrivileges(self.options.uid)
         if msg is None:
             return 'Set uid to user %s' % self.options.uid
+        return msg
 
     def set_rlimits(self):
         limits = []