From d2dc09e3fbec8360fddc0ed886a4930da9acb02a Mon Sep 17 00:00:00 2001 From: Jeff Godin Date: Wed, 13 May 2015 15:41:02 -0700 Subject: [PATCH] WIP: client/ils password separation Initial support for having a SIP client password distinct from the ILS password. Signed-off-by: Jeff Godin --- SIPServer.pm | 19 ++++++++++++++++++- SIPconfig.xml | 4 ++++ Sip/MsgType.pm | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/SIPServer.pm b/SIPServer.pm index 0e36676..d456378 100755 --- a/SIPServer.pm +++ b/SIPServer.pm @@ -631,7 +631,7 @@ sub telnet_transport { $pwd =~ s/[\r\n]+$//; if (exists($config->{accounts}->{$uid}) - && ($pwd eq $config->{accounts}->{$uid}->password())) { + && _verify_client_password($config->{accounts}->{$uid}, $pwd) == 1) { $account = $config->{accounts}->{$uid}; last; } else { @@ -723,3 +723,20 @@ sub sip_protocol_loop { } } + +sub _verify_client_password { + # Accept a config hash representing a single login, and a supplied client password + # Return 1 on match, otherwise 0 + # XXX: implement support for salted + hashed "clientpassword" value + my ($login_config, $pwd_from_client) = @_; + + # if config has a clientpassword, verify against that + if (exists($login_config->{clientpassword})) { + syslog("LOG_INFO", "_verify_client_password: checking supplied password against clientpassword from config"); + return 1 if ($pwd_from_client eq $login_config->{clientpassword}); + } else { # otherwise, verify against "password" attribute + syslog("LOG_INFO", "_verify_client_password: checking supplied password against password from config"); + return 1 if ($pwd_from_client eq $login_config->{password}); + } + return 0; # password did not match +} diff --git a/SIPconfig.xml b/SIPconfig.xml index 180f4d4..7da7da8 100644 --- a/SIPconfig.xml +++ b/SIPconfig.xml @@ -66,6 +66,10 @@ + diff --git a/Sip/MsgType.pm b/Sip/MsgType.pm index 4079467..4b070ad 100644 --- a/Sip/MsgType.pm +++ b/Sip/MsgType.pm @@ -860,7 +860,7 @@ sub handle_login { if (!exists($server->{config}->{accounts}->{$uid})) { syslog("LOG_WARNING", "MsgType::handle_login: Unknown login '$uid'"); $status = 0; - } elsif ($server->{config}->{accounts}->{$uid}->{password} ne $pwd) { + } elsif (SIPServer::_verify_client_password($server->{config}->{accounts}->{$uid}, $pwd) != 1) { syslog("LOG_WARNING", "MsgType::handle_login: Invalid password for login '$uid'"); $status = 0; } else { -- 2.11.0