prosodyctl: Warn and exit if any log files are not writeable, fixes #94
authorMatthew Wild <mwild1@gmail.com>
Fri, 9 Jul 2010 00:09:57 +0000 (01:09 +0100)
committerMatthew Wild <mwild1@gmail.com>
Fri, 9 Jul 2010 00:09:57 +0000 (01:09 +0100)
prosodyctl

index b2cb43f4861d761e10fcd9895e1b144331fcff9c..9bb8d4ad7173137887bd36d9e00b8e36d3eaf245 100755 (executable)
@@ -64,7 +64,7 @@ do
                os.exit(1);
        end
 end
-
+local original_logging_config = config.get("*", "core", "log");
 config.set("*", "core", "log", { { levels = { min="info" }, to = "console" } });
 
 require "core.loggingmanager"
@@ -111,6 +111,45 @@ else
        print(tostring(pposix))
 end
 
+local function test_writeable(filename)
+       local f, err = io.open(filename, "a");
+       if not f then
+               return false, err;
+       end
+       f:close();
+       return true;
+end
+
+local unwriteable_files = {};
+if type(original_logging_config) == "string" and original_logging_config:sub(1,1) ~= "*" then
+       local ok, err = test_writeable(original_logging_config);
+       if not ok then
+               table.insert(unwriteable_files, err);
+       end
+elseif type(original_logging_config) == "table" then
+       for _, rule in ipairs(original_logging_config) do
+               if rule.filename then
+                       local ok, err = test_writeable(rule.filename);
+                       if not ok then
+                               table.insert(unwriteable_files, err);
+                       end
+               end
+       end
+end
+
+if #unwriteable_files > 0 then
+       print("One of more of the Prosody log files are not");
+       print("writeable, please correct the errors and try");
+       print("starting prosodyctl again.");
+       print("");
+       for _, err in ipairs(unwriteable_files) do
+               print(err);
+       end
+       print("");
+       os.exit(1);
+end
+
+
 local error_messages = setmetatable({ 
                ["invalid-username"] = "The given username is invalid in a Jabber ID";
                ["invalid-hostname"] = "The given hostname is invalid";