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
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 );
}
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;
}
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 );
}
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 );
}
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
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 );
}
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",
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;
}
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
*/
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 );
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
*/
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 );
{
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;
}