# Set required packages
INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED glib-2.0 gio-2.0 gio-unix-2.0 tcore iniparser vconf alarm-service libxml-2.0 cynara-client cynara-creds-gdbus cynara-session)
+pkg_check_modules(pkgs REQUIRED glib-2.0 gio-2.0 gio-unix-2.0 tcore iniparser vconf alarm-service libxml-2.0)
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
#include <core_object.h>
#include <hal.h>
-#include <cynara-client.h>
-
#include "generated-code.h"
#include "ps_log.h"
#define PS_ERR_WRONG_PROFILE "Wrong Profile"
#define PS_ERR_MAX "Unknown Error"
-#define AC_PS_PUBLIC "telephony_framework::api_ps_public"
-#define AC_PS_PRIVATE "telephony_framework::api_ps_private"
-#define AC_PS_PROFILE "telephony_framework::api_ps_profile"
-
#define BOOL2STRING(a) ((a == TRUE) ? ("TRUE") : ("FALSE"))
#define CHAR2STRING(a) g_strdup_printf("%c", a)
#define INT2STRING(a) g_strdup_printf("%d", a)
/* List of masters */
GSList *master;
- cynara *p_cynara;
} PsPrivInfo;
typedef enum {
enum tcore_hook_return __on_hook_modem_removed(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data);
/* util.c */
-gboolean ps_util_check_access_control (cynara *p_cynara, GDBusMethodInvocation *invoc, const char *label, const char *perm);
GSource * ps_util_gsource_dispatch(GMainContext *main_context, gint priority, GSourceFunc cb, gpointer data);
gboolean ps_util_thread_dispatch(GMainContext *main_context, gint priority, GSourceFunc cb, gpointer data);
int ps_util_system_command(char * command);
%define major 0
%define minor 3
-%define patchlevel 16
+%define patchlevel 17
Name: tel-plugin-packetservice
Version: %{major}.%{minor}.%{patchlevel}
BuildRequires: pkgconfig(db-util)
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(alarm-service)
-BuildRequires: pkgconfig(cynara-client)
-BuildRequires: pkgconfig(cynara-creds-gdbus)
-BuildRequires: pkgconfig(cynara-session)
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
<policy user="root">
<allow own="com.tcore.ps"/>
<allow send_destination="com.tcore.ps"/>
- <allow receive_sender="com.tcore.ps"/>
</policy>
<policy context="default">
- <allow send_destination="com.tcore.ps"/>
- <allow receive_sender="com.tcore.ps"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.master" send_member="GetModems" privilege="http://tizen.org/privilege/telephony"/>
+
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="GetProperties" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="GetServices" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="GetProfileList" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="AddProfile" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="ResetProfile" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.modem" send_member="GoDormantAll" privilege="http://tizen.org/privilege/telephony.admin"/>
+
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.service" send_member="GetProperties" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.service" send_member="GetContexts" privilege="http://tizen.org/privilege/telephony"/>
+
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="GetProperties" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="GetProfile" privilege="http://tizen.org/privilege/telephony"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="Activate" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="Deactivate" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="SetDefaultConnection" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="ModifyProfile" privilege="http://tizen.org/privilege/telephony.admin"/>
+ <check send_destination="com.tcore.ps" send_interface="com.tcore.ps.context" send_member="RemoveProfile" privilege="http://tizen.org/privilege/telephony.admin"/>
</policy>
-</busconfig>
+</busconfig>
\ No newline at end of file
{
GVariant *gv = NULL;
GVariantBuilder property;
- ps_context_t *pscontext = user_data;
- TcorePlugin *p = (pscontext) ? pscontext->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
dbg("Entered");
gv = _ps_context_get_properties(user_data, &property);
{
GVariant *gv = NULL;
GVariantBuilder profile;
- ps_context_t *pscontext = user_data;
- TcorePlugin *p = (pscontext) ? pscontext->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
dbg("Entered");
gv = __ps_context_get_profile_properties(user_data, &profile);
CoreObject *co_network;
ps_context_t *pscontext = user_data;
- TcorePlugin *p = (pscontext) ? pscontext->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PRIVATE, "w"))
- return TRUE;
dbg("Entered");
if (pscontext == NULL) {
CoreObject *co_network;
int context_state = 0;
ps_context_t *pscontext = user_data;
- TcorePlugin *p = (pscontext) ? pscontext->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PRIVATE, "w"))
- return TRUE;
dbg("Entered");
if (pscontext == NULL) {
gpointer service = NULL;
gpointer cur_default_ctx = NULL;
ps_context_t *pscontext = user_data;
- TcorePlugin *p = (pscontext) ? pscontext->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
CoreObject *co_network;
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PROFILE, "w"))
- return TRUE;
-
dbg("enter set default connection ps_context_t(%p)", pscontext);
if (pscontext == NULL) {
err("activation request object is NULL");
gboolean rv = FALSE;
int context_state = 0;
ps_context_t *context = user_data;
- TcorePlugin *p = (context) ? context->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
CoreObject *co_network = _ps_service_ref_co_network(_ps_context_ref_service(context));
GHashTable *profile_property = NULL;
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PROFILE, "w"))
- return TRUE;
-
ps_dbg_ex_co(co_network, "modify context's profile properties");
context_state = tcore_context_get_state(context->co_context);
ps_context_t *context = user_data;
ps_service_t *service = _ps_context_ref_service(context);
CoreObject *co_network = _ps_service_ref_co_network(service);
- TcorePlugin *p = (context) ? context->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PROFILE, "w"))
- return TRUE;
g_return_val_if_fail(service != NULL, FALSE);
ps_dbg_ex_co(co_network, "Remove context.");
if (priv_info == NULL)
return;
- /* Free cynara handle */
- if (priv_info->p_cynara) {
- cynara_finish(priv_info->p_cynara);
- priv_info->p_cynara = NULL;
- }
-
/* Cleaning up the master list */
g_slist_foreach(priv_info->master,
__remove_master, NULL);
GError *error = NULL;
gboolean rv = FALSE;
- cynara *p_cynara = NULL;
if (!p)
return FALSE;
return FALSE;
}
- /* Initialize cynara handle */
- if (CYNARA_API_SUCCESS == cynara_initialize(&p_cynara, NULL)) {
- dbg("cynara handle is successfully initialized.");
- } else {
- err("Failed to initialize cynara handle.");
- return FALSE;
- }
-
address = g_dbus_address_get_for_bus_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
g_assert_no_error(error);
priv_info->bus_id = id;
priv_info->master = NULL;
priv_info->p = p;
- priv_info->p_cynara = p_cynara;
/*
* Setting User data of PS plugin
GHashTableIter iter;
gpointer key, value;
ps_master_t *master = user_data;
- TcorePlugin *p = (master) ? master->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
dbg("Entered");
{
GVariant *gv = NULL;
GVariantBuilder properties;
- ps_modem_t *modem = user_data;
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
dbg("get modem properties");
gpointer key, value;
ps_modem_t *modem = user_data;
CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
ps_dbg_ex_co(co_modem, "modem get service interface");
GHashTableIter iter;
gpointer key, value;
ps_modem_t *modem = user_data;
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PRIVATE, "w"))
- return TRUE;
dbg("modem go dormant all interface");
GSList *profiles = NULL;
ps_modem_t *modem = user_data;
CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PUBLIC, "r"))
- return TRUE;
ps_dbg_ex_co(co_modem, "master get the profile list");
ps_modem_t *modem = user_data;
CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
GHashTable *profile_property = NULL;
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PROFILE, "w"))
- return TRUE;
ps_dbg_ex_co(co_modem, "add profile request");
CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
CoreObject *co_ps;
int state;
- TcorePlugin *p = (modem) ? modem->plg : NULL;
- PsPrivInfo *priv_info = tcore_plugin_ref_user_data(p);
- cynara *p_cynara = (priv_info) ? priv_info->p_cynara : NULL;
-
- if (!ps_util_check_access_control(p_cynara, invocation, AC_PS_PROFILE, "w"))
- return TRUE;
ps_dbg_ex_co(co_modem, "reset profile request type(%d)", type);
#include <libxml/tree.h>
#include "ps_common.h"
-#include <cynara-session.h>
-#include <cynara-creds-gdbus.h>
-
-#define PERM_WRITE "w"
-#define PERM_EXECUTE "x"
-#define TELEPHONY_PRIVILEGE "http://tizen.org/privilege/telephony"
-#define TELEPHONY_ADMIN_PRIVILEGE "http://tizen.org/privilege/telephony.admin"
-
-gboolean ps_util_check_access_control(cynara *p_cynara, GDBusMethodInvocation *invoc, const char *label, const char *perm)
-{
- GDBusConnection *conn;
- const char *sender_unique_name;
- pid_t pid;
- int ret;
- int result = FALSE;
- /* For cynara */
- gchar *client_smack = NULL;
- char *client_session = NULL;
- gchar *uid_string = NULL;
- const char *privilege = NULL;
-
- if (!p_cynara) {
- warn("access control denied (fail to get cynara handle)");
- goto OUT;
- }
-
- conn = g_dbus_method_invocation_get_connection(invoc);
- if (!conn) {
- warn("access control denied (no connection info)");
- goto OUT;
- }
-
- sender_unique_name = g_dbus_method_invocation_get_sender(invoc);
-
- /* Get PID */
- ret = cynara_creds_gdbus_get_pid(conn, sender_unique_name, &pid);
- if (ret != CYNARA_API_SUCCESS) {
- warn("access control denied (fail to get pid). ret = %d", ret);
- goto OUT;
- }
-
- /* Get UID */
- ret = cynara_creds_gdbus_get_user(conn, sender_unique_name, USER_METHOD_DEFAULT, &uid_string);
- if (ret != CYNARA_API_SUCCESS) {
- warn("access control denied (fail to get uid for cynara). ret = %d", ret);
- goto OUT;
- }
-
- /* Get Smack label */
- ret = cynara_creds_gdbus_get_client(conn, sender_unique_name, CLIENT_METHOD_DEFAULT, &client_smack);
- if (ret != CYNARA_API_SUCCESS) {
- warn("access control denied (fail to get smack for cynara). ret = %d", ret);
- goto OUT;
- }
-
- dbg("sender: %s pid = %u uid = %s smack = %s", sender_unique_name, pid, uid_string, client_smack);
-
- client_session = cynara_session_from_pid(pid);
- if (!client_session) {
- warn("access control denied (fail to get cynara client session)");
- goto OUT;
- }
-
- if (g_strrstr(perm, PERM_WRITE) == NULL && g_strrstr(perm, PERM_EXECUTE) == NULL)
- privilege = TELEPHONY_PRIVILEGE;
- else
- privilege = TELEPHONY_ADMIN_PRIVILEGE;
-
- ret = cynara_check(p_cynara, client_smack, client_session, uid_string, privilege);
- if (ret != CYNARA_API_ACCESS_ALLOWED)
- warn("pid(%u) access (%s - %s) denied(%d)", pid, label, perm, ret);
- else
- result = TRUE;
-OUT:
- if (result == FALSE) {
- g_dbus_method_invocation_return_error(invoc,
- G_DBUS_ERROR,
- G_DBUS_ERROR_ACCESS_DENIED,
- "No access rights");
- }
- free(client_session);
- g_free(client_smack);
- g_free(uid_string);
-
- return result;
-}
GSource *ps_util_gsource_dispatch(GMainContext *main_context,
gint priority, GSourceFunc cb, gpointer data)