handle sizeof(time_t) > sizeof(long) in format strings
authorSteve Langasek <steve.langasek@canonical.com>
Sun, 14 Jul 2024 21:37:43 +0000 (14:37 -0700)
committerRyan Tandy <ryan@nardis.ca>
Sun, 14 Jul 2024 21:37:43 +0000 (14:37 -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 a6dc933c5bd8c4893904040209c8036ec18b12a9..ca3098dbe4a68e26e5d260a15bfeafd63954b8d9 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 ab6ef49edfacfe83ab895a882c14fddc8185a990..0cf57673b592b2d5dc9c86ce1a2b1388aeeff1b7 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 980326e8884a27f3d7bd48dd20c0ba78f4a0dcb5..ca18aa4955f3dd515e371160691061a42e30c45b 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 95dba939026ee6f51ee606328001902c88bb0724..30cf4270887a9caa8e1c2c4ef1cf4143e2ca0599 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 04c6db8b3e659fafc4a70791a8775e566412cc46..02a5b3f311fd1affe645fc965ef707b4de49829f 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 a701f41ff5ffc7d5bc9e7c3a176c5a52c9782aa3..c4121cd8d830859a801bd8a8122acf42d7b92a5d 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 2f9a7c2ce96b65e7a5d97abdb7a3719a2d25be24..15cdba91039561f982eb2ce87c0729cd8ae0e1c8 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 bb8eb9364cf8aefb83353ff6df49639da529ec14..c0d7c8b525d809e0ad62f4b27d64bda6147b163a 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 80a02c8c2d43ed6b4678481e4116e58f63d74e32..ab26bab36a62f30605357a3e6e931011d2dabd4f 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 13f1eb3859df1879225e02e91bfa874634b6eadb..f3932e8b644e9584accd343a6e495e5d519cb1f2 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 6dfc31fc5a387d2a62997ff5f7ed28dc3826aa46..f6c98c9ac0e271010bd0a1b900ce44cce8a72d94 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 361782781f6b920fd8ac8a066390c6e5c987f649..6d94d4a11027ba2a01a616dd6517134c0d87428e 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 f7cd7eca2654621fb41406fa4709f52a8bdab08a..77e8705abdc9690ec5eb575bcea392536a7e1ca5 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 422183a93d331d698cc235bd8d5cd0456ba1c759..64def6480ccee45d8b4691949c14ab529c2b45af 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 3a1e18acdb212aecef2892230e05c35250236028..be2baf6cc291a8af07ea32f28c28b4228cae5f9e 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 );