Example #1
0
def run():
    """Create the asyncio loop and start the server."""
    args = parse_cmd_args(sys.argv[1:])
    configure_logs(args)
    logger = logging.getLogger('blackhole')
    if args.test:
        config_test(args)
    try:
        config = Config(args.config_file).load().test()
    except ConfigException as err:
        logger.fatal(err)
        raise SystemExit(os.EX_USAGE)
    if args.background and not config.pidfile:
        logger.fatal('Cannot run in the background without a pidfile.')
        raise SystemExit(os.EX_USAGE)
    loop = asyncio.get_event_loop()
    loop.add_signal_handler(signal.SIGINT, loop.stop)
    start_servers()
    setgid()
    setuid()
    if args.background:
        try:
            Daemon(config.pidfile).daemonize()
        except DaemonException as err:
            stop_servers()
            logger.fatal(err)
            raise SystemExit(os.EX_USAGE)
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    stop_servers()
    raise SystemExit(os.EX_OK)
Example #2
0
def test_setuid_invalid_user():
    cfile = create_config(('user=testuser', ))
    with mock.patch('pwd.getpwnam', side_effect=KeyError), \
            pytest.raises(SystemExit) as err:
        Config(cfile).load()
        setuid()
    assert str(err.value) == '64'
Example #3
0
def test_setuid_no_perms():
    cfile = create_config(('user=testuser', ))
    with mock.patch('pwd.getpwnam', side_effect=PermissionError), \
            pytest.raises(SystemExit) as err:
        Config(cfile).load()
        setuid()
    assert str(err.value) == '77'
Example #4
0
def run():
    """Create the asyncio loop and start the server."""
    args = parse_cmd_args(sys.argv[1:])
    configure_logs(args)
    logger = logging.getLogger('blackhole')
    if args.test:
        config_test(args)
    try:
        config = Config(args.config_file).load().test()
    except ConfigException as err:
        logger.fatal(err)
        raise SystemExit(os.EX_USAGE)
    if args.background and not config.pidfile:
        logger.fatal('Cannot run in the background without a pidfile.')
        raise SystemExit(os.EX_USAGE)
    loop = asyncio.get_event_loop()
    loop.add_signal_handler(signal.SIGINT, loop.stop)
    start_servers()
    setgid()
    setuid()
    if args.background:
        try:
            Daemon(config.pidfile).daemonize()
        except DaemonException as err:
            stop_servers()
            logger.fatal(err)
            raise SystemExit(os.EX_USAGE)
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    stop_servers()
    raise SystemExit(os.EX_OK)
def test_setuid_invalid_user():
    cfile = create_config(("user=testuser",))
    with mock.patch("pwd.getpwnam", side_effect=KeyError), pytest.raises(
        SystemExit
    ) as exc:
        Config(cfile).load()
        setuid()
    assert exc.value.code == 64
Example #6
0
def test_setuid_no_perms():
    cfile = create_config(("user=testuser",))
    with mock.patch(
        "pwd.getpwnam", side_effect=PermissionError
    ), pytest.raises(SystemExit) as err:
        Config(cfile).load()
        setuid()
    assert err.value.code == 77
Example #7
0
def test_setuid_invalid_user():
    cfile = create_config(("user=testuser",))
    with mock.patch("pwd.getpwnam", side_effect=KeyError), pytest.raises(
        SystemExit
    ) as exc:
        Config(cfile).load()
        setuid()
    assert exc.value.code == 64
Example #8
0
def test_setuid():
    cfile = create_config(('user=abc', ))
    with mock.patch('pwd.getpwnam') as mock_getpwnam, \
            mock.patch('os.setuid') as mock_setuid:
        Config(cfile).load()
        setuid()
    assert mock_getpwnam.called is True
    assert mock_setuid.called is True
def test_setuid_no_perms():
    cfile = create_config(("user=testuser",))
    with mock.patch(
        "pwd.getpwnam", side_effect=PermissionError
    ), pytest.raises(SystemExit) as err:
        Config(cfile).load()
        setuid()
    assert err.value.code == 77
def test_setuid():
    cfile = create_config(("user=abc",))
    with mock.patch("pwd.getpwnam") as mock_getpwnam, mock.patch(
        "os.setuid"
    ) as mock_setuid:
        Config(cfile).load()
        setuid()
    assert mock_getpwnam.called is True
    assert mock_setuid.called is True
Example #11
0
def test_setuid():
    cfile = create_config(("user=abc",))
    with mock.patch("pwd.getpwnam") as mock_getpwnam, mock.patch(
        "os.setuid"
    ) as mock_setuid:
        Config(cfile).load()
        setuid()
    assert mock_getpwnam.called is True
    assert mock_setuid.called is True
def test_setuid_same_user():
    cfile = create_config(("",))
    with mock.patch("os.setuid"):
        Config(cfile).load()
        assert setuid() is None
Example #13
0
def test_setuid_same_user(mock_getuser):
    cfile = create_config(('user=testuser', ))
    Config(cfile).load()
    assert setuid() is None
    assert mock_getuser.called is True
Example #14
0
def test_setuid_same_user(mock_getuser):
    cfile = create_config(('user=testuser',))
    Config(cfile).load()
    assert setuid() is None
    assert mock_getuser.called is True
Example #15
0
def test_setuid_no_perms(_):
    cfile = create_config(('user=testuser', ))
    Config(cfile).load()
    with pytest.raises(SystemExit) as err:
        setuid()
    assert str(err.value) == '77'
Example #16
0
def test_setuid(mock_getpwnam, mock_setuid):
    cfile = create_config(('user=abc',))
    Config(cfile).load()
    setuid()
    assert mock_getpwnam.called is True
    assert mock_setuid.called is True
Example #17
0
def test_setuid_same_user():
    cfile = create_config(("",))
    with mock.patch("os.setuid"):
        Config(cfile).load()
        assert setuid() is None
Example #18
0
def test_setuid_no_perms(_):
    cfile = create_config(('user=testuser',))
    Config(cfile).load()
    with pytest.raises(SystemExit) as err:
        setuid()
    assert str(err.value) == '77'
Example #19
0
def test_setuid(mock_getpwnam, mock_setuid):
    cfile = create_config(('user=abc', ))
    Config(cfile).load()
    setuid()
    assert mock_getpwnam.called is True
    assert mock_setuid.called is True