From 23bdae11bef855341c747f1b1816eae6315f56e5 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Mon, 27 Jun 2011 15:15:34 +0200 Subject: [PATCH 2/4] Add sdap_call_conn_cb() to call add connection callback directly --- src/providers/ldap/sdap_async_private.h | 2 + src/providers/ldap/sdap_fd_events.c | 38 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 0 deletions(-) diff --git a/src/providers/ldap/sdap_async_private.h b/src/providers/ldap/sdap_async_private.h index f049fa6..b29b18d 100644 --- a/src/providers/ldap/sdap_async_private.h +++ b/src/providers/ldap/sdap_async_private.h @@ -40,6 +40,8 @@ int get_fd_from_ldap(LDAP *ldap, int *fd); errno_t sdap_set_connected(struct sdap_handle *sh, struct tevent_context *ev); +errno_t sdap_call_conn_cb(const char *uri,int fd, struct sdap_handle *sh); + int sdap_op_add(TALLOC_CTX *memctx, struct tevent_context *ev, struct sdap_handle *sh, int msgid, sdap_op_callback_t *callback, void *data, diff --git a/src/providers/ldap/sdap_fd_events.c b/src/providers/ldap/sdap_fd_events.c index 05ea0b5..4fb67b8 100644 --- a/src/providers/ldap/sdap_fd_events.c +++ b/src/providers/ldap/sdap_fd_events.c @@ -278,3 +278,41 @@ errno_t sdap_set_connected(struct sdap_handle *sh, struct tevent_context *ev) return ret; } + +errno_t sdap_call_conn_cb(const char *uri,int fd, struct sdap_handle *sh) +{ +#ifdef HAVE_LDAP_CONNCB + int ret; + Sockbuf *sb; + LDAPURLDesc *lud; + + sb = ber_sockbuf_alloc(); + if (sb == NULL) { + DEBUG(1, ("ber_sockbuf_alloc failed.\n")); + return ENOMEM; + } + + ret = ber_sockbuf_ctrl(sb, LBER_SB_OPT_SET_FD, &fd); + if (ret != 1) { + DEBUG(1, ("ber_sockbuf_ctrl failed.\n")); + return EFAULT; + } + + ret = ldap_url_parse(uri, &lud); + if (ret != 0) { + ber_sockbuf_free(sb); + DEBUG(1, ("ber_sockbuf_ctrl failed.\n")); + return EFAULT; + } + + ret = sdap_ldap_connect_callback_add(NULL, sb, lud, NULL, + sh->sdap_fd_events->conncb); + + ldap_free_urldesc(lud); + ber_sockbuf_free(sb); + return ret; +#else + DEBUG(9, ("LDAP connection callbacks are not supported.\n")); + return EOK; +#endif +} -- 1.7.5.4