From e278bddbfd0a5a4b1b3ee3fbbdcbe62e34944e03 Mon Sep 17 00:00:00 2001 From: Andrew Pogrebennyk Date: Thu, 19 Jan 2017 14:07:53 +0100 Subject: [PATCH] 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 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 --- debian/patches/series | 1 + ...-username_with_domain-option-to-use-.patch | 163 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 debian/patches/sipwise/0018-db_reg_agent-add-username_with_domain-option-to-use-.patch diff --git a/debian/patches/series b/debian/patches/series index e7723507..30488e54 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -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 diff --git a/debian/patches/sipwise/0018-db_reg_agent-add-username_with_domain-option-to-use-.patch b/debian/patches/sipwise/0018-db_reg_agent-add-username_with_domain-option-to-use-.patch new file mode 100644 index 00000000..77956af9 --- /dev/null +++ b/debian/patches/sipwise/0018-db_reg_agent-add-username_with_domain-option-to-use-.patch @@ -0,0 +1,163 @@ +From 1f02da5c8cc9dc711ded015059ae85a5126dd269 Mon Sep 17 00:00:00 2001 +From: Stefan Sayer +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::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= + # 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) +