multi-user: Add multi-user support in manager 14/29714/3
authorZhang zhengguang <zhengguang.zhang@intel.com>
Fri, 17 Oct 2014 03:21:37 +0000 (11:21 +0800)
committerChengyi Zhao <chengyi1.zhao@archermind.com>
Sat, 8 Nov 2014 06:16:13 +0000 (22:16 -0800)
Use case:

Given 2 users: UserA and UserB

If UserA is connected to a wifi service, then UserB is not allowed
to turn on offline mode.

Change-Id: I54b108beb580a805c7fa2d3ae9dac192b836ba77

src/manager.c

index d15ce20..bd52f39 100644 (file)
@@ -102,6 +102,20 @@ static DBusMessage *set_property(DBusConnection *conn,
 
                dbus_message_iter_get_basic(&value, &offlinemode);
 
+               if (offlinemode) {
+                       uid_t uid;
+                       if (connman_dbus_get_connection_unix_user_sync(conn,
+                                               dbus_message_get_sender(msg),
+                                               &uid) < 0) {
+                               DBG("Can not get unix user id!");
+                               return __connman_error_permission_denied(msg);
+                       }
+
+                       if (!__connman_service_is_user_allowed(CONNMAN_SERVICE_TYPE_WIFI, uid)) {
+                               DBG("Not allow this user to turn on offlinemode now!");
+                               return __connman_error_permission_denied(msg);
+                       }
+               }
                __connman_technology_set_offlinemode(offlinemode);
        } else if (g_str_equal(name, "SessionMode")) {