fuzz_setup_logging();
- assert_se(manager_new(&m, /* namespace= */ NULL) >= 0);
- dummy_manager_init(m, data, size);
+ dummy_manager_new(&m, data, size);
process_audit_string(m, 0, m->buffer, size);
return 0;
fuzz_setup_logging();
- assert_se(manager_new(&m, /* namespace= */ NULL) >= 0);
- dummy_manager_init(m, data, size);
+ dummy_manager_new(&m, data, size);
dev_kmsg_record(m, m->buffer, size);
return 0;
fuzz_setup_logging();
- assert_se(manager_new(&m, /* namespace= */ NULL) >= 0);
- dummy_manager_init(m, NULL, 0);
+ dummy_manager_new(&m, NULL, 0);
sealed_fd = memfd_new_and_seal(NULL, data, size);
assert_se(sealed_fd >= 0);
fuzz_setup_logging();
assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0, stream_fds) >= 0);
- assert_se(manager_new(&m, /* namespace= */ NULL) >= 0);
- dummy_manager_init(m, NULL, 0);
+ dummy_manager_new(&m, NULL, 0);
assert_se(stdout_stream_install(m, stream_fds[0], &stream) >= 0);
fd0 = TAKE_FD(stream_fds[0]); /* avoid double close */
#include "alloc-util.h"
#include "fuzz-journald.h"
#include "journald-manager.h"
+#include "tests.h"
-void dummy_manager_init(Manager *m, const uint8_t *buffer, size_t size) {
- assert(m);
+void dummy_manager_new(Manager **ret, const uint8_t *buffer, size_t size) {
+ _cleanup_(manager_freep) Manager *m = NULL;
+
+ assert(ret);
+ ASSERT_OK(manager_new(&m));
+ manager_merge_configs(m);
m->config.storage = STORAGE_NONE;
- assert_se(sd_event_default(&m->event) >= 0);
+ ASSERT_OK(sd_event_default(&m->event));
+
+ if (buffer)
+ ASSERT_NOT_NULL(m->buffer = memdup_suffix0(buffer, size));
- if (buffer) {
- m->buffer = memdup_suffix0(buffer, size);
- assert_se(m->buffer);
- }
+ *ret = TAKE_PTR(m);
}
void fuzz_journald_processing_function(
const uint8_t *data,
size_t size,
- void (*f)(Manager *m, const char *buf, size_t raw_len, const struct ucred *ucred, const struct timeval *tv, const char *label, size_t label_len)
- ) {
-
- _cleanup_(manager_freep) Manager *m = NULL;
- char *label = NULL;
- size_t label_len = 0;
- struct ucred *ucred = NULL;
- struct timeval *tv = NULL;
+ journal_process_t f) {
if (size == 0)
return;
- assert_se(manager_new(&m, /* namespace= */ NULL) >= 0);
- dummy_manager_init(m, data, size);
- (*f)(m, m->buffer, size, ucred, tv, label, label_len);
+ _cleanup_(manager_freep) Manager *m = NULL;
+ dummy_manager_new(&m, data, size);
+ f(m, m->buffer, size, /* ucred = */ NULL, /* tv = */ NULL, /* label = */ NULL, /* label_len = */ 0);
}
#include "journald-manager.h"
-void dummy_manager_init(Manager *m, const uint8_t *buffer, size_t size);
+typedef void (*journal_process_t)(
+ Manager *m,
+ const char *buf,
+ size_t raw_len,
+ const struct ucred *ucred,
+ const struct timeval *tv,
+ const char *label,
+ size_t label_len);
+
+void dummy_manager_new(Manager **ret, const uint8_t *buffer, size_t size);
void fuzz_journald_processing_function(
const uint8_t *data,
size_t size,
- void (*f)(Manager *m, const char *buf, size_t raw_len, const struct ucred *ucred, const struct timeval *tv, const char *label, size_t label_len)
-);
+ journal_process_t f);
free(c->tty_path);
}
-static void journal_config_set_defaults(JournalConfig *c) {
+void journal_config_set_defaults(JournalConfig *c) {
assert(c);
journal_config_done(c);
m->config_by_cred.name ?: \
default_value
-static void manager_merge_configs(Manager *m) {
+void manager_merge_configs(Manager *m) {
assert(m);
/* From highest to lowest priority: cmdline, conf, cred */
assert(m);
- journal_config_set_defaults(&m->config_by_conf);
- journal_config_set_defaults(&m->config_by_cred);
- journal_config_set_defaults(&m->config_by_cmdline);
-
manager_load_credentials(&m->config_by_cred);
manager_parse_config_file(m);
} JournalConfig;
void journal_config_done(JournalConfig *c);
+void journal_config_set_defaults(JournalConfig *c);
+void manager_merge_configs(Manager *m);
void manager_load_config(Manager *m);
int manager_dispatch_reload_signal(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata);
return 1;
}
-static int manager_set_namespace(Manager *m, const char *namespace) {
+int manager_set_namespace(Manager *m, const char *namespace) {
assert(m);
if (!namespace)
return 0;
}
-int manager_new(Manager **ret, const char *namespace) {
+int manager_new(Manager **ret) {
_cleanup_(manager_freep) Manager *m = NULL;
- int r;
assert(ret);
.sigrtmin18_info.memory_pressure_userdata = m,
};
- r = manager_set_namespace(m, namespace);
- if (r < 0)
- return r;
-
- manager_load_config(m);
+ journal_config_set_defaults(&m->config_by_conf);
+ journal_config_set_defaults(&m->config_by_cred);
+ journal_config_set_defaults(&m->config_by_cmdline);
*ret = TAKE_PTR(m);
return 0;
void manager_driver_message_internal(Manager *m, pid_t object_pid, const char *format, ...) _sentinel_;
#define manager_driver_message(...) manager_driver_message_internal(__VA_ARGS__, NULL)
-int manager_new(Manager **ret, const char *namespace);
+int manager_new(Manager **ret);
+int manager_set_namespace(Manager *m, const char *namespace);
int manager_init(Manager *m);
Manager* manager_free(Manager *m);
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
sigbus_install();
- r = manager_new(&m, namespace);
+ r = manager_new(&m);
if (r < 0)
return log_oom();
+ r = manager_set_namespace(m, namespace);
+ if (r < 0)
+ return r;
+
+ manager_load_config(m);
+
r = manager_init(m);
if (r < 0)
return r;