mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Implement an DormantCanceledByStartup option
Closes ticket 29357, and comes with appropriate notions of caution.
This commit is contained in:
parent
1547fd99a6
commit
d194f6bedf
7
changes/ticket29357
Normal file
7
changes/ticket29357
Normal file
@ -0,0 +1,7 @@
|
||||
o Minor features (dormant mode):
|
||||
- Add a DormantCanceledByStartup option to tell Tor that it should
|
||||
treat a startup event as cancelling any previous dormant state.
|
||||
Integrators should use this option with caution: it should
|
||||
only be used if Tor is being started because of something that the
|
||||
user did, and not if Tor is being automatically started in the
|
||||
background. Closes ticket 29357.
|
@ -1850,6 +1850,21 @@ The following options are useful only for clients (that is, if
|
||||
After the first time Tor starts, it begins in dormant mode if it was
|
||||
dormant before, and not otherwise. (Default: 0)
|
||||
|
||||
[[DormantCanceledByStartup]] **DormantCanceledByStartup** **0**|**1**::
|
||||
By default, Tor starts in active mode if it was active the last time
|
||||
it was shut down, and in dormant mode if it was dormant. But if
|
||||
this option is true, Tor treats every startup event as user
|
||||
activity, and Tor will never start in Dormant mode, even if it has
|
||||
been unused for a long time on previous runs. (Default: 0)
|
||||
+
|
||||
Note: Packagers and application developers should change the value of
|
||||
this option only with great caution: it has the potential to
|
||||
create spurious traffic on the network. This option should only
|
||||
be used if Tor is started by an affirmative user activity (like
|
||||
clicking on an applcation or running a command), and not if Tor
|
||||
is launched for some other reason (for example, by a startup
|
||||
process, or by an application that launches itself on every login.)
|
||||
|
||||
SERVER OPTIONS
|
||||
--------------
|
||||
|
||||
|
@ -396,6 +396,7 @@ static config_var_t option_vars_[] = {
|
||||
V(DormantClientTimeout, INTERVAL, "24 hours"),
|
||||
V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"),
|
||||
V(DormantOnFirstStartup, BOOL, "0"),
|
||||
V(DormantCanceledByStartup, BOOL, "0"),
|
||||
/* DoS circuit creation options. */
|
||||
V(DoSCircuitCreationEnabled, AUTOBOOL, "auto"),
|
||||
V(DoSCircuitCreationMinConnections, UINT, "0"),
|
||||
|
@ -1092,6 +1092,11 @@ struct or_options_t {
|
||||
/** Boolean: true if Tor should be dormant the first time it starts with
|
||||
* a datadirectory; false otherwise. */
|
||||
int DormantOnFirstStartup;
|
||||
/**
|
||||
* Boolean: true if Tor should treat every startup event as cancelling
|
||||
* a possible previous dormant state.
|
||||
**/
|
||||
int DormantCanceledByStartup;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -144,6 +144,10 @@ netstatus_load_from_state(const or_state_t *state, time_t now)
|
||||
last_activity = now - 60 * state->MinutesSinceUserActivity;
|
||||
participating_on_network = true;
|
||||
}
|
||||
if (get_options()->DormantCanceledByStartup) {
|
||||
last_activity = now;
|
||||
participating_on_network = true;
|
||||
}
|
||||
reset_user_activity(last_activity);
|
||||
}
|
||||
|
||||
|
@ -317,6 +317,14 @@ test_mainloop_dormant_load_state(void *arg)
|
||||
tt_assert(is_participating_on_network());
|
||||
tt_i64_op(get_last_user_activity_time(), OP_EQ, start - 123*60);
|
||||
|
||||
// If we would start dormant, but DormantCanceledByStartup is set, then
|
||||
// we start up non-dormant.
|
||||
state->Dormant = 1;
|
||||
get_options_mutable()->DormantCanceledByStartup = 1;
|
||||
netstatus_load_from_state(state, start);
|
||||
tt_assert(is_participating_on_network());
|
||||
tt_i64_op(get_last_user_activity_time(), OP_EQ, start);
|
||||
|
||||
done:
|
||||
or_state_free(state);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user