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

Reply via email to