Skip to content

Commit

Permalink
Merge "Fetch peer credentials for local sockets" into gingerbread
Browse files Browse the repository at this point in the history
  • Loading branch information
kruton authored and Android (Google) Code Review committed Sep 14, 2010
2 parents 9915e3f + 30abb72 commit 6fd7563
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
13 changes: 13 additions & 0 deletions include/sysutils/SocketClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,29 @@
#include "../../../frameworks/base/include/utils/List.h"

#include <pthread.h>
#include <sys/types.h>

class SocketClient {
int mSocket;
pthread_mutex_t mWriteMutex;

/* Peer process ID */
pid_t mPid;

/* Peer user ID */
uid_t mUid;

/* Peer group ID */
gid_t mGid;

public:
SocketClient(int sock);
virtual ~SocketClient() {}

int getSocket() { return mSocket; }
pid_t getPid() const { return mPid; }
uid_t getUid() const { return mUid; }
gid_t getGid() const { return mGid; }

int sendMsg(int code, const char *msg, bool addErrno);
int sendMsg(const char *msg);
Expand Down
20 changes: 18 additions & 2 deletions libsysutils/src/SocketClient.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <alloca.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <pthread.h>
#include <string.h>
Expand All @@ -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) {
Expand Down

0 comments on commit 6fd7563

Please sign in to comment.