Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
smradius
smradius
Commits
e26801c6
Commit
e26801c6
authored
May 15, 2019
by
Nigel Kukard
Browse files
Added support to smradclient to listen on an additional port
parent
0343eaeb
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/smradius/client.pm
View file @
e26801c6
...
...
@@ -44,11 +44,15 @@ if (!eval {require Config::IniFiles; 1;}) {
sub
run
{
my
(
$self
,
@methodArgs
)
=
@_
;
# Instantiate if we're not already instantiated
$self
=
$self
->
new
()
if
(
!
ref
(
$self
));
# The hash we're going to return
my
$ret
=
{
};
print
(
STDERR
"
SMRadClient v
"
.
VERSION
.
"
- Copyright (c) 2007-201
6
, AllWorldIT
\n
");
print
(
STDERR
"
SMRadClient v
"
.
VERSION
.
"
- Copyright (c) 2007-201
9
, AllWorldIT
\n
");
print
(
STDERR
"
\n
");
...
...
@@ -67,6 +71,7 @@ sub run
\
%
{
$cmdline
},
"
config:s
",
"
raddb:s
",
"
listen:s
",
"
help
",
))
{
print
(
STDERR
"
ERROR: Error parsing commandline arguments
");
...
...
@@ -190,13 +195,38 @@ sub run
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...
if
(
!
$sock
->
send
(
$udp_packet
))
{
print
(
STDERR
"
ERROR: Failed to send data on socket
\n
");
return
1
;
}
# And time for the response
print
(
STDERR
"
\n
Response:
\n
");
...
...
@@ -216,7 +246,7 @@ sub run
# Read packet
$sock
->
recv
(
$udp_packet
,
65536
);
if
(
!
$udp_packet
)
{
print
(
STDERR
"
ERROR: Receive response data failed: $!
\n
");
print
(
STDERR
"
ERROR: Receive response data failed
on socket
: $!
\n
");
return
1
;
}
...
...
@@ -225,13 +255,44 @@ sub run
print
(
STDERR
"
> Authenticated:
"
.
(
defined
(
auth_req_verify
(
$udp_packet
,
$self
->
{'
secret
'},
$authen
))
?
"
yes
"
:
"
no
")
.
"
\n
");
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
(
@methodArgs
)
{
return
{
'
request
'
=>
$self
->
hashedPacket
(
$self
->
{'
packet
'}),
'
response
'
=>
$self
->
hashedPacket
(
$pkt
),
};
return
$ret
;
}
return
0
;
...
...
t/200-dbtests.t
View file @
e26801c6
...
...
@@ -839,10 +839,11 @@ if ($child = fork()) {
);
my
$session4_ID
=
"
a8abc40
";
my
$session4_Timestamp
=
time
()
-
3600
;
my
$session4_Timestamp
=
time
();
$res
=
smradius::
client
->
run
(
"
--raddb
","
dicts
",
"
--listen
","
127.0.0.1:1700
",
"
127.0.0.1
",
"
acct
",
"
secret123
",
...
...
@@ -903,10 +904,11 @@ if ($child = fork()) {
);
my
$session5_ID
=
"
582dc00
";
my
$session5_Timestamp
=
time
()
-
3600
;
my
$session5_Timestamp
=
time
();
$res
=
smradius::
client
->
run
(
"
--raddb
","
dicts
",
"
--listen
","
127.0.0.1:1700
",
"
127.0.0.1
",
"
acct
",
"
secret123
",
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment