]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9348 replace all uses of STRERROR with AC_STRERROR_R
authorHoward Chu <hyc@openldap.org>
Wed, 16 Sep 2020 14:33:13 +0000 (15:33 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 24 Sep 2020 23:34:36 +0000 (23:34 +0000)
Avoid using sys_errlist unless there's no other choice

include/ac/errno.h
include/ac/socket.h
libraries/libldap/os-ip.c
servers/slapd/back-ldif/ldif.c
servers/slapd/connection.c
servers/slapd/daemon.c
servers/slapd/result.c

index b34ec7684178173da31ebdcbf953979903b08686..2b4d892e642c3987906d7e453424b7e437e79a7f 100644 (file)
        LDAP_LIBC_V(char)    *sys_errlist[];
 #endif
 
-#undef _AC_ERRNO_UNKNOWN
-#define _AC_ERRNO_UNKNOWN "unknown error"
-
-#ifdef HAVE_SYS_ERRLIST
-       /* this is thread safe */
-#      define  STRERROR(e) ( (e) > -1 && (e) < sys_nerr \
-                       ? sys_errlist[(e)] : _AC_ERRNO_UNKNOWN )
-
-#elif defined( HAVE_STRERROR )
-       /* this may not be thread safe */
-       /* and, yes, some implementations of strerror may return NULL */
-#      define  STRERROR(e) ( strerror(e) \
-               ? strerror(e) : _AC_ERRNO_UNKNOWN )
-
-#else
-       /* this is thread safe */
-#      define  STRERROR(e) ( _AC_ERRNO_UNKNOWN )
-#endif
-
 #endif /* _AC_ERRNO_H */
index 6dba27514806941d2e204cf3c3ca8fc5167d846e..1d11410195c207b094385469ede6c99eedaf9b38 100644 (file)
@@ -82,7 +82,7 @@
 #undef sock_errno
 #undef sock_errstr
 #define sock_errno()   errno
-#define sock_errstr(e) STRERROR(e)
+#define sock_errstr(e, b, l)   AC_STRERROR_R(e, b, l)
 #define sock_errset(e) ((void) (errno = (e)))
 
 #ifdef HAVE_WINSOCK
 #undef sock_errstr
 #undef sock_errset
 #define        sock_errno()    WSAGetLastError()
-#define        sock_errstr(e)  ber_pvt_wsa_err2string(e)
+#define        sock_errstr(e, b, l)    ber_pvt_wsa_err2string(e)
 #define        sock_errset(e)  WSASetLastError(e)
 
 LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int));
index f7f12546659fde7dde8e7a336840d5629be6ce18..716a85556a1736e4f4a4192124f3887c0580695d 100644 (file)
@@ -200,10 +200,11 @@ ldap_int_prepare_socket(LDAP *ld, int s, int proto )
 
 #undef TRACE
 #define TRACE do { \
+       char ebuf[128]; \
        Debug3(LDAP_DEBUG_TRACE, "ldap_is_socket_ready: error on socket %d: errno: %d (%s)\n", \
                s, \
                errno, \
-               sock_errstr(errno) ); \
+               sock_errstr(errno, ebuf, sizeof(ebuf)) ); \
 } while( 0 )
 
 /*
@@ -371,7 +372,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 ));
+                              "errno: %d (%s)\n", s, errno, sock_errstr( errno, dummy, dummy ));
                        return -1;
                }
 #endif
index 0a45607aa1a55df803d0dddd4097e509eab62884..3e23e7df9d0d667474f06b5a14896ecc27f97019 100644 (file)
@@ -480,12 +480,13 @@ ldif_read_file( const char *path, char **datap )
                Debug( LDAP_DEBUG_TRACE, "ldif_read_file: %s: \"%s\"\n", msg, path );
 #endif /* LDAP_DEBUG */
        } else {
+               char ebuf[128];
                if ( res < 0 && errno == ENOENT ) {
                        Debug( LDAP_DEBUG_TRACE, "ldif_read_file: "
                                "no entry file \"%s\"\n", path );
                        rc = LDAP_NO_SUCH_OBJECT;
                } else {
-                       msg = res < 0 ? STRERROR( errno ) : "bad stat() size";
+                       msg = res < 0 ? AC_STRERROR_R( errno, ebuf, sizeof(ebuf) ) : "bad stat() size";
                        Debug( LDAP_DEBUG_ANY, "ldif_read_file: %s for \"%s\"\n",
                                msg, path );
                        rc = LDAP_OTHER;
@@ -543,6 +544,7 @@ ldif_write_entry(
        int rc = LDAP_OTHER, res, save_errno = 0;
        int fd, entry_length;
        char *entry_as_string, *tmpfname;
+       char ebuf[128];
 
        if ( op->o_abandon )
                return SLAPD_ABANDON;
@@ -551,7 +553,7 @@ ldif_write_entry(
                save_errno = errno;
                Debug( LDAP_DEBUG_ANY, "ldif_write_entry: %s \"%s\": %s\n",
                        "cannot create parent directory",
-                       parentdir, STRERROR( save_errno ) );
+                       parentdir, AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                *text = "internal error (cannot create parent directory)";
                return rc;
        }
@@ -561,7 +563,7 @@ ldif_write_entry(
        if ( fd < 0 ) {
                save_errno = errno;
                Debug( LDAP_DEBUG_ANY, "ldif_write_entry: %s for \"%s\": %s\n",
-                       "cannot create file", e->e_dn, STRERROR( save_errno ) );
+                       "cannot create file", e->e_dn, AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                *text = "internal error (cannot create file)";
 
        } else {
@@ -602,12 +604,12 @@ ldif_write_entry(
                                save_errno = errno;
                                Debug( LDAP_DEBUG_ANY, "ldif_write_entry: "
                                        "could not put entry file for \"%s\" in place: %s\n",
-                                       e->e_name.bv_val, STRERROR( save_errno ) );
+                                       e->e_name.bv_val, AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                                *text = "internal error (could not put entry file in place)";
                        }
                } else if ( res == -1 ) {
                        Debug( LDAP_DEBUG_ANY, "ldif_write_entry: %s \"%s\": %s\n",
-                               "write error to", tmpfname, STRERROR( save_errno ) );
+                               "write error to", tmpfname, AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                        *text = "internal error (write error to entry file)";
                }
 
@@ -807,6 +809,7 @@ ldif_readdir(
 {
        int rc = LDAP_SUCCESS;
        DIR *dir_of_path;
+       char ebuf[128];
 
        *listp = NULL;
        *fname_maxlenp = 0;
@@ -821,7 +824,7 @@ ldif_readdir(
                if ( is_rootDSE || save_errno != ENOENT ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> ldif_search_entry: failed to opendir \"%s\": %s\n",
-                               path->bv_val, STRERROR( save_errno ) );
+                               path->bv_val, AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                        rc = LDAP_OTHER;
                        if ( rs != NULL )
                                rs->sr_text =
@@ -894,7 +897,7 @@ ldif_readdir(
                if ( rc != LDAP_SUCCESS ) {
                        Debug( LDAP_DEBUG_ANY, "ldif_search_entry: %s \"%s\": %s\n",
                                "error reading directory", path->bv_val,
-                               STRERROR( save_errno ) );
+                               AC_STRERROR_R( save_errno, ebuf, sizeof(ebuf) ) );
                }
        }
 
@@ -1052,6 +1055,7 @@ ldif_prepare_create(
        struct stat st;
        Entry *parent = NULL;
        int rc;
+       char ebuf[128];
 
        if ( op->o_abandon )
                return SLAPD_ABANDON;
@@ -1067,7 +1071,7 @@ ldif_prepare_create(
        } else if ( errno != ENOENT ) {
                Debug( LDAP_DEBUG_ANY,
                        "ldif_prepare_create: cannot stat \"%s\": %s\n",
-                       dnpath->bv_val, STRERROR( errno ) );
+                       dnpath->bv_val, AC_STRERROR_R( errno, ebuf, sizeof(ebuf) ) );
                rc = LDAP_OTHER;
                *text = "internal error (cannot check entry file)";
 
@@ -1120,7 +1124,7 @@ ldif_prepare_create(
                case LDAP_OTHER:
                        Debug( LDAP_DEBUG_ANY,
                                "ldif_prepare_create: cannot stat \"%s\" parent dir: %s\n",
-                               ndn->bv_val, STRERROR( errno ) );
+                               ndn->bv_val, AC_STRERROR_R( errno, ebuf, sizeof(ebuf) ) );
                        *text = "internal error (cannot stat parent dir)";
                        break;
                }
@@ -1473,6 +1477,7 @@ ldif_back_delete( Operation *op, SlapReply *rs )
        struct ldif_info *li = (struct ldif_info *) op->o_bd->be_private;
        struct berval path;
        int rc = LDAP_SUCCESS;
+       char ebuf[128];
 
        if ( BER_BVISEMPTY( &op->o_csn )) {
                struct berval csn;
@@ -1525,7 +1530,7 @@ ldif_back_delete( Operation *op, SlapReply *rs )
 
        if ( rc == LDAP_OTHER ) {
                Debug( LDAP_DEBUG_ANY, "ldif_back_delete: %s \"%s\": %s\n",
-                       "cannot delete", path.bv_val, STRERROR( errno ) );
+                       "cannot delete", path.bv_val, AC_STRERROR_R( errno, ebuf, sizeof(ebuf) ) );
        }
 
        SLAP_FREE( path.bv_val );
@@ -1551,6 +1556,7 @@ ldif_move_entry(
        struct berval newpath;
        char *parentdir = NULL, *trash;
        int rc, rename_res;
+       char ebuf[128];
 
        if ( same_ndn ) {
                rc = LDAP_SUCCESS;
@@ -1606,7 +1612,7 @@ ldif_move_entry(
                        if ( rc != LDAP_SUCCESS ) {
                                Debug(LDAP_DEBUG_ANY,
                                      "ldif_move_entry: %s (%s): \"%s\" -> \"%s\"\n",
-                                     *text, STRERROR(errno),
+                                     *text, AC_STRERROR_R(errno, ebuf, sizeof(ebuf)),
                                      op->o_req_dn.bv_val, entry->e_dn );
                        }
                }
index 647f987d9ae91cbced7e470b4f4ead775e1f9414..8e0691a7d8c4b68f3fbf460d5d88644686259992 100644 (file)
@@ -1598,10 +1598,11 @@ connection_input( Connection *conn , conn_readinfo *cri )
                int err = sock_errno();
 
                if ( err != EWOULDBLOCK && err != EAGAIN ) {
+                       char ebuf[128];
                        /* log, close and send error */
                        Debug( LDAP_DEBUG_TRACE,
                                "ber_get_next on fd %d failed errno=%d (%s)\n",
-                       conn->c_sd, err, sock_errstr(err) );
+                       conn->c_sd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        ber_free( conn->c_currentber, 1 );
                        conn->c_currentber = NULL;
 
index 92f66dfcd12ee94f6507d9970233a14c63bba7ab..b0973f7475ee29c2e45b859d3657cb663317ddd1 100644 (file)
@@ -1560,6 +1560,7 @@ slap_open_listener(
        struct sockaddr **sal = NULL, **psal;
        int socktype = SOCK_STREAM;     /* default to COTS */
        ber_socket_t s;
+       char ebuf[128];
 
 #if defined(LDAP_PF_LOCAL) || defined(SLAP_X_LISTENER_MOD)
        /*
@@ -1690,7 +1691,7 @@ slap_open_listener(
                        int err = sock_errno();
                        Debug( LDAP_DEBUG_ANY,
                                "daemon: %s socket() failed errno=%d (%s)\n",
-                               af, err, sock_errstr(err) );
+                               af, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        sal++;
                        continue;
                }
@@ -1720,7 +1721,7 @@ slap_open_listener(
                                int err = sock_errno();
                                Debug( LDAP_DEBUG_ANY, "slapd(%ld): "
                                        "setsockopt(SO_REUSEADDR) failed errno=%d (%s)\n",
-                                       (long) l.sl_sd, err, sock_errstr(err) );
+                                       (long) l.sl_sd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        }
 #endif /* SO_REUSEADDR */
                }
@@ -1740,7 +1741,7 @@ slap_open_listener(
                                int err = sock_errno();
                                Debug( LDAP_DEBUG_ANY, "slapd(%ld): "
                                        "setsockopt(IPV6_V6ONLY) failed errno=%d (%s)\n",
-                                       (long) l.sl_sd, err, sock_errstr(err) );
+                                       (long) l.sl_sd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        }
 #endif /* IPV6_V6ONLY */
                        addrlen = sizeof(struct sockaddr_in6);
@@ -1787,7 +1788,7 @@ slap_open_listener(
                        err = sock_errno();
                        Debug( LDAP_DEBUG_ANY,
                                "daemon: bind(%ld) failed errno=%d (%s)\n",
-                               (long)l.sl_sd, err, sock_errstr( err ) );
+                               (long)l.sl_sd, err, sock_errstr( err, ebuf, sizeof(ebuf) ) );
                        tcp_close( s );
                        sal++;
                        continue;
@@ -2219,6 +2220,7 @@ slap_listener(
 #endif
        int cflag;
        int tid;
+       char ebuf[128];
 
        Debug( LDAP_DEBUG_TRACE,
                ">>> slap_listener(%s)\n",
@@ -2270,7 +2272,7 @@ slap_listener(
 
                Debug( LDAP_DEBUG_ANY,
                        "daemon: accept(%ld) failed errno=%d (%s)\n",
-                       (long) sl->sl_sd, err, sock_errstr(err) );
+                       (long) sl->sl_sd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                ldap_pvt_thread_yield();
                return 0;
        }
@@ -2312,7 +2314,7 @@ slap_listener(
                        int err = sock_errno();
                        Debug( LDAP_DEBUG_ANY,
                                "slapd(%ld): setsockopt(SO_KEEPALIVE) failed "
-                               "errno=%d (%s)\n", (long) sfd, err, sock_errstr(err) );
+                               "errno=%d (%s)\n", (long) sfd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        slapd_close(sfd);
                        return 0;
                }
@@ -2326,7 +2328,7 @@ slap_listener(
                        int err = sock_errno();
                        Debug( LDAP_DEBUG_ANY,
                                "slapd(%ld): setsockopt(TCP_NODELAY) failed "
-                               "errno=%d (%s)\n", (long) sfd, err, sock_errstr(err) );
+                               "errno=%d (%s)\n", (long) sfd, err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                        slapd_close(sfd);
                        return 0;
                }
@@ -2503,6 +2505,7 @@ slapd_daemon_task(
        int ebadf = 0;
        int tid = (slap_daemon_st *) ptr - slap_daemon;
        int old_threads = slapd_daemon_threads;
+       char ebuf[128];
 
 #define SLAPD_IDLE_CHECK_LIMIT 4
 
@@ -2551,7 +2554,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: getsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                optlen = sizeof( size );
@@ -2565,7 +2568,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: setsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                optlen = sizeof( realsize );
@@ -2579,7 +2582,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: getsockopt(SO_RCVBUF) failed errno=%d (%s)\n",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                Debug(LDAP_DEBUG_ANY,
@@ -2607,7 +2610,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: getsockopt(SO_SNDBUF) failed errno=%d (%s)\n",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                optlen = sizeof( size );
@@ -2621,7 +2624,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: setsockopt(SO_SNDBUF) failed errno=%d (%s)",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                optlen = sizeof( realsize );
@@ -2635,7 +2638,7 @@ slapd_daemon_task(
                                        int err = sock_errno();
                                        Debug( LDAP_DEBUG_ANY,
                                                "slapd_daemon_task: getsockopt(SO_SNDBUF) failed errno=%d (%s)\n",
-                                               err, sock_errstr(err) );
+                                               err, sock_errstr(err, ebuf, sizeof(ebuf)) );
                                }
 
                                Debug(LDAP_DEBUG_ANY,
@@ -2686,7 +2689,7 @@ slapd_daemon_task(
                        Debug( LDAP_DEBUG_ANY,
                                "daemon: listen(%s, 5) failed errno=%d (%s)\n",
                                        slap_listeners[l]->sl_url.bv_val, err,
-                                       sock_errstr(err) );
+                                       sock_errstr(err, ebuf, sizeof(ebuf)) );
                        return (void*)-1;
                }
 
@@ -2916,7 +2919,7 @@ loop:
                                                        " failed count %d "
                                                        "err (%d): %s\n",
                                                        ebadf, err,
-                                                       sock_errstr( err ) );
+                                                       sock_errstr( err, ebuf, sizeof(ebuf) ) );
                                        }
                                        if ( ebadf >= SLAPD_EBADF_LIMIT ) {
                                                slapd_shutdown = 2;
index d57179118782c3ca8e4a7f9bb928545871cbcc81..198827908c2a6a08c4412f7a1fab1e659dd3596f 100644 (file)
@@ -375,6 +375,7 @@ static long send_ldap_ber(
        /* write the pdu */
        while( 1 ) {
                int err;
+               char ebuf[128];
 
                if ( ber_flush2( conn->c_sb, ber, LBER_FLUSH_FREE_NEVER ) == 0 ) {
                        ret = bytes;
@@ -390,7 +391,7 @@ static long send_ldap_ber(
                 */
 
                Debug( LDAP_DEBUG_CONNS, "ber_flush2 failed errno=%d reason=\"%s\"\n",
-                   err, sock_errstr(err) );
+                   err, sock_errstr(err, ebuf, sizeof(ebuf)) );
 
                if ( err != EWOULDBLOCK && err != EAGAIN ) {
                        close_reason = "connection lost on write";