let mkpath_plus path perm =
    let user = 0o700 in
    let finish dirs = List.iter (fun file -> chmod file permdirs in
    let rec mkpath path =
      try
        let st = stat path in
        if st.st_kind <> S_DIR then raise (Unix_error (ENOTDIR"mkdirp"path));
        []
      with Unix_error (ENOENT__) ->
        let parent = Filename.dirname path in
        let dirs = if parent <> path then mkpath parent else [] in
        let () = try mkdir path user with exn -> finish dirsraise exn in
        path :: dirs in
    finish (mkpath path);;