Use libsystemd to properly check the uid 01/114001/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Thu, 9 Feb 2017 12:48:00 +0000 (21:48 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Thu, 9 Feb 2017 12:48:00 +0000 (21:48 +0900)
Change-Id: I65e2488a7898f305212bca5c06748c0a245b5f41
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
include/DBusService.h
packaging/context-common.spec
src/server/CMakeLists.txt
src/server/Credential.cpp
src/server/DBusService.cpp

index cfa9479..2de9031 100644 (file)
@@ -38,7 +38,7 @@ namespace ctx {
                // If the GVariant 'param' is floating, it is consumed.
                void publish(const std::string& busName, const std::string& signalName, GVariant* param);
 
-               uid_t getActiveUser() const;
+               uid_t getActiveUser();
 
        protected:
                DBusService(GDBusConnection* conn, const char* serviceName, const char* methodSpecs);
index 0aa4aa3..69d3bf3 100644 (file)
@@ -12,6 +12,7 @@ BuildRequires: pkgconfig(gio-2.0)
 BuildRequires: pkgconfig(json-glib-1.0)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(libsystemd-login)
 BuildRequires: pkgconfig(capi-base-common)
 BuildRequires: pkgconfig(alarm-service)
 BuildRequires: pkgconfig(libtzplatform-config)
index e365128..7e8c6ab 100644 (file)
@@ -1,6 +1,6 @@
 SET(target "${PROJECT_NAME}-server")
 
-SET(DEPS "${DEPS} sqlite3 libtzplatform-config alarm-service cynara-creds-gdbus cynara-client cynara-session")
+SET(DEPS "${DEPS} sqlite3 libsystemd-login libtzplatform-config alarm-service cynara-creds-gdbus cynara-client cynara-session")
 
 FILE(GLOB_RECURSE SRCS *.cpp ../shared/*.cpp)
 MESSAGE("Sources: ${SRCS}")
index 87f9fad..b8af51b 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <systemd/sd-login.h>
 #include <cynara-creds-gdbus.h>
 #include <cynara-session.h>
 #include <cynara-client.h>
@@ -21,7 +22,6 @@
 #include <Credential.h>
 
 #define CACHE_SIZE     100
-#define SYSTEM_UID_LIMIT       5000
 
 using namespace ctx;
 
@@ -145,5 +145,6 @@ bool Credential::isSystem() const
 
 bool Credential::isSystemUid(uid_t uid)
 {
-       return (uid < SYSTEM_UID_LIMIT);
+       int type = sd_get_uid_type(uid);
+       return (type != NORMAL_USER_TYPE && type != CONTAINER_TYPE);
 }
index 2018fbe..c02dec3 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <systemd/sd-login.h>
 #include <ScopeMutex.h>
 #include <ClientProxy.h>
 #include <MethodCall.h>
@@ -79,8 +80,15 @@ void DBusService::onUserActivated(uid_t uid)
 {
 }
 
-uid_t DBusService::getActiveUser() const
+uid_t DBusService::getActiveUser()
 {
+       if (__activeUid == 0) {
+               uid_t* users = NULL;
+               int numUsers = sd_get_active_uids(&users);
+               if (numUsers > 0)
+                       __activeUid = users[0];
+               free(users);
+       }
        return __activeUid;
 }