提交 772a596e 编写于 作者: B Bruce Momjian

Summary

The ident() function in src/backend/libpq/hba.c doesn't cope when
postmaster is contacted on an IP alias. This patch fixes it.

 Malcolm Beattie
上级 9b7c6ee0
......@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.35 1998/09/01 04:28:48 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.36 1998/10/02 16:18:20 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -565,6 +565,7 @@ ident(const struct in_addr remote_ip_addr, const struct in_addr local_ip_addr,
else
{
struct sockaddr_in ident_server;
struct sockaddr_in la;
/*
* Socket address of Ident server on the system from which client
......@@ -573,8 +574,22 @@ ident(const struct in_addr remote_ip_addr, const struct in_addr local_ip_addr,
ident_server.sin_family = AF_INET;
ident_server.sin_port = htons(IDENT_PORT);
ident_server.sin_addr = remote_ip_addr;
rc = connect(sock_fd,
(struct sockaddr *) & ident_server, sizeof(ident_server));
/*
* Bind to the address which the client originally contacted,
* otherwise the ident server won't be able to match up the
* right connection. This is necessary if the PostgreSQL
* server is running on an IP alias.
*/
memset(&la, 0, sizeof(la));
la.sin_family = AF_INET;
la.sin_addr = local_ip_addr;
rc = bind(sock_fd, (struct sockaddr *) &la, sizeof(la));
if (rc == 0)
{
rc = connect(sock_fd,
(struct sockaddr *) & ident_server, sizeof(ident_server));
}
if (rc != 0)
{
sprintf(PQerrormsg,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册