]> git.stg.codes - stg.git/commitdiff
Fix build on OSX.
authorMaksym Mamontov <madf@madf.info>
Tue, 28 Jan 2020 15:43:23 +0000 (17:43 +0200)
committerMaksym Mamontov <madf@madf.info>
Tue, 28 Jan 2020 15:43:23 +0000 (17:43 +0200)
CMakeLists.txt
libs/CMakeLists.txt
sgauth/CMakeLists.txt
sgconf/options.cpp
stargazer/actions.inl.h
stargazer/plugins/CMakeLists.txt
stargazer/plugins/authorization/ao/ao.cpp
stargazer/plugins/other/radius/conn.cpp
stargazer/user_impl.cpp
stargazer/users_impl.cpp

index 4f543f1efe7f1a9f2514328c13f691fa0e7fca53..668b0ba3854f5018e8b9dd4185e60cd1c2d57359 100644 (file)
@@ -1,4 +1,6 @@
-cmake_minimum_required (VERSION 3.1)
+cmake_minimum_required (VERSION 3.12)
+
+project ( Stargazer )
 
 set ( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules )
 
index ece4c9a3ab1d1cefc925681b275d94a38feb7daf..59caf2f15fa3f435d26004159faf3a0a2f9ed0c1 100644 (file)
@@ -1,8 +1,10 @@
 set ( CMAKE_POSITION_INDEPENDENT_CODE ON )
 
 if ( BUILD_LIB_COMMON )
+    find_package ( Iconv REQUIRED )
     add_library ( common STATIC common/blockio.cpp common/common.cpp common/strptime.cpp )
     target_include_directories ( common PUBLIC common/include )
+    target_link_libraries ( common Iconv::Iconv )
 endif ( BUILD_LIB_COMMON )
 
 if ( BUILD_LIB_CONFFILES )
@@ -32,9 +34,10 @@ if ( BUILD_LIB_IBPP )
 endif ( BUILD_LIB_IBPP )
 
 if ( BUILD_LIB_JSON )
+    find_package ( YAJL REQUIRED )
     add_library ( json STATIC json/generator.cpp json/parser.cpp )
     target_include_directories ( json PUBLIC json/include )
-    target_link_libraries ( json common )
+    target_link_libraries ( json common YAJL::YAJL )
 endif ( BUILD_LIB_JSON )
 
 if ( BUILD_LIB_LOGGER )
index 1c346b792a706659bc0a1e74c1a9250afba96a18..2a87f3f6d780ec916ce36563f701b714279e2f6b 100644 (file)
@@ -2,14 +2,17 @@ set ( CPP_FILES main.cpp settings_impl.cpp web.cpp )
 
 set ( THREADS_PREFER_PTHREAD_FLAG ON )
 find_package ( Threads REQUIRED )
+find_package ( Intl REQUIRED )
 
 file ( READ sgauth.css CSS_DATA )
 configure_file ( css.h.in css.h ESCAPE_QUOTES @ONLY )
 
 set ( CMAKE_INCLUDE_CURRENT_DIR ON )
 
+include_directories ( ${Intl_INCLUDE_DIRS} )
+
 add_executable ( sgauth ${CPP_FILES} )
 
-target_link_libraries ( sgauth conffiles ia crypto common Threads::Threads )
+target_link_libraries ( sgauth conffiles ia crypto common ${Intl_LIBRARIES} Threads::Threads )
 
 # TODO: install
index 49e04d648d958c75d7b395cc26a9ef53163d20de..e431bcb05a651d5739010d432fe44210eeca0a20 100644 (file)
@@ -198,7 +198,7 @@ if (!m_description.empty())
     std::cout << m_description << ":\n";
 std::for_each(m_options.begin(),
               m_options.end(),
-              std::bind2nd(std::mem_fun_ref(&OPTION::Help), level + 1));
+              [&level](const auto& opt){ opt.Help(level + 1); });
 }
 
 PARSER_STATE OPTION_BLOCK::Parse(int argc, char ** argv, void * data)
@@ -208,12 +208,11 @@ if (state.argc == 0)
     return state;
 while (state.argc > 0 && !state.stop)
     {
-    std::vector<OPTION>::iterator it = std::find_if(m_options.begin(), m_options.end(), std::bind2nd(std::mem_fun_ref(&OPTION::Check), *state.argv));
+    const auto it = std::find_if(m_options.begin(), m_options.end(), [&state](const auto& opt){ return opt.Check(*state.argv); });
     if (it != m_options.end())
         state = it->Parse(--state.argc, ++state.argv, data);
     else
         break;
-    ++it;
     }
 return state;
 }
index 392626ab67b29cb2605b9454f94bf5460782e0c7..1b713f1d94e39b7cca999f78cd14a4d55fe4e7a8 100644 (file)
@@ -104,8 +104,7 @@ STG_LOCKER lock(&mutex);
 std::for_each(
         parent::begin(),
         parent::end(),
-        std::mem_fun(&BASE_ACTION::Invoke)
-);
+        [](auto action){ action->Invoke(); });
 }
 
 #endif
index 884fdbedc2b860d3a041ef14584052c255e28b6c..086521f99ab523f0e3b9d61dad2b0de177830e4b 100644 (file)
@@ -8,6 +8,9 @@ if ( BUILD_MOD_IA )
     add_library ( mod_auth_ia MODULE authorization/inetaccess/inetaccess.cpp )
     target_link_libraries ( mod_auth_ia scriptexecuter crypto logger common )
     set_target_properties ( mod_auth_ia PROPERTIES PREFIX "" )
+    if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
+        set_target_properties ( mod_auth_ia PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
+    endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
 endif ( BUILD_MOD_IA )
 
 if ( BUILD_MOD_CAP_NF )
@@ -66,6 +69,9 @@ if ( BUILD_MOD_SGCONFIG )
                                      configuration/sgconfig/parser_server_info.cpp )
     target_link_libraries ( mod_conf_sg scriptexecuter crypto logger common EXPAT::EXPAT )
     set_target_properties ( mod_conf_sg PROPERTIES PREFIX "" )
+    if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
+        set_target_properties ( mod_conf_sg PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
+    endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
 endif ( BUILD_MOD_SGCONFIG )
 
 if ( BUILD_MOD_RPCCONFIG )
@@ -101,6 +107,9 @@ if ( BUILD_MOD_RSCRYPT )
     add_library ( mod_remote_script MODULE other/rscript/rscript.cpp other/rscript/nrmap_parser.cpp )
     target_link_libraries ( mod_remote_script crypto scriptexecuter logger common )
     set_target_properties ( mod_remote_script PROPERTIES PREFIX "" )
+    if ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
+        set_target_properties ( mod_remote_script PROPERTIES LINK_FLAGS "-undefined dynamic_lookup" )
+    endif ( ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
 endif ( BUILD_MOD_RSCRYPT )
 
 if ( BUILD_MOD_SMUX )
index 853df2a4f8595162380ca873106c5ee1afb93f5e..d17eeb6dc5ca43131c733608c3a03e364e258ab7 100644 (file)
@@ -52,18 +52,6 @@ return aoc.GetPlugin();
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-template <typename varType>
-class IS_CONTAINS_USER: public std::binary_function<varType, USER_PTR, bool>
-{
-public:
-    bool operator()(const varType& notifier, USER_PTR user) const
-        {
-        return notifier.GetUser() == user;
-        }
-};
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
 std::string AUTH_AO::GetVersion() const
 {
 return "Always Online authorizator v.1.0";
@@ -86,7 +74,7 @@ GetUsers();
 users->AddNotifierUserAdd(&onAddUserNotifier);
 users->AddNotifierUserDel(&onDelUserNotifier);
 
-std::for_each(usersList.begin(), usersList.end(), std::bind1st(std::mem_fun(&AUTH_AO::UpdateUserAuthorization), this));
+std::for_each(usersList.begin(), usersList.end(), [this](auto user){ UpdateUserAuthorization(user); });
 
 isRunning = true;
 
@@ -143,15 +131,12 @@ u->GetProperty().ips.AddAfterNotifier(&AfterChgIPNotifierList.front());
 void AUTH_AO::UnSetUserNotifiers(USER_PTR u)
 {
 // ---      AlwaysOnline        ---
-IS_CONTAINS_USER<CHG_BEFORE_NOTIFIER<int> > IsContainsUserAOB;
-IS_CONTAINS_USER<CHG_AFTER_NOTIFIER<int> > IsContainsUserAOA;
-
 std::list<CHG_BEFORE_NOTIFIER<int> >::iterator aoBIter;
 std::list<CHG_AFTER_NOTIFIER<int> >::iterator  aoAIter;
 
 aoBIter = find_if(BeforeChgAONotifierList.begin(),
                   BeforeChgAONotifierList.end(),
-                  bind2nd(IsContainsUserAOB, u));
+                  [u](auto notifier){ return notifier.GetUser() == u; });
 
 if (aoBIter != BeforeChgAONotifierList.end())
     {
@@ -161,7 +146,7 @@ if (aoBIter != BeforeChgAONotifierList.end())
 
 aoAIter = find_if(AfterChgAONotifierList.begin(),
                   AfterChgAONotifierList.end(),
-                  bind2nd(IsContainsUserAOA, u));
+                  [u](auto notifier){ return notifier.GetUser() == u; });
 
 if (aoAIter != AfterChgAONotifierList.end())
     {
@@ -171,15 +156,12 @@ if (aoAIter != AfterChgAONotifierList.end())
 // ---      AlwaysOnline end    ---
 
 // ---          IP              ---
-IS_CONTAINS_USER<CHG_BEFORE_NOTIFIER<USER_IPS> > IsContainsUserIPB;
-IS_CONTAINS_USER<CHG_AFTER_NOTIFIER<USER_IPS> >  IsContainsUserIPA;
-
 std::list<CHG_BEFORE_NOTIFIER<USER_IPS> >::iterator ipBIter;
 std::list<CHG_AFTER_NOTIFIER<USER_IPS> >::iterator  ipAIter;
 
 ipBIter = std::find_if(BeforeChgIPNotifierList.begin(),
                        BeforeChgIPNotifierList.end(),
-                       bind2nd(IsContainsUserIPB, u));
+                       [u](auto notifier){ return notifier.GetUser() == u; });
 
 if (ipBIter != BeforeChgIPNotifierList.end())
     {
@@ -189,7 +171,7 @@ if (ipBIter != BeforeChgIPNotifierList.end())
 
 ipAIter = find_if(AfterChgIPNotifierList.begin(),
                   AfterChgIPNotifierList.end(),
-                  bind2nd(IsContainsUserIPA, u));
+                  [u](auto notifier){ return notifier.GetUser() == u; });
 
 if (ipAIter != AfterChgIPNotifierList.end())
     {
index a209409ba95e36f1e490d03217c0211b70ea3733..d8bca57f6242b880c2b0cbd06f2121b254982393 100644 (file)
 #include <sys/types.h>
 #include <sys/socket.h>
 
+#ifndef MSG_NOSIGNAL
+// On OSX this flag does not exist.
+#define MSG_NOSIGNAL 0
+#endif
+
 using STG::Conn;
 using STG::Config;
 using STG::JSON::Parser;
index 09e71a35bc2051a006f755eff573c967a3097335..77be7fba51d7f6b5cbe6ed58ea3a19fea62b04fc 100644 (file)
@@ -581,7 +581,7 @@ std::vector<std::string> USER_IMPL::GetAuthorizers() const
 {
     STG_LOCKER lock(&mutex);
     std::vector<std::string> list;
-    std::transform(authorizedBy.begin(), authorizedBy.end(), std::back_inserter(list), std::mem_fun(&AUTH::GetVersion));
+    std::transform(authorizedBy.begin(), authorizedBy.end(), std::back_inserter(list), [](const auto auth){ return auth->GetVersion(); });
     return list;
 }
 //-----------------------------------------------------------------------------
index ef5e98caa796de93285766a0f13a6c8f876756ff..6487c932a7fe6a7dd85e2581546d3513e18645b9 100644 (file)
@@ -407,7 +407,7 @@ while (us->nonstop)
     //printfd(__FILE__,"New Minute. old = %02d current = %02d\n", min, t->tm_min);
     //printfd(__FILE__,"New Day.    old = %2d current = %2d\n", day, t->tm_mday);
 
-    for_each(us->users.begin(), us->users.end(), std::mem_fun_ref(&USER_IMPL::Run));
+    for_each(us->users.begin(), us->users.end(), [](auto& user){ user.Run(); });
 
     tt = stgTime;
     localtime_r(&tt, &t);
@@ -458,7 +458,7 @@ void USERS_IMPL::NewMinute(const struct tm & t)
 if (t.tm_hour == 23 && t.tm_min == 59)
     {
     printfd(__FILE__,"MidnightResetSessionStat\n");
-    for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::MidnightResetSessionStat));
+    for_each(users.begin(), users.end(), [](auto& user){ user.MidnightResetSessionStat(); });
     }
 
 if (TimeToWriteDetailStat(t))
@@ -474,7 +474,7 @@ if (TimeToWriteDetailStat(t))
         usr->WriteDetailStat();
         ++usr;
         if (usersCnt % 10 == 0)
-            for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::Run));
+            for_each(users.begin(), users.end(), [](auto& user){ user.Run(); });
         }
     }
 
@@ -505,19 +505,19 @@ if (!settings->GetDayFeeIsLastDay())
 if (settings->GetSpreadFee())
     {
     printfd(__FILE__, "Spread DayFee\n");
-    for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessDayFeeSpread));
+    for_each(users.begin(), users.end(), [](auto& user){ user.ProcessDayFeeSpread(); });
     }
 else
     {
     if (t.tm_mday == dayFee)
         {
         printfd(__FILE__, "DayFee\n");
-        for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessDayFee));
+        for_each(users.begin(), users.end(), [](auto& user){ user.ProcessDayFee(); });
         }
     }
 
-std::for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessDailyFee));
-std::for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessServices));
+std::for_each(users.begin(), users.end(), [](auto& user){ user.ProcessDailyFee(); });
+std::for_each(users.begin(), users.end(), [](auto& user){ user.ProcessServices(); });
 
 if (settings->GetDayFeeIsLastDay())
     {
@@ -534,7 +534,7 @@ if (dayResetTraff == 0)
 if (t1.tm_mday == dayResetTraff)
     {
     printfd(__FILE__, "ResetTraff\n");
-    for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::ProcessNewMonth));
+    for_each(users.begin(), users.end(), [](auto& user){ user.ProcessNewMonth(); });
     //for_each(users.begin(), users.end(), mem_fun_ref(&USER_IMPL::SetPrepaidTraff));
     }
 }
@@ -593,7 +593,7 @@ if (isRunning)
     }
 
 printfd(__FILE__, "Before USERS::Run()\n");
-for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::Run));
+for_each(users.begin(), users.end(), [](auto& user){ user.Run(); });
 
 // 'cause bind2st accepts only constant first param
 for (std::list<USER_IMPL>::iterator it = users.begin();
@@ -601,7 +601,7 @@ for (std::list<USER_IMPL>::iterator it = users.begin();
      ++it)
     it->WriteDetailStat(true);
 
-for_each(users.begin(), users.end(), std::mem_fun_ref(&USER_IMPL::WriteStat));
+for_each(users.begin(), users.end(), [](auto& user){ user.WriteStat(); });
 //for_each(users.begin(), users.end(), mem_fun_ref(&USER_IMPL::WriteConf));
 
 printfd(__FILE__, "USERS::Stop()\n");