summaryrefslogtreecommitdiffstats
path: root/server/UidRanges.cpp
diff options
context:
space:
mode:
authorSreeram Ramachandran <sreeram@google.com>2014-07-05 17:15:14 -0700
committerSreeram Ramachandran <sreeram@google.com>2014-07-07 16:20:18 -0700
commite09b20aee85f1dfd8c18c3d8581ac875d939ba70 (patch)
treebdfbd786a1cc3069ffa8b5d7513ccb6a115b72e1 /server/UidRanges.cpp
parent5009d5ef3fbcdc69d772b528fd22184b7d605afa (diff)
downloadplatform_system_netd-e09b20aee85f1dfd8c18c3d8581ac875d939ba70.tar.gz
platform_system_netd-e09b20aee85f1dfd8c18c3d8581ac875d939ba70.tar.bz2
platform_system_netd-e09b20aee85f1dfd8c18c3d8581ac875d939ba70.zip
Add full support for UIDs in VPNs.
Major: + Implement the functions mentioned in http://go/android-multinetwork-routing correctly, including handling accept(), connect(), setNetworkForSocket() and protect() and supporting functions like canUserSelectNetwork(). + Eliminate the old code path of getting/setting UID ranges through SecondaryTableController (which is currently unused) and mUidMap. Minor: + Rename some methods/variables for clarity and consistency. + Moved some methods in .cpp files to match declaration order in the .h files. Bug: 15409918 Change-Id: Ic6ce3646c58cf645db0d9a53cbeefdd7ffafff93
Diffstat (limited to 'server/UidRanges.cpp')
-rw-r--r--server/UidRanges.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/server/UidRanges.cpp b/server/UidRanges.cpp
index d752cbf55..10e445aee 100644
--- a/server/UidRanges.cpp
+++ b/server/UidRanges.cpp
@@ -20,7 +20,13 @@
#include <stdlib.h>
-const std::vector<std::pair<uid_t, uid_t>>& UidRanges::getRanges() const {
+bool UidRanges::hasUid(uid_t uid) const {
+ auto iter = std::lower_bound(mRanges.begin(), mRanges.end(), Range(uid, uid));
+ return (iter != mRanges.end() && iter->first == uid) ||
+ (iter != mRanges.begin() && (--iter)->second >= uid);
+}
+
+const std::vector<UidRanges::Range>& UidRanges::getRanges() const {
return mRanges;
}
@@ -59,7 +65,7 @@ bool UidRanges::parseFrom(int argc, char* argv[]) {
// Invalid UIDs.
return false;
}
- mRanges.push_back(std::pair<uid_t, uid_t>(uidStart, uidEnd));
+ mRanges.push_back(Range(uidStart, uidEnd));
}
std::sort(mRanges.begin(), mRanges.end());
return true;