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);