1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-30 06:01:21 +03:00

Add OpenBSD local indent credentials, from William Ahern.

This commit is contained in:
Bruce Momjian
2002-12-03 21:50:44 +00:00
parent 31504cc83b
commit f988edb4e1
4 changed files with 36 additions and 7 deletions

View File

@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.87 2002/09/04 20:31:19 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.88 2002/12/03 21:50:44 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1216,7 +1216,34 @@ ident_inet(const struct in_addr remote_ip_addr,
static bool
ident_unix(int sock, char *ident_user)
{
#if defined(SO_PEERCRED)
#if defined(HAVE_GETPEEREID)
/* OpenBSD style: */
uid_t uid;
gid_t gid;
struct passwd *pass;
errno = 0;
if (getpeereid(sock,&uid,&gid) != 0)
{
/* We didn't get a valid credentials struct. */
elog(LOG, "ident_unix: error receiving credentials: %m");
return false;
}
pass = getpwuid(uid);
if (pass == NULL)
{
elog(LOG, "ident_unix: unknown local user with uid %d",
(int) uid);
return false;
}
StrNCpy(ident_user, pass->pw_name, IDENT_USERNAME_MAX + 1);
return true;
#elsif defined(SO_PEERCRED)
/* Linux style: use getsockopt(SO_PEERCRED) */
struct ucred peercred;
ACCEPT_TYPE_ARG3 so_len = sizeof(peercred);