TT#9306 implemented db_reg_agent option username_with_domain

port from 1.4-ha-sw:

upstream commit 1f02da5 implements
https://services.frafos.net/frafosbt/view.php?id=758

commit 1f02da5c8cc9dc711ded015059ae85a5126dd269
Author: Stefan Sayer <stefan.sayer@googlemail.com>
Date:   Fri Jan 13 23:30:01 2017 +0100

    db_reg_agent: add username_with_domain option to use auth user with domain part

    implements M758

Change-Id: I8de585443f4efa941a30cff185c426d90ad7a1c6
changes/63/10763/1
Andrew Pogrebennyk 10 years ago
parent 02cba213b3
commit e278bddbfd

@ -19,6 +19,7 @@ sipwise/MT-20649-add-vsc-for-block-in-clir
sipwise/MT-20649-change-config-validation
sipwise/MT-20649-use-macros
sipwise/0002-b-f-dsm-mod_conference-set-callgroup-to-conference-c.patch
sipwise/0018-db_reg_agent-add-username_with_domain-option-to-use-.patch
build-fix-bit-rot.patch
build-fix-pie.patch
build-fix-excludes.patch

@ -0,0 +1,163 @@
From 1f02da5c8cc9dc711ded015059ae85a5126dd269 Mon Sep 17 00:00:00 2001
From: Stefan Sayer <stefan.sayer@googlemail.com>
Date: Fri, 13 Jan 2017 23:30:01 +0100
Subject: [PATCH] db_reg_agent: add username_with_domain option to use auth
user with domain part
implements M758
---
apps/db_reg_agent/DBRegAgent.cpp | 39 +++++++++++++++++++++++----------
apps/db_reg_agent/DBRegAgent.h | 2 ++
apps/db_reg_agent/etc/db_reg_agent.conf | 5 +++++
doc/Readme.db_reg_agent.txt | 7 ++++++
4 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/apps/db_reg_agent/DBRegAgent.cpp b/apps/db_reg_agent/DBRegAgent.cpp
index f004807..c9c3702 100644
--- a/apps/db_reg_agent/DBRegAgent.cpp
+++ b/apps/db_reg_agent/DBRegAgent.cpp
@@ -52,7 +52,9 @@ bool DBRegAgent::delete_failed_deregistrations = false;
bool DBRegAgent::save_contacts = true;
bool DBRegAgent::db_read_contact = false;
string DBRegAgent::contact_hostport;
+bool DBRegAgent::username_with_domain = false;
string DBRegAgent::outbound_proxy;
+
bool DBRegAgent::save_auth_replies = false;
unsigned int DBRegAgent::error_retry_interval = 300;
@@ -146,6 +148,9 @@ int DBRegAgent::onLoad()
db_read_contact =
cfg.getParameter("db_read_contact", "no") == "yes";
+ username_with_domain =
+ cfg.getParameter("username_with_domain", "no") == "yes";
+
save_auth_replies =
cfg.getParameter("save_auth_replies", "no") == "yes";
@@ -391,15 +396,21 @@ void DBRegAgent::createRegistration(long subscriber_id,
const string& realm,
const string& contact) {
+ string auth_user = user;
+ string _user = user;
+ if (username_with_domain && user.find('@')!=string::npos) {
+ _user = user.substr(0, user.find('@'));
+ }
+
string contact_uri = contact;
if (contact_uri.empty() && !contact_hostport.empty()) {
- contact_uri = "sip:"+ user + "@" + contact_hostport;
+ contact_uri = "sip:"+ _user + "@" + contact_hostport;
}
string handle = AmSession::getNewId();
- SIPRegistrationInfo reg_info(realm, user,
- user, // name
- user, // auth_user
+ SIPRegistrationInfo reg_info(realm, _user,
+ _user, // name
+ auth_user,
pass,
outbound_proxy, // proxy
contact_uri // contact
@@ -466,27 +477,33 @@ void DBRegAgent::updateRegistration(long subscriber_id,
const string& realm,
const string& contact) {
+ string auth_user = user;
+ string _user = user;
+ if (username_with_domain && user.find('@')!=string::npos) {
+ _user = user.substr(0, user.find('@'));
+ }
+
registrations_mut.lock();
map<long, AmSIPRegistration*>::iterator it=registrations.find(subscriber_id);
if (it == registrations.end()) {
registrations_mut.unlock();
WARN("updateRegistration - registration %ld %s@%s unknown, creating\n",
- subscriber_id, user.c_str(), realm.c_str());
- createRegistration(subscriber_id, user, pass, realm, contact);
+ subscriber_id, _user.c_str(), realm.c_str());
+ createRegistration(subscriber_id, _user, pass, realm, contact);
scheduleRegistration(subscriber_id);
return;
}
bool need_reregister = it->second->getInfo().domain != realm
- || it->second->getInfo().user != user
+ || it->second->getInfo().user != _user
|| it->second->getInfo().pwd != pass
|| it->second->getInfo().contact != contact;
string old_realm = it->second->getInfo().domain;
string old_user = it->second->getInfo().user;
- it->second->setRegistrationInfo(SIPRegistrationInfo(realm, user,
- user, // name
- user, // auth_user
+ it->second->setRegistrationInfo(SIPRegistrationInfo(realm, _user,
+ _user, // name
+ auth_user,
pass,
outbound_proxy, // proxy
contact)); // contact
@@ -494,7 +511,7 @@ void DBRegAgent::updateRegistration(long subscriber_id,
if (need_reregister) {
DBG("user/realm for registration %ld changed (%s@%s -> %s@%s). "
"Triggering immediate re-registration\n",
- subscriber_id, old_user.c_str(), old_realm.c_str(), user.c_str(), realm.c_str());
+ subscriber_id, old_user.c_str(), old_realm.c_str(), _user.c_str(), realm.c_str());
scheduleRegistration(subscriber_id);
}
}
diff --git a/apps/db_reg_agent/DBRegAgent.h b/apps/db_reg_agent/DBRegAgent.h
index 868d999..660b558 100644
--- a/apps/db_reg_agent/DBRegAgent.h
+++ b/apps/db_reg_agent/DBRegAgent.h
@@ -138,6 +138,8 @@ class DBRegAgent
static string contact_hostport;
+ static bool username_with_domain;
+
static string outbound_proxy;
static bool save_auth_replies;
diff --git a/apps/db_reg_agent/etc/db_reg_agent.conf b/apps/db_reg_agent/etc/db_reg_agent.conf
index 54875cb..fd341b5 100644
--- a/apps/db_reg_agent/etc/db_reg_agent.conf
+++ b/apps/db_reg_agent/etc/db_reg_agent.conf
@@ -20,6 +20,11 @@ joined_query="select subscribers.subscriber_id as subscriber_id, subscribers.use
#example with contact:
# joined_query="select subscribers.subscriber_id as subscriber_id, subscribers.user as user, subscribers.pass as pass, subscribers.realm as realm, subscribers.contact as contact, registrations.registration_status as registration_status, registrations.expiry as expiry, registrations.last_registration as last_registration from subscribers left join registrations on subscribers.subscriber_id=registrations.subscriber_id;"
+# Does the user column (used as auth user) contain the domain?
+# in this case it will be stripped when constructing From/To/contact
+#username_with_domain default: no
+#username_with_domain=yes
+
# outbound_proxy=<sip_uri>
# set the outbound proxy to send registrations through
#
diff --git a/doc/Readme.db_reg_agent.txt b/doc/Readme.db_reg_agent.txt
index 4ccb794..be1bf17 100644
--- a/doc/Readme.db_reg_agent.txt
+++ b/doc/Readme.db_reg_agent.txt
@@ -65,6 +65,13 @@ specified by setting option db_read_contact=yes and providing a contact in the
subscriber.contact column, and passing it with createRegistration/updateRegistration DI
function.
+Auth username
+-------------
+If the username for authentication needs to include the domain, the option
+username_with_domain should be set to 'yes' and the auth user including the domain
+should be provisioned in the database. SEMS will strip the domain from the value of
+the 'user' column before using it as the user part when constructing To/From/contact.
+
Database
--------
There may be two separate tables, subscriptions and registrations (status). SEMS inserts
--
2.10.1 (Apple Git-78)
Loading…
Cancel
Save