diff options
| -rw-r--r-- | lib/openldap.c | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/openldap.c b/lib/openldap.c index 05628ab8e..445d30167 100644 --- a/lib/openldap.c +++ b/lib/openldap.c @@ -165,6 +165,7 @@ static CURLcode ldap_setup(struct connectdata *conn)    li = calloc(1, sizeof(ldapconninfo));    li->proto = proto;    conn->proto.generic = li; +  conn->bits.close = bool_false;    /* TODO:     * - provide option to choose SASL Binds instead of Simple     */ @@ -198,6 +199,34 @@ static CURLcode ldap_connect(struct connectdata *conn, bool *done)    ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto); +#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_PROXY) +  if(conn->bits.tunnel_proxy && conn->bits.httpproxy) { +    /* for LDAP over HTTP proxy */ +    struct HTTP http_proxy; +    ldapconninfo *li_save; + +    /* BLOCKING */ +    /* We want "seamless" LDAP operations through HTTP proxy tunnel */ + +    /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the member +     * conn->proto.http; we want LDAP through HTTP and we have to change the +     * member temporarily for connecting to the HTTP proxy. After +     * Curl_proxyCONNECT we have to set back the member to the original struct +     * LDAP pointer +     */ +    li_save = data->state.proto.generic; +    memset(&http_proxy, 0, sizeof(http_proxy)); +    data->state.proto.http = &http_proxy; +    result = Curl_proxyCONNECT(conn, FIRSTSOCKET, +                               conn->host.name, conn->remote_port); + +    data->state.proto.generic = li_save; + +    if(CURLE_OK != result) +      return result; +  } +#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */ +  #ifdef USE_SSL    if (conn->protocol & PROT_SSL) {      CURLcode res;  | 
