static void assert_sockaddr_to_hostname(GSockAddr *sa, const gchar *expected) { const gchar *result; gsize result_len = 9999; result = resolve_sockaddr_to_hostname(&result_len, sa, &host_resolve_options); g_sockaddr_unref(sa); assert_string(result, expected, "resolved name mismatch"); assert_gint(result_len, strlen(result), "returned length is not true"); }
void log_source_mangle_hostname(LogSource *self, LogMessage *msg) { const gchar *resolved_name; gsize resolved_name_len; const gchar *orig_host; resolved_name = resolve_sockaddr_to_hostname(&resolved_name_len, msg->saddr, &self->options->host_resolve_options); log_msg_set_value(msg, LM_V_HOST_FROM, resolved_name, resolved_name_len); orig_host = log_msg_get_value(msg, LM_V_HOST, NULL); if (!self->options->keep_hostname || !orig_host || !orig_host[0]) { gchar host[256]; gint host_len = -1; if (G_UNLIKELY(self->options->chain_hostnames)) { msg->flags |= LF_CHAINED_HOSTNAME; if (msg->flags & LF_LOCAL) { /* local */ host_len = g_snprintf(host, sizeof(host), "%s@%s", self->options->group_name, resolved_name); } else if (!orig_host || !orig_host[0]) { /* remote && no hostname */ host_len = g_snprintf(host, sizeof(host), "%s/%s", resolved_name, resolved_name); } else { /* everything else, append source hostname */ if (orig_host && orig_host[0]) host_len = g_snprintf(host, sizeof(host), "%s/%s", orig_host, resolved_name); else { strncpy(host, resolved_name, sizeof(host)); /* just in case it is not zero terminated */ host[255] = 0; } } log_msg_set_value(msg, LM_V_HOST, host, host_len); } else { log_msg_set_value(msg, LM_V_HOST, resolved_name, resolved_name_len); } } }
/* this is the callback function that gets called when the MARK timeout * elapsed. It runs in the main thread. */ static void log_writer_mark_timeout(void *cookie) { LogWriter *self = (LogWriter *)cookie; LogPathOptions path_options = LOG_PATH_OPTIONS_INIT; const gchar *hostname; gsize hostname_len; LogMessage *msg; main_loop_assert_main_thread(); msg = log_msg_new_mark(); /* timeout: there was no new message on the writer or it is in periodical mode */ hostname = resolve_sockaddr_to_hostname(&hostname_len, msg->saddr, &self->options->host_resolve_options); log_msg_set_value(msg, LM_V_HOST, hostname, hostname_len); /* set the current time in the message stamp */ msg->timestamps[LM_TS_STAMP] = msg->timestamps[LM_TS_RECVD]; if (!log_writer_is_msg_suppressed(self, msg)) { log_queue_push_tail(self->queue, msg, &path_options); stats_counter_inc(self->processed_messages); } else { log_msg_drop(msg, &path_options); } /* we need to issue another MARK in all mark-mode cases that already * triggered this callback (dst-idle, host-idle, periodical). The * original setup of the timer is at a different location: * - log_writer_queue() for "*-idle" modes * - log_writer_init() for periodical mode */ log_writer_postpone_mark_timer(self); }