aboutsummaryrefslogtreecommitdiffstats
path: root/libsysutils
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-09-14 14:39:18 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-09-14 14:39:18 -0700
commit1db75e7b9b5159fa3bcf1cfdc4efba62c570d860 (patch)
tree2aacee8cf3a14de0079bfd78de2590cb525df5f3 /libsysutils
parent2c42e4404bba0a1b065d223a1e84ef7184e1a987 (diff)
parent6fd75635d820754295557c300ccee89c643864cc (diff)
downloadsystem_core-1db75e7b9b5159fa3bcf1cfdc4efba62c570d860.tar.gz
system_core-1db75e7b9b5159fa3bcf1cfdc4efba62c570d860.tar.bz2
system_core-1db75e7b9b5159fa3bcf1cfdc4efba62c570d860.zip
am 6fd75635: Merge "Fetch peer credentials for local sockets" into gingerbread
Merge commit '6fd75635d820754295557c300ccee89c643864cc' into gingerbread-plus-aosp * commit '6fd75635d820754295557c300ccee89c643864cc': Fetch peer credentials for local sockets
Diffstat (limited to 'libsysutils')
-rw-r--r--libsysutils/src/SocketClient.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp
index e9ae23a9..8e5f1545 100644
--- a/libsysutils/src/SocketClient.cpp
+++ b/libsysutils/src/SocketClient.cpp
@@ -1,5 +1,6 @@
#include <alloca.h>
#include <errno.h>
+#include <sys/socket.h>
#include <sys/types.h>
#include <pthread.h>
#include <string.h>
@@ -9,9 +10,24 @@
#include <sysutils/SocketClient.h>
-SocketClient::SocketClient(int socket) {
- mSocket = socket;
+SocketClient::SocketClient(int socket)
+ : mSocket(socket)
+ , mPid(-1)
+ , mUid(-1)
+ , mGid(-1)
+{
pthread_mutex_init(&mWriteMutex, NULL);
+
+ struct ucred creds;
+ socklen_t szCreds = sizeof(creds);
+ memset(&creds, 0, szCreds);
+
+ int err = getsockopt(socket, SOL_SOCKET, SO_PEERCRED, &creds, &szCreds);
+ if (err == 0) {
+ mPid = creds.pid;
+ mUid = creds.uid;
+ mGid = creds.gid;
+ }
}
int SocketClient::sendMsg(int code, const char *msg, bool addErrno) {