mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-28 00:53:04 +01:00
Tor has a feature to preserve unrecognized state file entries in order to maintain forward compatibility. But this feature, along with some unused code that we never actually removed, led to us keeping items that were of no use to the user, other than at worst to preserve ancient information about them. This commit adds a feature to remove obsolete entries when we load the file. Closes ticket 40137.
56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
/* Copyright (c) 2001-2004, Roger Dingledine.
|
|
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
|
|
* Copyright (c) 2007-2020, The Tor Project, Inc. */
|
|
/* See LICENSE for licensing information */
|
|
|
|
#include "orconfig.h"
|
|
|
|
#define STATEFILE_PRIVATE
|
|
|
|
#include "core/or/or.h"
|
|
#include "lib/encoding/confline.h"
|
|
#include "app/config/statefile.h"
|
|
|
|
#include "test/test.h"
|
|
|
|
static void
|
|
test_statefile_remove_obsolete(void *arg)
|
|
{
|
|
(void)arg;
|
|
config_line_t *inp = NULL;
|
|
/* try empty config */
|
|
or_state_remove_obsolete_lines(&inp);
|
|
tt_assert(!inp);
|
|
|
|
/* try removing every line */
|
|
config_line_append(&inp, "EntryGuard", "doesn't matter");
|
|
config_line_append(&inp, "HidServRevCounter", "ignore");
|
|
config_line_append(&inp, "hidservrevcounter", "foobar"); // note case
|
|
or_state_remove_obsolete_lines(&inp);
|
|
tt_assert(!inp);
|
|
|
|
/* Now try removing a subset of lines. */
|
|
config_line_append(&inp, "EntryGuard", "doesn't matter");
|
|
config_line_append(&inp, "Guard", "in use");
|
|
config_line_append(&inp, "HidServRevCounter", "ignore");
|
|
config_line_append(&inp, "TorVersion", "this test doesn't care");
|
|
or_state_remove_obsolete_lines(&inp);
|
|
tt_assert(inp);
|
|
tt_str_op(inp->key, OP_EQ, "Guard");
|
|
tt_str_op(inp->value, OP_EQ, "in use");
|
|
tt_assert(inp->next);
|
|
tt_str_op(inp->next->key, OP_EQ, "TorVersion");
|
|
tt_str_op(inp->next->value, OP_EQ, "this test doesn't care");
|
|
tt_assert(! inp->next->next);
|
|
|
|
done:
|
|
config_free_lines(inp);
|
|
}
|
|
|
|
#define T(name) \
|
|
{ #name, test_statefile_##name, 0, NULL, NULL }
|
|
|
|
struct testcase_t statefile_tests[] = {
|
|
T(remove_obsolete),
|
|
END_OF_TESTCASES
|
|
};
|