Hello.
slap_op_time(time_t *t, int *nop) could previously be called with any
2 arg of those types. But now it modifies nop[1], so old code other
than slap_op_time(&op->o_time, &op->o_tincr) gets a bad memory write.
Source-code compat looks like a misfeature now. I'd rather rename and
re-prototype: slap_op_gettime(Operation* or some new time-struct*).
==
Another fake array: Let's replace bi_op_bind..bi_chk_controls in
BackendInfo with macros referring into a new bi_op_func[14]. Today
(&bi->bi_op_bind) is used as an array here: grep -r '(&.*_bind)'
And apply 'contrib/slapd-tools/wrap_slap_ops -u * | patch -p0',
though that can wait a bit more - until RE24 is really surely not
going to get new releases and merge conflicts with the patch.
(Hm. The "delete newlines at EOF" cleanup doesn't belong there.)
Related issue: slap_operation_e was the indexes to (&bi->bi_op_bind),
but now it has op_txn too corresponding to bi_op_txn with a different
prototype. 'grep -r op_last' shows code mentioning op_last which has
not been updated to match this. Unsure what to do about this. Other
than commenting the enum afterwards, anyway:-)
==
Any chance of wrapping struct ldapoptions' contents in some structs?
Today, if a new field is added but the corresponding NULLARG is not
updated to match, the later NULLARGs initialize the wrong fields and
can fail. As in ITS#9332 (init ldo_tls_require_san).
So anyway, one struct per LDAP_blah_NULLARG. Then replace most
NULLARGs with {0}. But must add lots of macros, for the old fields.
==
Hallvard