s4:ldap_server: rewrite to socket layer to use tstream
[mat/samba.git] / source4 / ldap_server / ldap_server.h
index 6ae9cb42d3624b31a42e5f6bb96bf2288f2a4254..4d5cae49fc74fc36c996a959fbe089e2dff722fd 100644 (file)
@@ -6,7 +6,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-struct rw_buffer {
-       uint8_t *data;
-       size_t ofs, length;
-};
-
-enum ldapsrv_call_state {
-       LDAPSRV_CALL_STATE_NEW = 0,
-       LDAPSRV_CALL_STATE_BUSY,
-       LDAPSRV_CALL_STATE_ASYNC,
-       LDAPSRV_CALL_STATE_ABORT,
-       LDAPSRV_CALL_STATE_COMPLETE
-};
+#include "libcli/ldap/libcli_ldap.h"
+#include "lib/socket/socket.h"
+#include "lib/stream/packet.h"
+#include "system/network.h"
 
-enum ldapsrv_reply_state {
-       LDAPSRV_REPLY_STATE_NEW = 0,
-       LDAPSRV_REPLY_STATE_SEND
+struct ldapsrv_connection {
+       struct loadparm_context *lp_ctx;
+       struct stream_connection *connection;
+       struct gensec_security *gensec;
+       struct auth_session_info *session_info;
+       struct ldapsrv_service *service;
+       struct cli_credentials *server_credentials;
+       struct ldb_context *ldb;
+
+       struct {
+               struct tevent_queue *send_queue;
+               struct tstream_context *raw;
+               struct tstream_context *tls;
+               struct tstream_context *sasl;
+               struct tstream_context *active;
+       } sockets;
+
+       bool global_catalog;
+
+       struct {
+               int initial_timeout;
+               int conn_idle_time;
+               int max_page_size;
+               int search_timeout;
+               struct timeval endtime;
+               const char *reason;
+       } limits;
+
+       struct tevent_req *active_call;
 };
 
-struct ldapsrv_connection;
-
 struct ldapsrv_call {
-       struct ldapsrv_call *prev,*next;
-       enum ldapsrv_call_state state;
-
        struct ldapsrv_connection *conn;
-
-       const struct auth_session_info *session_info;
-
-       struct ldap_message request;
-
+       struct ldap_message *request;
        struct ldapsrv_reply {
-               struct ldapsrv_reply *prev,*next;
-               enum ldapsrv_reply_state state;
-               struct ldap_message msg;
+               struct ldapsrv_reply *prev, *next;
+               struct ldap_message *msg;
        } *replies;
-};
-
-struct ldapsrv_service;
-
-struct ldapsrv_connection {
-       struct server_connection *connection;
-
-       struct gensec_security *gensec_ctx;
-       const struct auth_session_info *session_info;
-
-       struct rw_buffer in_buffer;
-       struct rw_buffer out_buffer;
-
-       struct ldapsrv_call *calls;
+       struct iovec out_iov;
 
-       struct ldapsrv_service *service;
-};
-
-struct ldapsrv_partition;
-
-struct ldapsrv_partition_ops {
-       const char *name;
-       NTSTATUS (*Init)(struct ldapsrv_partition *partition, struct ldapsrv_connection *conn);
-       NTSTATUS (*Bind)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_BindRequest *r);
-       NTSTATUS (*Unbind)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_UnbindRequest *r);
-       NTSTATUS (*Search)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_SearchRequest *r);
-       NTSTATUS (*Modify)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyRequest *r);
-       NTSTATUS (*Add)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AddRequest *r);
-       NTSTATUS (*Del)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_DelRequest *r);
-       NTSTATUS (*ModifyDN)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyDNRequest *r);
-       NTSTATUS (*Compare)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_CompareRequest *r);
-       NTSTATUS (*Abandon)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AbandonRequest *r);
-       NTSTATUS (*Extended)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ExtendedRequest *r);
-};
-
-struct ldapsrv_partition {
-       struct ldapsrv_partition *prev,*next;
-
-       void *private_data;
-       const struct ldapsrv_partition_ops *ops;
-
-       const char *base_dn;
+       struct tevent_req *(*postprocess_send)(TALLOC_CTX *mem_ctx,
+                                              struct tevent_context *ev,
+                                              void *private_data);
+       NTSTATUS (*postprocess_recv)(struct tevent_req *req);
+       void *postprocess_private;
 };
 
 struct ldapsrv_service {
-       struct ldapsrv_partition *rootDSE;
-       struct ldapsrv_partition *default_partition;
-       struct ldapsrv_partition *partitions;
+       struct tstream_tls_params *tls_params;
+       struct task_server *task;
+       struct tevent_queue *call_queue;
 };
+
+#include "ldap_server/proto.h"