implemented GetPeerUID for UNIX sockets on FreeBSD
authorVictor Kirhenshtein <victor@netxms.org>
Wed, 13 Sep 2017 15:09:36 +0000 (18:09 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Wed, 13 Sep 2017 15:09:36 +0000 (18:09 +0300)
configure.ac
src/libnetxms/nxproc_unix.cpp

index 20896d0..f5379aa 100644 (file)
@@ -2130,7 +2130,7 @@ AC_CHECK_FUNCS([tolower if_nametoindex daemon mmap strerror_r scandir uname poll
 AC_CHECK_FUNCS([usleep nanosleep gmtime_r localtime_r stat64 fstat64 lstat64])
 AC_CHECK_FUNCS([fopen64 strptime timegm gethostbyname2_r getaddrinfo rand_r])
 AC_CHECK_FUNCS([itoa _itoa isatty malloc_info malloc_trim utime])
-AC_CHECK_FUNCS([getgrnam getpwnam getpwuid getpwuid_r])
+AC_CHECK_FUNCS([getgrnam getpwnam getpwuid getpwuid_r getpeereid])
 
 AC_CHECK_DECLS([nanosleep, daemon, strerror])
 
index ee7a682..17351e9 100644 (file)
@@ -119,6 +119,14 @@ static bool GetPeerUID(SOCKET s, unsigned int *uid)
       *uid = (unsigned int)peer.uid;
       return true;
    }
+#elif HAVE_GETPEEREID
+   uid_t euid;
+   gid_t egid;
+   if (getpeereid(s, &euid, &egid) == 0)
+   {
+      *uid = (unsigned int)euid;
+      return true;
+   }
 #else
 #error no valid method to get socket peer UID
 #endif