From: Ondřej Kuzník Date: Thu, 24 Sep 2020 14:51:41 +0000 (+0100) Subject: ITS#5422 Save errno before passing it to Debug() X-Git-Tag: OPENLDAP_REL_ENG_2_5_0ALPHA~8^2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3f5293e145663852f65d0df3a056c86a2c3020c3;p=thirdparty%2Fopenldap.git ITS#5422 Save errno before passing it to Debug() --- diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c index 716a85556a..5f15598e28 100644 --- a/libraries/libldap/os-ip.c +++ b/libraries/libldap/os-ip.c @@ -201,10 +201,11 @@ ldap_int_prepare_socket(LDAP *ld, int s, int proto ) #undef TRACE #define TRACE do { \ char ebuf[128]; \ + int saved_errno = errno; \ Debug3(LDAP_DEBUG_TRACE, "ldap_is_socket_ready: error on socket %d: errno: %d (%s)\n", \ s, \ - errno, \ - sock_errstr(errno, ebuf, sizeof(ebuf)) ); \ + saved_errno, \ + sock_errstr(saved_errno, ebuf, sizeof(ebuf)) ); \ } while( 0 ) /* @@ -372,7 +373,7 @@ ldap_int_poll( ldap_pvt_set_errno( so_errno ); Debug3(LDAP_DEBUG_TRACE, "ldap_int_poll: error on socket %d: " - "errno: %d (%s)\n", s, errno, sock_errstr( errno, dummy, dummy )); + "errno: %d (%s)\n", s, so_errno, sock_errstr( so_errno, dummy, dummy )); return -1; } #endif diff --git a/libraries/libldap/os-local.c b/libraries/libldap/os-local.c index 6a5008a69c..c5e890a447 100644 --- a/libraries/libldap/os-local.c +++ b/libraries/libldap/os-local.c @@ -95,10 +95,11 @@ ldap_pvt_close_socket(LDAP *ld, int s) #undef TRACE #define TRACE do { \ char ebuf[128]; \ + int saved_errno = errno; \ Debug3(LDAP_DEBUG_TRACE, "ldap_is_socket_ready: error on socket %d: errno: %d (%s)\n", \ s, \ - errno, \ - AC_STRERROR_R(errno, ebuf, sizeof ebuf)); \ + saved_errno, \ + AC_STRERROR_R(saved_errno, ebuf, sizeof ebuf)); \ } while( 0 ) /* diff --git a/servers/slapd/back-mdb/init.c b/servers/slapd/back-mdb/init.c index 3dbaa01192..002f232aff 100644 --- a/servers/slapd/back-mdb/init.c +++ b/servers/slapd/back-mdb/init.c @@ -104,10 +104,11 @@ mdb_db_open( BackendDB *be, ConfigReply *cr ) /* Check existence of dbenv_home. Any error means trouble */ rc = stat( mdb->mi_dbenv_home, &stat1 ); if( rc != 0 ) { + int saved_errno = errno; Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(mdb_db_open) ": database \"%s\": " "cannot access database directory \"%s\" (%d).\n", - be->be_suffix[0].bv_val, mdb->mi_dbenv_home, errno ); + be->be_suffix[0].bv_val, mdb->mi_dbenv_home, saved_errno ); return -1; } diff --git a/servers/slapd/back-shell/result.c b/servers/slapd/back-shell/result.c index b1474f403e..8d0006fbde 100644 --- a/servers/slapd/back-shell/result.c +++ b/servers/slapd/back-shell/result.c @@ -59,10 +59,11 @@ read_and_send_results( while ( !feof(fp) ) { errno = 0; if ( fgets( line, sizeof(line), fp ) == NULL ) { + int saved_errno = errno; if ( errno == EINTR ) continue; Debug( LDAP_DEBUG_ANY, "shell: fgets failed: %s (%d)\n", - AC_STRERROR_R(errno, ebuf, sizeof ebuf), errno ); + AC_STRERROR_R(saved_errno, ebuf, sizeof ebuf), saved_errno ); break; } diff --git a/servers/slapd/back-sock/result.c b/servers/slapd/back-sock/result.c index fcc0e246f4..0cc9e0261c 100644 --- a/servers/slapd/back-sock/result.c +++ b/servers/slapd/back-sock/result.c @@ -57,10 +57,11 @@ sock_read_and_send_results( while ( !feof(fp) ) { errno = 0; if ( fgets( line, sizeof(line), fp ) == NULL ) { + int saved_errno = errno; if ( errno == EINTR ) continue; Debug( LDAP_DEBUG_ANY, "sock: fgets failed: %s (%d)\n", - AC_STRERROR_R(errno, ebuf, sizeof ebuf), errno ); + AC_STRERROR_R(saved_errno, ebuf, sizeof ebuf), saved_errno ); break; } diff --git a/servers/slapd/back-wt/init.c b/servers/slapd/back-wt/init.c index a12dd707ca..7b7d5846c6 100644 --- a/servers/slapd/back-wt/init.c +++ b/servers/slapd/back-wt/init.c @@ -71,10 +71,11 @@ wt_db_open( BackendDB *be, ConfigReply *cr ) /* Check existence of home. Any error means trouble */ rc = stat( wi->wi_dbenv_home, &st ); if( rc ) { + int saved_errno = errno; Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(wt_db_open) ": database \"%s\": " "cannot access database directory \"%s\" (%d).\n", - be->be_suffix[0].bv_val, wi->wi_dbenv_home, errno ); + be->be_suffix[0].bv_val, wi->wi_dbenv_home, saved_errno ); return -1; } @@ -82,10 +83,11 @@ wt_db_open( BackendDB *be, ConfigReply *cr ) rc = wiredtiger_open(wi->wi_dbenv_home, NULL, wi->wi_dbenv_config, &conn); if( rc ) { + int saved_errno = errno; Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(wt_db_open) ": database \"%s\": " "cannot open database \"%s\" (%d).\n", - be->be_suffix[0].bv_val, wi->wi_dbenv_home, errno ); + be->be_suffix[0].bv_val, wi->wi_dbenv_home, saved_errno ); return -1; } @@ -178,10 +180,11 @@ wt_db_close( BackendDB *be, ConfigReply *cr ) rc = wi->wi_conn->close(wi->wi_conn, NULL); if( rc ) { + int saved_errno = errno; Debug( LDAP_DEBUG_ANY, LDAP_XSTRING(wt_db_close) ": cannot close database (%d).\n", - errno ); + saved_errno ); return -1; } diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index fc9e783f20..cb3ad9d0ba 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -4570,9 +4570,10 @@ read_config(const char *fname, const char *dir) { struct stat st; if ( stat( dir, &st ) < 0 ) { + int saved_errno = errno; Debug( LDAP_DEBUG_ANY, "invalid config directory %s, error %d\n", - dir, errno ); + dir, saved_errno ); return 1; } cfdir = dir; diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 6b9672a229..c6fac264d2 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -787,10 +787,11 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft) init_config_argv( c ); if ( stat( fname, &s ) != 0 ) { + int saved_errno = errno; ldap_syslog = 1; Debug(LDAP_DEBUG_ANY, "could not stat config file \"%s\": %s (%d)\n", - fname, strerror(errno), errno); + fname, strerror(saved_errno), saved_errno); ch_free( c->argv ); ch_free( c ); return(1); @@ -808,10 +809,11 @@ read_config_file(const char *fname, int depth, ConfigArgs *cf, ConfigTable *cft) fp = fopen( fname, "r" ); if ( fp == NULL ) { + int saved_errno = errno; ldap_syslog = 1; Debug(LDAP_DEBUG_ANY, "could not open config file \"%s\": %s (%d)\n", - fname, strerror(errno), errno); + fname, strerror(saved_errno), saved_errno); ch_free( c->argv ); ch_free( c ); return(1); diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index b0973f7475..87c1a73ed9 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -242,7 +242,8 @@ static slap_daemon_st *slap_daemon; } \ slap_daemon[t].sd_kq = kqueue(); \ if (slap_daemon[t].sd_kq < 0) { \ - Debug(LDAP_DEBUG_ANY, "daemon: SLAP_SOCK_INIT: kqueue() failed, errno=%d, shutting down\n", errno); \ + int saved_errno = errno; \ + Debug(LDAP_DEBUG_ANY, "daemon: SLAP_SOCK_INIT: kqueue() failed, errno=%d, shutting down\n", saved_errno); \ slapd_shutdown = 2; \ } \ } while (0) @@ -466,9 +467,10 @@ static slap_daemon_st *slap_daemon; if ( rc == 0 ) { \ slap_daemon[t].sd_nfds++; \ } else { \ + int saved_errno = errno; \ Debug( LDAP_DEBUG_ANY, \ "daemon: epoll_ctl(ADD,fd=%d) failed, errno=%d, shutting down\n", \ - s, errno ); \ + s, saved_errno ); \ slapd_shutdown = 2; \ } \ } while (0) @@ -573,9 +575,10 @@ static slap_daemon_st *slap_daemon; /* FIXME: use pwrite? */ \ rc = write( slap_daemon[t].sd_dpfd, (pfd), size ); \ if ( rc != size ) { \ + int saved_errno = errno; \ Debug( LDAP_DEBUG_ANY, "daemon: " SLAP_EVENT_FNAME ": " \ "%s fd=%d failed errno=%d\n", \ - (what), (s), errno ); \ + (what), (s), saved_errno ); \ if ( (shdn) ) { \ slapd_shutdown = 2; \ } \ @@ -691,9 +694,10 @@ static slap_daemon_st *slap_daemon; slap_daemon[t].sd_l = (Listener **)&slap_daemon[t].sd_index[ dtblsize ]; \ slap_daemon[t].sd_dpfd = open( SLAP_EVENT_FNAME, O_RDWR ); \ if ( slap_daemon[t].sd_dpfd == -1 ) { \ + int saved_errno = errno; \ Debug( LDAP_DEBUG_ANY, "daemon: " SLAP_EVENT_FNAME ": " \ "open(\"" SLAP_EVENT_FNAME "\") failed errno=%d\n", \ - errno ); \ + saved_errno ); \ SLAP_SOCK_DESTROY(t); \ return -1; \ } \