diff --git a/configure b/configure index 80b22f91f4cf4c80c627d0d0f6149c60f755db6e..bb0a28bb081af2882897091bbcc61b0fdd00b84a 100755 --- a/configure +++ b/configure @@ -9819,7 +9819,8 @@ test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext" -for ac_func in cbrt fcvt getopt_long memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync + +for ac_func in cbrt fcvt getopt_long getpeereid memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/configure.in b/configure.in index c6ba894b0f90d6071a7f8014961d8d3cb082be55..68123ae74cc87af0f8232d4894b2b805e5dd31fe 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $Header: /cvsroot/pgsql/configure.in,v 1.218 2002/11/04 21:36:13 tgl Exp $ +dnl $Header: /cvsroot/pgsql/configure.in,v 1.219 2002/12/03 21:50:43 momjian Exp $ dnl dnl Developers, please strive to achieve this order: dnl @@ -782,7 +782,7 @@ PGAC_FUNC_GETTIMEOFDAY_1ARG # SunOS doesn't handle negative byte comparisons properly with +/- return AC_FUNC_MEMCMP -AC_CHECK_FUNCS([cbrt fcvt getopt_long memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync]) +AC_CHECK_FUNCS([cbrt fcvt getopt_long getpeereid memmove pstat setproctitle setsid sigprocmask sysconf waitpid dlopen fdatasync]) AC_CHECK_DECLS(fdatasync, [], [], [#include <unistd.h>]) diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index 4eeb5f5dff3f7b981461f3b47a62221437383f53..c4d4af125139d6385849978920aae3ce74726aeb 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.41 2002/11/15 03:11:15 momjian Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v 1.42 2002/12/03 21:50:44 momjian Exp $ --> <chapter id="client-authentication"> @@ -318,7 +318,8 @@ hostssl <replaceable>database</replaceable> <replaceable>user</replaceable> < support Unix-domain socket credentials (currently <systemitem class=osname>Linux</>, <systemitem class=osname>FreeBSD</>, <systemitem class=osname>NetBSD</>, - and <systemitem class=osname>BSD/OS</>). + <systemitem class=osname>OpenBSD</>, and + <systemitem class=osname>BSD/OS</>). </para> <para> diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index cda4bc93aebe4315ea004f24f54f67d6403d00b8..396347945e39ba94eb93d8037e2566d73e94e239 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);