/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

« back to all changes in this revision

Viewing changes to mandos

  • Committer: Teddy Hogeborn
  • Date: 2023-02-07 23:03:33 UTC
  • mto: This revision was merged to the branch mainline in revision 408.
  • Revision ID: teddy@recompile.se-20230207230333-5halrp7943pgb3w1
Server: Bug fix: Stagger checker runs when creating clients

* mandos (Client.enable()): Do not set self.expires here; move it to
  "init_checker".
  (Client.init_checker()): Take new "randomize_start" argument.  If
  True, randomize delay before starting checker.  Also, do not start
  checker right now, but instead extend expire time so that the
  scheduled checker always has time to run.
  (Checker.start_checker): Take new "start_was_randomized" argument.
  If True, reset scheduled checker runs to be 'interval' apart,
  instead of using the initial delay.  (Bug fix)
  (main): On startup, pass argument randomize_start=True to
  client.init_checker() when initizlizing checkers for all enabled
  clients.

Reported-by: Louis Charreau <Louis.Charreau@vadesecure.com>
Suggested-by: Louis Charreau <Louis.Charreau@vadesecure.com>
Fixes: 1200 ("Server: Stagger checker runs when creating clients")

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
except AttributeError:
111
111
    shlex.quote = re.escape
112
112
 
113
 
# Add os.set_inheritable if it does not exist
114
 
try:
115
 
    os.set_inheritable
116
 
except AttributeError:
117
 
    def set_inheritable(fd, inheritable):
118
 
        flags = fcntl.fcntl(fd, fcntl.F_GETFD)
119
 
        if inheritable and ((flags & fcntl.FD_CLOEXEC) != 0):
120
 
            fcntl.fcntl(fd, fcntl.F_SETFL, flags & ~fcntl.FD_CLOEXEC)
121
 
        elif (not inheritable) and ((flags & fcntl.FD_CLOEXEC) == 0):
122
 
            fcntl.fcntl(fd, fcntl.F_SETFL, flags | fcntl.FD_CLOEXEC)
123
 
    os.set_inheritable = set_inheritable
124
 
    del set_inheritable
125
 
 
126
113
# Show warnings by default
127
114
if not sys.warnoptions:
128
115
    import warnings
156
143
if sys.version_info < (3, 2):
157
144
    configparser.Configparser = configparser.SafeConfigParser
158
145
 
159
 
version = "1.8.17"
 
146
version = "1.8.15"
160
147
stored_state_file = "clients.pickle"
161
148
 
162
149
log = logging.getLogger(os.path.basename(sys.argv[0]))
974
961
            # key_id() and fingerprint() functions
975
962
            client["key_id"] = (section.get("key_id", "").upper()
976
963
                                .replace(" ", ""))
977
 
            client["fingerprint"] = (section.get("fingerprint",
978
 
                                                 "").upper()
 
964
            client["fingerprint"] = (section["fingerprint"].upper()
979
965
                                     .replace(" ", ""))
980
 
            if not (client["key_id"] or client["fingerprint"]):
981
 
                log.error("Skipping client %s without key_id or"
982
 
                          " fingerprint", client_name)
983
 
                del settings[client_name]
984
 
                continue
985
966
            if "secret" in section:
986
967
                client["secret"] = codecs.decode(section["secret"]
987
968
                                                 .encode("utf-8"),
3109
3090
        # Later, stdin will, and stdout and stderr might, be dup'ed
3110
3091
        # over with an opened os.devnull.  But we don't want this to
3111
3092
        # happen with a supplied network socket.
3112
 
        while 0 <= server_settings["socket"] <= 2:
 
3093
        if 0 <= server_settings["socket"] <= 2:
3113
3094
            server_settings["socket"] = os.dup(server_settings
3114
3095
                                               ["socket"])
3115
 
        os.set_inheritable(server_settings["socket"], False)
3116
3096
    del server_config
3117
3097
 
3118
3098
    # Override the settings from the config file with command line
3257
3237
    # From the Avahi example code
3258
3238
    DBusGMainLoop(set_as_default=True)
3259
3239
    main_loop = GLib.MainLoop()
3260
 
    if use_dbus or zeroconf:
3261
 
        bus = dbus.SystemBus()
 
3240
    bus = dbus.SystemBus()
3262
3241
    # End of Avahi example code
3263
3242
    if use_dbus:
3264
3243
        try: