void afinet_dd_set_destport(LogDriver *s, gchar *service, const gchar *proto) { AFInetDestDriver *self = (AFInetDestDriver *) s; afinet_set_port(self->super.dest_addr, service, proto); g_free(self->super.dest_name); self->super.dest_name = g_strdup_printf("%s:%d", self->super.hostname, g_sockaddr_inet_check(self->super.dest_addr) ? g_sockaddr_inet_get_port(self->super.dest_addr) #if ENABLE_IPV6 : g_sockaddr_inet6_get_port(self->super.dest_addr) #else : 0 #endif ); }
static gboolean afinet_dd_apply_transport(AFSocketDestDriver *s) { AFInetDestDriver *self = (AFInetDestDriver *) s; GlobalConfig *cfg = log_pipe_get_config(&s->super.super.super); gchar *default_dest_port = NULL; struct protoent *ipproto_ent; g_sockaddr_unref(self->super.bind_addr); g_sockaddr_unref(self->super.dest_addr); if (self->super.address_family == AF_INET) { self->super.bind_addr = g_sockaddr_inet_new("0.0.0.0", 0); self->super.dest_addr = g_sockaddr_inet_new("0.0.0.0", 0); } #if ENABLE_IPV6 else if (self->super.address_family == AF_INET6) { self->super.bind_addr = g_sockaddr_inet6_new("::", 0); self->super.dest_addr = g_sockaddr_inet6_new("::", 0); } #endif else { /* address family not known */ g_assert_not_reached(); } if (self->super.transport == NULL) { if (self->super.sock_type == SOCK_STREAM) afsocket_dd_set_transport(&self->super.super.super, "tcp"); else afsocket_dd_set_transport(&self->super.super.super, "udp"); } if (strcasecmp(self->super.transport, "udp") == 0) { static gboolean msg_udp_source_port_warning = FALSE; if (!self->dest_port) { /* NOTE: this version number change has happened in a different * major version in OSE vs. PE, thus the update behaviour must * be triggered differently. In OSE it needs to be triggered * when the config version has changed to 3.3, in PE when 3.2. * * This is unfortunate, the only luck we have to be less * confusing is that syslog() driver was seldom used. * */ if (self->super.syslog_protocol && cfg_is_config_version_older(cfg, 0x0303)) { if (!msg_udp_source_port_warning) { msg_warning("WARNING: Default port for syslog(transport(udp)) has changed from 601 to 514 in syslog-ng 3.3, please update your configuration", evt_tag_str("id", self->super.super.super.id), NULL); msg_udp_source_port_warning = TRUE; } default_dest_port = "601"; } else default_dest_port = "514"; } self->super.sock_type = SOCK_DGRAM; self->super.sock_protocol = 0; self->super.logproto_name = "dgram"; } else if (strcasecmp(self->super.transport, "tcp") == 0) { if (self->super.syslog_protocol) { self->super.logproto_name = "framed"; default_dest_port = "601"; } else { self->super.logproto_name = "text"; default_dest_port = "514"; } self->super.sock_type = SOCK_STREAM; self->super.sock_protocol = 0; } else if (strcasecmp(self->super.transport, "tls") == 0) { static gboolean msg_tls_source_port_warning = FALSE; g_assert(self->super.syslog_protocol); if (!self->dest_port) { /* NOTE: this version number change has happened in a different * major version in OSE vs. PE, thus the update behaviour must * be triggered differently. In OSE it needs to be triggered * when the config version has changed to 3.3, in PE when 3.2. * * This is unfortunate, the only luck we have to be less * confusing is that syslog() driver was seldom used. * */ if (cfg_is_config_version_older(cfg, 0x0303)) { if (!msg_tls_source_port_warning) { msg_warning("WARNING: Default port for syslog(transport(tls)) is modified from 601 to 6514", evt_tag_str("id", self->super.super.super.id), NULL); msg_tls_source_port_warning = TRUE; } default_dest_port = "601"; } else default_dest_port = "6514"; } self->super.require_tls = TRUE; self->super.sock_type = SOCK_STREAM; self->super.logproto_name = "framed"; } else { self->super.sock_type = SOCK_STREAM; self->super.logproto_name = self->super.transport; } if ((self->bind_ip && !resolve_hostname(&self->super.bind_addr, self->bind_ip))) return FALSE; if (!self->super.sock_protocol) { if (self->super.sock_type == SOCK_STREAM) self->super.sock_protocol = IPPROTO_TCP; else self->super.sock_protocol = IPPROTO_UDP; } ipproto_ent = getprotobynumber(self->super.sock_protocol); afinet_set_port(self->super.dest_addr, self->dest_port ? : default_dest_port, ipproto_ent ? ipproto_ent->p_name : (self->super.sock_type == SOCK_STREAM) ? "tcp" : "udp"); if (!self->super.dest_name) self->super.dest_name = g_strdup_printf("%s:%d", self->super.hostname, g_sockaddr_inet_check(self->super.dest_addr) ? g_sockaddr_inet_get_port(self->super.dest_addr) #if ENABLE_IPV6 : g_sockaddr_inet6_get_port(self->super.dest_addr) #else : 0 #endif ); #if BUILD_WITH_SSL if (self->super.require_tls && !self->super.tls_context) { msg_error("transport(tls) was specified, but tls() options missing", evt_tag_str("id", self->super.super.super.id), NULL); return FALSE; } #endif return TRUE; }