2 Unix SMB/CIFS Implementation.
4 ldap client side header
6 Copyright (C) Andrew Tridgell 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "libcli/ldap/libcli_ldap.h"
25 enum ldap_request_state
{ LDAP_REQUEST_SEND
=1, LDAP_REQUEST_PENDING
=2, LDAP_REQUEST_DONE
=3, LDAP_REQUEST_ERROR
=4 };
27 /* this is the handle that the caller gets when an async ldap message
30 struct ldap_request
*next
, *prev
;
31 struct ldap_connection
*conn
;
33 enum ldap_request_tag type
;
35 enum ldap_request_state state
;
38 struct ldap_message
**replies
;
43 void (*fn
)(struct ldap_request
*);
47 struct tevent_timer
*time_event
;
51 /* main context for a ldap client connection */
52 struct ldap_connection
{
53 struct socket_context
*sock
;
54 struct loadparm_context
*lp_ctx
;
61 const char *simple_pw
;
71 enum { LDAP_BIND_SIMPLE
, LDAP_BIND_SASL
} type
;
75 /* next message id to assign */
76 unsigned next_messageid
;
78 /* Outstanding LDAP requests that have not yet been replied to */
79 struct ldap_request
*pending
;
81 /* Let's support SASL */
82 struct gensec_security
*gensec
;
84 /* the default timeout for messages */
87 /* last error message */
91 struct tevent_context
*event_ctx
;
92 struct tevent_fd
*fde
;
95 struct packet_context
*packet
;
98 struct ldap_connection
*ldap4_new_connection(TALLOC_CTX
*mem_ctx
,
99 struct loadparm_context
*lp_ctx
,
100 struct tevent_context
*ev
);
102 NTSTATUS
ldap_connect(struct ldap_connection
*conn
, const char *url
);
103 struct composite_context
*ldap_connect_send(struct ldap_connection
*conn
,
106 NTSTATUS
ldap_rebind(struct ldap_connection
*conn
);
107 NTSTATUS
ldap_bind_simple(struct ldap_connection
*conn
,
108 const char *userdn
, const char *password
);
109 NTSTATUS
ldap_bind_sasl(struct ldap_connection
*conn
,
110 struct cli_credentials
*creds
,
111 struct loadparm_context
*lp_ctx
);
112 struct ldap_request
*ldap_request_send(struct ldap_connection
*conn
,
113 struct ldap_message
*msg
);
114 NTSTATUS
ldap_request_wait(struct ldap_request
*req
);
115 struct composite_context
;
116 NTSTATUS
ldap_connect_recv(struct composite_context
*ctx
);
117 NTSTATUS
ldap_result_n(struct ldap_request
*req
, int n
, struct ldap_message
**msg
);
118 NTSTATUS
ldap_result_one(struct ldap_request
*req
, struct ldap_message
**msg
, int type
);
119 NTSTATUS
ldap_transaction(struct ldap_connection
*conn
, struct ldap_message
*msg
);
120 const char *ldap_errstr(struct ldap_connection
*conn
,
123 NTSTATUS
ldap_check_response(struct ldap_connection
*conn
, struct ldap_Result
*r
);
124 void ldap_set_reconn_params(struct ldap_connection
*conn
, int max_retries
);
125 int ildap_count_entries(struct ldap_connection
*conn
, struct ldap_message
**res
);
126 NTSTATUS
ildap_search_bytree(struct ldap_connection
*conn
, const char *basedn
,
127 int scope
, struct ldb_parse_tree
*tree
,
128 const char * const *attrs
, bool attributesonly
,
129 struct ldb_control
**control_req
,
130 struct ldb_control
***control_res
,
131 struct ldap_message
***results
);
132 NTSTATUS
ildap_search(struct ldap_connection
*conn
, const char *basedn
,
133 int scope
, const char *expression
,
134 const char * const *attrs
, bool attributesonly
,
135 struct ldb_control
**control_req
,
136 struct ldb_control
***control_res
,
137 struct ldap_message
***results
);