88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.401 2010/07/1816:42:20 tgl Exp $
11+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.402 2010/07/1817:08:11 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -1751,15 +1751,15 @@ PQconnectPoll(PGconn *conn)
17511751char * startpacket ;
17521752int 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 )
17571757char pwdbuf [BUFSIZ ];
17581758struct passwd pass_buf ;
17591759struct passwd * pass ;
17601760uid_t uid ;
17611761
1762- # if defined(HAVE_GETPEEREID )
1762+ #if defined(HAVE_GETPEEREID )
17631763gid_t gid ;
17641764
17651765errno = 0 ;
@@ -1770,12 +1770,13 @@ PQconnectPoll(PGconn *conn)
17701770pqStrerror (errno ,sebuf ,sizeof (sebuf )));
17711771gotoerror_return ;
17721772}
1773- # elif defined(SO_PEERCRED )
1773+ #elif defined(SO_PEERCRED )
17741774struct ucred peercred ;
17751775ACCEPT_TYPE_ARG3 so_len = sizeof (peercred );
17761776
17771777errno = 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 ||
17791780so_len != sizeof (peercred ))
17801781{
17811782appendPQExpBuffer (& conn -> errorMessage ,
@@ -1784,10 +1785,10 @@ PQconnectPoll(PGconn *conn)
17841785gotoerror_return ;
17851786}
17861787uid = peercred .uid ;
1787- # elif defined(HAVE_GETPEERUCRED )
1788+ #elif defined(HAVE_GETPEERUCRED )
17881789ucred_t * ucred ;
17891790
1790- ucred = NULL ;/* must be initialized to NULL */
1791+ ucred = NULL ;/* must be initialized to NULL */
17911792if (getpeerucred (sock ,& ucred )== -1 )
17921793{
17931794appendPQExpBuffer (& conn -> errorMessage ,
@@ -1805,35 +1806,33 @@ PQconnectPoll(PGconn *conn)
18051806gotoerror_return ;
18061807}
18071808ucred_free (ucred );
1808- # else
1809- appendPQExpBuffer (& conn -> errorMessage ,
1810- libpq_gettext ("requirepeer parameter is not supported on this platform\n" ));
1811- gotoerror_return ;
1812- # endif
1809+ #else
1810+ #error missing implementation method for requirepeer
1811+ #endif
18131812
18141813pqGetpwuid (uid ,& pass_buf ,pwdbuf ,sizeof (pwdbuf ),& pass );
18151814
18161815if (pass == NULL )
18171816{
18181817appendPQExpBuffer (& conn -> errorMessage ,
1819- # if defined(SO_PEERCRED )
18201818libpq_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 );
18251820gotoerror_return ;
18261821}
18271822
18281823if (strcmp (pass -> pw_name ,conn -> requirepeer )!= 0 )
18291824{
18301825appendPQExpBuffer (& conn -> errorMessage ,
1831- libpq_gettext ("requirepeerfailed (actual: %s != required: %s) \n" ),
1832- pass -> pw_name , conn -> requirepeer );
1826+ libpq_gettext ("requirepeerspecifies \"%s\", but actual peer user name is \"%s\" \n" ),
1827+ conn -> requirepeer , pass -> pw_name );
18331828gotoerror_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+ gotoerror_return ;
1834+ #endif
18351835}
1836- #endif /* HAVE_UNIX_SOCKETS */
18371836
18381837#ifdef USE_SSL
18391838