Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ZerXes
Tor
Commits
96e620ca
Unverified
Commit
96e620ca
authored
Dec 01, 2019
by
teor
Browse files
Merge remote-tracking branch 'tor-github/pr/1574'
parents
68a00c49
41a39301
Changes
4
Hide whitespace changes
Inline
Side-by-side
changes/bug31531
0 → 100644
View file @
96e620ca
o Minor bugfixes (configuration handling):
- Make control_event_conf_changed() take in a config_line_t instead of
a smartlist(k, v, k, v, ...) where keys are followed by values. Fixes
bug 31531; bugfix on 0.2.3.3-alpha. Patch by Neel Chauhan.
src/app/config/config.c
View file @
96e620ca
...
...
@@ -1001,15 +1001,9 @@ set_options(or_options_t *new_val, char **msg)
/* Issues a CONF_CHANGED event to notify controller of the change. If Tor is
* just starting up then the old_options will be undefined. */
if
(
old_options
&&
old_options
!=
global_options
)
{
smartlist_t
*
elements
=
smartlist_new
();
config_line_t
*
changes
=
config_get_changes
(
get_options_mgr
(),
old_options
,
new_val
);
for
(
config_line_t
*
line
=
changes
;
line
;
line
=
line
->
next
)
{
smartlist_add
(
elements
,
line
->
key
);
smartlist_add
(
elements
,
line
->
value
);
}
control_event_conf_changed
(
elements
);
smartlist_free
(
elements
);
control_event_conf_changed
(
changes
);
config_free_lines
(
changes
);
}
...
...
src/feature/control/control_events.c
View file @
96e620ca
...
...
@@ -38,6 +38,7 @@
#include
"core/or/origin_circuit_st.h"
#include
"lib/evloop/compat_libevent.h"
#include
"lib/encoding/confline.h"
static
void
flush_queued_events_cb
(
mainloop_event_t
*
event
,
void
*
arg
);
static
void
control_get_bytes_rw_last_sec
(
uint64_t
*
r
,
uint64_t
*
w
);
...
...
@@ -1770,27 +1771,24 @@ control_event_guard(const char *nickname, const char *digest,
}
/** Called when a configuration option changes. This is generally triggered
* by SETCONF requests and RELOAD/SIGHUP signals. The <b>elements</b> is
* a smartlist_t containing (key, value, ...) pairs in sequence.
* <b>value</b> can be NULL. */
int
control_event_conf_changed
(
const
smartlist_t
*
elements
)
* by SETCONF requests and RELOAD/SIGHUP signals. The <b>changes</b> are
* a linked list of configuration key-values.
* <b>changes</b> can be NULL, meaning "no changes".
*/
void
control_event_conf_changed
(
const
config_line_t
*
changes
)
{
int
i
;
char
*
result
;
smartlist_t
*
lines
;
if
(
!
EVENT_IS_INTERESTING
(
EVENT_CONF_CHANGED
)
||
smartlist_len
(
elements
)
==
0
)
{
return
0
;
if
(
!
EVENT_IS_INTERESTING
(
EVENT_CONF_CHANGED
)
||
!
changes
)
{
return
;
}
lines
=
smartlist_new
();
for
(
i
=
0
;
i
<
smartlist_len
(
elements
);
i
+=
2
)
{
char
*
k
=
smartlist_get
(
elements
,
i
);
char
*
v
=
smartlist_get
(
elements
,
i
+
1
);
if
(
v
==
NULL
)
{
smartlist_add_asprintf
(
lines
,
"650-%s"
,
k
);
for
(
const
config_line_t
*
line
=
changes
;
line
;
line
=
line
->
next
)
{
if
(
line
->
value
==
NULL
)
{
smartlist_add_asprintf
(
lines
,
"650-%s"
,
line
->
key
);
}
else
{
smartlist_add_asprintf
(
lines
,
"650-%s=%s"
,
k
,
v
);
smartlist_add_asprintf
(
lines
,
"650-%s=%s"
,
line
->
key
,
line
->
value
);
}
}
result
=
smartlist_join_strings
(
lines
,
"
\r\n
"
,
0
,
NULL
);
...
...
@@ -1799,7 +1797,6 @@ control_event_conf_changed(const smartlist_t *elements)
tor_free
(
result
);
SMARTLIST_FOREACH
(
lines
,
char
*
,
cp
,
tor_free
(
cp
));
smartlist_free
(
lines
);
return
0
;
}
/** We just generated a new summary of which countries we've seen clients
...
...
src/feature/control/control_events.h
View file @
96e620ca
...
...
@@ -13,6 +13,9 @@
#define TOR_CONTROL_EVENTS_H
#include
"core/or/ocirc_event.h"
#include
"core/or/orconn_event.h"
struct
config_line_t
;
/** Used to indicate the type of a CIRC_MINOR event passed to the controller.
* The various types are defined in control-spec.txt . */
...
...
@@ -21,8 +24,6 @@ typedef enum circuit_status_minor_event_t {
CIRC_MINOR_EVENT_CANNIBALIZED
,
}
circuit_status_minor_event_t
;
#include
"core/or/orconn_event.h"
/** Used to indicate the type of a stream event passed to the controller.
* The various types are defined in control-spec.txt */
typedef
enum
stream_status_event_t
{
...
...
@@ -157,7 +158,7 @@ int control_event_server_error(const char *format, ...)
int
control_event_guard
(
const
char
*
nickname
,
const
char
*
digest
,
const
char
*
status
);
int
control_event_conf_changed
(
const
s
martlist_t
*
element
s
);
void
control_event_conf_changed
(
const
s
truct
config_line_t
*
change
s
);
int
control_event_buildtimeout_set
(
buildtimeout_set_event_t
type
,
const
char
*
args
);
int
control_event_signal
(
uintptr_t
signal
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment