Problems with 1.0.6-2.0.1 connecting to OpenLDAP 2.3.33

Zach Lowry zach at zachlowry.net
Mon Mar 10 03:14:06 CET 2008


On Mar 6, 2008, at 12:16 AM, Alan DeKok wrote:

>> Could this be a 64-bit portability issue in rlm_ldap?
>
>   Likely.  See "net_timeout" in the CONF_PARSER module_config  
> structure.
>  It's parsing integers into a "tv_sec", which is type time_t.  The  
> data
> should really be parsed into an "int" type, and that later assigned  
> to a
> tv_sec.

Problems. On OpenBSD, a timeval is like this:

struct timeval {
         long    tv_sec;         /* seconds */
         long    tv_usec;        /* and microseconds */
};

Longs are 8 bytes, so it's writing the value of the configuration  
parameter into the first 4 bytes of the value. I modified CONF_PARSER  
like this:

         {"net_timeout", PW_TYPE_INTEGER, offsetof 
(ldap_instance,net_timeout.tv_sec)+4, NULL, "10"},
         /* wait forever for search results */
         {"timeout", PW_TYPE_INTEGER, offsetof 
(ldap_instance,timeout.tv_sec)+4, NULL, "20"},
         /* allow server unlimited time for search (server-side  
limit) */

An ugly hack, for sure. But it gets the correct values into the  
struct. Then we have the next problem:

         if (ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, (void *) & 
(inst->net_timeout)) != LDAP_OPT_SUCCESS) {
                 radlog(L_ERR, "rlm_ldap: Could not set  
LDAP_OPT_NETWORK_TIMEOUT %d.%ld", inst->net_timeout.tv_sec, inst- 
 >net_timeout
.tv_usec);
         }

I added this right below the above lines:

         struct timeval net_timeout_value = {0, 0};
         ldap_get_option(ld, LDAP_OPT_NETWORK_TIMEOUT,  
&net_timeout_value);
         radlog(L_ERR, "ZBL: LDAP_OPT_NETWORK_TIMEOUT %ld.%ld",  
net_timeout_value.tv_sec, net_timeout_value.tv_usec);

and got this output:

	ZBL: LDAP_OPT_NETWORK_TIMEOUT 1077901232.0

It certainly seems like something fishy is going on here, any more  
ideas?

Thanks,

--Zach




More information about the Freeradius-Users mailing list