diff options
| author | Sreeram Ramachandran <sreeram@google.com> | 2014-07-05 17:15:14 -0700 |
|---|---|---|
| committer | Sreeram Ramachandran <sreeram@google.com> | 2014-07-07 16:20:18 -0700 |
| commit | e09b20aee85f1dfd8c18c3d8581ac875d939ba70 (patch) | |
| tree | bdfbd786a1cc3069ffa8b5d7513ccb6a115b72e1 /server/UidRanges.cpp | |
| parent | 5009d5ef3fbcdc69d772b528fd22184b7d605afa (diff) | |
| download | platform_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.cpp | 10 |
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; |
