Newer glibc's have a different nscd socket location #74395 (From Fedora/Redhat) --- shadow-4.0.7/lib/nscd.c 2003-05-12 02:12:06.000000000 -0400 +++ shadow-4.0.7.jj/lib/nscd.c 2005-05-21 04:44:08.000000000 -0400 @@ -13,7 +13,8 @@ /* Version number of the daemon interface */ #define NSCD_VERSION 2 /* Path for the Unix domain socket. */ -#define _PATH_NSCDSOCKET "/var/run/.nscd_socket" +#define _PATH_NSCDSOCKET "/var/run/nscd/socket" +#define _PATH_NSCDSOCKET_OLD "/var/run/.nscd_socket" /* Available services. */ typedef enum { @@ -57,8 +58,13 @@ static int nscd_open_socket (void) assert (sizeof (addr.sun_path) >= sizeof (_PATH_NSCDSOCKET)); strcpy (addr.sun_path, _PATH_NSCDSOCKET); if (connect (sock, (struct sockaddr *) &addr, sizeof (addr)) < 0) { - close (sock); - return -1; + addr.sun_family = AF_UNIX; + assert (sizeof (addr.sun_path) >= sizeof (_PATH_NSCDSOCKET_OLD)); + strcpy (addr.sun_path, _PATH_NSCDSOCKET_OLD); + if (connect (sock, (struct sockaddr *) &addr, sizeof (addr)) < 0) { + close (sock); + return -1; + } } return sock;