Exemplo n.º 1
0
    def daemonize(self, args):
        log.setup(self.log_file)
        log.info("Daemonizing.")

        self.before_daemonize(args)

        if unix.still_running(self.name, pid_file_path=self.pid_path):
            log.error("%s still running. Aborting." % self.name)
            sys.exit(1)
        else:
            unix.daemonize(self.name, pid_file_path=self.pid_path)

        def shutdown_handler(signal, frame):
            self.shutdown(signal)
            sys.exit(0)

        unix.register_shutdown(shutdown_handler)

        self.before_jail(args)

        log.info("Setting up the chroot jail to: %s" % self.run_dir)
        unix.chroot_jail(self.run_dir)

        self.before_drop_privs(args)

        unix.drop_privileges(uid_name=self.uid, gid_name=self.gid)

        log.info("Server %s running." % self.name)
        self.start(args)
Exemplo n.º 2
0
    def parse_cli(self, args):
        args.pop(0)

        if not args:
            log.error("Need a command like start, stop, status.")
            sys.exit(1)

        return args[0], args[1:]
Exemplo n.º 3
0
    def parse_cli(self, args):
        args.pop(0)

        if not args:
            log.error("Need a command like start, stop, status.")
            sys.exit(1)

        return args[0], args[1:]
Exemplo n.º 4
0
def test_message_levels(time_ctime):
    log.warn("test warning")
    assert_true(time_ctime.called)
    time_ctime.reset

    log.error("test error")
    assert_true(time_ctime.called)
    time_ctime.reset

    log.info("test info")
    assert_true(time_ctime.called)
    time_ctime.reset
Exemplo n.º 5
0
def test_message_levels(time_ctime):
    log.warn("test warning")
    assert_true(time_ctime.called)
    time_ctime.reset

    log.error("test error")
    assert_true(time_ctime.called)
    time_ctime.reset

    log.info("test info")
    assert_true(time_ctime.called)
    time_ctime.reset
Exemplo n.º 6
0
    def run(self, args):
        command, args = self.parse_cli(args)

        if command == "start":
            self.daemonize(args)
        elif command == "stop":
            self.stop(args)
        elif command == "status":
            self.status(args)
        else:
            log.error("Invalid command: %s.  Commands are: start, stop, reload, status.")
            sys.exit(1)
Exemplo n.º 7
0
    def run(self, args):
        command, args = self.parse_cli(args)

        if command == "start":
            self.daemonize(args)
        elif command == "stop":
            self.stop(args)
        elif command == "status":
            self.status(args)
        else:
            log.error(
                "Invalid command: %s.  Commands are: start, stop, reload, status."
            )
            sys.exit(1)
Exemplo n.º 8
0
    def daemonize(self, args):
        log.setup(self.log_file)
        log.info("Daemonizing.")

        self.before_daemonize(args)

        if unix.still_running(self.name, pid_file_path=self.pid_path):
            log.error("%s still running. Aborting." % self.name)
            sys.exit(1)
        else:
            unix.daemonize(self.name, pid_file_path=self.pid_path)

        def shutdown_handler(signal, frame):
            self.shutdown(signal)
            sys.exit(0)

        unix.register_shutdown(shutdown_handler)

        if not os.path.exists(self.run_dir):
            log.warn("Directory %s does not exist, attempting to create it." %
                     self.run_dir)
            os.mkdir(self.run_dir)

            log.info(
                "Giving default permissions to %s, change them later if you need."
                % self.run_dir)
            os.chown(self.run_dir, self.unum, self.gnum)
            os.chmod(self.run_dir, self.run_dir_mode)

        if self.should_jail:
            self.before_jail(args)
            log.info("Setting up the chroot jail to: %s" % self.run_dir)
            unix.chroot_jail(self.run_dir)
        else:
            log.warn("This daemon does not jail itself, chdir to %s instead" %
                     self.run_dir)
            os.chdir(self.run_dir)

        if self.should_drop_priv:
            self.before_drop_privs(args)
            unix.drop_privileges(self.unum, self.gnum)
        else:
            log.warn("This daemon does not drop privileges.")

        log.info("Server %s running." % self.name)
        self.start(args)
Exemplo n.º 9
0
    def daemonize(self, args):
        log.setup(self.log_file)
        log.info("Daemonizing.")

        self.before_daemonize(args)

        if unix.still_running(self.name, pid_file_path=self.pid_path):
            log.error("%s still running. Aborting." % self.name)
            sys.exit(1)
        else:
            unix.daemonize(self.name, pid_file_path=self.pid_path)

        def shutdown_handler(signal, frame):
            self.shutdown(signal)
            sys.exit(0)

        unix.register_shutdown(shutdown_handler)

        if not os.path.exists(self.run_dir):
            log.warn("Directory %s does not exist, attempting to create it." %
                     self.run_dir)
            os.mkdir(self.run_dir)

            log.info("Giving default permissions to %s, change them later if you need."
                     % self.run_dir)
            os.chown(self.run_dir, self.unum, self.gnum)
            os.chmod(self.run_dir, self.run_dir_mode)

        if self.should_jail:
            self.before_jail(args)
            log.info("Setting up the chroot jail to: %s" % self.run_dir)
            unix.chroot_jail(self.run_dir)
        else:
            log.warn("This daemon does not jail itself, chdir to %s instead" % self.run_dir)
            os.chdir(self.run_dir)

        if self.should_drop_priv:
            self.before_drop_privs(args)
            unix.drop_privileges(self.unum, self.gnum)
        else:
            log.warn("This daemon does not drop privileges.")

        log.info("Server %s running." % self.name)
        self.start(args)
Exemplo n.º 10
0
    def before_drop_privs(self, args):
        HOST = "0.0.0.0"
        if self.config:
            ports = list(
                int(x) for x in self.config['threadserver.ports'].split())
        else:
            ports = list(int(x) for x in args)

        log.debug("Ports %r" % ports)

        if not ports:
            log.error("You need to list some ports.")
            sys.exit(1)

        self.server = None  # this gets the last one to do a forever on

        for PORT in ports:
            server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
            ip, port = server.server_address
            server_thread = threading.Thread(target=server.serve_forever)
            server_thread.daemon = True
            server_thread.start()

        self.server = server
Exemplo n.º 11
0
    def before_drop_privs(self, args):
        HOST = "0.0.0.0"
        if self.config:
            ports = list(int(x) for x in
                         self.config['threadserver.ports'].split())
        else:
            ports = list(int(x) for x in args)

        log.debug("Ports %r" % ports)

        if not ports:
            log.error("You need to list some ports.")
            sys.exit(1)

        self.server = None # this gets the last one to do a forever on

        for PORT in ports:
            server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
            ip, port = server.server_address
            server_thread = threading.Thread(target=server.serve_forever)
            server_thread.daemon = True
            server_thread.start()

        self.server = server