From f823e8c411721201480afe2d275224d81c7de2c8 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Fri, 25 Feb 2005 14:12:05 +0000 Subject: r5556: Fix the build on AIX. use AF_UNIX instead of AF_LOCAL (thanks to Doug VanLeuven ) and make smbldap_open() a bit more readable. Guenther (This used to be commit 526d6a9493cd091f2a9b8e072f11e673133fe5c1) --- source3/lib/smbldap.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/source3/lib/smbldap.c b/source3/lib/smbldap.c index fec6cc23a8..3296f7994a 100644 --- a/source3/lib/smbldap.c +++ b/source3/lib/smbldap.c @@ -873,8 +873,9 @@ static int smbldap_connect_system(struct smbldap_state *ldap_state, LDAP * ldap_ *********************************************************************/ static int smbldap_open(struct smbldap_state *ldap_state) { - int rc; + int rc, opt_rc; SMB_ASSERT(ldap_state); + BOOL reopen = False; #ifndef NO_LDAP_SECURITY if (geteuid() != 0) { @@ -883,12 +884,21 @@ static int smbldap_open(struct smbldap_state *ldap_state) } #endif - if ((ldap_state->ldap_struct != NULL) && ((ldap_state->last_ping + SMBLDAP_DONT_PING_TIME) < time(NULL))) { + if ((ldap_state->ldap_struct != NULL) && ((ldap_state->last_ping + SMBLDAP_DONT_PING_TIME) < time(NULL))) { + struct sockaddr_un addr; socklen_t len = sizeof(addr); int sd; - if (ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_DESC, &sd) == 0 && - ((getpeername(sd, (struct sockaddr *) &addr, &len) < 0) || addr.sun_family == AF_LOCAL)) { + + opt_rc = ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_DESC, &sd); + if (opt_rc == 0 && (getpeername(sd, (struct sockaddr *) &addr, &len)) < 0 ) + reopen = True; + +#ifdef HAVE_UNIXSOCKET + if (opt_rc == 0 && addr.sun_family == AF_UNIX) + reopen = True; +#endif + if (reopen) { /* the other end has died. reopen. */ ldap_unbind_ext(ldap_state->ldap_struct, NULL, NULL); ldap_state->ldap_struct = NULL; -- cgit