+let get_session_owner sid =
+ let uid,_,_,_ = List.assoc sid !session_tbl
+ in uid
+
+let get_status sid =
+ let _,st,_,_ = List.assoc sid !session_tbl
+ in st
+
+let get_history sid =
+ let _,_,hist,_ = List.assoc sid !session_tbl
+ in hist
+
+let get_commit_priv sid =
+ let _,_,_,cp = List.assoc sid !session_tbl
+ in cp
+
+let probe_commit_priv sid =
+ let _,_,_,cp = List.assoc sid !session_tbl in
+ if not cp then failwith "no commit privileges"
+
+let set_status sid st =
+ let uid, oldst, hist, cp = List.assoc sid !session_tbl in
+ session_tbl := (sid,(uid,st,hist,cp))::(List.remove_assoc sid !session_tbl)
+
+let set_history sid hist =
+ let uid, st, oldhist, cp = List.assoc sid !session_tbl in
+ session_tbl := (sid,(uid,st,hist,cp))::(List.remove_assoc sid !session_tbl)
+
+let logout_user sid =
+ let uid,st,hist,cp = List.assoc sid !session_tbl in
+ (if cp then
+ let salt,pw,_ = List.assoc uid !user_tbl in
+ user_tbl := (uid,(salt,pw,None))::List.remove_assoc uid !user_tbl
+ else
+ let salt,pw,_ = List.assoc uid !luser_tbl in
+ luser_tbl := (uid,(salt,pw,None))::List.remove_assoc uid !luser_tbl);
+ session_tbl := List.remove_assoc sid !session_tbl