mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Add getpeerid compat.
This commit is contained in:
		
							
								
								
									
										40
									
								
								compat/getpeereid.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								compat/getpeereid.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2022 Nicholas Marriott <nicholas.marriott@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
 | 
			
		||||
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include "compat.h"
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
getpeereid(int s, uid_t *uid, gid_t *gid)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_SO_PEERCRED
 | 
			
		||||
	struct ucred	uc;
 | 
			
		||||
	int		len = sizeof uc;
 | 
			
		||||
 | 
			
		||||
	if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &uc, &len) == -1)
 | 
			
		||||
		return (-1);
 | 
			
		||||
	*uid = uc.uid;
 | 
			
		||||
	*gid = uc.gid;
 | 
			
		||||
	return (0);
 | 
			
		||||
#else
 | 
			
		||||
	errno = EOPNOTSUPP;
 | 
			
		||||
	return (-1);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								configure.ac
									
									
									
									
									
								
							@@ -160,6 +160,7 @@ AC_REPLACE_FUNCS([ \
 | 
			
		||||
	freezero \
 | 
			
		||||
	getdtablecount \
 | 
			
		||||
	getdtablesize \
 | 
			
		||||
	getpeereid \
 | 
			
		||||
	getline \
 | 
			
		||||
	getprogname \
 | 
			
		||||
	memmem \
 | 
			
		||||
@@ -169,7 +170,7 @@ AC_REPLACE_FUNCS([ \
 | 
			
		||||
	strlcat \
 | 
			
		||||
	strlcpy \
 | 
			
		||||
	strndup \
 | 
			
		||||
	strsep \
 | 
			
		||||
	strsep
 | 
			
		||||
])
 | 
			
		||||
AC_FUNC_STRNLEN
 | 
			
		||||
 | 
			
		||||
@@ -684,6 +685,14 @@ AC_CHECK_DECL(
 | 
			
		||||
	[#include <sys/prctl.h>]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Look for setsockopt(SO_PEERCRED).
 | 
			
		||||
AC_CHECK_DECL(
 | 
			
		||||
	SO_PEERCRED,
 | 
			
		||||
	AC_DEFINE(HAVE_SO_PEERCRED),
 | 
			
		||||
	,
 | 
			
		||||
	[#include <sys/socket.h>]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Look for fcntl(F_CLOSEM).
 | 
			
		||||
AC_CHECK_DECL(
 | 
			
		||||
	F_CLOSEM,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user