]> granicus.if.org Git - postgresql/commitdiff
Add OpenBSD local indent credentials, from William Ahern.
authorBruce Momjian <bruce@momjian.us>
Tue, 3 Dec 2002 21:50:44 +0000 (21:50 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 3 Dec 2002 21:50:44 +0000 (21:50 +0000)
configure
configure.in
doc/src/sgml/client-auth.sgml
src/backend/libpq/hba.c

index 80b22f91f4cf4c80c627d0d0f6149c60f755db6e..bb0a28bb081af2882897091bbcc61b0fdd00b84a 100755 (executable)
--- 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
index c6ba894b0f90d6071a7f8014961d8d3cb082be55..68123ae74cc87af0f8232d4894b2b805e5dd31fe 100644 (file)
@@ -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>])
 
index 4eeb5f5dff3f7b981461f3b47a62221437383f53..c4d4af125139d6385849978920aae3ce74726aeb 100644 (file)
@@ -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>
index cda4bc93aebe4315ea004f24f54f67d6403d00b8..396347945e39ba94eb93d8037e2566d73e94e239 100644 (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);