diff options
author | Matthew Wild <mwild1@gmail.com> | 2010-05-23 23:11:00 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2010-05-23 23:11:00 +0100 |
commit | 9e416aeb5f79cf4dc78d93dfac59d98df5d32c33 (patch) | |
tree | 790cd084f0b10e92a585be2ea76ad68e482deb1e /util/datamanager.lua | |
parent | 898743c4b44d02694897b2c01d22e6b5f7106773 (diff) | |
parent | 84b7c3f97831c15d262663f6bc58b552adb11398 (diff) | |
download | prosody-9e416aeb5f79cf4dc78d93dfac59d98df5d32c33.tar.gz prosody-9e416aeb5f79cf4dc78d93dfac59d98df5d32c33.zip |
Merge 0.7->trunk
Diffstat (limited to 'util/datamanager.lua')
-rw-r--r-- | util/datamanager.lua | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/util/datamanager.lua b/util/datamanager.lua index 01c7aab2..57cd2594 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -21,12 +21,13 @@ local next = next; local t_insert = table.insert; local append = require "util.serialization".append; local path_separator = "/"; if os.getenv("WINDIR") then path_separator = "\\" end +local lfs = require "lfs"; local raw_mkdir; if prosody.platform == "posix" then raw_mkdir = require "util.pposix".mkdir; -- Doesn't trample on umask else - raw_mkdir = require "lfs".mkdir; + raw_mkdir = lfs.mkdir; end module "datamanager" @@ -111,14 +112,21 @@ end function load(username, host, datastore) local data, ret = loadfile(getpath(username, host, datastore)); if not data then - log("debug", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); - return nil; + local mode = lfs.attributes(getpath(username, host, datastore), "mode"); + if not mode then + log("debug", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); + return nil; + else -- file exists, but can't be read + -- TODO more detailed error checking and logging? + log("error", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); + return nil, "Error reading storage"; + end end setfenv(data, {}); local success, ret = pcall(data); if not success then log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); - return nil; + return nil, "Error reading storage"; end return ret; end @@ -137,7 +145,7 @@ function store(username, host, datastore, data) local f, msg = io_open(getpath(username, host, datastore, nil, true), "w+"); if not f then log("error", "Unable to write to "..datastore.." storage ('"..msg.."') for user: "..(username or "nil").."@"..(host or "nil")); - return; + return nil, "Error saving to storage"; end f:write("return "); append(f, data); |