mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
tree-wide: set SD_JOURNAL_ASSUME_IMMUTABLE where appropriate
Co-authored-by: Costa Tsaousis <costa@netdata.cloud>
This commit is contained in:
@@ -128,19 +128,19 @@ static int acquire_journal(sd_journal **ret, char **matches) {
|
||||
assert(ret);
|
||||
|
||||
if (arg_directory) {
|
||||
r = sd_journal_open_directory(&j, arg_directory, 0);
|
||||
r = sd_journal_open_directory(&j, arg_directory, SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journals in directory: %s: %m", arg_directory);
|
||||
} else if (arg_root) {
|
||||
r = sd_journal_open_directory(&j, arg_root, SD_JOURNAL_OS_ROOT);
|
||||
r = sd_journal_open_directory(&j, arg_root, SD_JOURNAL_OS_ROOT | SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journals in root directory: %s: %m", arg_root);
|
||||
} else if (arg_file) {
|
||||
r = sd_journal_open_files(&j, (const char**)arg_file, 0);
|
||||
r = sd_journal_open_files(&j, (const char**)arg_file, SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal files: %m");
|
||||
} else {
|
||||
r = sd_journal_open(&j, arg_all ? 0 : SD_JOURNAL_LOCAL_ONLY);
|
||||
r = sd_journal_open(&j, arg_all ? 0 : SD_JOURNAL_LOCAL_ONLY | SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal: %m");
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
|
||||
/* Out */
|
||||
|
||||
r = sd_journal_open_files(&j, (const char**) STRV_MAKE(name), 0);
|
||||
r = sd_journal_open_files(&j, (const char**) STRV_MAKE(name), SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "sd_journal_open_files([\"%s\"]) failed: %m", name);
|
||||
assert_se(IN_SET(r, -ENOMEM, -EMFILE, -ENFILE, -ENODATA));
|
||||
|
||||
@@ -777,7 +777,7 @@ static int open_journal(sd_journal **j) {
|
||||
else if (arg_file)
|
||||
r = sd_journal_open_files(j, (const char**) arg_file, 0);
|
||||
else if (arg_machine)
|
||||
r = journal_open_machine(j, arg_machine);
|
||||
r = journal_open_machine(j, arg_machine, 0);
|
||||
else
|
||||
r = sd_journal_open_namespace(j, arg_namespace,
|
||||
(arg_merge ? 0 : SD_JOURNAL_LOCAL_ONLY) | arg_namespace_flags | arg_journal_type);
|
||||
|
||||
@@ -60,7 +60,7 @@ static int acquire_first_emergency_log_message(char **ret) {
|
||||
|
||||
assert(ret);
|
||||
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY | SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal: %m");
|
||||
|
||||
|
||||
@@ -130,6 +130,7 @@ static const char *arg_field = NULL;
|
||||
static bool arg_catalog = false;
|
||||
static bool arg_reverse = false;
|
||||
static int arg_journal_type = 0;
|
||||
static int arg_journal_additional_open_flags = 0;
|
||||
static int arg_namespace_flags = 0;
|
||||
static char *arg_root = NULL;
|
||||
static char *arg_image = NULL;
|
||||
@@ -1153,6 +1154,9 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
arg_reverse = true;
|
||||
}
|
||||
|
||||
if (!arg_follow)
|
||||
arg_journal_additional_open_flags = SD_JOURNAL_ASSUME_IMMUTABLE;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2413,21 +2417,21 @@ static int run(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
if (arg_directory)
|
||||
r = sd_journal_open_directory(&j, arg_directory, arg_journal_type);
|
||||
r = sd_journal_open_directory(&j, arg_directory, arg_journal_type | arg_journal_additional_open_flags);
|
||||
else if (arg_root)
|
||||
r = sd_journal_open_directory(&j, arg_root, arg_journal_type | SD_JOURNAL_OS_ROOT);
|
||||
r = sd_journal_open_directory(&j, arg_root, arg_journal_type | arg_journal_additional_open_flags | SD_JOURNAL_OS_ROOT);
|
||||
else if (arg_file_stdin)
|
||||
r = sd_journal_open_files_fd(&j, (int[]) { STDIN_FILENO }, 1, 0);
|
||||
r = sd_journal_open_files_fd(&j, (int[]) { STDIN_FILENO }, 1, arg_journal_additional_open_flags);
|
||||
else if (arg_file)
|
||||
r = sd_journal_open_files(&j, (const char**) arg_file, 0);
|
||||
r = sd_journal_open_files(&j, (const char**) arg_file, arg_journal_additional_open_flags);
|
||||
else if (arg_machine)
|
||||
r = journal_open_machine(&j, arg_machine);
|
||||
r = journal_open_machine(&j, arg_machine, arg_journal_additional_open_flags);
|
||||
else
|
||||
r = sd_journal_open_namespace(
|
||||
&j,
|
||||
arg_namespace,
|
||||
(arg_merge ? 0 : SD_JOURNAL_LOCAL_ONLY) |
|
||||
arg_namespace_flags | arg_journal_type);
|
||||
arg_namespace_flags | arg_journal_type | arg_journal_additional_open_flags);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open %s: %m", arg_directory ?: arg_file ? "files" : "journal");
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
test_setup_logging(LOG_DEBUG);
|
||||
|
||||
assert_se(sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY) >= 0);
|
||||
assert_se(sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY | SD_JOURNAL_ASSUME_IMMUTABLE) >= 0);
|
||||
|
||||
assert_se(sd_journal_add_match(j, "_TRANSPORT=syslog", 0) >= 0);
|
||||
assert_se(sd_journal_add_match(j, "_UID=0", 0) >= 0);
|
||||
|
||||
@@ -36,9 +36,9 @@ static void test_journal_flush_one(int argc, char *argv[]) {
|
||||
assert_se(r >= 0);
|
||||
|
||||
if (argc > 1)
|
||||
r = sd_journal_open_files(&j, (const char **) strv_skip(argv, 1), 0);
|
||||
r = sd_journal_open_files(&j, (const char **) strv_skip(argv, 1), SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
else
|
||||
r = sd_journal_open(&j, 0);
|
||||
r = sd_journal_open(&j, SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
assert_se(r == 0);
|
||||
|
||||
sd_journal_set_data_threshold(j, 0);
|
||||
@@ -75,7 +75,7 @@ static void test_journal_flush_one(int argc, char *argv[]) {
|
||||
|
||||
/* Open the new journal before archiving and offlining the file. */
|
||||
sd_journal_close(j);
|
||||
assert_se(sd_journal_open_directory(&j, dn, 0) >= 0);
|
||||
assert_se(sd_journal_open_directory(&j, dn, SD_JOURNAL_ASSUME_IMMUTABLE) >= 0);
|
||||
|
||||
/* Read the online journal. */
|
||||
assert_se(sd_journal_seek_tail(j) >= 0);
|
||||
|
||||
@@ -31,12 +31,12 @@ int main(int argc, char *argv[]) {
|
||||
(void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
|
||||
|
||||
for (i = 0; i < I; i++) {
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY | SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
assert_se(r == 0);
|
||||
|
||||
sd_journal_close(j);
|
||||
|
||||
r = sd_journal_open_directory(&j, t, 0);
|
||||
r = sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
assert_se(r == 0);
|
||||
|
||||
assert_se(sd_journal_seek_head(j) == 0);
|
||||
|
||||
@@ -260,14 +260,14 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
setup();
|
||||
|
||||
/* Seek to head, iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */
|
||||
test_check_numbers_down(j, 9);
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head, iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */
|
||||
assert_se(sd_journal_previous(j) == 0); /* no-op */
|
||||
@@ -275,7 +275,7 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head twice, iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
@@ -284,7 +284,7 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head, move to previous, then iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_previous(j) == 0); /* no-op */
|
||||
assert_se(sd_journal_next(j) == 1); /* pointing to the first entry */
|
||||
@@ -292,7 +292,7 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head, walk several steps, then iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_previous(j) == 0); /* no-op */
|
||||
assert_se(sd_journal_previous(j) == 0); /* no-op */
|
||||
@@ -304,14 +304,14 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail, iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */
|
||||
test_check_numbers_up(j, 9);
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail twice, iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
@@ -320,7 +320,7 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail, move to next, then iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_next(j) == 0); /* no-op */
|
||||
assert_se(sd_journal_previous(j) == 1); /* pointing to the last entry */
|
||||
@@ -328,7 +328,7 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail, walk several steps, then iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_next(j) == 0); /* no-op */
|
||||
assert_se(sd_journal_next(j) == 0); /* no-op */
|
||||
@@ -340,14 +340,14 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail, skip to head, iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_previous_skip(j, 9) == 9); /* pointing to the first entry. */
|
||||
test_check_numbers_down(j, 9);
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to tail, skip to head in a more complex way, then iterate down. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_tail(j));
|
||||
assert_se(sd_journal_next(j) == 0);
|
||||
assert_se(sd_journal_previous_skip(j, 4) == 4);
|
||||
@@ -366,14 +366,14 @@ static void test_skip_one(void (*setup)(void)) {
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head, skip to tail, iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_next_skip(j, 9) == 9);
|
||||
test_check_numbers_up(j, 9);
|
||||
sd_journal_close(j);
|
||||
|
||||
/* Seek to head, skip to tail in a more complex way, then iterate up. */
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_ret(sd_journal_seek_head(j));
|
||||
assert_se(sd_journal_previous(j) == 0);
|
||||
assert_se(sd_journal_next_skip(j, 4) == 4);
|
||||
@@ -409,14 +409,14 @@ static void test_boot_id_one(void (*setup)(void), size_t n_boots_expected) {
|
||||
|
||||
setup();
|
||||
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_se(journal_get_boots(j, &boots, &n_boots) >= 0);
|
||||
assert_se(boots);
|
||||
assert_se(n_boots == n_boots_expected);
|
||||
sd_journal_close(j);
|
||||
|
||||
FOREACH_ARRAY(b, boots, n_boots) {
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_se(journal_find_boot_by_id(j, b->id) == 1);
|
||||
sd_journal_close(j);
|
||||
}
|
||||
@@ -424,7 +424,7 @@ static void test_boot_id_one(void (*setup)(void), size_t n_boots_expected) {
|
||||
for (int i = - (int) n_boots + 1; i <= (int) n_boots; i++) {
|
||||
sd_id128_t id;
|
||||
|
||||
assert_ret(sd_journal_open_directory(&j, t, 0));
|
||||
assert_ret(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE));
|
||||
assert_se(journal_find_boot_by_offset(j, i, &id) == 1);
|
||||
if (i <= 0)
|
||||
assert_se(sd_id128_equal(id, boots[n_boots + i - 1].id));
|
||||
|
||||
@@ -16,7 +16,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
test_setup_logging(LOG_DEBUG);
|
||||
|
||||
assert_se(sd_journal_open(&j, 0) >= 0);
|
||||
assert_se(sd_journal_open(&j, SD_JOURNAL_ASSUME_IMMUTABLE) >= 0);
|
||||
|
||||
assert_se(sd_journal_add_match(j, "foobar", 0) < 0);
|
||||
assert_se(sd_journal_add_match(j, "foobar=waldo", 0) < 0);
|
||||
|
||||
@@ -119,7 +119,7 @@ static void run_test(void) {
|
||||
(void) journal_file_offline_close(two);
|
||||
(void) journal_file_offline_close(three);
|
||||
|
||||
assert_se(sd_journal_open_directory(&j, t, 0) >= 0);
|
||||
assert_se(sd_journal_open_directory(&j, t, SD_JOURNAL_ASSUME_IMMUTABLE) >= 0);
|
||||
|
||||
assert_se(sd_journal_add_match(j, "MAGIC=quux", 0) >= 0);
|
||||
SD_JOURNAL_FOREACH_BACKWARDS(j) {
|
||||
|
||||
@@ -1597,7 +1597,7 @@ static int show_logs(const LinkInfo *info) {
|
||||
if (arg_lines == 0)
|
||||
return 0;
|
||||
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY | SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal: %m");
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ int journal_access_check_and_warn(sd_journal *j, bool quiet, bool want_other_use
|
||||
return r;
|
||||
}
|
||||
|
||||
int journal_open_machine(sd_journal **ret, const char *machine) {
|
||||
int journal_open_machine(sd_journal **ret, const char *machine, int flags) {
|
||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -178,7 +178,7 @@ int journal_open_machine(sd_journal **ret, const char *machine) {
|
||||
if (machine_fd < 0)
|
||||
return log_error_errno(errno, "Failed to duplicate file descriptor: %m");
|
||||
|
||||
r = sd_journal_open_directory_fd(&j, machine_fd, SD_JOURNAL_OS_ROOT | SD_JOURNAL_TAKE_DIRECTORY_FD);
|
||||
r = sd_journal_open_directory_fd(&j, machine_fd, SD_JOURNAL_OS_ROOT | SD_JOURNAL_TAKE_DIRECTORY_FD | flags);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal in machine '%s': %m", machine);
|
||||
|
||||
|
||||
@@ -8,4 +8,4 @@
|
||||
|
||||
int journal_access_blocked(sd_journal *j);
|
||||
int journal_access_check_and_warn(sd_journal *j, bool quiet, bool want_other_users);
|
||||
int journal_open_machine(sd_journal **ret, const char *machine);
|
||||
int journal_open_machine(sd_journal **ret, const char *machine, int flags);
|
||||
|
||||
@@ -1801,7 +1801,10 @@ int show_journal_by_unit(
|
||||
if (how_many <= 0)
|
||||
return 0;
|
||||
|
||||
r = sd_journal_open_namespace(&j, log_namespace, journal_open_flags | SD_JOURNAL_INCLUDE_DEFAULT_NAMESPACE);
|
||||
r = sd_journal_open_namespace(&j, log_namespace,
|
||||
journal_open_flags |
|
||||
SD_JOURNAL_INCLUDE_DEFAULT_NAMESPACE |
|
||||
SD_JOURNAL_ASSUME_IMMUTABLE);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to open journal: %m");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user