########################## search for packages ################################
-SET(COMMON_DEPS "dlog glib-2.0 gio-2.0 capi-base-common capi-system-info gio-unix-2.0")
+SET(COMMON_DEPS "dlog glib-2.0 gio-2.0 capi-base-common capi-system-info gio-unix-2.0 cynara-client")
SET(PC_DEPS "capi-base-common")
* @brief Enables Wi-Fi Aware functions.
* @remarks If the enable request is sucessfully done, the application can get the MAC address.
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] callback The result of enable request is asynchrously delivered
* @param[in] user_data The user data passed to the callback function
* @return 0 on success, otherwise a negative error value
* @retval #WIFI_AWARE_ERROR_ALREADY_ENABLED
* @retval #WIFI_AWARE_ERROR_OUT_OF_MEMORY
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
* @see wifi_aware_disable()
*/
int wifi_aware_enable(wifi_aware_enabled_cb callback, void *user_data);
/**
* @brief Publishes a Wi-Fi Aware service so that neighboring devices can find it.
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] sesssion The Wi-Fi Aware Session handle
* @param[in] publish The Wi-Fi Aware Publish handle
* @param[in] callback The callback which gets called when a service is published
* @retval #WIFI_AWARE_ERROR_INVALID_PARAMETER
* @retval #WIFI_AWARE_ERROR_INVALID_OPERATION
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
* @see wifi_aware_session_stop()
*/
int wifi_aware_session_publish(wifi_aware_session_h session,
/**
* @brief Updates the configuration for a Wi-Fi Aware service that has already been published.
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] sesssion The Wi-Fi Aware Session handle
* @param[in] publish The Wi-Fi Aware Publish handle
* @param[in] callback The callback which gets called when a service is updated
* @retval #WIFI_AWARE_ERROR_INVALID_PARAMETER
* @retval #WIFI_AWARE_ERROR_INVALID_OPERATION
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
* @see wifi_aware_session_publish()
*/
int wifi_aware_session_update_publish(wifi_aware_session_h session,
/**
* @brief Starts to find Wi-Fi Aware services.
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] session The Wi-Fi Aware Session handle
* @param[in] subscribe The Wi-Fi Aware Subscribe handle
* @param[in] callback The callback which get called when request is finished
* @retval #WIFI_AWARE_ERROR_INVALID_PARAMETER
* @retval #WIFI_AWARE_ERROR_INVALID_OPERATION
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
* @see wifi_aware_session_stop()
*/
int wifi_aware_session_subscribe(wifi_aware_session_h,
/**
* @brief Updates the configuration for a Wi-Fi Aware service that has already been subscribed.
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] session The Wi-Fi Aware Session handle
* @param[in] subscribe The Wi-Fi Aware Subscribe handle
* @param[in] callback The callback which gets called when service is updated
* @retval #WIFI_AWARE_ERROR_INVALID_PARAMETER
* @retval #WIFI_AWARE_ERROR_INVALID_OPERATION
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
* @see wifi_aware_session_subscribe()
*/
int wifi_aware_session_update_subscribe(wifi_aware_session_h session,
/**
* @brief Sends the message to a peer
* @since_tizen 6.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
* @param[in] session The Wi-Fi Aware Session handle
* @param[in] peer The peer who gets the message
* @param[in] message The message sent to a peer
* @retval #WIFI_AWARE_ERROR_INVALID_PARAMETER
* @retval #WIFI_AWARE_ERROR_OUT_OF_MEMORY
* @retval #WIFI_AWARE_ERROR_OPERATION_FAILED
+ * @retval #WIFI_AWARE_ERROR_PERMISSION_DENIED
*/
int wifi_aware_session_send_message(
wifi_aware_session_h session,
BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(capi-base-common)
BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(cynara-client)
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
wifi_aware_error_e _wifi_aware_convert_gdbus_error(GDBusError error);
wifi_aware_error_e _wifi_aware_convert_nan_manager_error(int error);
+bool _wifi_aware_check_permission();
bool _wifi_aware_is_initialized();
int _wifi_aware_init();
int _wifi_aware_deinit();
#include <glib.h>
+#include <cynara-client.h>
+#include <stdio.h>
#include "wifi-aware.h"
#include "wifi-aware-gdbus.h"
#include "wifi-aware-private.h"
#include "wifi-aware-utils.h"
+
/**
* These enum values has dependency with nan-manager daemon.
* If the daemon changes error enum, It also must be changed.
static bool __is_init = false;
static wifi_aware_s *g_wifi_aware = NULL;
+/* Check for privilege */
+#define PROC_ATTR_CURRENT_PATH "/proc/self/attr/current"
+#define NETWORK_SET_PRIVILEGE "http://tizen.org/privilege/network.set"
+#define SMACK_LABEL_LEN 255
+
+static bool is_privilege_checked = false;
+static bool access_allowed = false;
+
const char *_wifi_aware_convert_error_type_to_string(wifi_aware_error_e err)
{
switch (err) {
}
}
+bool _wifi_aware_check_permission(void)
+{
+ FILE *fd;
+ int ret;
+ char smack_label[SMACK_LABEL_LEN + 1] = {0, };
+ char uid[10] = {0, };
+ char *client_session = "";
+ cynara *p_cynara;
+
+ if (is_privilege_checked) {
+ WIFI_AWARE_LOGI("permission was already checked: %d", access_allowed);
+ return access_allowed;
+ }
+
+ if (CYNARA_API_SUCCESS != cynara_initialize(&p_cynara, NULL))
+ return false;
+
+ bzero(smack_label, SMACK_LABEL_LEN + 1);
+
+ fd = fopen(PROC_ATTR_CURRENT_PATH, "r");
+ if (fd == NULL) {
+ cynara_finish(p_cynara);
+ return false;
+ }
+
+ ret = fread(smack_label, SMACK_LABEL_LEN, 1, fd);
+ if (ret < 0) {
+ fclose(fd);
+ cynara_finish(p_cynara);
+ return false;
+ }
+ fclose(fd);
+
+ snprintf(uid, sizeof(uid), "%d", getuid());
+ ret = cynara_check(p_cynara, smack_label, client_session, uid, NETWORK_SET_PRIVILEGE);
+ cynara_finish(p_cynara);
+
+ is_privilege_checked = true;
+ access_allowed = (ret == CYNARA_API_ACCESS_ALLOWED) ? true : false;
+
+ WIFI_AWARE_LOGI("permission checked[%s/%d]", NETWORK_SET_PRIVILEGE, access_allowed);
+ return access_allowed;
+}
+
+
static void __session_set_requested(wifi_aware_session_h session_handle, bool requested)
{
wifi_aware_session_s *session = (wifi_aware_session_s *)session_handle;
__WIFI_AWARE_FUNC_ENTER__;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_ALREADY_ENABLED, "Already enabled");
int ret = WIFI_AWARE_ERROR_NONE;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
int ret = WIFI_AWARE_ERROR_NONE;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
int ret = WIFI_AWARE_ERROR_NONE;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
int ret = WIFI_AWARE_ERROR_NONE;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");
{
__WIFI_AWARE_FUNC_ENTER__;
CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE);
+ RET_VAL_IF(!_wifi_aware_check_permission(), WIFI_AWARE_ERROR_PERMISSION_DENIED, "Permission denied");
RET_VAL_IF(!_wifi_aware_is_initialized(), WIFI_AWARE_ERROR_NOT_INITIALIZED, "Not initialized");
RET_VAL_IF(!_wifi_aware_is_enabled(), WIFI_AWARE_ERROR_INVALID_OPERATION, "Not enabled");
RET_VAL_IF(session == NULL, WIFI_AWARE_ERROR_INVALID_PARAMETER, "wifi_aware_session_h is NULL");