15c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran/*
25c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Copyright (C) 2014 The Android Open Source Project
35c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran *
45c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Licensed under the Apache License, Version 2.0 (the "License");
55c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * you may not use this file except in compliance with the License.
65c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * You may obtain a copy of the License at
75c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran *
85c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran *      http://www.apache.org/licenses/LICENSE-2.0
95c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran *
105c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * Unless required by applicable law or agreed to in writing, software
115c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * distributed under the License is distributed on an "AS IS" BASIS,
125c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * See the License for the specific language governing permissions and
145c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran * limitations under the License.
155c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran */
165c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran
174d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#ifndef NETD_INCLUDE_PERMISSION_H
184d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#define NETD_INCLUDE_PERMISSION_H
195c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran
205c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// This enum represents the permissions we care about for networking. When applied to an app, it's
215c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// the permission the app (UID) has been granted. When applied to a network, it's the permission an
225c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// app must hold to be allowed to use the network. PERMISSION_NONE means "no special permission is
235c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran// held by the app" or "no special permission is required to use the network".
245c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran//
25379bd33f7640e2c4bef902be0ed6cb96378c8c2eSreeram Ramachandran// Permissions are flags that can be OR'ed together to represent combinations of permissions.
26379bd33f7640e2c4bef902be0ed6cb96378c8c2eSreeram Ramachandran//
27ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_NONE is used for regular networks and apps, such as those that hold the
28ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// android.permission.INTERNET framework permission.
29ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran//
30ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_NETWORK is used for privileged networks and apps that can manipulate or access them,
31ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// such as those that hold the android.permission.CHANGE_NETWORK_STATE framework permission.
32ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran//
33ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// PERMISSION_SYSTEM is used for system apps, such as those that are installed on the system
34ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// partition, those that hold the android.permission.CONNECTIVITY_INTERNAL framework permission and
35ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran// those whose UID is less than FIRST_APPLICATION_UID.
365c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandranenum Permission {
37ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran    PERMISSION_NONE    = 0x0,
38ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran    PERMISSION_NETWORK = 0x1,
39ed4bd1f7d219f9f5f56763ea02cf4947e78397f6Sreeram Ramachandran    PERMISSION_SYSTEM  = 0x3,  // Includes PERMISSION_NETWORK.
405c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran};
415c181bf8ca0c89bd9e3e6d8e40bac53d0ee7082fSreeram Ramachandran
421f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colittiinline const char *permissionToName(Permission permission) {
431f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti    switch (permission) {
441f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti        case PERMISSION_NONE:    return "NONE";
451f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti        case PERMISSION_NETWORK: return "NETWORK";
461f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti        case PERMISSION_SYSTEM:  return "SYSTEM";
471f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti        // No default statement. We want to see errors of the form:
481f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti        // "enumeration value 'PERMISSION_SYSTEM' not handled in switch [-Werror,-Wswitch]".
491f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti    }
501f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti}
511f28b6403effcbf8a2c6fd35a7b1474b60bc0463Lorenzo Colitti
521ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colittiinline Permission stringToPermission(const char* arg) {
531ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti    if (!strcmp(arg, "NETWORK")) {
541ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti        return PERMISSION_NETWORK;
551ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti    }
561ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti    if (!strcmp(arg, "SYSTEM")) {
571ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti        return PERMISSION_SYSTEM;
581ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti    }
591ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti    return PERMISSION_NONE;
601ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti}
611ed96e2d3fa89ca4848750a6b3bbbcf677946d27Lorenzo Colitti
624d4c8b7e294d845103ecb10f968713717a3e6406Sreeram Ramachandran#endif  // NETD_INCLUDE_PERMISSION_H
63