static gboolean afprogram_dd_init(LogPipe *s) { AFProgramDestDriver *self = (AFProgramDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_dest_driver_init_method(s)) return FALSE; log_writer_options_init(&self->writer_options, cfg, 0); const gboolean restore_successful = afprogram_dd_restore_reload_store_item(self, cfg); if (!self->writer) self->writer = log_writer_new(LW_FORMAT_FILE, s->cfg); log_writer_set_options(self->writer, s, &self->writer_options, STATS_LEVEL0, SCS_PROGRAM, self->super.super.id, self->process_info.cmdline->str); log_writer_set_queue(self->writer, log_dest_driver_acquire_queue(&self->super, afprogram_dd_format_queue_persist_name(self))); if (!log_pipe_init((LogPipe *) self->writer)) { log_pipe_unref((LogPipe *) self->writer); return FALSE; } log_pipe_append(&self->super.super.super, (LogPipe *) self->writer); return restore_successful ? TRUE : afprogram_dd_reopen(self); }
static gboolean afprogram_dd_init(LogPipe *s) { AFProgramDestDriver *self = (AFProgramDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_dest_driver_init_method(s)) return FALSE; log_writer_options_init(&self->writer_options, cfg, 0); if (!self->writer) self->writer = log_writer_new(LW_FORMAT_FILE); log_writer_set_options(self->writer, s, &self->writer_options, STATS_LEVEL0, SCS_PROGRAM, self->super.super.id, self->cmdline->str); log_writer_set_queue(self->writer, log_dest_driver_acquire_queue(&self->super, afprogram_dd_format_persist_name(self))); log_pipe_init((LogPipe *) self->writer, NULL); log_pipe_append(&self->super.super.super, (LogPipe *) self->writer); return afprogram_dd_reopen(self); }
static gboolean afsocket_dd_setup_writer_options(AFSocketDestDriver *self) { GlobalConfig *cfg = log_pipe_get_config(&self->super.super.super); log_writer_options_init(&self->writer_options, cfg, 0); return TRUE; }
gboolean afsocket_dd_init(LogPipe *s) { AFSocketDestDriver *self = (AFSocketDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); if (!log_dest_driver_init_method(s)) return FALSE; if (!afsocket_dd_apply_transport(self)) return FALSE; /* these fields must be set up by apply_transport, so let's check if it indeed did */ g_assert(self->transport); g_assert(self->bind_addr); g_assert(self->hostname); g_assert(self->dest_name); if (cfg) { self->time_reopen = cfg->time_reopen; } log_writer_options_init(&self->writer_options, cfg, 0); self->writer = cfg_persist_config_fetch(cfg, afsocket_dd_format_persist_name(self, FALSE)); if (!self->writer) { /* NOTE: we open our writer with no fd, so we can send messages down there * even while the connection is not established */ self->writer = log_writer_new(LW_FORMAT_PROTO | #if ENABLE_SSL (((self->flags & AFSOCKET_STREAM) && !self->tls_context) ? LW_DETECT_EOF : 0) | #else ((self->flags & AFSOCKET_STREAM) ? LW_DETECT_EOF : 0) | #endif (self->flags & AFSOCKET_SYSLOG_PROTOCOL ? LW_SYSLOG_PROTOCOL : 0)); } log_writer_set_options((LogWriter *) self->writer, &self->super.super.super, &self->writer_options, 0, afsocket_dd_stats_source(self), self->super.super.id, afsocket_dd_stats_instance(self)); log_writer_set_queue(self->writer, log_dest_driver_acquire_queue(&self->super, afsocket_dd_format_persist_name(self, TRUE))); log_pipe_init(self->writer, NULL); log_pipe_append(&self->super.super.super, self->writer); if (!log_writer_opened((LogWriter *) self->writer)) afsocket_dd_reconnect(self); return TRUE; }
gboolean afsocket_dd_init(LogPipe *s) { AFSocketDestDriver *self = (AFSocketDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(s); #if ENABLE_SSL if (self->flags & AFSOCKET_REQUIRE_TLS && !self->tls_context) { msg_error("Transport TLS was specified, but TLS related parameters missing", NULL); return FALSE; } #endif self->error_logged = FALSE; if (cfg) { self->time_reopen = cfg->time_reopen; } if (!self->writer) { log_writer_options_init(&self->writer_options, cfg, 0); /* NOTE: we open our writer with no fd, so we can send messages down there * even while the connection is not established */ if ((self->flags & AFSOCKET_KEEP_ALIVE)) self->writer = cfg_persist_config_fetch(cfg, afsocket_dd_format_persist_name(self, self->dest_name, FALSE)); if (!self->writer) self->writer = log_writer_new(LW_FORMAT_PROTO | #if ENABLE_SSL (((self->flags & AFSOCKET_STREAM) && !self->tls_context) ? LW_DETECT_EOF : 0) | #else ((self->flags & AFSOCKET_STREAM) ? LW_DETECT_EOF : 0) | #endif (self->flags & AFSOCKET_SYSLOG_PROTOCOL ? LW_SYSLOG_PROTOCOL : 0)); log_writer_set_options((LogWriter *) self->writer, &self->super.super, &self->writer_options, 0, afsocket_dd_stats_source(self), self->super.id, afsocket_dd_stats_instance(self)); log_pipe_init(self->writer, NULL); log_pipe_append(&self->super.super, self->writer); } afsocket_dd_reconnect(self); return TRUE; }
static gboolean afprogram_dd_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist) { AFProgramDestDriver *self = (AFProgramDestDriver *) s; int msg_pipe[2]; if (cfg) log_writer_options_init(&self->writer_options, cfg, 0, afprogram_dd_format_stats_name(self)); msg_verbose("Starting destination program", evt_tag_str("cmdline", self->cmdline->str), NULL); if (pipe(msg_pipe) == -1) { msg_error("Error creating program pipe", evt_tag_str("cmdline", self->cmdline->str), evt_tag_errno(EVT_TAG_OSERROR, errno), NULL); return FALSE; } if ((self->pid = fork()) < 0) { msg_error("Error in fork()", evt_tag_errno(EVT_TAG_OSERROR, errno), NULL); close(msg_pipe[0]); close(msg_pipe[1]); return FALSE; } if (self->pid == 0) { /* child */ int devnull = open("/dev/null", O_WRONLY); if (devnull == -1) { _exit(127); } dup2(msg_pipe[0], 0); dup2(devnull, 1); dup2(devnull, 2); close(devnull); close(msg_pipe[0]); close(msg_pipe[1]); execl("/bin/sh", "/bin/sh", "-c", self->cmdline->str, NULL); _exit(127); } else { /* parent */ child_manager_register(self->pid, afprogram_dd_exit, log_pipe_ref(&self->super.super), (GDestroyNotify) log_pipe_unref); close(msg_pipe[0]); g_fd_set_nonblock(msg_pipe[1], TRUE); if (!self->writer) self->writer = log_writer_new(LW_FORMAT_FILE, s, &self->writer_options); #if 0/*start dongshu*/ log_writer_reopen(self->writer, fd_write_new(msg_pipe[1])); #else log_writer_reopen(self->writer, fd_write_new(msg_pipe[1],NULL)); #endif/*end*/ log_pipe_init(self->writer, NULL, NULL); log_pipe_append(&self->super.super, self->writer); } return TRUE; }