+val validDbname = CharVector.all (fn ch => Char.isAlphaNum ch orelse ch = #"_")
+fun validEncoding encoding =
+ case encoding of
+ NONE => true
+ | SOME e => size e > 0 andalso size e < 20 andalso CharVector.all Char.isAlphaNum e
+
+type handler = {getpass : (unit -> Client.passwd_result) option,
+ adduser : {user : string, passwd : string option} -> string option,
+ passwd : {user : string, passwd : string} -> string option,
+ createdb : {user : string, dbname : string, encoding : string option} -> string option,
+ dropdb : {user : string, dbname : string} -> string option,
+ grant : {user : string, dbname : string} -> string option}