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)