r5556: Fix the build on AIX.
authorGünther Deschner <gd@samba.org>
Fri, 25 Feb 2005 14:12:05 +0000 (14:12 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:55:47 +0000 (10:55 -0500)
use AF_UNIX instead of AF_LOCAL (thanks to Doug VanLeuven
<roamdad-at-sonic.net>) and make smbldap_open() a bit more readable.

Guenther
(This used to be commit 526d6a9493cd091f2a9b8e072f11e673133fe5c1)

source3/lib/smbldap.c

index fec6cc23a89f001f0ecbb7e8b4094a60665ed4c1..3296f7994a8f695e41849fa42c2e3ca029494c8c 100644 (file)
@@ -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;