sig
  type conn
  and auth_method = [ `SIMPLE ]
  and error_code =
    [ `ADMINLIMIT_EXCEEDED
    | `AFFECTS_MULTIPLE_DSAS
    | `ALIAS_DEREF_PROBLEM
    | `ALIAS_PROBLEM
    | `ALREADY_EXISTS
    | `AUTH_METHOD_NOT_SUPPORTED
    | `AUTH_UNKNOWN
    | `BUSY
    | `CLIENT_LOOP
    | `COMPARE_FALSE
    | `COMPARE_TRUE
    | `CONFIDENTIALITY_REQUIRED
    | `CONNECT_ERROR
    | `CONSTRAINT_VIOLATION
    | `CONTROL_NOT_FOUND
    | `DECODING_ERROR
    | `ENCODING_ERROR
    | `FILTER_ERROR
    | `INAPPROPRIATE_AUTH
    | `INAPPROPRIATE_MATCHING
    | `INSUFFICIENT_ACCESS
    | `INVALID_CREDENTIALS
    | `INVALID_DN_SYNTAX
    | `INVALID_SYNTAX
    | `IS_LEAF
    | `LOCAL_ERROR
    | `LOOP_DETECT
    | `MORE_RESULTS_TO_RETURN
    | `NAMING_VIOLATION
    | `NOT_ALLOWED_ON_NONLEAF
    | `NOT_ALLOWED_ON_RDN
    | `NOT_SUPPORTED
    | `NO_MEMORY
    | `NO_OBJECT_CLASS_MODS
    | `NO_RESULTS_RETURNED
    | `NO_SUCH_ATTRIBUTE
    | `NO_SUCH_OBJECT
    | `OBJECT_CLASS_VIOLATION
    | `OPERATIONS_ERROR
    | `OTHER
    | `PARAM_ERROR
    | `PARTIAL_RESULTS
    | `PROTOCOL_ERROR
    | `REFERRAL
    | `REFERRAL_LIMIT_EXCEEDED
    | `RESULTS_TOO_LARGE
    | `SASL_BIND_IN_PROGRESS
    | `SERVER_DOWN
    | `SIZELIMIT_EXCEEDED
    | `STRONG_AUTH_NOT_SUPPORTED
    | `STRONG_AUTH_REQUIRED
    | `SUCCESS
    | `TIMELIMIT_EXCEEDED
    | `TIMEOUT
    | `TYPE_OR_VALUE_EXISTS
    | `UNAVAILABLE
    | `UNAVAILABLE_CRITICAL_EXTENSION
    | `UNDEFINED_TYPE
    | `UNWILLING_TO_PERFORM
    | `USER_CANCELLED ]
  and mod_op = [ `ADD | `DELETE | `REPLACE ]
  and search_scope = [ `BASE | `ONELEVEL | `SUBTREE ]
  and attr = { attr_name : string; attr_values : string array; }
  and entry = { entry_dn : string; entry_attrs : Ocamldap.attr array; }
  and modattr = Ocamldap.mod_op * string * string list
  and result = Ocamldap.entry list
  exception LDAP_Failure of Ocamldap.error_code
  val add_s :
    Ocamldap.conn -> dn:string -> attr:Ocamldap.modattr list -> unit
  val bind_s :
    ?who:string ->
    ?cred:string ->
    ?auth_method:Ocamldap.auth_method -> Ocamldap.conn -> unit
  val delete_s : Ocamldap.conn -> dn:string -> unit
  val err2string : Ocamldap.error_code -> string
  val init : ?version:int -> ?port:int -> string -> Ocamldap.conn
  val modify_s :
    Ocamldap.conn -> dn:string -> mods:Ocamldap.modattr list -> unit
  val modrdn_s : Ocamldap.conn -> dn:string -> newdn:string -> unit
  val modrdn2_s :
    Ocamldap.conn -> dn:string -> newdn:string -> deleteoldrdn:bool -> unit
  val print_entry : ?channel:Pervasives.out_channel -> Ocamldap.entry -> unit
  val search_s :
    ?base:string ->
    ?scope:Ocamldap.search_scope ->
    ?attrs:string list ->
    ?attrsonly:bool -> Ocamldap.conn -> string -> Ocamldap.result
  val simple_bind_s :
    ?who:string -> ?password:string -> Ocamldap.conn -> unit
  val unbind : Ocamldap.conn -> unit
end