]> granicus.if.org Git - postgresql/commitdiff
Fix broken IDENT support for FreeBSD (appears to have been broken by
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 20 Dec 2003 18:25:02 +0000 (18:25 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 20 Dec 2003 18:25:02 +0000 (18:25 +0000)
ill-considered conditional logic in getpeereid patch of 3-Dec-2002).
Per bug #1021.

src/backend/libpq/auth.c
src/interfaces/libpq/fe-auth.c

index 65b1da632854c0a865834c57bdb6e3bb38fe8b07..b339e42877ecda5d3091ec2e6be9df750de18794 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.112 2003/09/26 15:27:31 petere Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.112.2.1 2003/12/20 18:25:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -471,32 +471,31 @@ ClientAuthentication(Port *port)
                        break;
 
                case uaIdent:
-#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
-       (defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)) && \
-       !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED)
-
                        /*
                         * If we are doing ident on unix-domain sockets, use SCM_CREDS
                         * only if it is defined and SO_PEERCRED isn't.
                         */
-#if defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)
-
-                       /*
-                        * Receive credentials on next message receipt, BSD/OS,
-                        * NetBSD. We need to set this before the client sends the
-                        * next packet.
-                        */
+#if !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED) && \
+       (defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
+        (defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)))
+                       if (port->raddr.addr.ss_family == AF_UNIX)
                        {
+#if defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)
+                               /*
+                                * Receive credentials on next message receipt, BSD/OS,
+                                * NetBSD. We need to set this before the client sends the
+                                * next packet.
+                                */
                                int                     on = 1;
 
                                if (setsockopt(port->sock, 0, LOCAL_CREDS, &on, sizeof(on)) < 0)
                                        ereport(FATAL,
                                                        (errcode_for_socket_access(),
                                         errmsg("could not enable credential reception: %m")));
-                       }
 #endif
-                       if (port->raddr.addr.ss_family == AF_UNIX)
+
                                sendAuthRequest(port, AUTH_REQ_SCM_CREDS);
+                       }
 #endif
                        status = authident(port);
                        break;
index 40e1ef90b46b5472c7bee0fc3af6e1365263e4b1..80a89782ddd836ac61bc6f3498a097ed38f1b071 100644 (file)
@@ -10,7 +10,7 @@
  * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.84.2.1 2003/11/26 15:54:59 petere Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.84.2.2 2003/12/20 18:25:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -447,12 +447,19 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
 }
 #endif   /* KRB5 */
 
+/*
+ * Respond to AUTH_REQ_SCM_CREDS challenge.
+ *
+ * Note: the backend will not use this challenge if HAVE_GETPEEREID
+ * or SO_PEERCRED is defined, so we don't bother to compile any code
+ * in that case, even if the facility is available.
+ */
 static int
 pg_local_sendauth(char *PQerrormsg, PGconn *conn)
 {
-#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
-       (defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)) && \
-       !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED)
+#if !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED) && \
+       (defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
+        (defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)))
        char            buf;
        struct iovec iov;
        struct msghdr msg;