sig
  type op = string * string list
  type op_lst = Ooldap.op list
  type changetype = ADD | DELETE | MODIFY | MODDN | MODRDN
  class type ldapentry_t =
    object
      method add : Ooldap.op_lst -> unit
      method attributes : string list
      method changes : (Ocamldap.mod_op * string * string list) list
      method changetype : Ooldap.changetype
      method delete : Ooldap.op_lst -> unit
      method dn : string
      method exists : string -> bool
      method flush_changes : unit
      method get_value : string -> string list
      method print : unit
      method replace : Ooldap.op_lst -> unit
      method set_changetype : Ooldap.changetype -> unit
      method set_dn : string -> unit
    end
  class ldapentry :
    object
      method add : Ooldap.op_lst -> unit
      method attributes : string list
      method changes : (Ocamldap.mod_op * string * string list) list
      method changetype : Ooldap.changetype
      method delete : Ooldap.op_lst -> unit
      method dn : string
      method exists : string -> bool
      method flush_changes : unit
      method get_value : string -> string list
      method print : unit
      method replace : Ooldap.op_lst -> unit
      method set_changetype : Ooldap.changetype -> unit
      method set_dn : string -> unit
    end
  val iter : (Ooldap.ldapentry -> unit) -> (unit -> Ooldap.ldapentry) -> unit
  val rev_map :
    (Ooldap.ldapentry -> 'a) -> (unit -> Ooldap.ldapentry) -> 'a list
  val map : (Ooldap.ldapentry -> 'a) -> (unit -> Ooldap.ldapentry) -> 'a list
  val fold :
    (Ooldap.ldapentry -> '-> 'a) -> '-> (unit -> Ooldap.ldapentry) -> 'a
  class ldapcon :
    ?version:int ->
    ?async:bool ->
    ?port:int ->
    string ->
    object
      method add : Ooldap.ldapentry -> unit
      method bind :
        ?cred:string -> ?meth:Ocamldap.auth_method -> string -> unit
      method delete : string -> unit
      method modify : string -> Ocamldap.modattr list -> unit
      method modrdn : string -> ?deleteoldrdn:bool -> string -> unit
      method rawschema : Ooldap.ldapentry
      method schema : Schemaparser.schema
      method search :
        ?scope:Ocamldap.search_scope ->
        ?attrs:string list ->
        ?attrsonly:bool -> ?base:string -> string -> Ooldap.ldapentry list
      method search_a :
        ?scope:Ocamldap.search_scope ->
        ?attrs:string list ->
        ?attrsonly:bool -> ?base:string -> string -> unit -> Ooldap.ldapentry
      method unbind : unit
      method update_entry : Ooldap.ldapentry -> unit
    end
  type scflavor = Optimistic | Pessimistic
  class scldapentry :
    Schemaparser.schema ->
    object
      method add : op_lst -> unit
      method attributes : string list
      method changes : (Ocamldap.mod_op * string * string list) list
      method changetype : changetype
      method delete : op_lst -> unit
      method dn : string
      method exists : string -> bool
      method flush_changes : unit
      method get_value : string -> string list
      method is_allowed : string -> bool
      method is_missing : string -> bool
      method list_allowed : Schemaparser.Oid.t list
      method list_missing : Schemaparser.Oid.t list
      method list_present : Schemaparser.Oid.t list
      method of_entry : Ooldap.ldapentry -> unit
      method print : unit
      method replace : op_lst -> unit
      method set_changetype : changetype -> unit
      method set_dn : string -> unit
    end
  type generator = {
    gen_name : string;
    required : string list;
    genfun : Ooldap.ldapentry_t -> string list;
  }
  type service = {
    svc_name : string;
    static_attrs : (string * string list) list;
    generate_attrs : string list;
    depends : string list;
  }
  type generation_error =
      Missing_required of string list
    | Generator_error of string
  exception No_generator of string
  exception Generation_failed of Ooldap.generation_error
  exception No_service of string
  exception Service_dep_unsatisfiable of string
  exception Generator_dep_unsatisfiable of string * string
  exception Cannot_sort_dependancies of string list
  class ldapaccount :
    Schemaparser.schema ->
    (string, Ooldap.generator) Hashtbl.t ->
    (string, Ooldap.service) Hashtbl.t ->
    object
      method adapt_service : Ooldap.service -> Ooldap.service
      method add : op_lst -> unit
      method add_generate : string -> unit
      method add_service : string -> unit
      method attributes : string list
      method changes : (Ocamldap.mod_op * string * string list) list
      method changetype : changetype
      method delete : op_lst -> unit
      method delete_generate : string -> unit
      method delete_service : string -> unit
      method dn : string
      method exists : string -> bool
      method flush_changes : unit
      method generate : unit
      method get_value : string -> string list
      method is_allowed : string -> bool
      method is_missing : string -> bool
      method list_allowed : Schemaparser.Oid.t list
      method list_missing : Schemaparser.Oid.t list
      method list_present : Schemaparser.Oid.t list
      method of_entry : ldapentry -> unit
      method print : unit
      method replace : op_lst -> unit
      method service_exists : string -> bool
      method services_present : string list
      method set_changetype : changetype -> unit
      method set_dn : string -> unit
    end
end