diff options
author | Bruce Momjian <bruce@momjian.us> | 2002-12-03 21:50:44 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2002-12-03 21:50:44 +0000 |
commit | f988edb4e1b86ece3a376e774a1d52da72714fb0 (patch) | |
tree | b88bd52e2ee33f907afff923a22c2a8a0ff9fda8 /src | |
parent | 31504cc83b82616bb12a23905ce33a0adf7d80b7 (diff) | |
download | postgresql-f988edb4e1b86ece3a376e774a1d52da72714fb0.tar.gz postgresql-f988edb4e1b86ece3a376e774a1d52da72714fb0.zip |
Add OpenBSD local indent credentials, from William Ahern.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/libpq/hba.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index cda4bc93aeb..396347945e3 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -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); |