From: Krzysztof Jackiewicz Date: Thu, 21 Nov 2013 10:06:47 +0000 (+0100) Subject: Service connection info refactoring X-Git-Tag: submit/tizen/20140307.131547~46 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c7bec3a2933e742251ce306f3fbb3442309eb897;p=platform%2Fcore%2Fsecurity%2Fsecurity-server.git Service connection info refactoring [Issue#] N/A [Feature/Bug] N/A [Problem] Services use similar connection info maps. [Cause] N/A [Solution] Commonly used types moved to common header. Service specific types renamed and moved to class internals. [Verification] Successfull compilation Change-Id: I5296bbc7b23b2ed4183a11213398ca8cd85d3691 --- diff --git a/src/server2/client/client-app-permissions.cpp b/src/server2/client/client-app-permissions.cpp index 2f9ec2f..35bda12 100644 --- a/src/server2/client/client-app-permissions.cpp +++ b/src/server2/client/client-app-permissions.cpp @@ -184,7 +184,7 @@ int security_server_app_has_privilege(const char *app_id, LogDebug("privilege_name: " << privilege_name); //put data into buffer - Serialization::Serialize(send, static_cast(PrivilegeCheckCall::CHECK_GIVEN_APP)); + Serialization::Serialize(send, static_cast(PrivilegeCheckHdrs::CHECK_GIVEN_APP)); Serialization::Serialize(send, std::string(app_id)); Serialization::Serialize(send, static_cast(app_type)); Serialization::Serialize(send, std::string(privilege_name)); @@ -239,7 +239,7 @@ int security_server_app_caller_has_privilege(app_type_t app_type, LogDebug("privilege_name: " << privilege_name); //put data into buffer - Serialization::Serialize(send, static_cast(PrivilegeCheckCall::CHECK_CALLER_APP)); + Serialization::Serialize(send, static_cast(PrivilegeCheckHdrs::CHECK_CALLER_APP)); Serialization::Serialize(send, static_cast(app_type)); Serialization::Serialize(send, std::string(privilege_name)); diff --git a/src/server2/common/connection-info.h b/src/server2/common/connection-info.h new file mode 100644 index 0000000..946b5c8 --- /dev/null +++ b/src/server2/common/connection-info.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd All Rights Reserved + * + * Contact: Bumjin Im + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +/* + * @file connection-info.h + * @author Lukasz Kostyra (l.kostyra@partner.samsung.com) + * @version 1.0 + * @brief Definition of ConnectionInfo structure and ConnectionInfoMap type. + */ + +#ifndef _CONNECTION_INFO_H_ +#define _CONNECTION_INFO_H_ + +#include +#include +#include + +namespace SecurityServer +{ + struct ConnectionInfo { + InterfaceID interfaceID; + MessageBuffer buffer; + }; + + typedef std::map ConnectionInfoMap; +} //namespace SecurityServer + +#endif //_CONNECTION_INFO_H_ diff --git a/src/server2/common/protocols.h b/src/server2/common/protocols.h index 73a9490..afdb159 100644 --- a/src/server2/common/protocols.h +++ b/src/server2/common/protocols.h @@ -54,7 +54,7 @@ enum class CookieCall CHECK_UID }; -enum class PrivilegeCheckCall +enum class PrivilegeCheckHdrs { CHECK_GIVEN_APP, CHECK_CALLER_APP diff --git a/src/server2/service/app-permissions.cpp b/src/server2/service/app-permissions.cpp index f622d02..290650d 100644 --- a/src/server2/service/app-permissions.cpp +++ b/src/server2/service/app-permissions.cpp @@ -37,6 +37,7 @@ #include #include +namespace SecurityServer { namespace { @@ -55,18 +56,20 @@ int privilegeToSecurityServerError(int error) { return SECURITY_SERVER_API_ERROR_UNKNOWN; } -} // namespace anonymous +// interface ids +const InterfaceID CHANGE_APP_PERMISSIONS = 0; +const InterfaceID CHECK_APP_PRIVILEGE = 1; -namespace SecurityServer { +} // namespace anonymous GenericSocketService::ServiceDescriptionVector AppPermissionsService::GetServiceDescription() { return ServiceDescriptionVector { { SERVICE_SOCKET_APP_PERMISSIONS, "security-server::api-app-permissions", - static_cast(InterfaceType::CHANGE_APP_PERMISSIONS) }, + CHANGE_APP_PERMISSIONS }, { SERVICE_SOCKET_APP_PRIVILEGE_BY_NAME, "security-server::api-app-privilege-by-name", - static_cast(InterfaceType::CHECK_APP_PRIVILEGE) } + CHECK_APP_PRIVILEGE } }; } @@ -74,8 +77,8 @@ void AppPermissionsService::accept(const AcceptEvent &event) { LogDebug("Accept event. ConnectionID.sock: " << event.connectionID.sock << " ConnectionID.counter: " << event.connectionID.counter << " ServiceID: " << event.interfaceID); - auto &info = m_socketInfoMap[event.connectionID.counter]; - info.interfaceID = static_cast(event.interfaceID); + auto &info = m_connectionInfoMap[event.connectionID.counter]; + info.interfaceID = event.interfaceID; } void AppPermissionsService::write(const WriteEvent &event) { @@ -87,7 +90,7 @@ void AppPermissionsService::write(const WriteEvent &event) { void AppPermissionsService::process(const ReadEvent &event) { LogDebug("Read event for counter: " << event.connectionID.counter); - auto &info = m_socketInfoMap[event.connectionID.counter]; + auto &info = m_connectionInfoMap[event.connectionID.counter]; info.buffer.Push(event.rawBuffer); // We can get several requests in one package. @@ -97,12 +100,12 @@ void AppPermissionsService::process(const ReadEvent &event) { void AppPermissionsService::close(const CloseEvent &event) { LogDebug("CloseEvent. ConnectionID: " << event.connectionID.sock); - m_socketInfoMap.erase(event.connectionID.counter); + m_connectionInfoMap.erase(event.connectionID.counter); } bool AppPermissionsService::processOne(const ConnectionID &conn, MessageBuffer &buffer, - InterfaceType interfaceID) + InterfaceID interfaceID) { LogDebug("Iteration begin"); @@ -114,10 +117,10 @@ bool AppPermissionsService::processOne(const ConnectionID &conn, LogDebug("Entering app_permissions server side handler"); switch(interfaceID) { - case InterfaceType::CHANGE_APP_PERMISSIONS: + case CHANGE_APP_PERMISSIONS: return processPermissionsChange(conn, buffer); - case InterfaceType::CHECK_APP_PRIVILEGE: + case CHECK_APP_PRIVILEGE: return processCheckAppPrivilege(conn, buffer); default: @@ -206,7 +209,7 @@ bool AppPermissionsService::processCheckAppPrivilege(const ConnectionID &conn, M int result = SECURITY_SERVER_API_ERROR_SERVER_ERROR; app_type_t app_type; bool has_permission = false; - PrivilegeCheckCall checkType = PrivilegeCheckCall::CHECK_GIVEN_APP; + PrivilegeCheckHdrs checkType = PrivilegeCheckHdrs::CHECK_GIVEN_APP; LogDebug("Processing app privilege check request"); @@ -214,11 +217,11 @@ bool AppPermissionsService::processCheckAppPrivilege(const ConnectionID &conn, M Try { int temp; Deserialization::Deserialize(buffer, temp); // call type - checkType = static_cast(temp); + checkType = static_cast(temp); LogDebug("App privilege check call type: " - << (checkType == PrivilegeCheckCall::CHECK_GIVEN_APP ? + << (checkType == PrivilegeCheckHdrs::CHECK_GIVEN_APP ? "CHECK_GIVEN_APP":"CHECK_CALLER_APP")); - if (checkType == PrivilegeCheckCall::CHECK_GIVEN_APP) { //app_id present only in this case + if (checkType == PrivilegeCheckHdrs::CHECK_GIVEN_APP) { //app_id present only in this case Deserialization::Deserialize(buffer, app_id); //get app id } Deserialization::Deserialize(buffer, temp); //get app type @@ -231,7 +234,7 @@ bool AppPermissionsService::processCheckAppPrivilege(const ConnectionID &conn, M return false; } - if (checkType == PrivilegeCheckCall::CHECK_CALLER_APP) { //get sender app_id in this case + if (checkType == PrivilegeCheckHdrs::CHECK_CALLER_APP) { //get sender app_id in this case char *label = NULL; if (smack_new_label_from_socket(conn.sock, &label) < 0) { LogDebug("Error in smack_new_label_from_socket(): " diff --git a/src/server2/service/app-permissions.h b/src/server2/service/app-permissions.h index a22bfbc..c445198 100644 --- a/src/server2/service/app-permissions.h +++ b/src/server2/service/app-permissions.h @@ -30,6 +30,7 @@ #include #include #include +#include #include namespace SecurityServer { @@ -39,18 +40,6 @@ class AppPermissionsService : , public SecurityServer::ServiceThread { public: - enum class InterfaceType { - CHANGE_APP_PERMISSIONS, - CHECK_APP_PRIVILEGE, - }; - - struct SocketInfo { - InterfaceType interfaceID; - MessageBuffer buffer; - }; - - typedef std::map SocketInfoMap; - ServiceDescriptionVector GetServiceDescription(); DECLARE_THREAD_EVENT(AcceptEvent, accept) @@ -64,12 +53,12 @@ public: void close(const CloseEvent &event); private: - bool processOne(const ConnectionID &conn, MessageBuffer &buffer, InterfaceType interfaceID); + bool processOne(const ConnectionID &conn, MessageBuffer &buffer, InterfaceID interfaceID); bool processPermissionsChange(const ConnectionID &conn, MessageBuffer &buffer); bool processCheckAppPrivilege(const ConnectionID &conn, MessageBuffer &buffer); - SocketInfoMap m_socketInfoMap; + ConnectionInfoMap m_connectionInfoMap; }; } // namespace SecurityServer diff --git a/src/server2/service/cookie.cpp b/src/server2/service/cookie.cpp index f6408d1..7659dbd 100644 --- a/src/server2/service/cookie.cpp +++ b/src/server2/service/cookie.cpp @@ -53,7 +53,7 @@ void CookieService::accept(const AcceptEvent &event) { LogDebug("Accept event. ConnectionID.sock: " << event.connectionID.sock << " ConnectionID.counter: " << event.connectionID.counter << " ServiceID: " << event.interfaceID); - auto &info = m_socketInfoMap[event.connectionID.counter]; + auto &info = m_connectionInfoMap[event.connectionID.counter]; info.interfaceID = event.interfaceID; } @@ -66,7 +66,7 @@ void CookieService::write(const WriteEvent &event) { void CookieService::process(const ReadEvent &event) { LogDebug("Read event for counter: " << event.connectionID.counter); - auto &info = m_socketInfoMap[event.connectionID.counter]; + auto &info = m_connectionInfoMap[event.connectionID.counter]; info.buffer.Push(event.rawBuffer); // We can get several requests in one package. @@ -76,10 +76,10 @@ void CookieService::process(const ReadEvent &event) { void CookieService::close(const CloseEvent &event) { LogDebug("CloseEvent. ConnectionID: " << event.connectionID.sock); - m_socketInfoMap.erase(event.connectionID.counter); + m_connectionInfoMap.erase(event.connectionID.counter); } -bool CookieService::processOne(const ConnectionID &conn, MessageBuffer &buffer, int interfaceID) +bool CookieService::processOne(const ConnectionID &conn, MessageBuffer &buffer, InterfaceID interfaceID) { LogDebug("Iteration begin"); MessageBuffer send, recv; diff --git a/src/server2/service/cookie.h b/src/server2/service/cookie.h index 309d212..b899e2f 100644 --- a/src/server2/service/cookie.h +++ b/src/server2/service/cookie.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -39,13 +40,6 @@ class CookieService : , public SecurityServer::ServiceThread { public: - struct SocketInfo - { - int interfaceID; - MessageBuffer buffer; - }; - - typedef std::map SocketInfoMap; ServiceDescriptionVector GetServiceDescription(); @@ -60,7 +54,7 @@ public: void close(const CloseEvent &event); private: - bool processOne(const ConnectionID &conn, MessageBuffer &buffer, int interfaceID); + bool processOne(const ConnectionID &conn, MessageBuffer &buffer, InterfaceID interfaceID); bool cookieRequest(MessageBuffer &send, int socket); @@ -74,7 +68,7 @@ private: CookieJar m_cookieJar; - SocketInfoMap m_socketInfoMap; + ConnectionInfoMap m_connectionInfoMap; }; } // namespace SecurityServer diff --git a/src/server2/service/open-for.cpp b/src/server2/service/open-for.cpp index 227744c..6b60459 100644 --- a/src/server2/service/open-for.cpp +++ b/src/server2/service/open-for.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -53,6 +54,10 @@ const int SERVICE_SOCKET_ID = 0; namespace SecurityServer { +OpenForService::OpenForConnInfo::~OpenForConnInfo() { + std::for_each(descriptorsVector.begin(),descriptorsVector.end(), ::close); +} + GenericSocketService::ServiceDescriptionVector OpenForService::GetServiceDescription() { return ServiceDescriptionVector {{SERVICE_SOCKET_OPEN_FOR, "security-server::api-open-for", SERVICE_SOCKET_ID, true}}; @@ -76,7 +81,7 @@ void OpenForService::write(const WriteEvent &event) void OpenForService::process(const ReadEvent &event) { LogDebug("Read event for counter: " << event.connectionID.counter); - auto &info = m_socketInfoMap[event.connectionID.counter]; + auto &info = m_connectionInfoMap[event.connectionID.counter]; info.buffer.Push(event.rawBuffer); // We can get several requests in one package. @@ -87,12 +92,12 @@ void OpenForService::process(const ReadEvent &event) void OpenForService::close(const CloseEvent &event) { LogDebug("CloseEvent. ConnectionID: " << event.connectionID.sock); - auto &descVector = m_socketInfoMap[event.connectionID.counter].descriptorsVector; + auto &descVector = m_connectionInfoMap[event.connectionID.counter].descriptorsVector; for (auto iter = descVector.begin(); iter != descVector.end(); ++iter) TEMP_FAILURE_RETRY(::close(*iter)); - m_socketInfoMap.erase(event.connectionID.counter); + m_connectionInfoMap.erase(event.connectionID.counter); } bool OpenForService::processOne(const ConnectionID &conn, MessageBuffer &buffer, std::vector &descVector) diff --git a/src/server2/service/open-for.h b/src/server2/service/open-for.h index e56b05f..6de08d5 100644 --- a/src/server2/service/open-for.h +++ b/src/server2/service/open-for.h @@ -34,15 +34,6 @@ namespace SecurityServer { - typedef std::vector DescriptorVector; - - struct SocketInfo { - DescriptorVector descriptorsVector; - MessageBuffer buffer; - }; - - typedef std::map SocketInfoMap; - class OpenForService : public SecurityServer::GenericSocketService , public SecurityServer::ServiceThread @@ -62,10 +53,21 @@ namespace SecurityServer void close(const CloseEvent &event); private: + typedef std::vector DescriptorVector; + + struct OpenForConnInfo { + ~OpenForConnInfo(); + + DescriptorVector descriptorsVector; + MessageBuffer buffer; + }; + + typedef std::map OpenForConnInfoMap; + //internal service functions bool processOne(const ConnectionID &conn, MessageBuffer &buffer, DescriptorVector &descVector); - SocketInfoMap m_socketInfoMap; + OpenForConnInfoMap m_connectionInfoMap; SharedFile m_sharedFile; }; } // namespace SecurityServer