2004-09-13 14:36:59 +04:00
/*
Unix SMB / CIFS implementation .
LDAP server
Copyright ( C ) Volker Lendecke 2004
Copyright ( C ) Stefan Metzmacher 2004
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
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
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 0213 9 , USA .
*/
struct rw_buffer {
uint8_t * data ;
size_t ofs , length ;
} ;
2004-09-22 14:48:32 +04:00
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
} ;
enum ldapsrv_reply_state {
LDAPSRV_REPLY_STATE_NEW = 0 ,
LDAPSRV_REPLY_STATE_SEND
} ;
struct ldapsrv_connection ;
struct ldapsrv_call {
struct ldapsrv_call * prev , * next ;
enum ldapsrv_call_state state ;
struct ldapsrv_connection * conn ;
struct ldap_message request ;
struct ldapsrv_reply {
struct ldapsrv_reply * prev , * next ;
enum ldapsrv_reply_state state ;
struct ldap_message msg ;
} * replies ;
} ;
2004-09-22 17:01:00 +04:00
struct ldapsrv_service ;
2004-09-13 14:36:59 +04:00
struct ldapsrv_connection {
struct server_connection * connection ;
2004-10-08 16:19:08 +04:00
struct gensec_security * gensec ;
2004-10-10 02:00:00 +04:00
struct auth_session_info * session_info ;
2004-09-13 14:36:59 +04:00
2004-10-08 16:19:08 +04:00
struct rw_buffer sasl_in_buffer ;
struct rw_buffer sasl_out_buffer ;
2004-09-13 14:36:59 +04:00
struct rw_buffer in_buffer ;
struct rw_buffer out_buffer ;
2004-09-22 14:48:32 +04:00
struct ldapsrv_call * calls ;
2004-09-22 17:01:00 +04:00
struct ldapsrv_service * service ;
} ;
struct ldapsrv_partition ;
struct ldapsrv_partition_ops {
2004-09-27 17:20:59 +04:00
const char * name ;
NTSTATUS ( * Init ) ( struct ldapsrv_partition * partition , struct ldapsrv_connection * conn ) ;
2004-09-22 17:01:00 +04:00
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 ) ;
2004-09-27 19:40:12 +04:00
NTSTATUS ( * Del ) ( struct ldapsrv_partition * partition , struct ldapsrv_call * call , struct ldap_DelRequest * r ) ;
2004-09-22 17:01:00 +04:00
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 ldapsrv_service {
struct ldapsrv_partition * rootDSE ;
struct ldapsrv_partition * default_partition ;
struct ldapsrv_partition * partitions ;
2004-09-13 14:36:59 +04:00
} ;