Index: net/socket/unix_domain_server_socket_posix.cc |
diff --git a/net/socket/unix_domain_server_socket_posix.cc b/net/socket/unix_domain_server_socket_posix.cc |
index 8f2f2d6de2f01e4bffa0758b22edea5c96489455..717111e23ecaa17fdd6a0354f1ad52d80a93341f 100644 |
--- a/net/socket/unix_domain_server_socket_posix.cc |
+++ b/net/socket/unix_domain_server_socket_posix.cc |
@@ -29,6 +29,7 @@ UnixDomainServerSocket::~UnixDomainServerSocket() { |
// static |
bool UnixDomainServerSocket::GetPeerIds(SocketDescriptor socket, |
+ pid_t* process_id, |
uid_t* user_id, |
gid_t* group_id) { |
#if defined(OS_LINUX) || defined(OS_ANDROID) |
@@ -36,10 +37,12 @@ bool UnixDomainServerSocket::GetPeerIds(SocketDescriptor socket, |
socklen_t len = sizeof(user_cred); |
if (getsockopt(socket, SOL_SOCKET, SO_PEERCRED, &user_cred, &len) < 0) |
return false; |
+ *process_id = user_cred.pid; |
*user_id = user_cred.uid; |
*group_id = user_cred.gid; |
return true; |
#else |
+ *process_id = 0; |
mmenke
2014/08/01 16:26:52
Not a huge fan of just silently making process_id
SeRya
2014/08/04 10:47:03
It seems there is no consensus among UNIX systems
mmenke
2014/08/04 15:45:58
I'd prefer that approach. Setting it to 0 on some
SeRya
2014/08/04 20:14:25
Done.
|
return getpeereid(socket, user_id, group_id) == 0; |
#endif |
} |
@@ -130,10 +133,12 @@ bool UnixDomainServerSocket::AuthenticateAndGetStreamSocket( |
scoped_ptr<StreamSocket>* socket) { |
DCHECK(accept_socket_); |
+ pid_t process_id; |
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)) { |
+ if (!GetPeerIds(accept_socket_->socket_fd(), |
+ &process_id, &user_id, &group_id) || |
+ !auth_callback_.Run(process_id, user_id, group_id)) { |
accept_socket_.reset(); |
return false; |
} |