jwm@horde.net wrote:
On Tue, Oct 06, 2009 at 10:04:45PM +0200, masarati@aero.polimi.it wrote:
The 32-bit value 4294967295 for LDAP_DEBUG_ANY is also rejected. lutil_atoix() declares i as type long and tries to check for overflow(?) with this cast:
if ( (long)(int)i != i ) {
which always fails in this case on x86_64. lutil_atoux() might be the more appropriate choice here.
str2loglevel() seems to behave correctly by virtue of verb_to_mask() returning an index into loglevel_ops, but I haven't checked extensively. loglevel_init(), however, does specify a hardcoded -1 for the Any level instead of LDAP_DEBUG_ANY.
Please check the fix in HEAD. I can't check right now on x86_64, but I'll probably do it tomorrow. Apparently, I didn't break anything on 32 bit.
'slapd -d ?' still lists the 64-bit value for LDAP_DEBUG_ANY on x86_64:
-- Installed log subsystems:
Any (18446744073709551615)
[...]
As I mentioned, this is due to the unsigned long format specifier (%lu) in loglevel_print(). Changing the format specifier to %u emits the correct value (4294967295) on this architecture.
With your fix, slapd accepts the numeric value 4294967295 for LDAP_DEBUG_ANY on x86_64.
OK, I overlooked that. My point was to make sure unsigned values are correctly cast into (unsigned)-1 by routines intended to deal with integers. I'll fix that again.
Thanks, p.