Fix NULL pointer dereference
[platform/upstream/connman.git] / src / service.c
index 5a73d09..c918b64 100755 (executable)
@@ -5414,6 +5414,16 @@ int __connman_service_get_use_eapol(struct connman_service *service)
 
        return service->use_eapol;
 }
+
+int __connman_service_get_connect_reason(struct connman_service *service)
+{
+       if (!service) {
+               DBG("Service is NULL");
+               return -1;
+       }
+
+       return service->connect_reason;
+}
 #endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */
 
 static DBusMessage *get_properties(DBusConnection *conn,
@@ -6164,6 +6174,7 @@ static DBusMessage *set_property(DBusConnection *conn,
                if (err < 0)
                        return __connman_error_failed(msg, -err);
 
+               service->connect_reason = CONNMAN_SERVICE_CONNECT_REASON_USER;
                service_save(service);
 #endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */
        } else
@@ -7452,6 +7463,26 @@ static DBusMessage *reset_counters(DBusConnection *conn,
        return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 }
 
+#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
+static DBusMessage *is_eapol_enabled(DBusConnection *conn,
+                                       DBusMessage *msg, void *user_data)
+{
+       struct connman_service *service = user_data;
+       DBG("service: %p path: %s UseEapol: %d", service, service->path, service->use_eapol);
+
+       dbus_bool_t eapol_status = service->use_eapol;
+
+       DBusMessage *reply = dbus_message_new_method_return(msg);
+       if (!reply) {
+               DBG("Failed to initialize reply");
+               return NULL;
+       }
+
+       dbus_message_append_args(reply, DBUS_TYPE_BOOLEAN, &eapol_status, DBUS_TYPE_INVALID);
+       return reply;
+}
+#endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */
+
 #if defined TIZEN_MAINTAIN_ONLINE
 static DBusMessage *downgrade_service(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
@@ -7529,6 +7560,9 @@ static const GDBusMethodTable service_methods[] = {
                        GDBUS_ARGS({ "service", "o" }), NULL,
                        move_after) },
        { GDBUS_METHOD("ResetCounters", NULL, NULL, reset_counters) },
+#if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
+       { GDBUS_METHOD("IsEapolEnabled", NULL, GDBUS_ARGS({ "eapol", "b" }), is_eapol_enabled) },
+#endif
 #if defined TIZEN_MAINTAIN_ONLINE
        { GDBUS_METHOD("Downgrade", NULL, NULL, downgrade_service) },
 #endif
@@ -7863,6 +7897,9 @@ static int calculate_score_last_connected(struct connman_service *service)
        unsigned int frequency;
 
        device = connman_network_get_device(service->network);
+       if (!device)
+               return 0;
+
        last_connected_ident = connman_device_get_last_connected_ident(device);
        frequency = connman_network_get_frequency(service->network);