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
David Goulet
Tor
Commits
de6ceb0b
Unverified
Commit
de6ceb0b
authored
Nov 06, 2019
by
teor
Browse files
Merge branch 'maint-0.4.0' into maint-0.4.1
parents
4f9a0033
03e77ef0
Changes
5
Hide whitespace changes
Inline
Side-by-side
changes/bug31408
0 → 100644
View file @
de6ceb0b
o Major bugfixes (torrc):
- Stop ignoring torrc options after an %include directive, when the
included directory ends with a file that does not contain any config
options. (But does contain comments or whitespace.)
Fixes bug 31408; bugfix on 0.3.1.1-alpha.
changes/bug31837
0 → 100644
View file @
de6ceb0b
o Minor bugfixes (testing):
- When testing port rebinding, don't busy-wait for tor to log. Instead,
actually sleep for a short time before polling again. Also improve the
formatting of control commands and log messages.
Fixes bug 31837; bugfix on 0.3.5.1-alpha.
src/lib/fs/conffile.c
View file @
de6ceb0b
...
...
@@ -153,16 +153,18 @@ config_process_include(const char *path, int recursion_level, int extended,
int
rv
=
-
1
;
SMARTLIST_FOREACH_BEGIN
(
config_files
,
const
char
*
,
config_file
)
{
config_line_t
*
included_config
=
NULL
;
config_line_t
*
included_config_last
=
NULL
;
if
(
config_get_included_config
(
config_file
,
recursion_level
,
extended
,
&
included_config
,
list
_last
,
&
included_config
,
&
included_config
_last
,
opened_lst
)
<
0
)
{
goto
done
;
}
*
next
=
included_config
;
if
(
*
list_last
)
next
=
&
(
*
list_last
)
->
next
;
if
(
included_config_last
)
{
next
=
&
included_config_last
->
next
;
*
list_last
=
included_config_last
;
}
}
SMARTLIST_FOREACH_END
(
config_file
);
*
list
=
ret_list
;
rv
=
0
;
...
...
src/test/test_config.c
View file @
de6ceb0b
...
...
@@ -5287,6 +5287,73 @@ test_config_include_folder_order(void *data)
tor_free
(
dir
);
}
static
void
test_config_include_blank_file_last
(
void
*
data
)
{
(
void
)
data
;
config_line_t
*
result
=
NULL
;
char
*
torrcd
=
NULL
;
char
*
path
=
NULL
;
char
*
dir
=
tor_strdup
(
get_fname
(
"test_include_blank_file_last"
));
tt_ptr_op
(
dir
,
OP_NE
,
NULL
);
#ifdef _WIN32
tt_int_op
(
mkdir
(
dir
),
OP_EQ
,
0
);
#else
tt_int_op
(
mkdir
(
dir
,
0700
),
OP_EQ
,
0
);
#endif
tor_asprintf
(
&
torrcd
,
"%s"
PATH_SEPARATOR
"%s"
,
dir
,
"torrc.d"
);
#ifdef _WIN32
tt_int_op
(
mkdir
(
torrcd
),
OP_EQ
,
0
);
#else
tt_int_op
(
mkdir
(
torrcd
,
0700
),
OP_EQ
,
0
);
#endif
tor_asprintf
(
&
path
,
"%s"
PATH_SEPARATOR
"%s"
,
torrcd
,
"aa_1st"
);
tt_int_op
(
write_str_to_file
(
path
,
"Test 1
\n
"
,
0
),
OP_EQ
,
0
);
tor_free
(
path
);
tor_asprintf
(
&
path
,
"%s"
PATH_SEPARATOR
"%s"
,
torrcd
,
"bb_2nd"
);
tt_int_op
(
write_str_to_file
(
path
,
"Test 2
\n
"
,
0
),
OP_EQ
,
0
);
tor_free
(
path
);
tor_asprintf
(
&
path
,
"%s"
PATH_SEPARATOR
"%s"
,
torrcd
,
"cc_comment"
);
tt_int_op
(
write_str_to_file
(
path
,
"# comment only
\n
"
,
0
),
OP_EQ
,
0
);
tor_free
(
path
);
char
torrc_contents
[
1000
];
tor_snprintf
(
torrc_contents
,
sizeof
(
torrc_contents
),
"%%include %s
\n
"
"Test 3
\n
"
,
torrcd
);
int
include_used
;
tt_int_op
(
config_get_lines_include
(
torrc_contents
,
&
result
,
0
,
&
include_used
,
NULL
),
OP_EQ
,
0
);
tt_ptr_op
(
result
,
OP_NE
,
NULL
);
tt_int_op
(
include_used
,
OP_EQ
,
1
);
int
len
=
0
;
config_line_t
*
next
;
for
(
next
=
result
;
next
!=
NULL
;
next
=
next
->
next
)
{
char
expected
[
10
];
tor_snprintf
(
expected
,
sizeof
(
expected
),
"%d"
,
len
+
1
);
tt_str_op
(
next
->
key
,
OP_EQ
,
"Test"
);
tt_str_op
(
next
->
value
,
OP_EQ
,
expected
);
len
++
;
}
tt_int_op
(
len
,
OP_EQ
,
3
);
done:
config_free_lines
(
result
);
tor_free
(
torrcd
);
tor_free
(
path
);
tor_free
(
dir
);
}
static
void
test_config_include_path_syntax
(
void
*
data
)
{
...
...
@@ -5982,6 +6049,7 @@ struct testcase_t config_tests[] = {
CONFIG_TEST
(
include_recursion_before_after
,
0
),
CONFIG_TEST
(
include_recursion_after_only
,
0
),
CONFIG_TEST
(
include_folder_order
,
0
),
CONFIG_TEST
(
include_blank_file_last
,
0
),
CONFIG_TEST
(
include_path_syntax
,
0
),
CONFIG_TEST
(
include_not_processed
,
0
),
CONFIG_TEST
(
include_has_include
,
0
),
...
...
src/test/test_rebind.py
View file @
de6ceb0b
...
...
@@ -32,15 +32,17 @@ def wait_for_log(s):
cutoff
=
time
.
time
()
+
LOG_TIMEOUT
while
time
.
time
()
<
cutoff
:
l
=
tor_process
.
stdout
.
readline
()
l
=
l
.
decode
(
'utf8'
)
l
=
l
.
decode
(
'utf8'
,
'backslashreplace'
)
if
s
in
l
:
logging
.
info
(
'Tor logged: "{}"'
.
format
(
l
.
strip
()))
return
logging
.
info
(
'Tor logged: "{}", waiting for "{}"'
.
format
(
l
.
strip
(),
s
))
# readline() returns a blank string when there is no output
# avoid busy-waiting
if
len
(
s
)
==
0
:
if
len
(
l
)
==
0
:
logging
.
debug
(
'Tor has not logged anything, waiting for "{}"'
.
format
(
s
))
time
.
sleep
(
LOG_WAIT
)
else
:
logging
.
info
(
'Tor logged: "{}", waiting for "{}"'
.
format
(
l
.
strip
(),
s
))
fail
(
'Could not find "{}" in logs after {} seconds'
.
format
(
s
,
LOG_TIMEOUT
))
def
pick_random_port
():
...
...
@@ -120,18 +122,18 @@ if control_socket.connect_ex(('127.0.0.1', control_port)):
tor_process
.
terminate
()
fail
(
'Cannot connect to ControlPort'
)
control_socket
.
sendall
(
'AUTHENTICATE
\r\n
'
.
encode
(
'
utf8
'
))
control_socket
.
sendall
(
'SETCONF SOCKSPort=0.0.0.0:{}
\r\n
'
.
format
(
socks_port
).
encode
(
'
utf8
'
))
control_socket
.
sendall
(
'AUTHENTICATE
\r\n
'
.
encode
(
'
ascii
'
))
control_socket
.
sendall
(
'SETCONF SOCKSPort=0.0.0.0:{}
\r\n
'
.
format
(
socks_port
).
encode
(
'
ascii
'
))
wait_for_log
(
'Opened Socks listener'
)
try_connecting_to_socksport
()
control_socket
.
sendall
(
'SETCONF SOCKSPort=127.0.0.1:{}
\r\n
'
.
format
(
socks_port
).
encode
(
'
utf8
'
))
control_socket
.
sendall
(
'SETCONF SOCKSPort=127.0.0.1:{}
\r\n
'
.
format
(
socks_port
).
encode
(
'
ascii
'
))
wait_for_log
(
'Opened Socks listener'
)
try_connecting_to_socksport
()
control_socket
.
sendall
(
'SIGNAL HALT
\r\n
'
.
encode
(
'
utf8
'
))
control_socket
.
sendall
(
'SIGNAL HALT
\r\n
'
.
encode
(
'
ascii
'
))
wait_for_log
(
'exiting cleanly'
)
logging
.
info
(
'OK'
)
...
...
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