92
91
if sys.version_info.major == 2:
93
92
__metaclass__ = type
95
# Show warnings by default
96
if not sys.warnoptions:
98
warnings.simplefilter("default")
100
94
# Try to find the value of SO_BINDTODEVICE:
102
96
# This is where SO_BINDTODEVICE is in Python 3.3 (or 3.4?) and
128
122
if sys.version_info < (3, 2):
129
123
configparser.Configparser = configparser.SafeConfigParser
132
126
stored_state_file = "clients.pickle"
134
128
logger = logging.getLogger()
135
logging.captureWarnings(True) # Show warnings via the logging system
1150
1143
kwargs=popen_args)
1151
1144
self.checker.start()
1152
1145
self.checker_callback_tag = GLib.io_add_watch(
1153
GLib.IOChannel.unix_new(pipe[0].fileno()),
1154
GLib.PRIORITY_DEFAULT, GLib.IO_IN,
1146
pipe[0].fileno(), GLib.IO_IN,
1155
1147
self.checker_callback, pipe[0], command)
1156
1148
# Re-run this periodically if run by GLib.timeout_add
2681
2673
def add_pipe(self, parent_pipe, proc):
2682
2674
# Call "handle_ipc" for both data and EOF events
2683
2675
GLib.io_add_watch(
2684
GLib.IOChannel.unix_new(parent_pipe.fileno()),
2685
GLib.PRIORITY_DEFAULT, GLib.IO_IN | GLib.IO_HUP,
2676
parent_pipe.fileno(),
2677
GLib.IO_IN | GLib.IO_HUP,
2686
2678
functools.partial(self.handle_ipc,
2687
2679
parent_pipe=parent_pipe,
2728
2720
GLib.io_add_watch(
2729
GLib.IOChannel.unix_new(parent_pipe.fileno()),
2730
GLib.PRIORITY_DEFAULT, GLib.IO_IN | GLib.IO_HUP,
2721
parent_pipe.fileno(),
2722
GLib.IO_IN | GLib.IO_HUP,
2731
2723
functools.partial(self.handle_ipc,
2732
2724
parent_pipe=parent_pipe,
2765
2757
def rfc3339_duration_to_delta(duration):
2766
2758
"""Parse an RFC 3339 "duration" and return a datetime.timedelta
2768
>>> rfc3339_duration_to_delta("P7D") == datetime.timedelta(7)
2770
>>> rfc3339_duration_to_delta("PT60S") == datetime.timedelta(0, 60)
2772
>>> rfc3339_duration_to_delta("PT60M") == datetime.timedelta(0, 3600)
2774
>>> rfc3339_duration_to_delta("PT24H") == datetime.timedelta(1)
2776
>>> rfc3339_duration_to_delta("P1W") == datetime.timedelta(7)
2778
>>> rfc3339_duration_to_delta("PT5M30S") == datetime.timedelta(0, 330)
2780
>>> rfc3339_duration_to_delta("P1DT3M20S") == datetime.timedelta(1, 200)
2760
>>> rfc3339_duration_to_delta("P7D")
2761
datetime.timedelta(7)
2762
>>> rfc3339_duration_to_delta("PT60S")
2763
datetime.timedelta(0, 60)
2764
>>> rfc3339_duration_to_delta("PT60M")
2765
datetime.timedelta(0, 3600)
2766
>>> rfc3339_duration_to_delta("PT24H")
2767
datetime.timedelta(1)
2768
>>> rfc3339_duration_to_delta("P1W")
2769
datetime.timedelta(7)
2770
>>> rfc3339_duration_to_delta("PT5M30S")
2771
datetime.timedelta(0, 330)
2772
>>> rfc3339_duration_to_delta("P1DT3M20S")
2773
datetime.timedelta(1, 200)
2784
2776
# Parsing an RFC 3339 duration with regular expressions is not
2864
2856
def string_to_delta(interval):
2865
2857
"""Parse a string and return a datetime.timedelta
2867
>>> string_to_delta('7d') == datetime.timedelta(7)
2869
>>> string_to_delta('60s') == datetime.timedelta(0, 60)
2871
>>> string_to_delta('60m') == datetime.timedelta(0, 3600)
2873
>>> string_to_delta('24h') == datetime.timedelta(1)
2875
>>> string_to_delta('1w') == datetime.timedelta(7)
2877
>>> string_to_delta('5m 30s') == datetime.timedelta(0, 330)
2859
>>> string_to_delta('7d')
2860
datetime.timedelta(7)
2861
>>> string_to_delta('60s')
2862
datetime.timedelta(0, 60)
2863
>>> string_to_delta('60m')
2864
datetime.timedelta(0, 3600)
2865
>>> string_to_delta('24h')
2866
datetime.timedelta(1)
2867
>>> string_to_delta('1w')
2868
datetime.timedelta(7)
2869
>>> string_to_delta('5m 30s')
2870
datetime.timedelta(0, 330)
2984
2976
options = parser.parse_args()
2980
fail_count, test_count = doctest.testmod()
2981
sys.exit(os.EX_OK if fail_count == 0 else 1)
2986
2983
# Default values for config file for server-global settings
2987
2984
if gnutls.has_rawpk:
2988
2985
priority = ("SECURE128:!CTYPE-X.509:+CTYPE-RAWPK:!RSA"
3604
3601
# End of Avahi example code
3607
GLib.IOChannel.unix_new(tcp_server.fileno()),
3608
GLib.PRIORITY_DEFAULT, GLib.IO_IN,
3609
lambda *args, **kwargs: (tcp_server.handle_request
3610
(*args[2:], **kwargs) or True))
3603
GLib.io_add_watch(tcp_server.fileno(), GLib.IO_IN,
3604
lambda *args, **kwargs:
3605
(tcp_server.handle_request
3606
(*args[2:], **kwargs) or True))
3612
3608
logger.debug("Starting main loop")
3613
3609
main_loop.run()
3623
3619
# Must run before the D-Bus bus name gets deregistered
3627
def should_only_run_tests():
3628
parser = argparse.ArgumentParser(add_help=False)
3629
parser.add_argument("--check", action='store_true')
3630
args, unknown_args = parser.parse_known_args()
3631
run_tests = args.check
3633
# Remove --check argument from sys.argv
3634
sys.argv[1:] = unknown_args
3637
# Add all tests from doctest strings
3638
def load_tests(loader, tests, none):
3640
tests.addTests(doctest.DocTestSuite())
3643
3623
if __name__ == '__main__':
3645
if should_only_run_tests():
3646
# Call using ./mandos --check [--verbose]