> -----Original Message-----
> From: 
> [email protected]
>  
> [mailto:[email protected]
> illa.org] On Behalf Of Xu, Qiang (FXSGSC)
> Sent: Wednesday, April 15, 2009 12:19 PM
> To: Markus Moeller; [email protected]
> Subject: RE: SASL authentication
> 
> Since SASL binding over SSL encryption shows a pingpong 
> style, the strategy here is to make another binding try if it 
> has failed once. The log shows it works. But the application crashes. 

It was found that the crash is due to the immediate re-binding after the first 
failure. 

Originally, my walk-around is: 
===============================================
static char *sasl_secprops = "maxssf=0"; 
......
  if(sslEnabled)
  {
    ......
    ldapHandle = ldapssl_init(serverHost, serverPort, 1);
    ldap_set_option(ldapHandle, LDAP_OPT_X_SASL_SECPROPS, (void 
*)sasl_secprops); 
  }
......
  ldapStatus = ldap_sasl_interactive_bind_ext_s(ldapHandle, "", sasl_mech,
                                                                      NULL, 
NULL, sasl_flags,
                                                                      
example_sasl_interact, NULL, &responseControls); 

  if (TRUE == sslEnabled && LDAP_SUCCESS != ldapStatus)
  {
    LOGINFO("SASL binding over SSL failed, try again");
    ldapStatus = ldap_sasl_interactive_bind_ext_s(ldapHandle, "", sasl_mech,
                                                  NULL, NULL, sasl_flags,
                                                  example_sasl_interact, NULL, 
&responseControls);
  }
===============================================
Compared with the behavior and log before this walk-around was added (i.e. 
there is no crash when there is no this re-binding immediately after the 
failure), it seems after the binding failure, the init operation ldapssl_init() 
should be called again before the next binding. 

The is the revised version: 
===============================================
static char *sasl_secprops = "maxssf=0"; 
......
  if(sslEnabled)
  {
    ......
    ldapHandle = ldapssl_init(serverHost, serverPort, 1);
    ldap_set_option(ldapHandle, LDAP_OPT_X_SASL_SECPROPS, (void 
*)sasl_secprops); 
  }
......
  ldapStatus = ldap_sasl_interactive_bind_ext_s(ldapHandle, "", sasl_mech,
                                                                      NULL, 
NULL, sasl_flags,
                                                                      
example_sasl_interact, NULL, &responseControls); 

  if (TRUE == sslEnabled && LDAP_SUCCESS != ldapStatus)
  {
    LOGINFO("SASL binding over SSL failed, try again");

    ldapHandle = ldapssl_init(serverHost, serverPort, 1);
    ldap_set_option(ldapHandle, LDAP_OPT_X_SASL_SECPROPS, (void 
*)sasl_secprops); 
    ......

    ldapStatus = ldap_sasl_interactive_bind_ext_s(ldapHandle, "", sasl_mech,
                                                  NULL, NULL, sasl_flags,
                                                  example_sasl_interact, NULL, 
&responseControls);
  }
===============================================
Now it works. There is no crash anymore. 

Based on these findings, I am almost sure the pingpong style of sasl binding 
over ssl encryption is a bug in MozLDAP library. Any developer wants to have a 
look into this problem?

Thanks,
Xu Qiang
_______________________________________________
dev-tech-ldap mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-ldap

Reply via email to