]>
git.ipfire.org Git - thirdparty/tor.git/log
teor [Wed, 15 Jan 2020 23:38:26 +0000 (09:38 +1000)]
add_c_file: Fix "control line not preceded by a blank line"
Fix dirauth and relay module include.am add_c_file.py
"control line not preceded by a blank line" errors.
Also remove a duplicate ADD_C_FILE: SOURCES in the relay module.
Obviously correct fixes to already-reviewed code.
Nick Mathewson [Wed, 15 Jan 2020 18:10:14 +0000 (13:10 -0500)]
Merge remote-tracking branch 'tor-github/pr/1657'
teor [Wed, 15 Jan 2020 14:46:31 +0000 (00:46 +1000)]
Merge remote-tracking branch 'tor-github/pr/1661'
teor [Wed, 15 Jan 2020 12:31:10 +0000 (22:31 +1000)]
Merge remote-tracking branch 'tor-github/pr/1634'
"Ours" merge, because ticket 32883 replaces this code with calls
to tor_run_main(). (Which then calls the pubsub functions.)
Therefore, this PR is obsolete in master, but it still needs to be
merged, to avoid conflicts during any future backport.
teor [Wed, 15 Jan 2020 12:31:01 +0000 (22:31 +1000)]
Merge branch 'pr1599_squashed'
teor [Tue, 14 Jan 2020 07:24:11 +0000 (17:24 +1000)]
practracker: Wrap long lines in the test script
teor [Tue, 14 Jan 2020 07:23:41 +0000 (17:23 +1000)]
practracker: Test practracker exit status
Part of 32705.
teor [Tue, 14 Jan 2020 07:20:36 +0000 (17:20 +1000)]
practracker: Fail tests if any process exits unexpectedly
Part of 32705.
teor [Thu, 12 Dec 2019 06:15:29 +0000 (16:15 +1000)]
practracker: Capture stderr output in test_practracker.sh
And canonicalise file paths, so that output is consistent, even in
out-of-tree builds.
Capturing stderr output produces better diagnostics.
Diagnostics for 32705.
teor [Wed, 15 Jan 2020 02:28:00 +0000 (12:28 +1000)]
scripts/git: Improve branch list comments
Hopefully, these explanations make it easier to get the next branch
transition right.
Part of 32772.
teor [Wed, 15 Jan 2020 02:22:38 +0000 (12:22 +1000)]
scripts/git: Fix git-merge-forward after removing 0.2.9
We need a test branch for the earliest maint branch (maint-0.3.5),
but we can't merge forward into it, because there is no previous
active maint branch.
Also, edit a git-push-all comment that still said "029".
Bugfix on 32772; bug not in any released version of tor.
David Goulet [Tue, 14 Jan 2020 19:03:21 +0000 (14:03 -0500)]
Merge branch 'tor-github/pr/1633'
Nick Mathewson [Tue, 14 Jan 2020 18:31:20 +0000 (13:31 -0500)]
Merge branch 'ticket32892_043_01_squashed'
David Goulet [Tue, 7 Jan 2020 20:03:24 +0000 (15:03 -0500)]
chan: Remove dead var cell handler from channel_t
The variable lenght cells are handled directly by
channel_tls_handle_var_cell() from an OR connection reading its inbuf. The
channel var cell handler (agnostic) was never used.
Closes #32892
Signed-off-by: David Goulet <dgoulet@torproject.org>
Nick Mathewson [Tue, 14 Jan 2020 18:16:39 +0000 (13:16 -0500)]
Replace an assertion with a check-and-log
We hit this assertion with bug 32868, but I'm stymied figuring out
how we wound up with a routerstatus like this. This patch is a
diagnostic to attempt to figure out what is going on, and to avoid a
crash in the meantime.
Nick Mathewson [Tue, 14 Jan 2020 17:46:14 +0000 (12:46 -0500)]
Merge remote-tracking branch 'tor-github/pr/1636'
Nick Mathewson [Tue, 14 Jan 2020 17:42:41 +0000 (12:42 -0500)]
Merge branch 'ticket32883'
Nick Mathewson [Tue, 14 Jan 2020 17:42:19 +0000 (12:42 -0500)]
Merge branch 'ticket32825_squashed'
Nick Mathewson [Fri, 20 Dec 2019 15:06:08 +0000 (10:06 -0500)]
changes file for 32825
Nick Mathewson [Fri, 20 Dec 2019 15:04:56 +0000 (10:04 -0500)]
Rename UTIL_TEST_NO_WIN to reflect intent
Now that these tests are skipped on windows _and_ android, we should
name the macro that skips them after the functionality that the
tests depend on.
Closes last part of 32825.
Nick Mathewson [Tue, 14 Jan 2020 17:40:07 +0000 (12:40 -0500)]
Merge remote-tracking branch 'tor-github/pr/1659'
George Kadianakis [Tue, 14 Jan 2020 10:21:29 +0000 (12:21 +0200)]
Merge branch 'tor-github/pr/1656'
teor [Tue, 14 Jan 2020 07:41:44 +0000 (17:41 +1000)]
Merge branch 'maint-0.4.2'
teor [Tue, 14 Jan 2020 07:32:11 +0000 (17:32 +1000)]
practracker: print a notice to stderr when disabled
When TOR_DISABLE_PRACTRACKER is set, print a message to
stderr when skipping practracker checks.
Part of 32705.
Neel Chauhan [Mon, 13 Jan 2020 22:55:16 +0000 (14:55 -0800)]
Deprecate the ClientAutoIPv6ORPort option
Nick Mathewson [Mon, 13 Jan 2020 21:17:51 +0000 (16:17 -0500)]
test_practracker.sh: never disable practracker
When practracker is disabled, its output will be empty. We don't
want that happening during our tests.
Fixes bug 32705; bugfix on 0.4.2.1-alpha, when test_practracker.sh
was introduced.
Nick Mathewson [Mon, 13 Jan 2020 18:26:23 +0000 (13:26 -0500)]
Merge branch 'pr_1643_squashed'
Taylor Yu [Thu, 9 Jan 2020 17:12:55 +0000 (11:12 -0600)]
manpage: group some SafeSocks-related options
Move some SafeSocks-related options near each other. Part of ticket
32846.
Taylor Yu [Thu, 9 Jan 2020 16:57:40 +0000 (10:57 -0600)]
manpge: reorder some padding-related options
Move ReducedCircuitPadding and ReducedConnectionPadding immediately
after the corresponding non-Reduced options. Part of ticket 32846.
Taylor Yu [Thu, 9 Jan 2020 16:41:26 +0000 (10:41 -0600)]
manpage: GuardfractionFile is authority-only
Only directory authorities use the GuardfractionFile option, so move
it to that section. Part of ticket 32846.
Swati Thacker [Thu, 26 Dec 2019 18:52:54 +0000 (00:22 +0530)]
manpage: alphabetize client options
Alphabetize client options in tor.1.txt. Closes ticket32846.
Nick Mathewson [Mon, 13 Jan 2020 14:34:17 +0000 (09:34 -0500)]
Split core/include.am into per-subdirectory include.am files
Closes ticket 32137.
David Goulet [Mon, 13 Jan 2020 14:25:26 +0000 (09:25 -0500)]
hs-v2: Always check rend_cache validity before using it
When looking up an entry in the rend_cache, stop asserting that it exists but
rather confirm it exists and if not, return that no entry was found.
The reason for that is because the hs_circ_cleanup_on_free() function (which
can end up looking at the rend_cache) can be called from the
circuit_free_all() function that is called _after_ the rend cache is cleaned
up in tor_free_all().
We could fix the free all ordering but then it will just hide a future bug.
Instead, handle a missing rend_cache as a valid use case as in while we are in
the cleanup process.
As Tor becomes more modular, it is getting more and more difficult to ensure
subsystem callstack ordering thus this fix aims at making the HSv2 subsystem
more robust at being called while tor is pretty much in any kind of state.
Fixes #32847.
Signed-off-by: David Goulet <dgoulet@torproject.org>
Nick Mathewson [Thu, 9 Jan 2020 21:02:41 +0000 (16:02 -0500)]
Merge branch 'disable_ns_macro'
Nick Mathewson [Thu, 9 Jan 2020 20:27:32 +0000 (15:27 -0500)]
Merge branch 'ticket22029_attempt_squashed'
Neel Chauhan [Sat, 14 Dec 2019 18:27:26 +0000 (13:27 -0500)]
Add changes file for Bug #22029
Neel Chauhan [Sat, 14 Dec 2019 18:26:42 +0000 (13:26 -0500)]
Update tor.1 man page for Bug #22029
Neel Chauhan [Sat, 14 Dec 2019 18:22:15 +0000 (13:22 -0500)]
Add dirserv_load_fingerprint_file() test
Neel Chauhan [Sat, 14 Dec 2019 18:16:59 +0000 (13:16 -0500)]
Allow
ed25519 keys to be banned in approved-routers
Nick Mathewson [Thu, 9 Jan 2020 16:51:46 +0000 (11:51 -0500)]
Changes file for ticket 32887 (NS*() removal)
Nick Mathewson [Thu, 9 Jan 2020 16:43:49 +0000 (11:43 -0500)]
Fix wide lines from NS() removal fallout.
Nick Mathewson [Thu, 9 Jan 2020 15:29:56 +0000 (10:29 -0500)]
Remove NS*() macros from test.h.
We never used them very much, and although they had potential to
clarify some of our tests, they also made some of the logic harder
for people to follow. Clang-format can't make head or tail of them,
so the time has come to say goodbye to them.
Nick Mathewson [Thu, 9 Jan 2020 15:26:10 +0000 (10:26 -0500)]
Remove all usage of the NS*() macros in test*.c
This is an automatically generated commit, made with the following
kludgey perl script. It results in a number of wide lines, which
I'll clean up in a subsequent commit.
#/usr/bin/perl -w -i
$mod = "NS_MODULE";
$submod = "NS_SUBMODULE";
$last_was_empty = 0;
while (<>) {
s/\bASPECT\(\s*(\w+)\s*,\s*(\w+)\s*\)/$1_$2/;
if (/# *define +NS_MODULE +(\w+)/) {
$mod = $1;
next;
} elsif (/# *define +NS_SUBMODULE +(\w+)/) {
$submod = $1;
next;
}
next if (/#undef NS_(SUB)?MODULE/);
s/NS\(\s*test_main\s*\)/test_${mod}_${submod}/;
s/NS\(\s*(\w+)\s*\)/${mod}_${submod}_$1/g;
s/NS_FULL\(\\s*(\w+)\s*,\s*(\w+),\s*(\w+)\s*\)/$1_$2_$3/;
s/^(\s*)NS_MOCK\(\s*(\w+)\s*\)/$1MOCK($2,\n$1 ${mod}_${submod}_$2)/;
s/NS_UNMOCK\(\s*(\w+)\s*\)/UNMOCK($1)/;
s/TEST_CASE\(\s*(\w+)\s*\)/{ "$1", test_${mod}_$1, TT_FORK, NULL, NULL }/;
s/TEST_CASE_ASPECT\(\s*(\w+)\s*,\s*(\w+)\s*\)/{ "$1_$2", test_${mod}_$1_$2, TT_FORK, NULL, NULL }/;
s/NS_DECL\(\s*([^,]+)\s*,\s*([^,]+)\s*,\s*(\(.*)\);/static $1 ${mod}_${submod}_$2$3;\nATTR_UNUSED static int ${mod}_${submod}_$2_called = 0;/;
s/\bCALLED\(\s*(\w+)\s*\)/${mod}_${submod}_$1_called/;
if (/^$/) {
print if (! $last_was_empty);
$last_was_empty = 1;
} else {
$last_was_empty = 0;
print;
}
if (eof) {
$mod = "NS_MODULE";
$submod = "NS_SUBMODULE";
$last_was_empty = 0;
}
}
# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
#
# Date: Thu Jan 9 10:26:10 2020 -0500
#
# On branch disable_ns_macro
# Changes to be committed:
# modified: src/test/test_accounting.c
# modified: src/test/test_compat_libevent.c
# modified: src/test/test_dir.c
# modified: src/test/test_dir_handle_get.c
# modified: src/test/test_dns.c
# modified: src/test/test_options.c
# modified: src/test/test_procmon.c
# modified: src/test/test_rendcache.c
# modified: src/test/test_router.c
# modified: src/test/test_routerset.c
# modified: src/test/test_status.c
# modified: src/test/test_tortls.c
# modified: src/test/test_tortls_openssl.c
# modified: src/test/test_util_format.c
# modified: src/test/test_util_process.c
#
# Untracked files:
# experiments/
# locate_options.sh
# un_ns.pl
#
# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
#
# Date: Thu Jan 9 10:26:10 2020 -0500
#
# On branch disable_ns_macro
# Changes to be committed:
# modified: src/test/test_accounting.c
# modified: src/test/test_compat_libevent.c
# modified: src/test/test_dir.c
# modified: src/test/test_dir_handle_get.c
# modified: src/test/test_dns.c
# modified: src/test/test_options.c
# modified: src/test/test_procmon.c
# modified: src/test/test_rendcache.c
# modified: src/test/test_router.c
# modified: src/test/test_routerset.c
# modified: src/test/test_status.c
# modified: src/test/test_tortls.c
# modified: src/test/test_tortls_openssl.c
# modified: src/test/test_util_format.c
# modified: src/test/test_util_process.c
#
# Untracked files:
# experiments/
# locate_options.sh
# un_ns.pl
#
Nick Mathewson [Thu, 9 Jan 2020 16:01:45 +0000 (11:01 -0500)]
Replace various NS_MODULE/SUBMODULE vals with shorter names.
This will help avoid wide lines in our output.
Nick Mathewson [Thu, 9 Jan 2020 15:06:35 +0000 (10:06 -0500)]
Put all NS_DECL invocations on single lines.
This is going to make my script happier; these lines will soon
disappear.
Nick Mathewson [Thu, 9 Jan 2020 14:56:41 +0000 (09:56 -0500)]
Always define NS_MODULE and NS_SUBMODULE when NS is used.
When these macros aren't defined, the expansions of the NS macros
can get particularly ugly.
Nick Mathewson [Thu, 9 Jan 2020 12:32:39 +0000 (07:32 -0500)]
Merge branch 'pre_formatter_cleanups_squashed'
Nick Mathewson [Mon, 16 Dec 2019 19:45:40 +0000 (14:45 -0500)]
changes file for 32764.
Nick Mathewson [Mon, 16 Dec 2019 18:37:49 +0000 (13:37 -0500)]
process.h: include stdbool.h
We use bool, so we should include stdbool.
Nick Mathewson [Mon, 16 Dec 2019 18:24:21 +0000 (13:24 -0500)]
conscache.h: declare config_line_t structure.
This frees us from a dependency on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:20:31 +0000 (13:20 -0500)]
Turn authdir_mode_v3() into a non-inline function
This change means that authmode.h no longer needs to see
or_options_t, and frees us from an ordering dependency.
Nick Mathewson [Mon, 16 Dec 2019 18:17:11 +0000 (13:17 -0500)]
Include ht.h in all headers that use HT_ENTRY()
Without this change, compilation success depends on include order in
several tricky ways.
Nick Mathewson [Mon, 16 Dec 2019 18:16:35 +0000 (13:16 -0500)]
consdiffmgr.h: use struct declarations for several types
This prevents a dependency on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:14:20 +0000 (13:14 -0500)]
hs_circuitmap.h: use a struct declaration
This fixes a case where our compilation would depend on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:13:13 +0000 (13:13 -0500)]
routerparse.h: include parsecommon.h when exposing token table.
Without this include, our compilation depends more on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:12:22 +0000 (13:12 -0500)]
process.h: add a struct declaration for buf_t.
This lets us avoid a dependency on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:11:06 +0000 (13:11 -0500)]
timers.h: add declaration for timeval.
This frees us from some dependencies on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:10:20 +0000 (13:10 -0500)]
lib/conf: include torint.h in files that use it.
This frees us from some dependencies on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:08:08 +0000 (13:08 -0500)]
control_hs.h: use a couple of struct delcarations
Doing this frees us from some assumptions about include order.
Nick Mathewson [Mon, 16 Dec 2019 18:07:00 +0000 (13:07 -0500)]
connection.h: new includes and struct declarations
Using these frees us from several dependencies on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:06:00 +0000 (13:06 -0500)]
siphash.h: include stdint.
Doing this gives us a valid uint64_t type, freeing us from
dependencies on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:05:01 +0000 (13:05 -0500)]
hs_circuit: use struct declaration.
This frees us from a dependency on include order.
Nick Mathewson [Mon, 16 Dec 2019 18:04:07 +0000 (13:04 -0500)]
or_options_st.h: Add an include and a struct declaration.
This frees us from some dependencies on include order.
Nick Mathewson [Mon, 16 Dec 2019 17:58:58 +0000 (12:58 -0500)]
Include x509.h in tortls_internal.h.
This gives us the definition of tor_x509_cert_impl_t, and makes us
less dependent on include order.
Nick Mathewson [Mon, 16 Dec 2019 17:58:25 +0000 (12:58 -0500)]
Include sys/types.h in fdio.h, for "off_t".
Otherwise our compilation depends on include order.
Nick Mathewson [Mon, 16 Dec 2019 17:57:27 +0000 (12:57 -0500)]
Use raw_assert in ht.h
Also, include torerr.h from ht.h if we are using raw_assert.
Otherwise, our includes need to be ordered so that ht.h comes after
util_log.h.
Nick Mathewson [Tue, 3 Dec 2019 05:51:09 +0000 (00:51 -0500)]
Remove extra ; from tt_assert() macro definition.
We were actually omitting the semicolon in a few places, leading to
confusing indentation and some cocci failures.
Nick Mathewson [Mon, 2 Dec 2019 22:04:17 +0000 (17:04 -0500)]
Use new ENABLE/DISABLE_GCC_WARNING
This is an automated commit, generated by:
perl -i -pe 'next if /define/; s/((?:ENABLE|DISABLE)_GCC_WARNING)\(([A-Za-z0-9_\-]+)\)/$1(\"-W$2\")/' src/*/*/*.[ch] src/*/*.[ch]
Nick Mathewson [Mon, 2 Dec 2019 21:57:37 +0000 (16:57 -0500)]
Replace DISABLE/ENABLE_GCC_WARNING with something that will confuse clang-format less
Nick Mathewson [Thu, 9 Jan 2020 01:50:02 +0000 (20:50 -0500)]
core/include.am: spelling fix
Nick Mathewson [Wed, 8 Jan 2020 23:39:17 +0000 (18:39 -0500)]
It's 2020. Update the copyright dates with "make update-copyright"
Nick Mathewson [Wed, 8 Jan 2020 23:38:24 +0000 (18:38 -0500)]
Run "make autostyle"; add an endif comment
teor [Wed, 8 Jan 2020 07:46:28 +0000 (17:46 +1000)]
router: Improve port search function comments
Roger Dingledine [Tue, 7 Jan 2020 23:25:17 +0000 (18:25 -0500)]
speaking of utf-8, remove strange char from comment
Nick Mathewson [Tue, 7 Jan 2020 15:16:15 +0000 (10:16 -0500)]
Merge branch 'ticket32845_squashed'
teor [Tue, 7 Jan 2020 07:13:22 +0000 (17:13 +1000)]
changes: file for 32845
teor [Tue, 7 Jan 2020 07:09:25 +0000 (17:09 +1000)]
string: Check UTF-8 string pointer and length
If they are inconsistent, output a raw bug log.
Part of 32845.
Nick Mathewson [Tue, 7 Jan 2020 13:59:31 +0000 (08:59 -0500)]
Merge remote-tracking branch 'tor-github/pr/1640'
Nick Mathewson [Tue, 7 Jan 2020 13:22:02 +0000 (08:22 -0500)]
test_helpers: add a missing free for CID
1457527 .
Nick Mathewson [Tue, 7 Jan 2020 13:09:27 +0000 (08:09 -0500)]
Add new state to connection_proxy_state_to_string()
Also, add a CTASSERT() to make sure that we don't let this array get
out-of-sync again.
Found by coverity; this is CID
1457528 .
teor [Tue, 7 Jan 2020 07:05:48 +0000 (17:05 +1000)]
string: Add extra UTF-8 test cases
These test cases are validated differently by some
programming languages, because those languages have
incorrect UTF-8 implementations.
We want to make sure that tor validates them correctly.
Closes ticket 32845.
Neel Chauhan [Tue, 7 Jan 2020 04:20:38 +0000 (20:20 -0800)]
Space the a-d unsigned ints in tor_inet_aton()
Nick Mathewson [Mon, 6 Jan 2020 18:41:20 +0000 (13:41 -0500)]
Merge branch 'haxxpop/tcp_proxy_squashed' into tcp_proxy_squshed_and_merged
Suphanat Chunhapanya [Mon, 2 Dec 2019 07:24:44 +0000 (15:24 +0800)]
circuit: Add change file
Suphanat Chunhapanya [Mon, 21 Oct 2019 17:55:23 +0000 (01:55 +0800)]
test: HTTP CONNECT protocol
Suphanat Chunhapanya [Mon, 21 Oct 2019 10:00:02 +0000 (18:00 +0800)]
test: HAPRoxy protocol
Suphanat Chunhapanya [Tue, 10 Sep 2019 07:32:08 +0000 (15:32 +0800)]
test: Implement haproxy
Suphanat Chunhapanya [Fri, 23 Aug 2019 03:44:49 +0000 (11:44 +0800)]
circuit: Implement haproxy
Nick Mathewson [Mon, 6 Jan 2020 18:32:33 +0000 (13:32 -0500)]
Merge remote-tracking branch 'tor-github/pr/1615'
Nick Mathewson [Mon, 6 Jan 2020 18:31:30 +0000 (13:31 -0500)]
Add documentation about building a TAGS file.
Patch from opara. Closes ticket 32779.
Nick Mathewson [Mon, 6 Jan 2020 18:28:10 +0000 (13:28 -0500)]
Merge remote-tracking branch 'tor-github/pr/1620'
Nick Mathewson [Mon, 6 Jan 2020 18:24:01 +0000 (13:24 -0500)]
Merge branch 'maint-0.4.2'
Nick Mathewson [Mon, 6 Jan 2020 18:20:57 +0000 (13:20 -0500)]
Merge remote-tracking branch 'tor-github/pr/1612' into maint-0.4.2
Nick Mathewson [Mon, 6 Jan 2020 14:37:12 +0000 (09:37 -0500)]
When initializing pthreads, always set the main thread.
Fixes bug 32884. This is a bugfix on 0.3.3.1-alpha, when we started
allowing restart-in-process with tor_api.h.
Nick Mathewson [Mon, 6 Jan 2020 14:19:09 +0000 (09:19 -0500)]
Make ntmain.h functions stubs when NT_SERVICE not enabled.
This lets us simplify main.c a little, and avoid a practracker
exception.
Followup from #32883.
Nick Mathewson [Mon, 6 Jan 2020 14:14:22 +0000 (09:14 -0500)]
Restore feature where nt-services detect non-"run_tor" modes.
Followup for #32883.
Nick Mathewson [Mon, 6 Jan 2020 14:02:49 +0000 (09:02 -0500)]
Use tor_api.h entry points in ntmain.c.
When we updated main.c to use the same entry points as tor_api.h, we
didn't update ntmain.c. This led to bugs as the two got out of
sync.
There are two calls that we drop in this patch: first, I drop the
call to set_main_thread(), since that's redundant with the init
function in compat_winthreads.c (but see #32884). Second, I drop
the check for CMD_RUN_TOR: I'll add that back with a subsequent
commit.
Closes ticket 32883.
Nick Mathewson [Mon, 6 Jan 2020 13:45:29 +0000 (08:45 -0500)]
Initialize publish/subscribe code when running as an NT service.
Fixes bug 32778; bugfix on 0.4.1.1-alpha.
Nick Mathewson [Mon, 6 Jan 2020 13:08:59 +0000 (08:08 -0500)]
Merge branch 'maint-0.4.2'
Nick Mathewson [Mon, 6 Jan 2020 13:08:59 +0000 (08:08 -0500)]
Merge branch 'maint-0.4.1' into maint-0.4.2