// 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);
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)
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}")
* limitations under the License.
*/
+#include <systemd/sd-login.h>
#include <cynara-creds-gdbus.h>
#include <cynara-session.h>
#include <cynara-client.h>
#include <Credential.h>
#define CACHE_SIZE 100
-#define SYSTEM_UID_LIMIT 5000
using namespace ctx;
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);
}
* limitations under the License.
*/
+#include <systemd/sd-login.h>
#include <ScopeMutex.h>
#include <ClientProxy.h>
#include <MethodCall.h>
{
}
-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;
}