8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -1751,15 +1751,15 @@ PQconnectPoll(PGconn *conn)
1751
1751
char * startpacket ;
1752
1752
int packetlen ;
1753
1753
1754
- #ifdef HAVE_UNIX_SOCKETS
1755
- if (conn -> requirepeer )
1754
+ if (conn -> requirepeer && conn -> requirepeer [0 ])
1756
1755
{
1756
+ #if defined(HAVE_GETPEEREID ) || defined(SO_PEERCRED ) || defined(HAVE_GETPEERUCRED )
1757
1757
char pwdbuf [BUFSIZ ];
1758
1758
struct passwd pass_buf ;
1759
1759
struct passwd * pass ;
1760
1760
uid_t uid ;
1761
1761
1762
- # if defined(HAVE_GETPEEREID )
1762
+ #if defined(HAVE_GETPEEREID )
1763
1763
gid_t gid ;
1764
1764
1765
1765
errno = 0 ;
@@ -1770,12 +1770,13 @@ PQconnectPoll(PGconn *conn)
1770
1770
pqStrerror (errno , sebuf , sizeof (sebuf )));
1771
1771
goto error_return ;
1772
1772
}
1773
- # elif defined(SO_PEERCRED )
1773
+ #elif defined(SO_PEERCRED )
1774
1774
struct ucred peercred ;
1775
1775
ACCEPT_TYPE_ARG3 so_len = sizeof (peercred );
1776
1776
1777
1777
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 ||
1779
1780
so_len != sizeof (peercred ))
1780
1781
{
1781
1782
appendPQExpBuffer (& conn -> errorMessage ,
@@ -1784,10 +1785,10 @@ PQconnectPoll(PGconn *conn)
1784
1785
goto error_return ;
1785
1786
}
1786
1787
uid = peercred .uid ;
1787
- # elif defined(HAVE_GETPEERUCRED )
1788
+ #elif defined(HAVE_GETPEERUCRED )
1788
1789
ucred_t * ucred ;
1789
1790
1790
- ucred = NULL ; /* must be initialized to NULL */
1791
+ ucred = NULL ; /* must be initialized to NULL */
1791
1792
if (getpeerucred (sock , & ucred ) == -1 )
1792
1793
{
1793
1794
appendPQExpBuffer (& conn -> errorMessage ,
@@ -1805,35 +1806,33 @@ PQconnectPoll(PGconn *conn)
1805
1806
goto error_return ;
1806
1807
}
1807
1808
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
1813
1812
1814
1813
pqGetpwuid (uid , & pass_buf , pwdbuf , sizeof (pwdbuf ), & pass );
1815
1814
1816
1815
if (pass == NULL )
1817
1816
{
1818
1817
appendPQExpBuffer (& conn -> errorMessage ,
1819
- # if defined(SO_PEERCRED )
1820
1818
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 );
1825
1820
goto error_return ;
1826
1821
}
1827
1822
1828
1823
if (strcmp (pass -> pw_name , conn -> requirepeer ) != 0 )
1829
1824
{
1830
1825
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 );
1833
1828
goto error_return ;
1834
1829
}
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
1835
1835
}
1836
- #endif /* HAVE_UNIX_SOCKETS */
1837
1836
1838
1837
#ifdef USE_SSL
1839
1838
0 commit comments