1916410 LDAP: Fix leak of file descriptors

Authored and Committed by lslebodn 8 years ago
    LDAP: Fix leak of file descriptors
    
    The state "struct sss_ldap_init_state" contains socket
    created in function sss_ldap_init_send. We register callback
    sdap_async_sys_connect_timeout for handling issue with connection
    
    The tevent request "sss_ldap_init_send" is usually (nested) subrequest
    of "struct resolve_service_state" related request created in fucntion
    fo_resolve_service_send. Function fo_resolve_service_send also register
    timeout callback fo_resolve_service_timeout to state "struct
    resolve_service_state".
    
    It might happen that fo_resolve_service_timeout will be called before
    sss_ldap_init_send timeout and we could not handle tiemout error
    for state "struct sss_ldap_init_state" and therefore created socket
    was not closed.
    
    We tried to release resources in function sdap_handle_release.
    But the structure "struct sdap_handle" had not been initialized yet
    with LDAP handle and therefore associated file descriptor could not be closed.
    
    [fo_resolve_service_timeout] (0x0080): Service resolving timeout reached
    [fo_resolve_service_recv] (0x0020): TEVENT_REQ_RETURN_ON_ERROR ret[110]
    [sdap_handle_release] (0x2000): Trace: sh[0x7f6713410270], connected[0], ops[(nil)], ldap[(nil)], destructor_lock[0], release_memory
    [be_resolve_server_done] (0x1000): Server resolution failed: 14
    [be_resolve_server_recv] (0x0020): TEVENT_REQ_RETURN_ON_ERROR ret[14]
    [check_online_callback] (0x0100): Backend returned: (1, 0, <NULL>) [Provider is Offline (Success)]
    
    Resolves:
    https://fedorahosted.org/sssd/ticket/2792
    
    Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
    (cherry picked from commit a10f67d4c64f3b1243de5d86a996475361adf0ac)
    (cherry picked from commit db2fdba6f3cecd0612439988e61be60d5d8576bf)
    (cherry picked from commit 2136f71c94660bcdde83f80feb83734389d57674)
    
        
file modified
+21 -8