mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Fix broken IDENT support for FreeBSD (appears to have been broken by
ill-considered conditional logic in getpeereid patch of 3-Dec-2002). Per bug #1021.
This commit is contained in:
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.113 2003/11/29 19:51:49 pgsql Exp $
|
* $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.114 2003/12/20 18:24:52 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -471,32 +471,31 @@ ClientAuthentication(Port *port)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case uaIdent:
|
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
|
* If we are doing ident on unix-domain sockets, use SCM_CREDS
|
||||||
* only if it is defined and SO_PEERCRED isn't.
|
* only if it is defined and SO_PEERCRED isn't.
|
||||||
*/
|
*/
|
||||||
|
#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)
|
#if defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Receive credentials on next message receipt, BSD/OS,
|
* Receive credentials on next message receipt, BSD/OS,
|
||||||
* NetBSD. We need to set this before the client sends the
|
* NetBSD. We need to set this before the client sends the
|
||||||
* next packet.
|
* next packet.
|
||||||
*/
|
*/
|
||||||
{
|
|
||||||
int on = 1;
|
int on = 1;
|
||||||
|
|
||||||
if (setsockopt(port->sock, 0, LOCAL_CREDS, &on, sizeof(on)) < 0)
|
if (setsockopt(port->sock, 0, LOCAL_CREDS, &on, sizeof(on)) < 0)
|
||||||
ereport(FATAL,
|
ereport(FATAL,
|
||||||
(errcode_for_socket_access(),
|
(errcode_for_socket_access(),
|
||||||
errmsg("could not enable credential reception: %m")));
|
errmsg("could not enable credential reception: %m")));
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (port->raddr.addr.ss_family == AF_UNIX)
|
|
||||||
sendAuthRequest(port, AUTH_REQ_SCM_CREDS);
|
sendAuthRequest(port, AUTH_REQ_SCM_CREDS);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
status = authident(port);
|
status = authident(port);
|
||||||
break;
|
break;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
|
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.86 2003/11/29 19:52:11 pgsql Exp $
|
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.87 2003/12/20 18:24:52 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -447,12 +447,19 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, const char *hostname)
|
|||||||
}
|
}
|
||||||
#endif /* KRB5 */
|
#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
|
static int
|
||||||
pg_local_sendauth(char *PQerrormsg, PGconn *conn)
|
pg_local_sendauth(char *PQerrormsg, PGconn *conn)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
|
#if !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED) && \
|
||||||
(defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)) && \
|
(defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || \
|
||||||
!defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED)
|
(defined(HAVE_STRUCT_SOCKCRED) && defined(LOCAL_CREDS)))
|
||||||
char buf;
|
char buf;
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
struct msghdr msg;
|
struct msghdr msg;
|
||||||
|
Reference in New Issue
Block a user