Commit e26801c6 authored by Nigel Kukard's avatar Nigel Kukard
Browse files

Added support to smradclient to listen on an additional port

parent 0343eaeb
...@@ -44,11 +44,15 @@ if (!eval {require Config::IniFiles; 1;}) { ...@@ -44,11 +44,15 @@ if (!eval {require Config::IniFiles; 1;}) {
sub run sub run
{ {
my ($self,@methodArgs) = @_; my ($self,@methodArgs) = @_;
# Instantiate if we're not already instantiated # Instantiate if we're not already instantiated
$self = $self->new() if (!ref($self)); $self = $self->new() if (!ref($self));
# The hash we're going to return
my $ret = { };
print(STDERR "SMRadClient v".VERSION." - Copyright (c) 2007-2016, AllWorldIT\n"); print(STDERR "SMRadClient v".VERSION." - Copyright (c) 2007-2019, AllWorldIT\n");
print(STDERR "\n"); print(STDERR "\n");
...@@ -67,6 +71,7 @@ sub run ...@@ -67,6 +71,7 @@ sub run
\%{$cmdline}, \%{$cmdline},
"config:s", "config:s",
"raddb:s", "raddb:s",
"listen:s",
"help", "help",
)) { )) {
print(STDERR "ERROR: Error parsing commandline arguments"); print(STDERR "ERROR: Error parsing commandline arguments");
...@@ -190,13 +195,38 @@ sub run ...@@ -190,13 +195,38 @@ sub run
return 1; return 1;
} }
my $sock2;
# Check if we must listen on another IP/port
if (defined($cmdline->{'listen'}) && $cmdline->{'listen'} ne "") {
print(STDERR "Creating second socket\n");
# Check the details we were provided
my ($localAddr,$localPort) = split(/:/,$cmdline->{'listen'});
if (!defined($localPort)) {
print(STDERR "ERROR: The format for --listen is IP:Port\n");
return 1;
}
$sock2 = IO::Socket::INET->new(
LocalAddr => $localAddr,
LocalPort => $localPort,
Type => SOCK_DGRAM,
Proto => 'udp',
Timeout => $sockTimeout,
);
if (!$sock2) {
print(STDERR "ERROR: Failed to create second socket\n");
return 1;
}
}
# Check if we sent the packet... # Check if we sent the packet...
if (!$sock->send($udp_packet)) { if (!$sock->send($udp_packet)) {
print(STDERR "ERROR: Failed to send data on socket\n"); print(STDERR "ERROR: Failed to send data on socket\n");
return 1; return 1;
} }
# And time for the response # And time for the response
print(STDERR "\nResponse:\n"); print(STDERR "\nResponse:\n");
...@@ -216,7 +246,7 @@ sub run ...@@ -216,7 +246,7 @@ sub run
# Read packet # Read packet
$sock->recv($udp_packet, 65536); $sock->recv($udp_packet, 65536);
if (!$udp_packet) { if (!$udp_packet) {
print(STDERR "ERROR: Receive response data failed: $!\n"); print(STDERR "ERROR: Receive response data failed on socket: $!\n");
return 1; return 1;
} }
...@@ -225,13 +255,44 @@ sub run ...@@ -225,13 +255,44 @@ sub run
print(STDERR " > Authenticated: ". (defined(auth_req_verify($udp_packet,$self->{'secret'},$authen)) ? "yes" : "no") ."\n"); print(STDERR " > Authenticated: ". (defined(auth_req_verify($udp_packet,$self->{'secret'},$authen)) ? "yes" : "no") ."\n");
print(STDERR $pkt->str_dump()); print(STDERR $pkt->str_dump());
# Setup response
$ret->{'request'} = $self->hashedPacket($self->{'packet'});
$ret->{'response'} = $self->hashedPacket($pkt);
my $udp_packet2;
if (defined($sock2)) {
my $rsock2 = IO::Select->new($sock2);
if (!$rsock2) {
print(STDERR "ERROR: Failed to select response data on socket2\n");
return 1;
}
# Check if we can read a response after the select()
if (!$rsock2->can_read($sockTimeout)) {
print(STDERR "ERROR: Failed to receive response data on socket2\n");
return 1;
}
# Read packet
my $udp_packet2;
$sock2->recv($udp_packet2, 65536);
if (!$udp_packet2) {
print(STDERR "ERROR: Receive response data failed on socket2: $!\n");
return 1;
}
my $pkt2 = smradius::Radius::Packet->new($raddb,$udp_packet2);
print(STDERR $pkt2->str_dump());
# Save the packet we got
$ret->{'listen'}->{'response'} = $self->hashedPacket($pkt2);
}
# If we were called as a function, return hashed version of the response packet # If we were called as a function, return hashed version of the response packet
if (@methodArgs) { if (@methodArgs) {
return { return $ret;
'request' => $self->hashedPacket($self->{'packet'}),
'response' => $self->hashedPacket($pkt),
};
} }
return 0; return 0;
......
...@@ -839,10 +839,11 @@ if ($child = fork()) { ...@@ -839,10 +839,11 @@ if ($child = fork()) {
); );
my $session4_ID = "a8abc40"; my $session4_ID = "a8abc40";
my $session4_Timestamp = time() - 3600; my $session4_Timestamp = time();
$res = smradius::client->run( $res = smradius::client->run(
"--raddb","dicts", "--raddb","dicts",
"--listen","127.0.0.1:1700",
"127.0.0.1", "127.0.0.1",
"acct", "acct",
"secret123", "secret123",
...@@ -903,10 +904,11 @@ if ($child = fork()) { ...@@ -903,10 +904,11 @@ if ($child = fork()) {
); );
my $session5_ID = "582dc00"; my $session5_ID = "582dc00";
my $session5_Timestamp = time() - 3600; my $session5_Timestamp = time();
$res = smradius::client->run( $res = smradius::client->run(
"--raddb","dicts", "--raddb","dicts",
"--listen","127.0.0.1:1700",
"127.0.0.1", "127.0.0.1",
"acct", "acct",
"secret123", "secret123",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment