Hi, I found a bug in ldirectord and attach a patch to fix this problem to this E-mail. If a underscore is contained in a service-name of hostname:servicename (ex. real=realserver.example.com:pipe_server), it leads to a configuration error. with best regards, -- Sohgo Takeuchi
diff -r 6196ecad12c8 ldirectord/ldirectord.in --- a/ldirectord/ldirectord.in Wed Jul 28 19:22:48 2010 +0900 +++ b/ldirectord/ldirectord.in Wed Jul 28 22:20:20 2010 +0900 @@ -1283,9 +1283,9 @@ my $virtual_line = $line; my $fallback_line; my @rsrv_todo; - if ($vattr =~ /^(\d+\.\d+\.\d+\.\d+):([0-9A-Za-z]+)/) { + if ($vattr =~ /^(\d+\.\d+\.\d+\.\d+):([0-9A-Za-z-_]+)/) { $virtual_id = $ip_port = "$1:$2"; - } elsif ($vattr =~ /^([0-9A-Za-z._+-]+):([0-9A-Za-z]+)/) { + } elsif ($vattr =~ /^([0-9A-Za-z._+-]+):([0-9A-Za-z-_]+)/) { $virtual_id = $ip_port = "$1:$2"; } elsif ($vattr =~ /^(\d+)/){ $virtual_id = $fwm = $1; @@ -1887,7 +1887,7 @@ for $i (@$rsrv_todo) { ($str, $line)=@$i; - $str =~ /(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+|\[[0-9A-fa-f:]+\])(->(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+|\[[0-9A-fa-f:]+\]))?(:(\d+|[A-Za-z0-9-]+))?\s+(.*)/ + $str =~ /(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+|\[[0-9A-fa-f:]+\])(->(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+|\[[0-9A-fa-f:]+\]))?(:(\d+|[A-Za-z0-9-_]+))?\s+(.*)/ or &config_error($line, "invalid address for real server" . " (wrong format)"); @@ -4957,12 +4957,12 @@ my $ip; my $port; - if ($hostserv =~ /(\[[0-9A-Fa-f:]+\])(:(\d+|[A-Za-z0-9-]+))?/) { + if ($hostserv =~ /(\[[0-9A-Fa-f:]+\])(:(\d+|[A-Za-z0-9-_]+))?/) { $ip=$1; $port=$3; } else { $hostserv =~ - /(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+)(:(\d+|[A-Za-z0-9-]+))?/ + /(\d+\.\d+\.\d+\.\d+|[A-Za-z0-9.-]+)(:(\d+|[A-Za-z0-9-_]+))?/ or return(undef); $ip=$1; $port=$3;