forked from lix-project/lix
nix-daemon: Show name of connecting user
This commit is contained in:
parent
77c972c898
commit
0c730887c4
|
@ -17,6 +17,7 @@
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
@ -855,23 +856,23 @@ static void daemonLoop()
|
||||||
closeOnExec(remote);
|
closeOnExec(remote);
|
||||||
|
|
||||||
bool trusted = false;
|
bool trusted = false;
|
||||||
|
|
||||||
pid_t clientPid = -1;
|
pid_t clientPid = -1;
|
||||||
|
|
||||||
#if defined(SO_PEERCRED)
|
#if defined(SO_PEERCRED)
|
||||||
/* Get the identity of the caller, if possible. */
|
/* Get the identity of the caller, if possible. */
|
||||||
uid_t clientUid = -1;
|
|
||||||
|
|
||||||
ucred cred;
|
ucred cred;
|
||||||
socklen_t credLen = sizeof(cred);
|
socklen_t credLen = sizeof(cred);
|
||||||
if (getsockopt(remote, SOL_SOCKET, SO_PEERCRED, &cred, &credLen) == -1)
|
if (getsockopt(remote, SOL_SOCKET, SO_PEERCRED, &cred, &credLen) == -1)
|
||||||
throw SysError("getting peer credentials");
|
throw SysError("getting peer credentials");
|
||||||
|
|
||||||
clientPid = cred.pid;
|
clientPid = cred.pid;
|
||||||
clientUid = cred.uid;
|
|
||||||
if (clientUid == 0) trusted = true;
|
|
||||||
|
|
||||||
printMsg(lvlInfo, format("accepted connection from pid %1%, uid %2%") % clientPid % clientUid);
|
struct passwd * pw = getpwuid(cred.uid);
|
||||||
|
string user = pw ? pw->pw_name : int2String(cred.uid);
|
||||||
|
|
||||||
|
if (cred.uid == 0) trusted = true;
|
||||||
|
|
||||||
|
printMsg(lvlInfo, format("accepted connection from pid %1%, user %2%") % clientPid % user);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Fork a child to handle the connection. */
|
/* Fork a child to handle the connection. */
|
||||||
|
|
Loading…
Reference in a new issue