Skip to content

Commit 1b51018

Browse files
committed
Fix up poor handling of unsupported-platform case in requirepeer patch.
1 parent 25241ae commit 1b51018

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

src/interfaces/libpq/fe-connect.c

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.401 2010/07/18 16:42:20 tgl Exp $
11+
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.402 2010/07/18 17:08:11 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -1751,15 +1751,15 @@ PQconnectPoll(PGconn *conn)
17511751
char *startpacket;
17521752
int packetlen;
17531753

1754-
#ifdef HAVE_UNIX_SOCKETS
1755-
if (conn->requirepeer)
1754+
if (conn->requirepeer && conn->requirepeer[0])
17561755
{
1756+
#if defined(HAVE_GETPEEREID) || defined(SO_PEERCRED) || defined(HAVE_GETPEERUCRED)
17571757
char pwdbuf[BUFSIZ];
17581758
struct passwd pass_buf;
17591759
struct passwd *pass;
17601760
uid_t uid;
17611761

1762-
# if defined(HAVE_GETPEEREID)
1762+
#if defined(HAVE_GETPEEREID)
17631763
gid_t gid;
17641764

17651765
errno = 0;
@@ -1770,12 +1770,13 @@ PQconnectPoll(PGconn *conn)
17701770
pqStrerror(errno, sebuf, sizeof(sebuf)));
17711771
goto error_return;
17721772
}
1773-
# elif defined(SO_PEERCRED)
1773+
#elif defined(SO_PEERCRED)
17741774
struct ucred peercred;
17751775
ACCEPT_TYPE_ARG3 so_len = sizeof(peercred);
17761776

17771777
errno = 0;
1778-
if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &peercred, &so_len) != 0 ||
1778+
if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED,
1779+
&peercred, &so_len) != 0 ||
17791780
so_len != sizeof(peercred))
17801781
{
17811782
appendPQExpBuffer(&conn->errorMessage,
@@ -1784,10 +1785,10 @@ PQconnectPoll(PGconn *conn)
17841785
goto error_return;
17851786
}
17861787
uid = peercred.uid;
1787-
# elif defined(HAVE_GETPEERUCRED)
1788+
#elif defined(HAVE_GETPEERUCRED)
17881789
ucred_t *ucred;
17891790

1790-
ucred = NULL; /* must be initialized to NULL */
1791+
ucred = NULL; /* must be initialized to NULL */
17911792
if (getpeerucred(sock, &ucred) == -1)
17921793
{
17931794
appendPQExpBuffer(&conn->errorMessage,
@@ -1805,35 +1806,33 @@ PQconnectPoll(PGconn *conn)
18051806
goto error_return;
18061807
}
18071808
ucred_free(ucred);
1808-
# else
1809-
appendPQExpBuffer(&conn->errorMessage,
1810-
libpq_gettext("requirepeer parameter is not supported on this platform\n"));
1811-
goto error_return;
1812-
# endif
1809+
#else
1810+
#error missing implementation method for requirepeer
1811+
#endif
18131812

18141813
pqGetpwuid(uid, &pass_buf, pwdbuf, sizeof(pwdbuf), &pass);
18151814

18161815
if (pass == NULL)
18171816
{
18181817
appendPQExpBuffer(&conn->errorMessage,
1819-
# if defined(SO_PEERCRED)
18201818
libpq_gettext("local user with ID %d does not exist\n"),
1821-
(int) peercred.uid);
1822-
#else
1823-
libpq_gettext("matching local user does not exist\n"));
1824-
#endif
1819+
(int) uid);
18251820
goto error_return;
18261821
}
18271822

18281823
if (strcmp(pass->pw_name, conn->requirepeer) != 0)
18291824
{
18301825
appendPQExpBuffer(&conn->errorMessage,
1831-
libpq_gettext("requirepeer failed (actual: %s != required: %s)\n"),
1832-
pass->pw_name, conn->requirepeer);
1826+
libpq_gettext("requirepeer specifies \"%s\", but actual peer user name is \"%s\"\n"),
1827+
conn->requirepeer, pass->pw_name);
18331828
goto error_return;
18341829
}
1830+
#else /* can't support requirepeer */
1831+
appendPQExpBuffer(&conn->errorMessage,
1832+
libpq_gettext("requirepeer parameter is not supported on this platform\n"));
1833+
goto error_return;
1834+
#endif
18351835
}
1836-
#endif /* HAVE_UNIX_SOCKETS */
18371836

18381837
#ifdef USE_SSL
18391838

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy