summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiraj Kumar Goit <niraj.g@samsung.com>2016-06-14 17:17:31 (GMT)
committerNiraj Kumar Goit <niraj.g@samsung.com>2016-06-14 14:30:10 (GMT)
commitad827936df8179d2e8ca02bd1fa7c35e4b41221a (patch)
tree65b403d847b32fdc969b37f8f8ba311e9818c30e
parent9dce45fbb4d830e84384fa38c5d167dea3994a0a (diff)
downloadconnman-ad827936df8179d2e8ca02bd1fa7c35e4b41221a.zip
connman-ad827936df8179d2e8ca02bd1fa7c35e4b41221a.tar.gz
connman-ad827936df8179d2e8ca02bd1fa7c35e4b41221a.tar.bz2
[SPIN] implement to check blacklist for auto connection.refs/changes/27/74527/3
Change-Id: I174b228529374f80b1c4197a310124c028564bb8 Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
-rwxr-xr-xsrc/agent-connman.c67
-rwxr-xr-xsrc/connman.h4
-rwxr-xr-xsrc/service.c30
3 files changed, 101 insertions, 0 deletions
diff --git a/src/agent-connman.c b/src/agent-connman.c
index 177cbe0..04f95df 100755
--- a/src/agent-connman.c
+++ b/src/agent-connman.c
@@ -595,6 +595,73 @@ int __connman_agent_request_login_input(struct connman_service *service,
return -EINPROGRESS;
}
+#if defined TIZEN_CONNMAN_USE_BLACKLIST
+dbus_bool_t __connman_agent_request_blacklist_check(
+ const char *name, const char *security, const char *eap)
+{
+ DBusMessage *message;
+ DBusMessage *reply;
+ DBusMessageIter iter;
+ DBusError error;
+ dbus_bool_t allowed = TRUE;
+ const char *no_eap = "";
+
+ if (agent_path == NULL) {
+ DBG("agent is not registered");
+ return FALSE;
+ }
+
+ if (name == NULL || security == NULL)
+ return FALSE;
+
+ message = dbus_message_new_method_call(agent_sender, agent_path,
+ "net.netconfig.wifi",
+ "CheckBlackList");
+ if (message == NULL) {
+ DBG("dbus_message_new_method_call() failed");
+ return TRUE;
+ }
+
+ dbus_message_iter_init_append(message, &iter);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name);
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &security);
+
+ if (eap)
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &eap);
+ else
+ dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &no_eap);
+
+ dbus_error_init(&error);
+
+ reply = dbus_connection_send_with_reply_and_block(connection, message, 2000, &error);
+ if (reply == NULL) {
+ if (dbus_error_is_set(&error) == TRUE) {
+ DBG("dbus_connection_send_with_reply_and_block() failed. "
+ "dbus error [%s: %s]", error.name, error.message);
+
+ dbus_error_free(&error);
+ } else
+ DBG("failed to get properties");
+
+ dbus_message_unref(message);
+
+ return TRUE;
+ }
+
+ if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
+ DBG("failed to request blacklist check");
+ return TRUE;
+ }
+
+ dbus_message_iter_init(reply, &iter);
+ dbus_message_iter_get_basic(&iter, &allowed);
+
+ dbus_message_unref(message);
+
+ return allowed;
+}
+#endif
+
struct request_browser_reply_data {
struct connman_service *service;
browser_authentication_cb_t callback;
diff --git a/src/connman.h b/src/connman.h
index 2e9c26f..6f588bf 100755
--- a/src/connman.h
+++ b/src/connman.h
@@ -125,6 +125,10 @@ int __connman_agent_request_peer_authorization(struct connman_peer *peer,
bool wps_requested,
const char *dbus_sender,
void *user_data);
+#if defined TIZEN_CONNMAN_USE_BLACKLIST
+dbus_bool_t __connman_agent_request_blacklist_check(
+ const char *name, const char *security, const char *eap);
+#endif
#include <connman/log.h>
diff --git a/src/service.c b/src/service.c
index 9149dd2..ed59930 100755
--- a/src/service.c
+++ b/src/service.c
@@ -4198,6 +4198,31 @@ void __connman_service_set_active_session(bool enable, GSList *list)
active_count);
}
+#if defined TIZEN_CONNMAN_USE_BLACKLIST
+static connman_bool_t is_allowed(struct connman_service *service)
+{
+ connman_bool_t allowed;
+ const char *security = NULL;
+
+ if (!service)
+ return false;
+
+ security = security2string(service->security);
+ if (!security)
+ return false;
+
+ /* check if service is existed in blacklist */
+ allowed = __connman_agent_request_blacklist_check(service->name,
+ security, service->eap);
+ if (allowed == false) {
+ DBG("service %p is not allowed", service);
+ service->autoconnect = false;
+ }
+
+ return allowed;
+}
+#endif
+
struct preferred_tech_data {
GList *preferred_list;
enum connman_service_type type;
@@ -4324,6 +4349,11 @@ static bool auto_connect_service(GList *services,
CONNMAN_SERVICE_STATE_IDLE)
continue;
+#if defined TIZEN_CONNMAN_USE_BLACKLIST
+ if (is_allowed(service) == false)
+ continue;
+#endif
+
if (autoconnecting && !active_sessions[service->type]) {
DBG("service %p type %s has no users", service,
__connman_service_type2string(service->type));