diff options
| author | Kenny Root <kroot@google.com> | 2010-09-14 14:39:18 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-09-14 14:39:18 -0700 |
| commit | 1db75e7b9b5159fa3bcf1cfdc4efba62c570d860 (patch) | |
| tree | 2aacee8cf3a14de0079bfd78de2590cb525df5f3 /libsysutils | |
| parent | 2c42e4404bba0a1b065d223a1e84ef7184e1a987 (diff) | |
| parent | 6fd75635d820754295557c300ccee89c643864cc (diff) | |
| download | system_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.cpp | 20 |
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) { |
