From b011c135de26d001787542f3c2b251cbba67bcb2 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Mon, 14 Jul 2008 07:49:16 +0000 Subject: [PATCH] Fix protocol detection --- xinetd/config | 1 + xinetd/index.cgi | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/xinetd/config b/xinetd/config index 518db9745..7aa182931 100644 --- a/xinetd/config +++ b/xinetd/config @@ -2,3 +2,4 @@ xinetd_conf=/etc/xinetd.conf protocols_file=/etc/protocols pid_file=/var/run/xinetd.pid start_cmd=/usr/local/sbin/xinetd -pid 2>/var/run/xinetd.pid +lookup_servs=1 diff --git a/xinetd/index.cgi b/xinetd/index.cgi index 3036b52ae..9b8f077b3 100755 --- a/xinetd/index.cgi +++ b/xinetd/index.cgi @@ -57,9 +57,20 @@ foreach $x (@conf) { } } else { - # Only service specified, check all protocols + # Only service specified, check protocols based on socket type, + # or failing that all protocols if ($config{'lookup_servs'}) { - foreach $p (&list_protocols()) { + local @protos; + if ($q->{'socket_type'}->[0] eq 'stream') { + @protos = ( 'tcp' ); + } + elsif ($q->{'socket_type'}->[0] eq 'dgram') { + @protos = ( 'udp' ); + } + else { + @protos = &list_protocols(); + } + foreach $p (@protos) { @s = getservbyname($x->{'value'}, $p); last if (@s); }