nix-daemon: Show name of connecting user
This commit is contained in:
		
							parent
							
								
									77c972c898
								
							
						
					
					
						commit
						0c730887c4
					
				
					 1 changed files with 7 additions and 6 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue