From: Kurt Zeilenga Date: Wed, 1 Sep 1999 00:33:54 +0000 (+0000) Subject: ITS#276: make copy of errno before it gets slammed. X-Git-Tag: OPENLDAP_REL_ENG_1_2_7~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be865bca0e4be9527a177c7461c4806bf73860c3;p=thirdparty%2Fopenldap.git ITS#276: make copy of errno before it gets slammed. --- diff --git a/CHANGES b/CHANGES index a04aee3d1b..956a002767 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Changes included in OpenLDAP 1.2 Release Engineering Fixed ldapsearch (%s) bug (ITS#274) Fixed slapd (cn=*=+=*) regex bug (ITS#272) Fixed -lldap (cn=*\**) filter handling (ITS#247 ITS#275) + Fixed slapd errno handling Build environment Disable config.cache to ensure consistent detection Documentation diff --git a/servers/slapd/back-ldbm/dbcache.c b/servers/slapd/back-ldbm/dbcache.c index 5e3549ff34..5589fc2153 100644 --- a/servers/slapd/back-ldbm/dbcache.c +++ b/servers/slapd/back-ldbm/dbcache.c @@ -93,10 +93,11 @@ ldbm_cache_open( if ( (li->li_dbcache[i].dbc_db = ldbm_open( buf, flags, li->li_mode, li->li_dbcachesize )) == NULL ) { + int err = errno; Debug( LDAP_DEBUG_TRACE, "<= ldbm_cache_open NULL \"%s\" errno %d reason \"%s\")\n", - buf, errno, errno > -1 && errno < sys_nerr ? - sys_errlist[errno] : "unknown" ); + buf, err, err > -1 && err < sys_nerr ? + sys_errlist[err] : "unknown" ); ldap_pvt_thread_mutex_unlock( &li->li_dbcache_mutex ); return( NULL ); } diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 6d13fb39e3..7d20080c27 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -133,15 +133,16 @@ connection_activity( errno = 0; if ( (tag = ber_get_next( &conn->c_sb, &len, conn->c_currentber )) != LDAP_TAG_MESSAGE ) { + int err = errno; Debug( LDAP_DEBUG_TRACE, "ber_get_next on fd %d failed errno %d (%s)\n", - conn->c_sb.sb_sd, errno, errno > -1 && errno < sys_nerr ? - sys_errlist[errno] : "unknown" ); + conn->c_sb.sb_sd, err, err > -1 && err < sys_nerr ? + sys_errlist[err] : "unknown" ); Debug( LDAP_DEBUG_TRACE, "*** got %ld of %lu so far\n", (long)(conn->c_currentber->ber_rwptr - conn->c_currentber->ber_buf), conn->c_currentber->ber_len, 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { /* log, close and send error */ ber_free( conn->c_currentber, 1 ); conn->c_currentber = NULL; diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index eec95b79a9..14e309e589 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -95,8 +95,9 @@ slapd_daemon( } if ( (tcps = socket( AF_INET, SOCK_STREAM, 0 )) == -1 ) { - Debug( LDAP_DEBUG_ANY, "socket() failed errno %d (%s)", errno, - errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + int err = errno; + Debug( LDAP_DEBUG_ANY, "socket() failed errno %d (%s)", err, + err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); exit( 1 ); } @@ -104,8 +105,9 @@ slapd_daemon( i = 1; if ( setsockopt( tcps, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i) ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "setsockopt(reuse) failed errno %d (%s)", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); } @@ -113,8 +115,9 @@ slapd_daemon( i = 1; if ( setsockopt( tcps, SOL_SOCKET, SO_KEEPALIVE, (char *) &i, sizeof(i) ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "setsockopt(keepalive) failed errno %d (%s)", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); } #endif @@ -124,15 +127,17 @@ slapd_daemon( addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons( (int)port ); if ( bind( tcps, (struct sockaddr *) &addr, sizeof(addr) ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "bind() failed errno %d (%s)\n", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); exit( 1 ); } if ( listen( tcps, 5 ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "listen() failed errno %d (%s)", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); exit( 1 ); } @@ -201,12 +206,13 @@ slapd_daemon( ldap_pvt_thread_mutex_unlock( &active_threads_mutex ); switch ( i = select( dtblsize, &readfds, &writefds, 0, tvp ) ) { - case -1: /* failure - try again */ + case -1: { /* failure - try again */ + int err = errno; Debug( LDAP_DEBUG_CONNS, "select failed errno %d (%s)\n", - errno, errno > -1 && errno < sys_nerr ? - sys_errlist[errno] : "unknown", 0 ); - continue; + err, err > -1 && err < sys_nerr ? + sys_errlist[err] : "unknown", 0 ); + } continue; case 0: /* timeout - let threads run */ Debug( LDAP_DEBUG_CONNS, "select timeout - yielding\n", @@ -227,11 +233,13 @@ slapd_daemon( if ( FD_ISSET( tcps, &readfds ) ) { len = sizeof(from); if ( (ns = accept( tcps, (struct sockaddr *) &from, - &len )) == -1 ) { + &len )) == -1 ) + { + int err = errno; Debug( LDAP_DEBUG_ANY, - "accept() failed errno %d (%s)", errno, - errno > -1 && errno < sys_nerr ? - sys_errlist[errno] : "unknown", 0 ); + "accept() failed errno %d (%s)", err, + err > -1 && err < sys_nerr ? + sys_errlist[err] : "unknown", 0 ); ldap_pvt_thread_mutex_unlock( &new_conn_mutex ); continue; } diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 19d162ed53..f7320bdf8b 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -91,6 +91,7 @@ send_ldap_result2( ldap_pvt_thread_mutex_lock( &new_conn_mutex ); while ( conn->c_connid == op->o_connid && ber_flush( &conn->c_sb, ber, 0 ) != 0 ) { + int err = errno; ldap_pvt_thread_mutex_unlock( &new_conn_mutex ); /* * we got an error. if it's ewouldblock, we need to @@ -99,10 +100,10 @@ send_ldap_result2( */ Debug( LDAP_DEBUG_CONNS, "ber_flush failed errno %d msg (%s)\n", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { close_connection( conn, op->o_connid, op->o_opid ); ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex ); @@ -332,6 +333,7 @@ send_search_entry( ldap_pvt_thread_mutex_lock( &new_conn_mutex ); while ( conn->c_connid == op->o_connid && ber_flush( &conn->c_sb, ber, 0 ) != 0 ) { + int err = errno; ldap_pvt_thread_mutex_unlock( &new_conn_mutex ); /* * we got an error. if it's ewouldblock, we need to @@ -340,10 +342,10 @@ send_search_entry( */ Debug( LDAP_DEBUG_CONNS, "ber_flush failed errno %d msg (%s)\n", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { close_connection( conn, op->o_connid, op->o_opid ); ldap_pvt_thread_mutex_unlock( &conn->c_pdumutex ); @@ -459,10 +461,12 @@ close_connection( Connection *conn, int opconnid, int opid ) { ldap_pvt_thread_mutex_lock( &new_conn_mutex ); if ( conn->c_sb.sb_sd != -1 && conn->c_connid == opconnid ) { + int err; + close( conn->c_sb.sb_sd ); + err = errno; Statslog( LDAP_DEBUG_STATS, "conn=%d op=%d fd=%d closed errno=%d\n", conn->c_connid, - opid, conn->c_sb.sb_sd, errno, 0 ); - close( conn->c_sb.sb_sd ); + opid, conn->c_sb.sb_sd, err, 0 ); conn->c_sb.sb_sd = -1; conn->c_version = 0; }