Localport() & localip() cause syntax error in 2.0.2
Localip() and localport() parms still causing a syntax error, after straightening out semicolons (thanks to Evan Rempel). # syslog-ng -V syslog-ng 2.0.2 # cat -n syslog-ng.test #Show syslog-ng.test without localip() & localport() 1 options { long_hostnames(off); sync(0); }; 2 source src { unix-stream("/dev/log"); internal(); }; 3 source kernsrc { file("/proc/kmsg"); }; 4 destination logger { tcp("10.11.12.13" port(5678) template("$UNIXTIME $HOST $MESSAGE\n") ); }; 5 log { source(src); source(kernsrc); destination(logger); }; # syslog-ng -dFsf syslog-ng.test # No syntax error without localip() & localport() # cat -n syslog-ng.test #Add localip() & localport() to syslog-ng.test 1 options { long_hostnames(off); sync(0); }; 2 source src { unix-stream("/dev/log"); internal(); }; 3 source kernsrc { file("/proc/kmsg"); }; 4 destination logger { tcp("10.11.12.13" port(5678) localip(10.9.8.7) localport(5678) template("$UNIXTIME $HOST $MESSAGE\n") ); }; 5 log { source(src); source(kernsrc); destination(logger); }; # syslog-ng -dFsf syslog-ng.test syntax error at 4 # SYNTAX ERROR with localip() & localport()
I'll check this out. On Fri, 2007-03-30 at 12:10 -0500, simonst@wellsfargo.com wrote:
Localip() and localport() parms still causing a syntax error, after straightening out semicolons (thanks to Evan Rempel).
-- Bazsi
Well, that is odd. I am using a similar destination line destination pika.comp { tcp("pika.comp.uvic.ca" localip("syslog2.uvic.ca") log_fifo_size(50000) ); }; and am running version 2.0.2 on linux however, when I add in the localport or the destport a syntax error occurs. I ahve also noticed that if I have a template_escape first on a line that has a template on it, I still get the error of template_escape can only be used on inline templates. Syntax checker needs a little work :-( Over to the author for this. Evan. simonst@wellsfargo.com wrote:
Localip() and localport() parms still causing a syntax error, after straightening out semicolons (thanks to Evan Rempel).
# syslog-ng -V syslog-ng 2.0.2
# cat -n syslog-ng.test #Show syslog-ng.test without localip() & localport() 1 options { long_hostnames(off); sync(0); }; 2 source src { unix-stream("/dev/log"); internal(); }; 3 source kernsrc { file("/proc/kmsg"); }; 4 destination logger { tcp("10.11.12.13" port(5678) template("$UNIXTIME $HOST $MESSAGE\n") ); }; 5 log { source(src); source(kernsrc); destination(logger); }; # syslog-ng -dFsf syslog-ng.test # No syntax error without localip() & localport()
# cat -n syslog-ng.test #Add localip() & localport() to syslog-ng.test 1 options { long_hostnames(off); sync(0); }; 2 source src { unix-stream("/dev/log"); internal(); }; 3 source kernsrc { file("/proc/kmsg"); }; 4 destination logger { tcp("10.11.12.13" port(5678) localip(10.9.8.7) localport(5678) template("$UNIXTIME $HOST $MESSAGE\n") ); }; 5 log { source(src); source(kernsrc); destination(logger); }; # syslog-ng -dFsf syslog-ng.test syntax error at 4 # SYNTAX ERROR with localip() & localport()
------------------------------------------------------------------------
_______________________________________________ syslog-ng maillist - syslog-ng@lists.balabit.hu https://lists.balabit.hu/mailman/listinfo/syslog-ng Frequently asked questions at http://www.campin.net/syslog-ng/faq.html
-- Evan Rempel erempel@uvic.ca Senior Programmer Analyst 250.721.7691 Computing Services University of Victoria
On Fri, 2007-03-30 at 10:29 -0700, Evan Rempel wrote:
Well, that is odd. I am using a similar destination line
destination pika.comp { tcp("pika.comp.uvic.ca" localip("syslog2.uvic.ca") log_fifo_size(50000) ); };
and am running version 2.0.2 on linux
however, when I add in the localport or the destport a syntax error occurs.
I ahve also noticed that if I have a template_escape first on a line that has a template on it, I still get the error of template_escape can only be used on inline templates.
Syntax checker needs a little work :-(
Over to the author for this.
I've committed the patch below. Can you check if this fixes it? It seems to work well for me. Thanks. --- orig/src/cfg-grammar.y +++ mod/src/cfg-grammar.y @@ -375,14 +375,12 @@ source_afinet_udp_options source_afinet_udp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } ; source_afinet_option : KW_LOCALIP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } - | KW_LOCALPORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } - | KW_PORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } | KW_IP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } | source_reader_option | inet_socket_option @@ -407,8 +405,8 @@ source_afinet_tcp_options source_afinet_tcp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } | source_afsocket_stream_params {} ; @@ -602,16 +600,15 @@ dest_afinet_udp_options dest_afinet_option : KW_LOCALIP '(' string ')' { afinet_dd_set_localip(last_driver, $3); free($3); } - | KW_PORT '(' NUMBER ')' { afinet_dd_set_destport(last_driver, $3, NULL, NULL); } | inet_socket_option | dest_writer_option ; dest_afinet_udp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } | KW_SPOOF_SOURCE '(' yesno ')' { afinet_dd_set_spoof_source(last_driver, $3); } ; @@ -635,9 +632,9 @@ dest_afinet_tcp_options dest_afinet_tcp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } /* | KW_MAC '(' yesno ')' | KW_AUTH '(' yesno ')' -- Bazsi
The patch for localip() & localport() worked - thanks! Here's those parms in my working syslog-ng.conf: # sed -n '/localip/,/}/p' /etc/syslog-ng/syslog-ng.conf destination logger1 { tcp("10.11.12.13" port(5295) localip(10.9.8.7) localport(syslog-ng) template("$UNIXTIME $HOST $MESSAGE\n") ); }; destination logger2 { tcp("10.21.22.23" port(5295) localip(10.9.8.7) localport(syslog-ng) template("$UNIXTIME $HOST $MESSAGE\n") ); }; It's not a big deal to me, but it got errors (or warnings?) when I coded a numeric port in localport(): # sed -n '/localip/,/}/p' syslog-ng.conf_NUMERIC destination logger1 { tcp("10.11.12.13" port(5295) localip(10.9.8.7) localport(5295) template("$UNIXTIME $HOST $MESSAGE\n") ); }; destination logger2 { tcp("10.21.22.23" port(5295) localip(10.9.8.7) localport(5295) template("$UNIXTIME $HOST $MESSAGE\n") ); }; # syslog-ng -dFsf syslog-ng.conf_NUMERIC Error finding port number, falling back to default; service='tcp/5295' Error finding port number, falling back to default; service='tcp/5295' ---------------------------------------------------------------------------- --------------- I've committed the patch below. Can you check if this fixes it? It seems to work well for me. Thanks. --- orig/src/cfg-grammar.y +++ mod/src/cfg-grammar.y @@ -375,14 +375,12 @@ source_afinet_udp_options source_afinet_udp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } ; source_afinet_option : KW_LOCALIP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } - | KW_LOCALPORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } - | KW_PORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } | KW_IP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } | source_reader_option | inet_socket_option @@ -407,8 +405,8 @@ source_afinet_tcp_options source_afinet_tcp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } | source_afsocket_stream_params {} ; @@ -602,16 +600,15 @@ dest_afinet_udp_options dest_afinet_option : KW_LOCALIP '(' string ')' { afinet_dd_set_localip(last_driver, $3); free($3); } - | KW_PORT '(' NUMBER ')' { afinet_dd_set_destport(last_driver, $3, NULL, NULL); } | inet_socket_option | dest_writer_option ; dest_afinet_udp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } | KW_SPOOF_SOURCE '(' yesno ')' { afinet_dd_set_spoof_source(last_driver, $3); } ; @@ -635,9 +632,9 @@ dest_afinet_tcp_options dest_afinet_tcp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } /* | KW_MAC '(' yesno ')' | KW_AUTH '(' yesno ')' -- Bazsi _______________________________________________ syslog-ng maillist - syslog-ng@lists.balabit.hu https://lists.balabit.hu/mailman/listinfo/syslog-ng Frequently asked questions at http://www.campin.net/syslog-ng/faq.html
On Tue, 2007-04-03 at 15:15 -0500, simonst@wellsfargo.com wrote:
The patch for localip() & localport() worked - thanks! Here's those parms in my working syslog-ng.conf: # sed -n '/localip/,/}/p' /etc/syslog-ng/syslog-ng.conf destination logger1 { tcp("10.11.12.13" port(5295) localip(10.9.8.7) localport(syslog-ng) template("$UNIXTIME $HOST $MESSAGE\n") ); }; destination logger2 { tcp("10.21.22.23" port(5295) localip(10.9.8.7) localport(syslog-ng) template("$UNIXTIME $HOST $MESSAGE\n") ); };
It's not a big deal to me, but it got errors (or warnings?) when I coded a numeric port in localport(): # sed -n '/localip/,/}/p' syslog-ng.conf_NUMERIC destination logger1 { tcp("10.11.12.13" port(5295) localip(10.9.8.7) localport(5295) template("$UNIXTIME $HOST $MESSAGE\n") ); }; destination logger2 { tcp("10.21.22.23" port(5295) localip(10.9.8.7) localport(5295) template("$UNIXTIME $HOST $MESSAGE\n") ); }; # syslog-ng -dFsf syslog-ng.conf_NUMERIC Error finding port number, falling back to default; service='tcp/5295' Error finding port number, falling back to default; service='tcp/5295'
hm.. this is still a problem, this patch should fix it finally. --- orig/src/afinet.c +++ mod/src/afinet.c @@ -41,14 +41,20 @@ static void -afinet_set_port(GSockAddr *addr, gint port, gchar *service, gchar *proto) +afinet_set_port(GSockAddr *addr, gchar *service, gchar *proto) { if (addr) { - if (proto) + gchar *end; + gint port; + + /* check if service is numeric */ + port = strtol(service, &end, 10); + if ((*end != 0)) { struct servent *se; + /* service is not numeric, check if it's a service in /etc/services */ se = getservbyname(service, proto); if (se) { @@ -218,11 +224,11 @@ afinet_setup_socket(gint fd, GSockAddr * } void -afinet_sd_set_localport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_sd_set_localport(LogDriver *s, gchar *service, gchar *proto) { AFSocketSourceDriver *self = (AFSocketSourceDriver *) s; - afinet_set_port(self->bind_addr, port, service, proto); + afinet_set_port(self->bind_addr, service, proto); } void @@ -271,19 +277,19 @@ afinet_sd_new(gint af, gchar *host, gint /* afinet destination */ void -afinet_dd_set_localport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_dd_set_localport(LogDriver *s, gchar *service, gchar *proto) { AFInetDestDriver *self = (AFInetDestDriver *) s; - afinet_set_port(self->super.bind_addr, port, service, proto); + afinet_set_port(self->super.bind_addr, service, proto); } void -afinet_dd_set_destport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_dd_set_destport(LogDriver *s, gchar *service, gchar *proto) { AFInetDestDriver *self = (AFInetDestDriver *) s; - afinet_set_port(self->super.dest_addr, port, service, proto); + afinet_set_port(self->super.dest_addr, service, proto); } void --- orig/src/afinet.h +++ mod/src/afinet.h @@ -45,7 +45,7 @@ typedef struct _AFInetSourceDriver } AFInetSourceDriver; LogDriver *afinet_sd_new(gint af, gchar *host, gint port, guint flags); -void afinet_sd_set_localport(LogDriver *self, gint port, gchar *service, gchar *proto); +void afinet_sd_set_localport(LogDriver *self, gchar *service, gchar *proto); void afinet_sd_set_localip(LogDriver *self, gchar *ip); #define afinet_sd_set_auth(a,b) @@ -63,8 +63,8 @@ typedef struct _AFInetDestDriver } AFInetDestDriver; LogDriver *afinet_dd_new(gint af, gchar *host, gint port, guint flags); -void afinet_dd_set_localport(LogDriver *self, gint port, gchar *service, gchar *proto); -void afinet_dd_set_destport(LogDriver *self, gint port, gchar *service, gchar *proto); +void afinet_dd_set_localport(LogDriver *self, gchar *service, gchar *proto); +void afinet_dd_set_destport(LogDriver *self, gchar *service, gchar *proto); void afinet_dd_set_localip(LogDriver *self, gchar *ip); void afinet_dd_set_sync_freq(LogDriver *self, gint sync_freq); void afinet_dd_set_spoof_source(LogDriver *self, gboolean enable); --- orig/src/cfg-grammar.y +++ mod/src/cfg-grammar.y @@ -375,8 +375,8 @@ source_afinet_udp_options source_afinet_udp_option : source_afinet_option - | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "udp"); free($3); } ; source_afinet_option @@ -405,8 +405,8 @@ source_afinet_tcp_options source_afinet_tcp_option : source_afinet_option - | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "tcp"); free($3); } | source_afsocket_stream_params {} ; @@ -606,9 +606,9 @@ dest_afinet_option dest_afinet_udp_option : dest_afinet_option - | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } - | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "udp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "udp"); free($3); } | KW_SPOOF_SOURCE '(' yesno ')' { afinet_dd_set_spoof_source(last_driver, $3); } ; @@ -632,9 +632,9 @@ dest_afinet_tcp_options dest_afinet_tcp_option : dest_afinet_option - | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } - | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "tcp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "tcp"); free($3); } /* | KW_MAC '(' yesno ')' | KW_AUTH '(' yesno ')' -- Bazsi
Your second patch fixed the problem - localport() now accepts either numeric or /etc/service names. I also combined both patches into a single one for my rpm: --- syslog-ng-2.0.2/src/cfg-grammar.y.orig 2007-04-04 13:40:41.000000000 -0700 +++ syslog-ng-2.0.2/src/cfg-grammar.y 2007-04-04 14:44:54.000000000 -0700 @@ -369,14 +369,12 @@ source_afinet_udp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "udp"); free($3); } ; source_afinet_option - : KW_LOCALIP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } - | KW_LOCALPORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } - | KW_PORT '(' NUMBER ')' { afinet_sd_set_localport(last_driver, $3, NULL, NULL); } + : KW_LOCALIP '(' string')' { afinet_sd_set_localip(last_driver, $3); free($3); } | KW_IP '(' string ')' { afinet_sd_set_localip(last_driver, $3); free($3); } | source_reader_option | inet_socket_option @@ -401,8 +399,8 @@ source_afinet_tcp_option : source_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_sd_set_localport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_sd_set_localport(last_driver, $3, "tcp"); free($3); } | source_afsocket_stream_params {} ; @@ -596,16 +594,15 @@ dest_afinet_option : KW_LOCALIP '(' string ')' { afinet_dd_set_localip(last_driver, $3); free($3); } - | KW_PORT '(' NUMBER ')' { afinet_dd_set_destport(last_driver, $3, NULL, NULL); } | inet_socket_option | dest_writer_option ; dest_afinet_udp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "udp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "udp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, $3, "udp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "udp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "udp"); free($3); } ; dest_afinet_tcp_params @@ -628,9 +625,9 @@ dest_afinet_tcp_option : dest_afinet_option - | KW_LOCALPORT '(' string ')' { afinet_dd_set_localport(last_driver, 0, $3, "tcp"); free($3); } - | KW_PORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } - | KW_DESTPORT '(' string ')' { afinet_dd_set_destport(last_driver, 0, $3, "tcp"); free($3); } + | KW_LOCALPORT '(' string_or_number ')' { afinet_dd_set_localport(last_driver, $3, "tcp"); free($3); } + | KW_PORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "tcp"); free($3); } + | KW_DESTPORT '(' string_or_number ')' { afinet_dd_set_destport(last_driver, $3, "tcp"); free($3); } /* | KW_MAC '(' yesno ')' | KW_AUTH '(' yesno ')' @@ -904,4 +901,4 @@ last_reader_options = NULL; last_writer_options = NULL; last_template = NULL; -} \ No newline at end of file +} --- syslog-ng-2.0.2/src/afinet.c.orig 2006-06-01 02:14:39.000000000 -0700 +++ syslog-ng-2.0.2/src/afinet.c 2007-04-04 14:18:44.000000000 -0700 @@ -40,14 +40,20 @@ static void -afinet_set_port(GSockAddr *addr, gint port, gchar *service, gchar *proto) +afinet_set_port(GSockAddr *addr, gchar *service, gchar *proto) { if (addr) { - if (proto) + gchar *end; + gint port; + + /* check if service is numeric */ + port = strtol(service, &end, 10); + if ((*end != 0)) { struct servent *se; + /* service is not numeric, check if it's a service in /etc/services */ se = getservbyname(service, proto); if (se) { @@ -217,11 +223,11 @@ } void -afinet_sd_set_localport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_sd_set_localport(LogDriver *s, gchar *service, gchar *proto) { AFSocketSourceDriver *self = (AFSocketSourceDriver *) s; - afinet_set_port(self->bind_addr, port, service, proto); + afinet_set_port(self->bind_addr, service, proto); } void @@ -270,19 +276,19 @@ /* afinet destination */ void -afinet_dd_set_localport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_dd_set_localport(LogDriver *s, gchar *service, gchar *proto) { AFInetDestDriver *self = (AFInetDestDriver *) s; - afinet_set_port(self->super.bind_addr, port, service, proto); + afinet_set_port(self->super.bind_addr, service, proto); } void -afinet_dd_set_destport(LogDriver *s, gint port, gchar *service, gchar *proto) +afinet_dd_set_destport(LogDriver *s, gchar *service, gchar *proto) { AFInetDestDriver *self = (AFInetDestDriver *) s; - afinet_set_port(self->super.dest_addr, port, service, proto); + afinet_set_port(self->super.dest_addr, service, proto); } void --- syslog-ng-2.0.2/src/afinet.h.orig 2006-04-30 15:42:15.000000000 -0700 +++ syslog-ng-2.0.2/src/afinet.h 2007-04-04 14:18:44.000000000 -0700 @@ -40,7 +40,7 @@ } AFInetSourceDriver; LogDriver *afinet_sd_new(gint af, gchar *host, gint port, guint flags); -void afinet_sd_set_localport(LogDriver *self, gint port, gchar *service, gchar *proto); +void afinet_sd_set_localport(LogDriver *self, gchar *service, gchar *proto); void afinet_sd_set_localip(LogDriver *self, gchar *ip); #define afinet_sd_set_auth(a,b) @@ -54,8 +54,8 @@ } AFInetDestDriver; LogDriver *afinet_dd_new(gint af, gchar *host, gint port, guint flags); -void afinet_dd_set_localport(LogDriver *self, gint port, gchar *service, gchar *proto); -void afinet_dd_set_destport(LogDriver *self, gint port, gchar *service, gchar *proto); +void afinet_dd_set_localport(LogDriver *self, gchar *service, gchar *proto); +void afinet_dd_set_destport(LogDriver *self, gchar *service, gchar *proto); void afinet_dd_set_localip(LogDriver *self, gchar *ip); void afinet_dd_set_sync_freq(LogDriver *self, gint sync_freq);
participants (3)
-
Balazs Scheidler
-
Evan Rempel
-
simonst@wellsfargo.com