handle sizeof(time_t) > sizeof(long) in format strings
authorSteve Langasek <steve.langasek@canonical.com>
Fri, 26 Apr 2024 23:09:29 +0000 (16:09 -0700)
committerRyan Tandy <ryan@nardis.ca>
Fri, 26 Apr 2024 23:09:29 +0000 (16:09 -0700)
Last-Update: 2024-03-11
Forwarded: no

64-bit time_t means that on some architectures, time_t is now larger than
a long, and making some references in format strings incorrect.  To avoid
truncation or other size mismatch issues, always cast to a long long and
read using %lld.

Fixes an assertion failure detected during build-time tests on armhf:
slapd: ../../../../../servers/slapd/overlays/dds.c:422: dds_op_add: Assertion `bv.bv_len < sizeof( ttlbuf )' failed.

Gbp-Pq: Name 64-bit-time-t-compat.patch

15 files changed:
contrib/slapd-modules/smbk5pwd/smbk5pwd.c
libraries/libldap/os-ip.c
libraries/libldap/os-local.c
libraries/libldap/result.c
servers/slapd/back-asyncmeta/add.c
servers/slapd/back-asyncmeta/compare.c
servers/slapd/back-asyncmeta/config.c
servers/slapd/back-asyncmeta/delete.c
servers/slapd/back-asyncmeta/meta_result.c
servers/slapd/back-asyncmeta/modify.c
servers/slapd/back-asyncmeta/modrdn.c
servers/slapd/back-ldap/bind.c
servers/slapd/bind.c
servers/slapd/overlays/dds.c
servers/slapd/overlays/pcache.c

index 3b81e92d65ef9c168f2e8a3f79544ff877608bec..ce937de85041f18400c1ea85a28eed2e5c84e173 100644 (file)
@@ -513,7 +513,7 @@ static int smbk5pwd_exop_passwd(
                keys[0].bv_val = ch_malloc( LDAP_PVT_INTTYPE_CHARS(long) );
                keys[0].bv_len = snprintf(keys[0].bv_val,
                        LDAP_PVT_INTTYPE_CHARS(long),
-                       "%ld", slap_get_time());
+                       "%lld", (long long)slap_get_time());
                BER_BVZERO( &keys[1] );
                
                ml->sml_desc = ad_sambaPwdLastSet;
@@ -535,7 +535,7 @@ static int smbk5pwd_exop_passwd(
                        keys[0].bv_val = ch_malloc( LDAP_PVT_INTTYPE_CHARS(long) );
                        keys[0].bv_len = snprintf(keys[0].bv_val,
                                        LDAP_PVT_INTTYPE_CHARS(long),
-                                       "%ld", slap_get_time() + pi->smb_must_change);
+                                       "%lld", (long long)(slap_get_time() + pi->smb_must_change));
                        BER_BVZERO( &keys[1] );
 
                        ml->sml_desc = ad_sambaPwdMustChange;
@@ -558,7 +558,7 @@ static int smbk5pwd_exop_passwd(
                        keys[0].bv_val = ch_malloc( LDAP_PVT_INTTYPE_CHARS(long) );
                        keys[0].bv_len = snprintf(keys[0].bv_val,
                                        LDAP_PVT_INTTYPE_CHARS(long),
-                                       "%ld", slap_get_time() + pi->smb_can_change);
+                                       "%lld", (long long)(slap_get_time() + pi->smb_can_change));
                        BER_BVZERO( &keys[1] );
 
                        ml->sml_desc = ad_sambaPwdCanChange;
index ba0354bc8488f147ba57c0588fae8848de610236..aedeaa7d1344cd44aa766c59702defabf7cdd3d5 100644 (file)
@@ -287,8 +287,8 @@ ldap_int_poll(
        int             rc;
                
 
-       Debug2(LDAP_DEBUG_TRACE, "ldap_int_poll: fd: %d tm: %ld\n",
-               s, tvp ? tvp->tv_sec : -1L );
+       Debug2(LDAP_DEBUG_TRACE, "ldap_int_poll: fd: %d tm: %lld\n",
+               s, (long long)(tvp ? tvp->tv_sec : -1L) );
 
 #ifdef HAVE_POLL
        {
@@ -439,8 +439,8 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s,
        }
 
        Debug3(LDAP_DEBUG_TRACE,
-                       "ldap_pvt_connect: fd: %d tm: %ld async: %d\n",
-                       s, opt_tv ? tv.tv_sec : -1L, async);
+                       "ldap_pvt_connect: fd: %d tm: %lld async: %d\n",
+                       s, (long long)(opt_tv ? tv.tv_sec : -1L), async);
 
        if ( opt_tv && ldap_pvt_ndelay_on(ld, s) == -1 )
                return ( -1 );
index 8b310309573e36b726141c75bf420320094f5d60..da42a3f4e2a4469bd90784addd0b92fd0112e4be 100644 (file)
@@ -164,8 +164,8 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_un *sa, int async)
        }
 
        Debug3(LDAP_DEBUG_TRACE,
-               "ldap_connect_timeout: fd: %d tm: %ld async: %d\n",
-               s, opt_tv ? tv.tv_sec : -1L, async);
+               "ldap_connect_timeout: fd: %d tm: %lld async: %d\n",
+               s, (long long)(opt_tv ? tv.tv_sec : -1L), async);
 
        if ( ldap_pvt_ndelay_on(ld, s) == -1 ) return -1;
 
index 40ff1c1722d2a3934fb30c4b47179b032bcd3ce0..f5afab29e6b0f6864822f3a597072fde5f997b0c 100644 (file)
@@ -264,8 +264,8 @@ wait4msg(
                Debug2( LDAP_DEBUG_TRACE, "wait4msg ld %p msgid %d (infinite timeout)\n",
                        (void *)ld, msgid );
        } else {
-               Debug3( LDAP_DEBUG_TRACE, "wait4msg ld %p msgid %d (timeout %ld usec)\n",
-                       (void *)ld, msgid, (long)timeout->tv_sec * 1000000 + timeout->tv_usec );
+               Debug3( LDAP_DEBUG_TRACE, "wait4msg ld %p msgid %d (timeout %lld usec)\n",
+                       (void *)ld, msgid, (long long)((long long)timeout->tv_sec * 1000000 + timeout->tv_usec) );
        }
 #endif /* LDAP_DEBUG */
 
index 1f194ed58990629515895a3ad26199644b60aa58..14146a2e0f034f43124d78f4ac321de69e4c5b2d 100644 (file)
@@ -252,8 +252,8 @@ asyncmeta_back_add( Operation *op, SlapReply *rs )
              op->o_req_dn.bv_val );
 
        if (current_time > op->o_time) {
-               Debug(asyncmeta_debug, "==> asyncmeta_back_add[%s]: o_time:[%ld], current time: [%ld]\n",
-                     op->o_log_prefix, op->o_time, current_time );
+               Debug(asyncmeta_debug, "==> asyncmeta_back_add[%s]: o_time:[%lld], current time: [%lld]\n",
+                     op->o_log_prefix, (long long)op->o_time, (long long)current_time );
        }
 
        asyncmeta_new_bm_context(op, rs, &bc, mi->mi_ntargets, mi );
index 1349cac451ff1689b0a14c72860c6dc98fc2b192..76b89a7f2acf00f132bae4248150ba25428f1faf 100644 (file)
@@ -194,8 +194,8 @@ asyncmeta_back_compare( Operation *op, SlapReply *rs )
              op->o_req_dn.bv_val );
 
        if (current_time > op->o_time) {
-               Debug( asyncmeta_debug, "==> asyncmeta_back_compare[%s]: o_time:[%ld], current time: [%ld]\n",
-                      op->o_log_prefix, op->o_time, current_time );
+               Debug( asyncmeta_debug, "==> asyncmeta_back_compare[%s]: o_time:[%lld], current time: [%lld]\n",
+                      op->o_log_prefix, (long long)op->o_time, (long long)current_time );
        }
        asyncmeta_new_bm_context(op, rs, &bc, mi->mi_ntargets, mi );
        if (bc == NULL) {
index 849ac01616dba0b3f713e1d31904d6af61c12503..aa1e772a1a341ff144a845a38aa29269c4c9bcdf 100644 (file)
@@ -1133,8 +1133,8 @@ asyncmeta_back_cf_gen( ConfigArgs *c )
                        if ( mc->mc_network_timeout == 0 ) {
                                return 1;
                        }
-                       bv.bv_len = snprintf( c->cr_msg, sizeof(c->cr_msg), "%ld",
-                               mc->mc_network_timeout );
+                       bv.bv_len = snprintf( c->cr_msg, sizeof(c->cr_msg), "%lld",
+                               (long long)mc->mc_network_timeout );
                        bv.bv_val = c->cr_msg;
                        value_add_one( &c->rvalue_vals, &bv );
                        break;
index b91b1a53d72db231dc5ca45ff21ee09968c29de1..1c697fde568605091d9e7437a876390020a9face 100644 (file)
@@ -186,8 +186,8 @@ asyncmeta_back_delete( Operation *op, SlapReply *rs )
              op->o_req_dn.bv_val );
 
        if (current_time > op->o_time) {
-               Debug(asyncmeta_debug, "==> asyncmeta_back_delete[%s]: o_time:[%ld], current time: [%ld]\n",
-                     op->o_log_prefix, op->o_time, current_time );
+               Debug(asyncmeta_debug, "==> asyncmeta_back_delete[%s]: o_time:[%lld], current time: [%lld]\n",
+                     op->o_log_prefix, (long long)op->o_time, (long long)current_time );
        }
 
        asyncmeta_new_bm_context(op, rs, &bc, mi->mi_ntargets, mi );
index 0ce279a1dfde2e13994de72c05770023a5bb37ea..cb651264aaa12c734530584a250dd75e99c95057 100644 (file)
@@ -1660,7 +1660,7 @@ void* asyncmeta_timeout_loop(void *ctx, void *arg)
        LDAP_STAILQ_HEAD(BCList, bm_context_t) timeout_list;
        LDAP_STAILQ_INIT( &timeout_list );
 
-       Debug( asyncmeta_debug, "asyncmeta_timeout_loop[%p] start at [%ld] \n", rtask, current_time );
+       Debug( asyncmeta_debug, "asyncmeta_timeout_loop[%p] start at [%lld] \n", rtask, (long long)current_time );
        void *oldctx = slap_sl_mem_create(SLAP_SLAB_SIZE, SLAP_SLAB_STACK, ctx, 0);
        for (i=0; i<mi->mi_num_conns; i++) {
                a_metaconn_t * mc= &mi->mi_conns[i];
@@ -1751,9 +1751,9 @@ void* asyncmeta_timeout_loop(void *ctx, void *arg)
                                a_metasingleconn_t *log_msc =  &mc->mc_conns[0];
                                Debug( asyncmeta_debug,
                                       "asyncmeta_timeout_loop:Timeout op %s loop[%p], "
-                                      "current_time:%ld, op->o_time:%ld msc: %p, "
+                                      "current_time:%lld, op->o_time:%lld msc: %p, "
                                       "msc->msc_binding_time: %x, msc->msc_flags:%x \n",
-                                      bc->op->o_log_prefix, rtask, current_time, bc->op->o_time,
+                                      bc->op->o_log_prefix, rtask, (long long)current_time, (long long)bc->op->o_time,
                                       log_msc, (unsigned int)log_msc->msc_binding_time, log_msc->msc_mscflags );
 
                                if (bc->searchtime) {
@@ -1814,7 +1814,7 @@ void* asyncmeta_timeout_loop(void *ctx, void *arg)
 
        slap_sl_mem_setctx(ctx, oldctx);
        current_time = slap_get_time();
-       Debug( asyncmeta_debug, "asyncmeta_timeout_loop[%p] stop at [%ld] \n", rtask, current_time );
+       Debug( asyncmeta_debug, "asyncmeta_timeout_loop[%p] stop at [%lld] \n", rtask, (long long)current_time );
        ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
        if ( ldap_pvt_runqueue_isrunning( &slapd_rq, rtask )) {
                ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );
index c28bdc48e50f43b5de9227766ae78ed3bb92669f..a3dffd6c3f4cf491fab7d9c5c05ee6c83630111e 100644 (file)
@@ -242,8 +242,8 @@ asyncmeta_back_modify( Operation *op, SlapReply *rs )
              op->o_req_dn.bv_val );
 
        if (current_time > op->o_time) {
-               Debug(asyncmeta_debug, "==> asyncmeta_back_modify[%s]: o_time:[%ld], current time: [%ld]\n",
-                     op->o_log_prefix, op->o_time, current_time );
+               Debug(asyncmeta_debug, "==> asyncmeta_back_modify[%s]: o_time:[%lld], current time: [%lld]\n",
+                     op->o_log_prefix, (long long)op->o_time, (long long)current_time );
        }
 
        asyncmeta_new_bm_context(op, rs, &bc, mi->mi_ntargets, mi );
index 03dee113f8a4165017cb8883b6931c957433cbeb..48144e7d8e072b65711a154b8d0a319fe08dff22 100644 (file)
@@ -256,8 +256,8 @@ asyncmeta_back_modrdn( Operation *op, SlapReply *rs )
              op->o_req_dn.bv_val );
 
        if (current_time > op->o_time) {
-               Debug(asyncmeta_debug, "==> asyncmeta_back_modrdn[%s]: o_time:[%ld], current time: [%ld]\n",
-                     op->o_log_prefix, op->o_time, current_time );
+               Debug(asyncmeta_debug, "==> asyncmeta_back_modrdn[%s]: o_time:[%lld], current time: [%lld]\n",
+                     op->o_log_prefix, (long long)op->o_time, (long long)current_time );
        }
        asyncmeta_new_bm_context(op, rs, &bc, mi->mi_ntargets, mi );
        if (bc == NULL) {
index 2da66c4b95e75e2a4e8ca717488f34c5b2f4fd6f..ac7e70222f4c6cfd53477dc2787c0f8e239dd64c 100644 (file)
@@ -2991,14 +2991,14 @@ ldap_back_conn2str( const ldapconn_base_t *lc, char *buf, ber_len_t buflen )
        }
 
        if ( lc->lcb_create_time != 0 ) {
-               len = snprintf( tbuf, sizeof(tbuf), "%ld", lc->lcb_create_time );
+               len = snprintf( tbuf, sizeof(tbuf), "%lld", (long long)lc->lcb_create_time );
                if ( ptr + sizeof(" created=") + len >= end ) return -1;
                ptr = lutil_strcopy( ptr, " created=" );
                ptr = lutil_strcopy( ptr, tbuf );
        }
 
        if ( lc->lcb_time != 0 ) {
-               len = snprintf( tbuf, sizeof(tbuf), "%ld", lc->lcb_time );
+               len = snprintf( tbuf, sizeof(tbuf), "%lld", (long long)lc->lcb_time );
                if ( ptr + sizeof(" modified=") + len >= end ) return -1;
                ptr = lutil_strcopy( ptr, " modified=" );
                ptr = lutil_strcopy( ptr, tbuf );
@@ -3159,8 +3159,8 @@ ldap_back_conn_prune( ldapinfo_t *li )
                 */
                slap_wake_listener();
                Debug( LDAP_DEBUG_TRACE,
-                       "ldap_back_conn_prune: scheduled connection expiry timer to %ld sec\n",
-                       li->li_conn_expire_task->interval.tv_sec );
+                       "ldap_back_conn_prune: scheduled connection expiry timer to %lld sec\n",
+                       (long long)li->li_conn_expire_task->interval.tv_sec );
        } else if ( next_timeout == -1 && li->li_conn_expire_task != NULL ) {
                if ( ldap_pvt_runqueue_isrunning( &slapd_rq, li->li_conn_expire_task ) ) {
                        ldap_pvt_runqueue_stoptask( &slapd_rq, li->li_conn_expire_task );
@@ -3195,10 +3195,10 @@ ldap_back_schedule_conn_expiry( ldapinfo_t *li, ldapconn_t *lc ) {
                        "ldap_back_conn_expire_timer" );
                slap_wake_listener();
                Debug( LDAP_DEBUG_TRACE,
-                       "ldap_back_conn_prune: scheduled connection expiry timer to %ld sec\n",
-                       li->li_conn_expire_task->interval.tv_sec );
+                       "ldap_back_conn_prune: scheduled connection expiry timer to %lld sec\n",
+                       (long long)li->li_conn_expire_task->interval.tv_sec );
        }
        ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
 
        return;
-}
\ No newline at end of file
+}
index de602c92076c29c361f9bfe7b8180e670dfbc221..7359f9925cbc165058db3c0f06c26f7ce9733b96 100644 (file)
@@ -430,8 +430,8 @@ fe_op_lastbind( Operation *op )
                        bindtime = tt.tt_sec;
                }
                Debug( LDAP_DEBUG_TRACE, "fe_op_lastbind: "
-                               "old pwdLastSuccess value=%s %lds ago\n",
-                               a->a_nvals[0].bv_val, bindtime == (time_t)-1 ? -1 : op->o_time - bindtime );
+                               "old pwdLastSuccess value=%s %llds ago\n",
+                               a->a_nvals[0].bv_val, (long long)(bindtime == (time_t)-1 ? -1 : op->o_time - bindtime) );
 
                /*
                 * TODO: If the recorded bind time is within configurable precision,
index c19f0427b9f13ab8bcc40efff6255bed07a1742f..a58c935b31403bc998c8b74687898329300b2106 100644 (file)
@@ -418,7 +418,7 @@ dds_op_add( Operation *op, SlapReply *rs )
                assert( ttl <= DDS_RF2589_MAX_TTL );
 
                bv.bv_val = ttlbuf;
-               bv.bv_len = snprintf( ttlbuf, sizeof( ttlbuf ), "%ld", ttl );
+               bv.bv_len = snprintf( ttlbuf, sizeof( ttlbuf ), "%lld", (long long)ttl );
                assert( bv.bv_len < sizeof( ttlbuf ) );
 
                /* FIXME: apparently, values in op->ora_e are malloc'ed
@@ -696,7 +696,7 @@ dds_op_modify( Operation *op, SlapReply *rs )
                                        goto done;
                                }
 
-                               bv_entryTtl.bv_len = snprintf( textbuf, sizeof( textbuf ), "%ld", entryTtl );
+                               bv_entryTtl.bv_len = snprintf( textbuf, sizeof( textbuf ), "%lld", (long long)entryTtl );
                                break;
 
                        default:
@@ -918,7 +918,7 @@ dds_response( Operation *op, SlapReply *rs )
                ttl = (ttl < 0) ? 0 : ttl;
                assert( ttl <= DDS_RF2589_MAX_TTL );
 
-               len = snprintf( ttlbuf, sizeof(ttlbuf), "%ld", ttl );
+               len = snprintf( ttlbuf, sizeof(ttlbuf), "%lld", (long long)ttl );
                if ( len < 0 )
                {
                        goto done;
@@ -1178,7 +1178,7 @@ dds_op_extended( Operation *op, SlapReply *rs )
                ttlmod.sml_values = ttlvalues;
                ttlmod.sml_numvals = 1;
                ttlvalues[ 0 ].bv_val = ttlbuf;
-               ttlvalues[ 0 ].bv_len = snprintf( ttlbuf, sizeof( ttlbuf ), "%ld", ttl );
+               ttlvalues[ 0 ].bv_len = snprintf( ttlbuf, sizeof( ttlbuf ), "%lld", (long long)ttl );
                BER_BVZERO( &ttlvalues[ 1 ] );
 
                /* the entryExpireTimestamp is added by modify */
@@ -1206,8 +1206,8 @@ dds_op_extended( Operation *op, SlapReply *rs )
                                rs->sr_rspoid = ch_strdup( slap_EXOP_REFRESH.bv_val );
 
                                Log( LDAP_DEBUG_TRACE, LDAP_LEVEL_INFO,
-                                       "%s REFRESH dn=\"%s\" TTL=%ld\n",
-                                       op->o_log_prefix, op->o_req_ndn.bv_val, ttl );
+                                       "%s REFRESH dn=\"%s\" TTL=%lld\n",
+                                       op->o_log_prefix, op->o_req_ndn.bv_val, (long long)ttl );
                        }
 
                        ber_free_buf( ber );
index 2b947e433cffd4291179f095ee2fc5f1d55aaaa2..01394438afe9d3eec6b31f0bbebd8c50f743ae74 100644 (file)
@@ -2729,8 +2729,8 @@ pc_bind_search( Operation *op, SlapReply *rs )
                                        pbi->bi_flags |= BI_HASHED;
                        } else {
                                Debug( pcache_debug, "pc_bind_search: cache is stale, "
-                                       "reftime: %ld, current time: %ld\n",
-                                       pbi->bi_cq->bindref_time, op->o_time );
+                                       "reftime: %lld, current time: %lld\n",
+                                       (long long)pbi->bi_cq->bindref_time, (long long)op->o_time );
                        }
                } else if ( pbi->bi_si ) {
                        /* This search result is going into the cache */
@@ -3866,9 +3866,9 @@ pc_cf_gen( ConfigArgs *c )
                struct berval bv;
                switch( c->type ) {
                case PC_MAIN:
-                       bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s %d %d %d %ld",
+                       bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s %d %d %d %lld",
                                cm->db.bd_info->bi_type, cm->max_entries, cm->numattrsets,
-                               cm->num_entries_limit, cm->cc_period );
+                               cm->num_entries_limit, (long long)cm->cc_period );
                        bv.bv_val = c->cr_msg;
                        value_add_one( &c->rvalue_vals, &bv );
                        break;
@@ -3910,12 +3910,12 @@ pc_cf_gen( ConfigArgs *c )
                                /* HEADS-UP: always print all;
                                 * if optional == 0, ignore */
                                bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                                       " %d %ld %ld %ld %ld",
+                                       " %d %lld %lld %lld %lld",
                                        temp->attr_set_index,
-                                       temp->ttl,
-                                       temp->negttl,
-                                       temp->limitttl,
-                                       temp->ttr );
+                                       (long long)temp->ttl,
+                                       (long long)temp->negttl,
+                                       (long long)temp->limitttl,
+                                       (long long)temp->ttr );
                                bv.bv_len += temp->querystr.bv_len + 2;
                                bv.bv_val = ch_malloc( bv.bv_len+1 );
                                ptr = bv.bv_val;
@@ -3932,9 +3932,9 @@ pc_cf_gen( ConfigArgs *c )
                        for (temp=qm->templates; temp; temp=temp->qmnext) {
                                if ( !temp->bindttr ) continue;
                                bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ),
-                                       " %d %ld %s ",
+                                       " %d %lld %s ",
                                        temp->attr_set_index,
-                                       temp->bindttr,
+                                       (long long)temp->bindttr,
                                        ldap_pvt_scope2str( temp->bindscope ));
                                bv.bv_len += temp->bindbase.bv_len + temp->bindftemp.bv_len + 4;
                                bv.bv_val = ch_malloc( bv.bv_len + 1 );