summaryrefslogtreecommitdiffstats
path: root/net/socket/unix_domain_server_socket_posix.cc
diff options
context:
space:
mode:
authorserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:17:41 +0000
committerserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-08 09:19:27 +0000
commitfe928be94514d6331264a36344316ff0abb8bfa7 (patch)
tree5a3f2d3f8dc18aa762c7bbdcb7127b4eb0128416 /net/socket/unix_domain_server_socket_posix.cc
parent236ccaa12431f101db8fc18d632352087e4eead9 (diff)
downloadchromium_src-fe928be94514d6331264a36344316ff0abb8bfa7.zip
chromium_src-fe928be94514d6331264a36344316ff0abb8bfa7.tar.gz
chromium_src-fe928be94514d6331264a36344316ff0abb8bfa7.tar.bz2
Supports DevTools socket access authentication based on Android permissions.
BUG=399567 Review URL: https://codereview.chromium.org/382143005 Cr-Commit-Position: refs/heads/master@{#288273} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288273 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/unix_domain_server_socket_posix.cc')
-rw-r--r--net/socket/unix_domain_server_socket_posix.cc20
1 files changed, 10 insertions, 10 deletions
diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc
index 8f2f2d6..a81f1ce 100644
--- a/net/socket/unix_domain_server_socket_posix.cc
+++ b/net/socket/unix_domain_server_socket_posix.cc
@@ -28,19 +28,20 @@ UnixDomainServerSocket::~UnixDomainServerSocket() {
}
// static
-bool UnixDomainServerSocket::GetPeerIds(SocketDescriptor socket,
- uid_t* user_id,
- gid_t* group_id) {
+bool UnixDomainServerSocket::GetPeerCredentials(SocketDescriptor socket,
+ Credentials* credentials) {
#if defined(OS_LINUX) || defined(OS_ANDROID)
struct ucred user_cred;
socklen_t len = sizeof(user_cred);
if (getsockopt(socket, SOL_SOCKET, SO_PEERCRED, &user_cred, &len) < 0)
return false;
- *user_id = user_cred.uid;
- *group_id = user_cred.gid;
+ credentials->process_id = user_cred.pid;
+ credentials->user_id = user_cred.uid;
+ credentials->group_id = user_cred.gid;
return true;
#else
- return getpeereid(socket, user_id, group_id) == 0;
+ return getpeereid(
+ socket, &credentials->user_id, &credentials->group_id) == 0;
#endif
}
@@ -130,10 +131,9 @@ bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket(
scoped_ptr<StreamSocket>* socket) {
DCHECK(accept_socket_);
- uid_t user_id;
- gid_t group_id;
- if (!GetPeerIds(accept_socket_->socket_fd(), &user_id, &group_id) ||
- !auth_callback_.Run(user_id, group_id)) {
+ Credentials credentials;
+ if (!GetPeerCredentials(accept_socket_->socket_fd(), &credentials) ||
+ !auth_callback_.Run(credentials)) {
accept_socket_.reset();
return false;
}