ENDIF(ENABLE_LOG_FEATURE)
pkg_check_modules(client_pkgs REQUIRED glib-2.0 pims-ipc capi-base-common dlog libtzplatform-config
- icu-uc capi-media-image-util)
+ icu-uc capi-media-image-util libsystemd-login)
INCLUDE_DIRECTORIES(${client_pkgs_INCLUDE_DIRS})
LINK_DIRECTORIES(${client_pkgs_LIBRARY_DIRS})
static int _ctsvc_ipc_create(pims_ipc_h *p_ipc)
{
char sock_file[CTSVC_PATH_MAX_LEN] = {0};
+ uid_t uid = 0;
- snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s", getuid(),
+ if (CONTACTS_ERROR_NONE != ctsvc_client_get_uid(&uid))
+ return CONTACTS_ERROR_SYSTEM;
+
+ snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s", uid,
CTSVC_IPC_SERVICE);
pims_ipc_h ipc = pims_ipc_create(sock_file);
if (NULL == ipc) {
#include "ctsvc_client_ipc.h"
#include "ctsvc_client_setting.h"
#include "contacts_extension.h"
+#include "ctsvc_client_utils.h"
typedef struct {
contacts_db_change_cb_with_info cb;
if (NULL == __ipc) {
char sock_file[CTSVC_PATH_MAX_LEN] = {0};
+ uid_t uid = 0;
+
+ if (CONTACTS_ERROR_NONE != ctsvc_client_get_uid(&uid))
+ return CONTACTS_ERROR_SYSTEM;
+
snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s_for_subscribe",
- getuid(), CTSVC_IPC_SERVICE);
+ uid, CTSVC_IPC_SERVICE);
__ipc = pims_ipc_create_for_subscribe(sock_file);
if (NULL == __ipc) {
/* LCOV_EXCL_START */
pims_ipc_destroy_for_subscribe(__ipc);
char sock_file[CTSVC_PATH_MAX_LEN] = {0};
+ uid_t uid = 0;
+
+ if (CONTACTS_ERROR_NONE != ctsvc_client_get_uid(&uid))
+ return CONTACTS_ERROR_SYSTEM;
+
snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s_for_subscribe",
- getuid(), CTSVC_IPC_SERVICE);
+ uid, CTSVC_IPC_SERVICE);
__ipc = pims_ipc_create_for_subscribe(sock_file);
if (NULL == __ipc) {
ERR("pims_ipc_create_for_subscribe() Fail");
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
+#include <systemd/sd-login.h>
+
+#include "ctsvc_internal.h"
+
+#define CTSVC_SYSTEM_SLICE "system.slice"
inline unsigned int ctsvc_client_get_pid()
{
return (unsigned int)syscall(SYS_gettid);
}
+int ctsvc_client_get_uid(uid_t *uid)
+{
+ RETV_IF(NULL == uid, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ int ret = 0;
+ uid_t *active_user_list = NULL;
+ char *slice = NULL;
+ *uid = getuid();
+
+ ret = sd_pid_get_slice(getpid(), &slice);
+ if (0 <= ret && slice) {
+ if (STRING_EQUAL == strncmp(slice, CTSVC_SYSTEM_SLICE, strlen(CTSVC_SYSTEM_SLICE))) {
+ ret = sd_get_active_uids(&active_user_list);
+ /* the number of active users is 1 in tizen3.0 */
+ if (1 == ret && active_user_list) {
+ *uid = active_user_list[0];
+ INFO("uid = %d", *uid);
+ } else {
+ ERR("sd_get_active_uids() Fail(%d)", ret);
+ free(active_user_list);
+ free(slice);
+ return CONTACTS_ERROR_SYSTEM;
+ }
+ free(active_user_list);
+ }
+ free(slice);
+ } else {
+ ERR("sd_pid_get_slice() Fail(%d)", ret);
+ }
+ INFO("getuid() = %d, uid = %d", getuid(), *uid);
+
+ return CONTACTS_ERROR_NONE;
+}
+
unsigned int ctsvc_client_get_pid();
unsigned int ctsvc_client_get_tid();
+int ctsvc_client_get_uid(uid_t *uid);
#endif /* __CTSVC_CLIENT_UTILS_H__ */
#include "ctsvc_socket.h"
#include "ctsvc_mutex.h"
#include "ctsvc_inotify.h"
-
+#ifdef _CONTACTS_IPC_CLIENT
+#include "ctsvc_client_utils.h"
+#endif
static int __ctsvc_conn_refcnt = 0;
static int __ctsvc_sockfd = -1;
}
char sock_file[CTSVC_PATH_MAX_LEN] = {0};
- snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/%s", getuid(), CTSVC_SOCKET_FILE);
+#ifdef _CONTACTS_IPC_CLIENT
+ uid_t uid = 0;
+ if (CONTACTS_ERROR_NONE != ctsvc_client_get_uid(&uid))
+ return CONTACTS_ERROR_SYSTEM;
+
+ snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/%s", uid, CTSVC_SOCKET_FILE);
+#else
+ snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/%s", getuid(), CTSVC_SOCKET_FILE);
+#endif
bzero(&caddr, sizeof(caddr));
caddr.sun_family = AF_UNIX;
snprintf(caddr.sun_path, sizeof(caddr.sun_path), "%s", sock_file);
Name: contacts-service
Summary: Contacts Service
-Version: 0.13.60
+Version: 0.13.61
Release: 0
Group: Social & Content/Service
License: Apache-2.0
BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(icu-uc)
BuildRequires: pkgconfig(phonenumber-utils)
+BuildRequires: pkgconfig(libsystemd)
+
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
pkg_check_modules(daemon_pkgs REQUIRED glib-2.0 pims-ipc sqlite3 tapi capi-media-image-util
accounts-svc libexif libsmack cynara-client cynara-session cynara-creds-socket capi-system-info
- phonenumber-utils vconf db-util libtzplatform-config icu-uc)
+ phonenumber-utils vconf db-util libtzplatform-config icu-uc libsystemd-login)
INCLUDE_DIRECTORIES(${daemon_pkgs_INCLUDE_DIRS})
LINK_DIRECTORIES(${daemon_pkgs_LIBRARY_DIRS})
snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s_for_subscribe",
getuid(), CTSVC_IPC_SERVICE);
- pims_ipc_svc_init_for_publish(sock_file, CTS_SECURITY_FILE_GROUP, 0660);
+ pims_ipc_svc_init_for_publish(sock_file, CTS_SECURITY_FILE_GROUP, CTS_SECURITY_DEFAULT_PERMISSION);
ctsvc_noti_publish_socket_initialize();
ret = ctsvc_connect();
info->client_session = cynara_session_from_pid(pid);
if (NULL == info->client_session) {
/* LCOV_EXCL_START */
- ERR("cynara_session_from_pid() return NULL");
- _ctsvc_server_destroy_client_info(info);
- return CONTACTS_ERROR_SYSTEM;
+ WARN("cynara_session_from_pid() return NULL");
+ info->client_session = strdup("");
/* LCOV_EXCL_STOP */
}
*p_info = info;
/* For Security */
#define CTS_SECURITY_FILE_GROUP 5000
-#define CTS_SECURITY_DEFAULT_PERMISSION 0660
+#define CTS_SECURITY_DEFAULT_PERMISSION 0666
#define CTS_SECURITY_DIR_DEFAULT_PERMISSION 0770
#define CTS_SCHEMA_TABLE_TOTAL 10